Избранное трейдера Fedor Bobkov

по

Меры предосторожности при операциях с крипто-активами. (Краткое руководство)

Всё изложенное мной ниже — основано на моём личном опыте и по мере возможности применяется мной на практике. 

Некоторые рекомендации покажутся вам параноидальными и\или противоречащими моим недавним  декларациям.

Хочу пояснить, что эта статья имеет очень специальное назначение и является ориентиром, к которому желательно максимально приблизиться.

Сам я пока ещё весьма далёк от чёткого выполнения всех пунктов этой статьи.

Эта удалённость возникла изза недостатка знаний и изза моих заблуждений, которые сопутствовали мне во время моего продвижения в крипто-мире.

Недавно я осознал, что надо двигаться в направлении максимальной децентрализованности.



( Читать дальше )

OptimalF

Выложил свою экспериментальную программку OptimalF, может кому пригодится. Простенькая, но позволяет сделать полезные выводы для реальной торговли:

1. Важны не вероятности прибыли/убытка, а их матожидание.
2. Торговать с нулевым (а тем более с отрицательным) матожиданием — нельзя.
3. При торговле с положительным матожиданием — лучше не превышать оптимальную долю счета.

Выводы, наверное, и так очевидные. Просто в программе можно визуально все это увидеть.

OptimalF


Описание и сама программа — здесь.


Quik. Индикатор корреляции

    • 02 ноября 2017, 16:21
    • |
    • Karim
  • Еще
Написал на досуге по просьбе одного из участников смартлаба индикатор корреляции.
Индикатор простенький, считает коэффициент корреляции Пирсона
для двух выбранных инструментов на заданном таймфрейме.
Выкладываю исходный код. Может кому то пригодится.

Settings= 
{ 
Name = "Piton", 
N = 100,
legend = "price2",
line = 
	{ 
		{ Name = "Sint", 
		  Color = RGB(0, 132, 0), 
		  Type = TYPE_LINE, 
		  Width = 1 
		}		
	} 
} 

function Init() 
return 1
end 

Candles = {};


function OnCalculate(index) 
	local numCandles = getNumCandles(Settings.legend);
	if index <= Settings.N or numCandles <= Settings.N then
		return nil;
	end
	
	Candles, n, _ = getCandlesByIndex(Settings.legend, 0, index - Settings.N, Settings.N);
	if n ~= Settings.N then
        return nil;
    end
	
	-- Предварительный расчет
	sum1, sum2, sum3 = advancePaynemt(index);
	
	-- расчет коэффициента корреляции Пирсона
	r = sum3/math.sqrt(sum1*sum2);
	
	return r;
end

--  Предварительный расчет
----------------------------------------
function advancePaynemt(index)	
	local sum1 = 0;
	local sum2 = 0;	
	local sum3 = 0;
	local j    = 0;
	
	--  Вычислить среднее арифметическое
	for i=index - Settings.N + 1, index, 1 do
		sum1 = sum1 + C(i);			
		sum2 = sum2 + Candles[j].close;
		j = j + 1;
	end
	aver1 = sum1/Settings.N;
	aver2 = sum2/Settings.N;
	
	-- Вычислить сумму квадратов отклонений
	sum1 = 0;
	sum2 = 0;
	j 	 = 0;
	for i=index - Settings.N+1, index, 1 do
		sum1 = sum1 + math.pow(C(i) - aver1, 2);
		sum2 = sum2 + math.pow(Candles[j].close - aver2, 2);
		j = j + 1;
	end
	
	--  Вычислить сумму произведений разности
	j=0;
	for i=index - Settings.N+1, index, 1 do
		sum3 = sum3 + (aver1 - C(i))*(aver2 - Candles[j].close);
		j = j + 1;
	end
	
	return sum1, sum2, sum3;
end

Как запустить и настроить:


Архив исходника на QLua: https://yadi.sk/d/OxDvAekV3PLn2z
  • обсудить на форуме:
  • QUIK

мой список мест откуда брались алго идеи

