Коллеги, добрый день! Я новичок в программировании луа, и у меня возникла проблема. Есть скрипт, который записывает в файл csv данные об отправленной транзакции в систему, далее скрипт проверяет состояние стопа и фиксирует, если стоп выполнен. И вот после этого происходят чудеса: если появляется ещё одна сделка, то скрипт её открывает, но вот в файлик уже ничего не записывается, и в итоге ломается учёт, так как скрипт не видит записи о номере стопа в файлике. Подскажите, пожалуйста, как это можно починить?
| Код |
|---|
-- Функция вызывается терминалом, когда с сервера приходит новая информация о транзакциях
function OnTransReply(trans_reply)
-- Если пришла информация по нашей транзакции
if trans_reply.trans_id == id_done then
-- Если данный статус уже был обработан, выходит из функции, иначе запоминает статус, чтобы не обрабатывать его повторно
if trans_reply.status == LastStatus then return else LastStatus = trans_reply.status end
-- Выводит в сообщении статусы выполнения транзакции
if trans_reply.status == 1 then -- транзакция активна
--message('OnTransReply(): По транзакции №'..trans_reply.trans_id..' УСПЕШНО ВЫСТАВЛЕНА заявка №'..trans_reply.order_num..' по цене '..trans_reply.price..' объемом '..trans_reply.quantity,3)
end
if trans_reply.status ==3 then -- транзакция выполнена, запись в журнал
--message(trans_reply.result_msg,1)
--message('OnTransReply(): По транзакции №'..trans_reply.trans_id..' УСПЕШНО ВЫПОЛНЕНА заявка №'..trans_reply.order_num..' по цене '..trans_reply.price..' объемом '..trans_reply.quantity,3)
OrderNum = trans_reply.order_num
OrderTime=trans_reply.datetime
OrderPrice=trans_reply.price
OrderQuantity=trans_reply.quantity
OrderCond=TP
OrderInstr =trans_reply.sec_code
Ordcomment=trans_reply.brokerref
local tradeline= os.date("%c", os.time(trans_reply.datetime))..";"..
OrderInstr..";"..
OrderQuantity ..";"..
OrderCond..";"..
OrderPrice..";"..
OrderNum ..";"..
"Open_order"..";"..
ACCOUNT..";"..
Ordcomment..";"..
"Created".."\n"
CSV:seek("end",0)
CSV:write(tradeline); --записали значения в файлик
CSV:flush(); --сохранили файлик
end
end
-- Если пришла информация по нашей стоп-транзакции
if trans_reply.trans_id == id_take then
-- Если данный статус уже был обработан, выходит из функции, иначе запоминает статус, чтобы не обрабатывать его повторно
if trans_reply.status == TakeStatus then return else TakeStatus = trans_reply.status end
-- Выводит в сообщении статусы выполнения транзакции
if trans_reply.status == 3 then -- транзакция активна
Stopnumb =trans_reply.order_num
SlTpOrderTime=trans_reply.datetime
SlTpOrderPrice=trans_reply.price
SlTpOrderQuantity=trans_reply.quantity
SlTpOrderCond=TP
SlTpOrderInstr=trans_reply.sec_code
SlComment=trans_reply.brokerref
--message('OnTransReply(): По транзакции №'..trans_reply.trans_id..' ВЫПОЛНЕНА заявка №'..trans_reply.order_num..' по цене '..trans_reply.price..' объемом '..trans_reply.quantity,3)
local Stopline= os.date("%c", os.time(trans_reply.datetime))..";"..
SlTpOrderInstr..";"..
SlTpOrderQuantity ..";"..
SlTpOrderCond ..";"..
SlTpOrderPrice ..";"..
Stopnumb ..";"..
"Take_Stop_order"..";"..
ACCOUNT..";"..
SlComment..";"..
"Created".."\n"
CSV:seek("end",0)
CSV:write(Stopline); --записали значения в файлик
CSV:flush(); --сохранили файлик
end
end
end
|