Коллеги, добрый день! Я новичок в программировании луа, и у меня возникла проблема. Есть скрипт, который записывает в файл 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 |