Всем привет.
Решил выложить все источники инфы и идей по алго и трейдингу которыми пользовался, так как недавно появлялся такой вопрос.
Мне абсолютно не жалко, и ничего не зажал, может просто не всё сразу вспомнил и лень вспоминать.
На чтение и исследования потрачено несколько лет фултайм работы и чтобы кто-то сделал роботов лучше то ему скорее всего придётся потратить времени и сил ещё больше, но и я ведь тоже на месте не сижу, поэтому конкуренции особо не боюсь.


( Читать дальше )

Допинг для мозга

    • 18 октября 2017, 20:39
    • |
    • az dazz
  • Еще
Допинг для мозга


После просмотра фильма «Области тьмы», я загорелся темой влияния различных веществ на мозг человека. У меня появилось жгучее желание найти волшебную таблетку под названием NZT-48. И я её нашел...

А почему бы и нет? — подумал я. Если разогнать свой мозг на новый продуктивный уровень, то это позитивно скажется на бизнесе и жизни в целом.

( Читать дальше )

на тему анонимности и безопасности своих копеечек

вчерась был хороший пост про анонимность в сети и финансовой сфере, так вот я хотел бы добавить- самое верное это иметь как минимум один открытый эккаунт в соцсети и зарплатный счет в сбербанке, весьти все это дело в согласии с окружающим миром) Плюсы такой активности — все вас видят, ваша красивая история записывается, можете брать ипотеку в сбербанке, кредиты и тд. Потому как никто не гарантирует что в жизни это не понадобится. А если быть отшельником и пытаться скрываться в интернете и в жизни, то скорее обратят внимание, Тем более уже активно внедряется искуственный интеллект и машин лернинг, через некоторое время эти системы смогут анализировать и илентифицировать любые отклонения от общепринятого и выявлять. Автор говорил про то, что могут хакнуть — хакнуть монут везде и любого- вопрос в том, кому нужны данные простого смертного или его копейки? VPN вообще не гарантирует анонимности никакой. Сомнительные почтовые сервера — ну ак они как есть — так и исчезнут. Надо юзать яндекс для жизни — а что такого? что вы иам ищите, что не 

( Читать дальше )

первый и единственный российский победитель Кубка Роббинса

Наконец-то организаторы Кубка выпустили интервью с Артуром Терегуловым, победителем Кубка Роббинса- ежегодного соревнования по торговле фьючерсами. Артур показал чистую прибыль в 914.8%- это вторая рекордная прибыльность после Ларри Вильямса почти 30 лет назад. 
Артур- исключительно интересный собеседник, и с блеском ответил на заданные ему вопросы«сходу», без малейшей подготовки. Рекомендую к просмотру :) 

PS если вы захотите попрoбовать свои силы в конкурсе в 2018 году, обращайтесь!


Лень и праздность – залог здоровья!

Считает Петер Акст, знаменитый немецкий медик.

Так как посты про здоровье стали мега актуальными на СЛ, а эту тему запустил сам Тимофей, то считаю должным поделиться интересной статьей. Так что, его величество, РЕПОСТ.

Что за бред сивой кобылы, наверняка скажет продвинутый читатель. Совсем эти профессора сбрендили! Всем же хорошо известно: чтобы сохранить здоровье и продлить молодость, быть успешным в обществе и трудовом коллективе, надо пробегать по утрам несколько километров, а еще лучше – марафон по выходным! Упорно качать мышцы железом, тренажерами в фитнес-центре. И будет вам долгая, счастливая, жизнь!
С таким настроем я и стал перелистывать книгу Петера Акста «Ленивые живут дольше».

Читаю и глазам не верю: «Лень и праздность – залог здоровья». Чистое шарлатанство. Ну, профессор, погоди! Выведу тебя на чистую воду…

БАБИЙ ВЕК ДЛИННЕЕ МУЖСКОГО


