Мужики, ХЭЛП.
Честно, мозг закипел. Решил тут воспользоваться уже прописанными Индикаторами от производителя из LuaIndicators. Но при их тестировании, выяснилось, что PSAR точно дает данные как на графике, а вот МА() — врет безбожно, причем так что ума не дам.
Вот короткий пример:
dofile(getWorkingFolder().."\\LuaIndicators\\LuaIndicators\\MA.lua")
dofile(getWorkingFolder().."\\LuaIndicators\\LuaIndicators\\PSAR.lua")
is_run = true
function main()
while is_run do
func = MA()
funcSAR = PSAR()
t_id = AllocTable()
AddColumn(t_id,1,«Price»,true,QTABLE_INT_TYPE,10)
AddColumn(t_id,2,«MA»,true,QTABLE_INT_TYPE,10)
AddColumn(t_id,3,«MA2»,true,QTABLE_INT_TYPE,10)
AddColumn(t_id,4,«SAR»,true,QTABLE_INT_TYPE,10)
CreateWindow(t_id)
SetWindowCaption(t_id,«MA»)
ds = CreateDataSource(«SPBFUT», «IMOEXF», INTERVAL_H1)
sleep(500)
for i=1,ds:Size() do
ma_1 = func(i, {Period=96, Metod = EMA, VType=CLOSE}, ds)
ma_1_1 = func(i-1, {Period=96, Metod = EMA, VType=CLOSE}, ds)
TIME = ds:T(i).hour
SAR = funcSAR(i, {Step = 0.002, MaxStep = 0.2}, ds)
tmp=InsertRow(t_id,-1)
SetCell(t_id,tmp,1,tostring(ds:C(i)),ds:C(i))
SetCell(t_id,tmp,2,tostring(ma_1),ma_1)
SetCell(t_id,tmp,3,tostring(ma_1_1),ma_1_1)
SetCell(t_id,tmp,4,tostring(SAR),SAR)
end
sleep(10000)
end
end
function OnStop()
is_run = false
--DestroyTable(t_id)
return 1000
end
=======================================================================
Результат вычисления МА() за i и i-1 вообще с потолка, т.е. ma_1_1 совсем не равно предыдущему значению m_1. Да и просто m_1 — не равно значению с графика. А вот если убрать расчет ma_1_1, то m_1 — правильно расчитывается — совпадает с данными графика !!!
В чем подвох? и как победить ?