Эта тема для начинающих писателей роботов на Lua в QUIK.
Cкрипт, на основе которого можно строить различных роботов.
В нем реализована очередь , что обеспечивает обработку всех событий
Функции обратного вызова записываются одинаково.
В них мы помещаем в очередь TQ полученные параметры и имя функции, которая обрабатывает данное событие.
Функция обработки событий реализуется отдельно.
Если функция обработки события отсутствует, то событие не будет записываться во очередь.
Cкрипт, на основе которого можно строить различных роботов.
В нем реализована очередь , что обеспечивает обработку всех событий
| Код |
|---|
TQ={}; jQr,jQw=0,0; --очередь
----------------------------
function main()
while run==1 do wait_connect()
while run==2 do
while jQw>jQr do local n=jQr+1;local t=TQ[n];TQ[n]=nil;jQr=n;t.fun(t);end
sleep(10)
end
end
end
-----------------------------
local function wQ(t,fun) --функция записи обработчика в очередь
if fun then
t.fun=fun; local n=jQw;if jQr==jQw then jQw=0;jQr=0;end n=jQw+1;TQ[n]=t; jQw=n;
end
end
-----функции обратного вызова QLua------------------------
function OnDepoLimit(t) wQ(t,setPos); end
----------------------------
function OnFuturesClientHolding(t) wQ(t,setPos); end
-----------------------------
function OnOrder(t) wQ(t,Order); end
----------------------------
function OnStopOrder(t) wQ(t,StopOrder); end
-----------------------
function OnTransReply(t) wQ(t,TransReply); end
----------------------------
function OnParam(c, s) wQ({sec_code=s,class_code=c},Param); end
----------------------------
function OnQuote(c, s) wQ({sec_code=s,class_code=c},Quote); end
------------------------
function OnDisconnected() run=1 end
-------------------------
function OnConnected(flag) Trans,Tsec,Tclas,Tclient,pos={},{},{},{},{} run=1 end
---------------------------
function CloseTH() if td_id then DestroyTable(td_id); end run =0 if f then f:close() end end
------------------------------
function OnStop(s) CloseTH();return 1000 end
---------------------------
function OnClose() CloseTH() end
---------------------------
function OnCleanUp() run=1; end
---------------
function OnInit(path) OnConnected(true); end
|
В них мы помещаем в очередь TQ полученные параметры и имя функции, которая обрабатывает данное событие.
Функция обработки событий реализуется отдельно.
Если функция обработки события отсутствует, то событие не будет записываться во очередь.