Однако этот Акст оказался не прост. Под свое заявление подвел научную базу. Мол, еще в 1908 году физиолог Рубнер установил, что каждому существу вроде бы отпущено ограниченное количество жизненной энергии. Ересь, конечно! Типа забытой пресловутой теории, что каждому мужчине якобы природой дано определенное число половых актов. Недаром ихнего Рубнера быстро забыли. Однако в последнее время идея вновь обрела популярность. Еще один ученый немец, Принцингер, заново исследовал теорию жизненной энергии, которая официально именуется теорией обмена веществ. И установил: все живые существа, в зависимости от массы тела, обладают одинаковым запасом жизненной силы. Профессор приводит конкретные расчеты, тысячи килоджоулей на грамм массы тела. Человеку, вроде бы, отпущено природой вдвое больше энергии на единицу веса, чем большинству животных. Поэтому в принципе он может жить до 130 лет.

( Читать дальше )

Код робота на LUA для QUIK

В двух словах: робот анализирует спот, выставляет лимитные и стоп-лимитные заявки по фьючерсу. Делает пересчет сигналов по выбранному тайм-фрейму, снятие выставленных заявок, запись в файл текущего состояния, ведение логов, сообщения, запрос текущей позиции и пр. Из робота удалена алгоритмика вычисления сигнала и в текущем виде скрипт будет иметь сигнал на покупку на каждом баре.

Предназначается для новичков в алготрейдинге, что-то типа болванки.

Важно: выставление заявок я закомментировал, поэтому можете смело запускать этот скрит, он не натворит ужаса по счету.

require"QL"

log = "sbrf.log"
seccode = "SRM6"
lots_in_trade = 80
accnt = ""
better = -5
chart = "sberbankxxx"
is_run = true
prev_datetime = {}
len = 100
basis = 9
k_bal = {0,1,2,3}
sell = false
buy = false
id = 0
first = true

function trade_signal(shift)
        number_of_candles = getNumCandles(chart)
        bars_temp,res,legend = getCandlesByIndex(chart,0,number_of_candles-2*len-shift,2*len)
        bars={}

        i=len
        j=2*len
        while i>=1 do
                if bars_temp[j-1].datetime.hour>=10 then
                        sk=true
                        if bars_temp[j-1].datetime.hour==18 and bars_temp[j-1].datetime.min==45 then
                                sk=false
                        end
                        if sk then
                                bars[i]=bars_temp[j-1]
                                i=i-1
                        end
                end
                j=j-1
        end

        t = len+1

        do_sell = false
        do_buy = true

        value = 0
        if do_sell then value = 1 end
        if do_buy then value = -1 end
        toLog(log,"value="..value.." on candle: "..bars[len].datetime.year.."-"..bars[len].datetime.month.."-"..bars[len].datetime.day.." "..bars[len].datetime.hour..":"..bars[len].datetime.min.."   O="..bars[len].open.." H="..bars[len].high.." L="..bars[len].low.." C="..bars[len].close.." V="..bars[len].volume)
        return value
end

function mysplit(inputstr, sep)
        if sep == nil then
                sep = "%s"
        end
        local t={} ; i=1
        for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
                t[i] = str
                i = i + 1
        end
        return t
end

function OnInit(path)
        log=getScriptPath()..'\\'..log
        toLog(log,"==========OnInit: START")
        toLog(log,"==========OnInit: FINISH")
end

function OnStop()
        is_run = false
        toLog(log,"==========OnStop: script finished manually")
end

function CheckBit(flags, bit)
   -- Проверяет, что переданные аргументы являются числами
   if type(flags) ~= "number" then error("Ошибка!!! Checkbit: 1-й аргумент не число!"); end;
   if type(bit) ~= "number" then error("Ошибка!!! Checkbit: 2-й аргумент не число!"); end;
   local RevBitsStr  = ""; -- Перевернутое (задом наперед) строковое представление двоичного представления переданного десятичного числа (flags)
   local Fmod = 0; -- Остаток от деления
   local Go = true; -- Флаг работы цикла
   while Go do
      Fmod = math.fmod(flags, 2); -- Остаток от деления
      flags = math.floor(flags/2); -- Оставляет для следующей итерации цикла только целую часть от деления
      RevBitsStr = RevBitsStr ..tostring(Fmod); -- Добавляет справа остаток от деления
      if flags == 0 then Go = false; end; -- Если был последний бит, завершает цикл
   end;
   -- Возвращает значение бита
   local Result = RevBitsStr :sub(bit+1,bit+1);
   if Result == "0" then return 0;
   elseif Result == "1" then return 1;
   else return nil;
   end;
