Тем, кто хотел бы практически разобраться в данном вопросе, рекомендую установить демо КВИК
и запускать скрипты, которые я буду выкладывать и пояснять.
Итак начнем.
Вот исходный скрипт, в нем закомментированы некоторые операторы, которые демонстрируют однотипность записи колбеков
и их обработку в функции main.
В первых трех строчках скрипта создаемся лог файл, куда скрипт выводит информацию о своей работе.
Вам надо исправить 2-ю строку, записав в ней путь, где Вы хотите создать этот файл
для наглядности уберем эти комментарии:
Запустим этот скрипт на исполнение
и получим следующий результат в лог файле
Последним значением в строке переменная _N - длина очереди.
--------------
Пояснение следует...
и запускать скрипты, которые я буду выкладывать и пояснять.
Итак начнем.
Вот исходный скрипт, в нем закомментированы некоторые операторы, которые демонстрируют однотипность записи колбеков
и их обработку в функции main.
В первых трех строчках скрипта создаемся лог файл, куда скрипт выводит информацию о своей работе.
Вам надо исправить 2-ю строку, записав в ней путь, где Вы хотите создать этот файл
| Код |
|---|
name="bot"; -- имя робота
path = "D:/QUIK_SCRIPT/nk_bot/" --папка где разместим лог файл
Log=io.open(path..name..".log","w") -- создаем лог файл для записи
------------
_N=0; _tN={};
----------------------
function main()
-----------------------
while fconnect do
if getInfoParam("SERVERTIME") then
DT=getInfoParam("TRADEDATE"); DT=tonumber(string.sub (DT,7,10)..string.sub (DT,4,5)..string.sub (DT,1,2));
fconnect=2;
Log:write("DT="..tostring(DT)..",fconnect="..fconnect.."\n");Log:flush();
end
------------------------------
local clas,sec,ncb,t,_time;
-----------------------------
while fconnect==2 do
while _N>0 do
t=_tN[_N]; _N=_N-1 ncb=t[1];
----------------------
if ncb==99 then
clas,sec=t[2],t[3];
else
t=t[2];
if ncb==1 then
clas=t.class_code; sec=t.sec_code; --может не быть
elseif ncb==2 then
clas=t.class_code; sec=t.sec_code;
-- elseif ncb==3 then
-- elseif ncb==4 then
-- elseif ncb==5 then
-- elseif ncb==6 then
-- elseif ncb==7 then
-- elseif ncb==8 then
-- elseif ncb==9 then
-- elseif ncb==10 then
-- elseif ncb==11 then
-- elseif ncb==12 then
end
end
Log:write(ncb..",clas="..tostring(clas)..",sec="..tostring(sec)..",_N=".._N.."\n");Log:flush();
_time=0;
end
sleep(1);
end
end
end
----------------------------
function OnInit(pfile) fconnect=isConnected(); end
----------------
function OnParam(c,s) _N=_N+1; _tN[_N]={99,c,s,tim};end
---------------------
function OnTransReply(t) _N=_N+1; _tN[_N]={1,t}; end
function OnOrder(t) _N=_N+1; _tN[_N]={2,t}; end
--function OnStopOrder(t) _N=_N+1; _tN[_N]={3,t}; end
--function OnTrade(t) _N=_N+1; _tN[_N]={4,t}; end
--function OnQuote(c,s) _N=_N+1; _tN[_N]={5,t}; end
--function OnAllTrade(t) _N=_N+1; _tN[_N]={6,t}; end
--function OnDepoLimit(t) _N=_N+1; _tN[_N]={7,t}; end
--function OnAccountBalance(t) _N=_N+1; _tN[_N]={8,t}; end-- изменение позиции по счету
--function OnAccountPosition(t) _N=_N+1; _tN[_N]={9,t}; end-- изменение позиции по счету
--function OnDepoLimit(t) _N=_N+1; _tN[_N]={10,t}; end -- изменение позиции по инструментам
--function OnFuturesClientHolding(t) _N=_N+1; _tN[_N]={11,t}; end -- изменение позиции по срочному рынку
--function OnMoneyLimit(t) _N=_N+1; _tN[_N]={12,t}; end -- изменение денежной позиции
--function OnClose() fconnect=nil end
--function OnConnected(flag) fconnect=1; end
--function OnDisconnected() fconnect=1 end
--function OnStop(flag) fconnect=nil; return 2000 end
--function OnCleanUp() end -- смена торговой сессии
--function OnDepoLimitDelete(t) end -- удаление позиции по инструментам
--function OnFirm(t) end -- получение описания новой фирмы
--function OnFuturesLimitChange(t) end -- изменение ограничений по срочному рынку
--function OnFuturesLimitDelete(t) end -- удаление лимита по срочному рынку
--function OnMoneyLimitDelete(t) end -- удаление денежной позиции
--function OnNegDeal end-- новая заявка на внебиржевую сделку или изменение параметров существующей заявки на внебиржевую сделку
--function OnNegTrade end-- новая сделка для исполнения или изменение существующей сделки для исполнения
|
| Код |
|---|
name="bot"; -- имя робота
path = "D:/QUIK_SCRIPT/nk_bot/" --папка где разместим лог файл
Log=io.open(path..name..".log","w") -- создаем лог файл для записи
------------
_N=0; _tN={};
----------------------
function main()
-----------------------
while fconnect do
if getInfoParam("SERVERTIME") then
DT=getInfoParam("TRADEDATE"); DT=tonumber(string.sub (DT,7,10)..string.sub (DT,4,5)..string.sub (DT,1,2));
fconnect=2;
Log:write("DT="..tostring(DT)..",fconnect="..fconnect.."\n");Log:flush();
end
------------------------------
local clas,sec,ncb,t,_time;
-----------------------------
while fconnect==2 do
while _N>0 do
t=_tN[_N]; _N=_N-1 ncb=t[1];
----------------------
if ncb==99 then
clas,sec=t[2],t[3];
else
t=t[2];
if ncb==1 then
clas=t.class_code; sec=t.sec_code; --может не быть
elseif ncb==2 then
clas=t.class_code; sec=t.sec_code;
end
end
Log:write(ncb..",clas="..tostring(clas)..",sec="..tostring(sec)..",_N=".._N.."\n");Log:flush();
_time=0;
end
sleep(1);
end
end
end
----------------------------
function OnInit(pfile) fconnect=isConnected(); end
----------------
function OnParam(c,s) _N=_N+1; _tN[_N]={99,c,s,tim};end
---------------------
function OnTransReply(t) _N=_N+1; _tN[_N]={1,t}; end
function OnOrder(t) _N=_N+1; _tN[_N]={2,t}; end
|
и получим следующий результат в лог файле
| Код |
|---|
DT=20240119,fconnect=2 99,clas=SPBFUT,sec=SiH4,_N=0 99,clas=SPBFUT,sec=MMH4,_N=0 99,clas=SPBFUT,sec=EuH4,_N=0 99,clas=SPBFUT,sec=EuH4,_N=0 99,clas=SPBFUT,sec=EuH4,_N=0 99,clas=SPBFUT,sec=SFH4,_N=0 99,clas=SPBFUT,sec=EuH4,_N=0 99,clas=SPBFUT,sec=EuH4,_N=1 99,clas=SPBFUT,sec=USDRUBF,_N=0 99,clas=SPBFUT,sec=EuH4,_N=0 99,clas=SPBFUT,sec=USDRUBF,_N=0 99,clas=CETS,sec=USDCNY_TOM,_N=4 99,clas=CETS,sec=EURUSD000TOD,_N=3 99,clas=CETS,sec=CNYRUB_TOM,_N=2 99,clas=CETS,sec=EUR_RUB__TOM,_N=1 99,clas=SPBFUT,sec=EuH4,_N=0 99,clas=SPBFUT,sec=TNH4,_N=1 99,clas=SPBFUT,sec=EuH4,_N=0 99,clas=SPBFUT,sec=SGH4,_N=0 99,clas=SPBFUT,sec=CHH4,_N=0 99,clas=SPBFUT,sec=SGH4,_N=1 99,clas=SPBFUT,sec=CHH4,_N=0 99,clas=SPBFUT,sec=LKH4,_N=1 99,clas=SPBFUT,sec=SGH4,_N=0 99,clas=SPBFUT,sec=TNH4,_N=3 99,clas=SPBFUT,sec=TNH4,_N=2 99,clas=SPBFUT,sec=EDH4,_N=1 99,clas=SPBFUT,sec=EDH4,_N=0 99,clas=QJSIM,sec=WUSH,_N=12 99,clas=QJSIM,sec=UPRO,_N=11 99,clas=QJSIM,sec=UGLD,_N=10 99,clas=QJSIM,sec=SIBN,_N=9 99,clas=QJSIM,sec=NMTP,_N=8 99,clas=QJSIM,sec=MTLR,_N=7 99,clas=QJSIM,sec=MDMG,_N=6 99,clas=QJSIM,sec=GLTR,_N=5 99,clas=QJSIM,sec=CHMF,_N=4 99,clas=QJSIM,sec=ALRS,_N=3 99,clas=QJSIM,sec=ABIO,_N=2 99,clas=SPBFUT,sec=CRH4,_N=1 99,clas=SPBFUT,sec=TNH4,_N=0 |
--------------
Пояснение следует...