Написал изучающим 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
|