end;

function killorders(ccode,scode)
    for i=0,getNumberOf("orders")-1,1 do
        local t=getItem("orders", i)
        if t ~= nil and type(t) == "table" then
            if( t.seccode == scode and CheckBit(t.flags, 0) == 1) then
                local transaction={
                    ["TRANS_ID"]=tostring(math.random(2000000000)),
                    ["ACTION"]="KILL_ORDER",
                    ["CLASSCODE"]=ccode,
                    ["SECCODE"]=scode,
                                        ["ACCOUNT"] = accnt,
                    ["ORDER_KEY"]=tostring(t.ordernum),
                }
                                res=sendTransaction(transaction)
            end
        end
    end
end

function killstoporders(ccode,scode)
    for i=0,getNumberOf("stop_orders")-1,1 do
        local t=getItem("stop_orders", i)
        if t ~= nil and type(t) == "table" then
            if( t.seccode == scode and CheckBit(t.flags, 0) == 1) then
                local transaction={
                    ["TRANS_ID"]=tostring(math.random(2000000000)),
                    ["ACTION"]="KILL_STOP_ORDER",
                    ["CLASSCODE"]=ccode,
                    ["SECCODE"]=scode,
                                        ["ACCOUNT"] = accnt,
                    ["STOP_ORDER_KEY"]=tostring(t.ordernum),
                }
                                res=sendTransaction(transaction)
            end
        end
    end
end


