Неверный номер заявки на срочном рынке
При отправке заявки на срочный рынок получаю ответ: OnTransReply { result_msg: 'Заявка 2030028288298532893 успешно зарегистрирована.', order_num: 2030028288298532900, } еще пример OnTransReply { result_msg: 'Заявка 2030028288298500206 успешно зарегистрирована.', order_num: 2030028288298500000, } order_num не равен значению в result_msg. Несколько лет назад quik перешел в нумерации заявок с 14-знаков на 19-знаков, видимо при передача номера заявки не хватает точности.
quiksharp использует библиотеку dkjson, видимо на этом этапе ошибка
HANDLING LARGE AND/OR PRECISE NUMBERS
Without special handling, numbers in JSON can lose precision in Lua. For example:
T = JSON:decode('{ "small":12345, "big":12345678901234567890123456789, "precise":9876.67890123456789012345 }') print("small: ", type(T.small), T.small) print("big: ", type(T.big), T.big) print("precise: ", type(T.precise), T.precise) produces small: number 12345 big: number 1.2345678901235e+28 precise: number 9876.6789012346
https://github.com/micodev/channel-list-bot/blob/5c2431888a7fffa88f378c40171a7e2608741303/dkjson.lua#L338
В качестве решения сделал просто конвертацию номера в строку lua\qscallbacks.lua
function OnOrder(order)
local msg = {}
msg.t = timemsec()
msg.id = nil
msg.data = order
msg.data.order_num = tostring(msg.data.order_num)
msg.cmd = "OnOrder"
sendCallback(msg)
end
function OnTransReply(trans_reply)
local msg = {}
msg.t = timemsec()
msg.id = nil
msg.data = trans_reply
msg.data.order_num = tostring(msg.data.order_num)
msg.cmd = "OnTransReply"
sendCallback(msg)
end
В данном случае проблема где-то у Вас. Параметр номера заявки был приведен в типу Long, сразу после объявления о готовящихся изменениях. Я торгую на бирже буквально ежедневно, одноверменно через двух разных брокеров, и никаких проблем с размерностью номеров заявок не испытываю.
Возможно, Вы пропустили какое-то обновление, или обновились некорректно...
Да, возможно, так как я пишу на js, обрабатываю json, который получаю от quiksharp.lua. В js тип number имеет ограничения, максимум 9007199254740991, а это 16 знаков