Написал изучающим Lua примеры вариантов колбеков сделок, заявок и стоп-заявок.
----------------------
Примеры написаны специально для форума и не тестировались, а лишь проверены на синтаксис.
---------------------------
Поэтому, если есть желающие тестить и найдете ошибки, то пишите, исправим вместе.
--------------
В этих колбеках сделки, активные заявки и активные стоп заявки размещаются в соответствующие инструментам рабочие таблицы.
--------------------------------
----------------------
Примеры написаны специально для форума и не тестировались, а лишь проверены на синтаксис.
---------------------------
Поэтому, если есть желающие тестить и найдете ошибки, то пишите, исправим вместе.
--------------
В этих колбеках сделки, активные заявки и активные стоп заявки размещаются в соответствующие инструментам рабочие таблицы.
--------------------------------
Код |
---|
--таблицы TRADE={}; -- индексы сделок по инструментам ORDER={}; -- индексы активных заявок по инструментам STOP={}; -- индексы активных стоп-заявок по инструментам function OnTrade(tr) local n,m;local sec=tr.sec_code; local t=TRADE[sec]; --таблица номеров строк сделок в таблице QUIK инструмента sec if t then m=TRADE[0]; n=t[0]; else --создание таблицы инструмента m=getNumberOf("trades"); n=0; t=SearchItems("trades",n,m-1, function(p1) if p1==sec then return true;end return false; end,"sec_code") TRADE[sec]=t; end if m>t[n] then n=n+1; t[n]=m; t[0]=n; TRADE[0]=m+1; end end local function fOrder(tr,T,s) --функция обработки для колбеков orders и stop_orders local n,m,x;local sec=tr.sec_code; local t=T[sec]; --таблица номеров строк в таблице QUIK активных ордеров или стоп_ордеров инструмента sec local flag=tr.flags&1; local num=tr.order_num; if t then m=T[0]; n=t[0]; for i=1,n do x=getItem(s,i-1); if x.num_order==num then if flag==0 then n=n-1;if n>0 then t[i]=t[n]; end break; else return; end end end else --создание таблицы инструмента m=getNumberOf(s); n=0; t=SearchItems(s,n,m-1, function(p1,p2) if p1==sec and p2&1==1 then return true;end return false; end,"sec_code,flags") T[sec]=t; end if flags==1 then n=n+1; t[0]=n; t[n]=m; T[0]=m+1; end end function OnOrder(t) fOrder(t,ORDER,"orders"); end function OnStopOrder(t) fOrder(t,ORDER,"stop_orders"); end |