function main()
        toLog(log,"==========main: START")
        while is_run do
                if isConnected() == 1 then
                        ss = getInfoParam("SERVERTIME")
                        if string.len(ss) >= 5 then
                                hh = mysplit(ss,":")
                                str=hh[1]..hh[2]
                                h = tonumber(str)
                                if (h>=1000 and h<1400) or (h>=1405 and h<1845) or (h>=1905 and h<2350) then
                                        if first then
                                                for ti = 50,2,-1 do     trade_signal(ti) end
                                                if buy and not sell then message(seccode.." Current state: green and buy",1) end
                                                if sell and not buy then message(seccode.." Current state: red and sell",1) end
                                                if buy and sell then message(seccode.." ERROR: green and red",1) end
                                                if not buy and not sell then message(seccode.." WARNING: nothing",1) end
                                                first = false
                                        end
                                        prev_candle = getPrevCandle(chart,0)
                                        if not isEqual(prev_candle.datetime,prev_datetime) then
                                                current_value = trade_signal(1)

                                                if current_value ~= 0 then
                                                        optn = "B"
                                                        if current_value==1 then optn = "S" end
                                                        curvol=0
                                                        no=getNumberOf("FUTURES_CLIENT_HOLDING")
                                                        if no>0 then
                                                                for i=0,no-1,1 do
                                                                        im=getItem("FUTURES_CLIENT_HOLDING", i)
                                                                        if im.sec_code==seccode then
                                                                        curvol=im.totalnet
                                                                        end
                                                                end
                                                        end
                                                        trvol = -current_value*lots_in_trade-curvol
                                                        if trvol ~= 0 then
                                                                killorders("SPBFUT",seccode)
                                                                killstoporders("SPBFUT",seccode)
                                                                f = io.open(getScriptPath().."\\sbrf2_pos.txt","r")
                                                                sbrf2_pos=f:read("*n")
                                                                f:close()
                                                                f = io.open(getScriptPath().."\\sbrf3_pos.txt","r")
                                                                sbrf3_pos=f:read("*n")
                                                                f:close()
                                                                pr,n,l = getCandlesByIndex ("futsber", 0, getNumCandles("futsber")-1, 1)
                                                                local trans =
                                                                {
                                                                        ["ACTION"] = "NEW_ORDER",
                                                                        ["CLASSCODE"] = "SPBFUT",
                                                                        ["SECCODE"] = seccode,
                                                                        ["ACCOUNT"] = accnt,
                                                                        ["OPERATION"] = optn,
                                                                        ["PRICE"] = toPrice(seccode,pr[0].close+current_value*better),
                                                                        ["QUANTITY"] = tostring(math.abs(curvol-sbrf2_pos-sbrf3_pos)),
                                                                        ["TRANS_ID"] = tostring(getTradeDate().month*100+getTradeDate().day+id)
                                                                }
                                                                id = id+1
                                                                --res = sendTransaction(trans)
                                                                message(seccode.." Send : " .. res, 2)
                                                                toLog(log,"Send: ".. res)
                                                                for btr=0,200,5 do
                                                                        local trans =
                                                                        {
                                                                                ["ACTION"] = "NEW_STOP_ORDER",
                                                                                ["CLASSCODE"] = "SPBFUT",
                                                                                ["SECCODE"] = seccode,
                                                                                ["ACCOUNT"] = accnt,
                                                                                ["OPERATION"] = optn,
                                                                                ["PRICE"] = toPrice(seccode,pr[0].close-current_value*btr),
                                                                                ["STOPPRICE"] = toPrice(seccode,pr[0].close-current_value*(btr+better)),
                                                                                ["QUANTITY"] = tostring(6),
                                                                                ["TRANS_ID"] = tostring(getTradeDate().month*100+getTradeDate().day+id),
                                                                                ["EXPIRY_DATE"] = "GTC"
                                                                        }
                                                                        id = id+1
                                                                        --res = sendTransaction(trans)
                                                                        message(seccode.." Send : " .. res, 2)
                                                                        toLog(log,"Send: ".. res)
                                                                end
                                                                if current_value == 1 then
                                                                        message(seccode..' RED: buy->sell',1)
                                                                        toLog(log,"RED signal")
                                                                else
                                                                        message(seccode..' GREEN: sell->buy',1)
                                                                        toLog(log,"GREEN signal")
                                                                end
                                                        else
                                                                if current_value == 1 then
                                                                        message(seccode..' RED: buy->sell',1)
                                                                        toLog(log,"RED signal, but nothing to do")
                                                                else
                                                                        message(seccode..' GREEN: sell->buy',1)
                                                                        toLog(log,"GREEN signal, but nothing to do")
                                                                end
                                                        end
                                                else
                                                        if buy and not sell then toLog(log,"Nothing to do. Current state: green and buy",1) end
                                                        if sell and not buy then toLog(log,"Nothing to do. Current state: red and sell",1) end
                                                        if buy and sell then toLog(log,"Nothing to do. ERROR: green and red",1) end
                                                        if not buy and not sell then toLog(log,"Nothing to do. WARNING: nothing",1) end
                                                end
                                                prev_datetime = prev_candle.datetime
                                        end
                                end
                        end
                end
                sleep(5*1000)
        end
        toLog(log,"==========main: FINISH")
end
  • обсудить на форуме:
  • Quik Lua

продолжение поста про зож

Ок, по просьбе трудящихся продолжаем нашу передачу на крипторадио про зож.  smart-lab.ru/blog/409478.php
всё основано на собственном опыте и в результате анализа десятков книг по теме.


1. Позитивчик.
Как-то не хочется заниматься миссионерством, но вообщем нужно мыслить позитивно. Как это делать это вопрос даже не на миллион баксов. Давно был такой фильм «секрет» — о силе наших намерений и позитива, возможно кому-то он покажется сладкой приторной фигнёй, ок, мне он тоже таким в своё время показался. Позитив не приведёт к исполнению всех желаний но в целом он улучшит качество жизни и здоровье значительно.

2. Стресс.
Существенная его часть возникает у человека по привычке и инерции, человек недооценивает его вредное воздействие и обществу выгодно чтобы человек был в стрессе. В стрессе он больше потребляет, больше делает всякой невыгодной для него и выгодной для общества фигни. Часто люди хвастаются тем что у них стресс и своим уровнем стресса, это считается похвально и круто. Также стресс действует наподобие наркотика и для кого-то только стресс мотивирует его что-то делать, но настоящая продуктивность и смысл жизни открываются когда стресса нет.  И чем снимать стресс его лучше не допускать.

( Читать дальше )

....все тэги
UPDONW
Новый дизайн