Попробую описать очень простые действия, чем пользоваться можно, а что из себя представляет полный кошмар, так же свой опыт по данному пути.
На рынке я очень давно и пережил то, что и врагу не пожелаешь. Но моя история не одна такая много людей убили свое серое вещество подстраиваясь под наш замечательный рынок. Но здесь я хочу рассказать, как я пришел к роботам HFT и прочим гадалкам)))
Первого робота который попался в руки, несмотря на то, что торговал полностью на Московской бирже, был никто иной как «Мартин Гейл» и сделан он под MT4. Смерть а не робот. В то время я был страшным скептиком по отношении к всему невиданному и непонятному и показывал приличные результаты ручной торговли. Но жуткий интерес заставил включить этого «умного советника» в розетку. Зная какой алгоритм и условия заложены в данного советника, было просто интересно посмотреть, как он работает. Установил, включил и наблюдаю, работает, но не возбуждает. Смысла в действиях нет никакого, как и ожидалось, НО он выставляет заявки и делает сделки. И понимая, что если задать правильные условия, можно получить очень хороший автоматический агрегатов для торговли. В итоге проработав на моем ноутбуке неделю я понял, что эксперимент окончен.
Settings = { Name = "xPc5", period = 24, line= { { Name = "xPc5", Color = RGB(0, 128, 0), Type = TYPE_LINE, Width = 2 }, { Name = "xPc5", Color = RGB(255, 64, 64), Type = TYPET_BAR, Width = 3 }, { Name = "xPc5", Color = RGB(64, 64, 255), Type = TYPET_BAR, Width = 3 } } } ---------------------------------------------------------- function c_FF() return function(ind, _p) local period = _p local index = ind local MAX_ = 0 local MIN_ = 0 local MAX2_ = 0 local MIN2_ = 0 if index == 1 then MAX_ = C(index) MIN_ = C(index) MAX2_ = C(index) MIN2_ = C(index) return nil end ---------------------------------------------------------------------- period = _p if index < period then period = index end MAX_ = H(index) MIN_ = L(index) MAX2_ = 0 MIN2_ = 0 for i = 0, (period-1) do if MAX_ < H(index-i) then MAX_ = H(index-i) end if MIN_ > L(index-i) then MIN_ = L(index-i) end MAX2_ = MAX2_ + MAX_ MIN2_ = MIN2_ + MIN_ end MAX2_ = MAX2_/(period) MIN2_ = MIN2_/(period) return (MAX2_+MIN2_)/2, MAX2_, MIN2_ end end function Init() myFF = c_FF() return 3 end function OnCalculate(index) return myFF(index, Settings.period) end
Settings = { Name = "xBollinger_LinReg", period = 40, deviation=2, line= { { Name = "xBollinger_LinReg", Color = RGB(0, 0, 255), Type = TYPE_LINE, Width = 2 }, { Name = "xBollinger_LinReg", Color = RGB(192, 0, 0), Type = TYPE_LINE, Width = 2 }, { Name = "xBollinger_LinReg", Color = RGB(0, 128, 0), Type = TYPE_LINE, Width = 6 } } } function c_FF() local AMA={} local CC={} return function(ind, _p,_ddd) local period = _p local index = ind local vol = 0 local sigma = 0 local sigma2 = 0 local aav = 0 local bb = 0 local ZZZ = 0 if index == 1 then AMA={} CC={} CC[index]=(C(index)+H(index)+L(index))/3 AMA[index]=(C(index)+O(index))/2 return nil end ------------------------------ AMA[index]=AMA[index-1] CC[index]=(C(index)+H(index)+L(index))/3 if index < (_p) then return nil end period =_p if index < period then period = index end --------------- sigma=0 sigma2=0 aav=0 ZZZ=0 for i = 0, period-1 do ZZZ=CC[index+i-period+1] aav=aav+ZZZ sigma=sigma+ZZZ*(-(period-1)/2+i) sigma2=sigma2+(-(period-1)/2+i)^2 end bb=sigma/sigma2 aav=aav/period AMA[index]=aav+bb*((period-1)/2) sigma=0 sigma2=0 sigma3 = 0 for i = 0, period-1 do ZZZ=CC[index+i-period+1] sigma2=aav+bb*(-(period-1)/2+i) sigma=sigma+(ZZZ-sigma2)^2 end sigma=(sigma/period)^(1/2) return AMA[index]-sigma*_ddd,AMA[index]+sigma*_ddd, AMA[index] end end function Init() myFF = c_FF() return 3 end function OnCalculate(index) return myFF(index, Settings.period,Settings.deviation) end