Блог им. kurd

Измерьте скорость Quik'а

Она разная у разных  провайдеров и брокеров и в разное время дня. Сейчас из Питера до моего брокера БКС ping идёт 13 мсек.
Скрипт Lua показывает вот такие времена срабатывания в секундах
----------
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()
Измерьте скорость Quik'а...
PS С-Л, как обычно, поднагадил. Попробуйте  исправить порчу
function OnOrder (order) — Постановка в очередь
  if order.order_num == OrderNum then
    table.sinsert (EventLog — возможна дважды
    ,{event = Tags[3], clk = os.clock()-Clk, data = order})
  end
end — OnOrder()
Но и здесь вместо дефисов(минусов) С-Л залепил тире.
  • обсудить на форуме:
  • QUIK
    347
    3 комментария
    На pastebin код выложите просто
    а если на одном ноуте и терминале брокера 2 запустить запись ордербука по бумаге 3-го эшелона
    а на втором ноуте и треминале брокера 1 отправить заявку в низ стакана и записать время отправки — чтобы легче было найти
    и все это делать через одну точку доступа
    как в итоге определить скорость? по таймстемпу в ордер буке?

    у меня 3 ноута на каждом свой  quik. но мне хватает скорости

    хотя признаю, в даты ставки ЦБ скрипты сильно отстают и ордера иногда не впопад по ценам шлют)) но это я уже вылечил тупо ограничением на кол-во заявок по бумаге
    avatar

    Читайте на SMART-LAB:
    Фото
    DXY у ключевой поддержки: шорт-сквиз или новый этап распродажи?
    Индекс доллара DXY плавно дрейфует в область месячного минимума в районе 98,50. Однако ослабление доллара на FX неравномерно: EURUSD стоит около...
    Фото
    🎯«Нет плохих помещений, есть разные зоны»: чему эксперты ГК «А101» научили инвесторов
    Фото
    🎭 За кулисами ноября: итоги
    В прошлом месяце вложения физлиц в ценные бумаги выросли на 36% . В облигации было инвестировано 115,6 млрд , в паи фондов — 31,1 млрд....

    теги блога Rostislav Kudryashov

    ....все тэги



    UPDONW
    Новый дизайн