Блог им. kurd
---------- Send 0.001 ---------- Reply 0.029 status 3 trans_id 9999 msg Заявка 2001882023283372213 успешно зарегистрирована. client_code SPBFUT00egd order_num 2001882023283372213 price 2508.0 ---------- Order 0.103 client_code SPBFUT00egd order_num 2001882023283372213 price 2508.0 ---------- Order 0.103 client_code SPBFUT00egd order_num 2001882023283372213 price 2508.0 ----------Лет 10 назад через Церих капитал было: Reply 0.1 сек, Order 0.2 сек.
-- Если FILL_OR_KILL не исполняется, msg в окне сообщений
-- Ошибка создания заявки. [GW][4103]
-- "Неполное сведение FOK заявки."
-- result = "",
-- OnTransReply(): status=4, msg=см.выше, order_num=0.
SecCode = "MMZ5"
ClsCode = "SPBFUT"
TransId = 9999
EventLog = {}
Tags = {"Send", "Reply", "Order", "Trade"}
function OnInit (scriptPath)
ScriptPath = scriptPath
end -- OnInit()
function OnOrder (order) -- Постановка в очередь
if order. <a name="cut"></a> order_num == OrderNum then
table.sinsert (EventLog -- возможна дважды
,{event = Tags[3], clk = os.clock()-Clk, data = order})
end
end -- OnOrder()
function OnTrade (trade) -- Исполнение заявки
if trade.order_num == OrderNum then
table.sinsert (EventLog
,{event = Tags[4], clk = os.clock()-Clk, data = trade})
end
end -- OnTrade()
function OnTransReply (reply) -- Регистрация price
if reply.trans_id == TransId then
OrderNum = reply.order_num
table.sinsert (EventLog
,{event = Tags[2], clk = os.clock()-Clk, data = reply})
end
end -- OnTransReply ()
function main()
message (ScriptPath .."\nisConnected() ".. isConnected()
.."\nos.clock() ".. os.clock())
local priceMin = tonumber (getParamEx (ClsCode, SecCode
,"PRICEMIN").param_value)
local priceStp = tonumber (getParamEx (ClsCode, SecCode
,"SEC_PRICE_STEP").param_value)
local price = priceMin + priceStp
message ("priceMin ".. priceMin .."\npriceStp ".. priceStp
.."\nprice ".. price)
local triTbl = {
["ACCOUNT"] = "SPBFUT00egd" -- Торговый счёт
,["CLIENT_CODE"] = "Мой комментарий" -- До 20 символов
,["CLASSCODE"] = ClsCode
,["SECCODE"] = SecCode
,["OPERATION"] = "B"
--,["EXECUTION_CONDITION"] = "FILL_OR_KILL"
--,["EXECUTION_CONDITION"] = "PUT_IN_QUEUE" -- Default
,["PRICE"] = tostring (price)
,["QUANTITY"] = "1"
,["ACTION"] = "NEW_ORDER"
,["TRANS_ID"] = tostring (TransId)
,["TYPE"] = "L"
}
Clk = os.clock()
local result = sendTransaction (triTbl)
table.sinsert (EventLog
,{event = Tags[1], clk = os.clock()-Clk, data = triTbl})
message ("result <".. tostring (result) .."> ".. type (result))
while #EventLog < 4 and os.clock() < Clk+3 do sleep (10) end
message (string.format ("clock()-Clk %.3f #EventLog %d"
,os.clock()-Clk, #EventLog))
local s, nl = "", ""
for i = 1, #EventLog do
s = s ..nl..("-"):rep(10).. string.format ("\n%-5s %5.3f"
,EventLog[i].event, EventLog[i].clk)
nl = "\n"
if EventLog[i].event == Tags[2] then -- Reply
s = s .."\nstatus ".. EventLog[i].data.status
.."\ntrans_id ".. EventLog[i].data.trans_id
.."\nmsg ".. EventLog[i].data.result_msg
.."\nclient_code ".. EventLog[i].data.client_code
.."\norder_num ".. tostring(EventLog[i].data.order_num)
.." price ".. tostring(EventLog[i].data.price)
else if EventLog[i].event == Tags[3] then -- Order
s = s .."\nclient_code ".. EventLog[i].data.client_code
.."\norder_num ".. EventLog[i].data.order_num
.." price ".. EventLog[i].data.price
else if EventLog[i].event == Tags[4] then -- Trade
s = s .."\nclient_code ".. EventLog[i].data.client_code
.."\norder_num ".. EventLog[i].data.order_num
.." price ".. EventLog[i].data.price
end end end -- по числу then
end
message (s .."\n"..("-"):rep(10))
end -- main()
...
а на втором ноуте и треминале брокера 1 отправить заявку в низ стакана и записать время отправки — чтобы легче было найти
и все это делать через одну точку доступа
как в итоге определить скорость? по таймстемпу в ордер буке?
у меня 3 ноута на каждом свой quik. но мне хватает скорости
хотя признаю, в даты ставки ЦБ скрипты сильно отстают и ордера иногда не впопад по ценам шлют)) но это я уже вылечил тупо ограничением на кол-во заявок по бумаге