Закрылись еще две публичные сделки моих роботов:
На текущий момент было 225 публичных сигналов на покупку. 76 от робота AVP, 118 от робота PVVI и 31 от робота CandleMax. Вот ссылки:
Сегодня мы выдвинем несколько гипотез и проверим их на бэктестах.
Гипотеза: торговать можно во всех фазах рынка, нужно лишь правильно определять эти фазы и использовать переключатель стратегий.
Как мы знаем, существует 3 фазы рынка: растущий тренд, падающий тренд и флет.
На трендах, очевидно, нужно использовать трендследящие стратегии, а на флете контртрендовые. И нужно вовремя переключаться между этими стратегиями.
На первый взгляд всё просто. Но об эту задачу обломали свои копья миллионы трейдеров, так как есть один подвох, который не позволяет при данном подходе сделать своевременный переключатель стратегий. То есть, если мы торгуем контртренд и вдруг начался тренд, то наша текущая позиция будет направлена против движения тренда. И убыток будет только нарастать.
Переключаться на трендследящую стратегию теперь можно будет лишь зафиксировав убыток, чего делать совсем не хочется. И, более того, переключившись на трендследящую стратегию нет никакой гарантии что рынок тут же не перейдет во флете или вернётся к прежним ценам. Что приведет ещё к большим убыткам. Так торговать не имеет смысла.
Settings= { Name = "AT-obl_can", -- название индикатора delta=2.0, -- параметр индикатора rep=5, shif=0, wt=1, line= { { Name = "ln1", Type =TYPE_LINE, Width = 2, Color = RGB(255, 0, 0) }, { Name = "ln2", Type =TYPE_LINE, Width = 2, Color = RGB(255, 0, 0) } } } function Init() vMin = 0 vMax = 0 vMinindex = 0 vMaxindex = 0 voldMinindex = 0 voldMaxindex = 0 return 2 end function OnCalculate(index) rep = Settings.rep shif = Settings.shif wt = Settings.wt sz = Size()-shif if index <= sz then if index <= 1 then vMin = C(index) vMax = C(index) vMinindex = index vMaxindex = index voldMinindex = index voldMaxindex = index v = C(index) else if voldMaxindex >= voldMinindex then --if vMin~=nil then if C(index) > (1 + Settings.delta/100)*vMin then vMin = C(index) vMax = C(index) vMaxindex = index voldMinindex = vMinindex vFrom = vMinindex else if vMin > C(index) then vMin = C(index) vMinindex = index vFrom = voldMaxindex else vFrom = vMinindex end end --end else if voldMaxindex <= voldMinindex then --if vMax~=nil then if C(index) < (1 - Settings.delta/100)*vMax then vMax = C(index) vMin = C(index) vMinindex = index voldMaxindex = vMaxindex vFrom = vMaxindex else if vMax < C(index) then vMax = C(index) vMaxindex = index vFrom = voldMinindex else vFrom = vMaxindex end end --end end end --if vFrom~=nil then --[[ for i = vFrom, index do k = (C(index)- C(vFrom))/(index- vFrom); v = i*k + C(index) - index*k SetValue(i, 1, v) end --]] --end if index == sz then for k = 1, 2 do vf = 1 vs = 0 if k == 1 then if vMinindex < vMaxindex then vf = vMinindex vs = vMaxindex up = 0 elseif vMinindex > vMaxindex then vs = vMinindex vf = vMaxindex up = 1 end elseif k == 2 then if voldMinindex < voldMaxindex then vf = voldMinindex vs = voldMaxindex up = 0 elseif voldMinindex > voldMaxindex then vs = voldMinindex vf = voldMaxindex up = 1 end end n = 0 xy = 0 x = 0 y = 0 xx = 0 m = 0 for i = vf, vs do m = m +1 n = n + 1*(1+wt*m) xy = xy + i*C(i)*(1+wt*m) x = x + i*(1+wt*m) y = y + C(i)*(1+wt*m) xx = xx + i*i*(1+wt*m) end if (n*xx - x*x) ~= 0 and n ~= 0 then a = (n*xy - x*y)/(n*xx - x*x) b = (y - a*x)/n for j = 1, rep do n = 0 xy = 0 x = 0 y = 0 xx = 0 m = 0 for i = vf, vs do v = a*i + b clc = 0 if up == 1 and C(i) > v then clc = 1 end if up == 0 and C(i) < v then clc = 1 end if clc == 1 then m = m + 1 n = n + 1*(1+wt*m) xy = xy + i*C(i)*(1+wt*m) x = x + i*(1+wt*m) y = y + C(i)*(1+wt*m) xx = xx + i*i*(1+wt*m) end end --[[--]] if (n*xx - x*x) ~= 0 and n ~= 0 and n > 2 then a = (n*xy - x*y)/(n*xx - x*x) b = (y - a*x)/n --[[ --]] end end for i = vf, sz do v = a*i + b if up == 1 and v >= C(vs) or up == 0 and v <= C(vs) then SetValue(i, k, v) end end end end end end end end
Приветствую, глубокоуважаемые алготрейдеры.
Представляю вам довольно простую в понимании, и в осуществлении схему позволяющую из одного посредственного торгующего алгоритма построить целую торговую систему работающую на всех тикетах и рынках.
Что необходимо:
1. Подмешиваем шум (осуществляем дизеринг) в проверенный в работе алгоритм в виде внесения дополнительных данных: немного изменяем переменные, параметры, индикаторы, но в пределах работоспособности. Таким образом получаем несколько алгоритмов незначительно отличающиеся друг от друга на основе одного базового, в нашем примере будет 6( количество может быть любое). Оптимизируем их без комиссии что бы не уменьшать количество сделок, так как работа отдельного алгоритма нас не интересует.
Основной обработчик РТС:
Обработчик SI: