Восстановление заявок после обрыва связи

Страницы: 1
RSS
Восстановление заявок после обрыва связи
 
Здравствуйте. Иногда бывает такое, что робот пытаясь либо выставить заявку, либо изменить её, либо снять, отправляет транзакцию, и не дождавшись ответа, происходит обрыв связи с сервером. Когда связь восстанавливается, робот не знает, что случилось с заявкой. Я пытаюсь получить состояние заявки из таблицы заявок, но проблема в том, что при восстановлении связи окно квика часто зависает на некоторое время, и в это время getOrder_by_ID и getOrder_by_Number возвращают ответ, аналогичный ответу при отсутствии заявки, хотя заявка на самом деле существует. Когда квик перестаёт висеть, приходит нормальный ответ с существующей заявкой. Но как роботу понять, перестал квик висеть или нет, я не знаю. Есть ли какое-то решение, как роботу корректно восстановить статусы заявок, которые ему неизвестны, после восстановления связи?
 
Это так часто уже обсуждалось на форуме. Необходимо организовать процедуру ожидания загрузки данных с сервера брокера. К сожалению, разработчики считают, что это не проблема, поэтому никаких конкретных методов для этого нет.

Что можно сделать:
- Сравнивать время последнего полученного пакета и время сервера, чтобы расхождение укладывалось в допустимую дельту.
- Также можно сравнивать время сервера и локальное время, но оно должно быть точным.
- Если в процессе работы были установлены ордера, то необходимо запоминать число записей в таблицах и после восстановления связи ожидать пока там не появится необходимое число записей, или хотя бы отличное от нуля.
- Ожидать загрузки таблиц денежных лимитов и лимитов срочной секции (если есть)

т.е. процедуры проверки, что в таблицах данные есть, что пакеты данных догнали время сервера.
 
Nikolay, спасибо, конечно, но это всё ненадёждные методы. А как найти то, что уже обсуждалось на форуме? Я немного поискал, но ничего не нашёл.
 
Цитата
Максим Трейдер написал:
Здравствуйте. Иногда бывает такое, что робот пытаясь либо выставить заявку, либо изменить её, либо снять, отправляет транзакцию, и не дождавшись ответа, происходит обрыв связи с сервером. Когда связь восстанавливается, робот не знает, что случилось с заявкой. Я пытаюсь получить состояние заявки из таблицы заявок, но проблема в том, что при восстановлении связи окно квика часто зависает на некоторое время, и в это время getOrder_by_ID и getOrder_by_Number возвращают ответ, аналогичный ответу при отсутствии заявки, хотя заявка на самом деле существует. Когда квик перестаёт висеть, приходит нормальный ответ с существующей заявкой. Но как роботу понять, перестал квик висеть или нет, я не знаю. Есть ли какое-то решение, как роботу корректно восстановить статусы заявок, которые ему неизвестны, после восстановления связи?
Попробуйте проверять время сервера :
getInfoParam

Функция возвращает значения параметров информационного окна (пункт меню  Система / О программе / Информационное окно…).  

Формат вызова:  

STRING getInfoParam (STRING param_name)

Параметр «param_name» может принимать значения, представленные в таблице.  

Значение параметраОписание
VERSION Версия программы
TRADEDATE Дата торгов
SERVERTIME Время сервера
LASTRECORDTIME Время последней записи
NUMRECORDS Число записей
LASTRECORD Последняя запись
LATERECORD Отставшая запись
CONNECTION Соединение
IPADDRESS IP-адрес сервера
IPPORT Порт сервера
IPCOMMENT Описание соединения
SERVER Описание сервера
SESSIONID Идентификатор сессии
USER Пользователь
USERID ID пользователя
ORG Организация
MEMORY Занято памяти
LOCALTIME Текущее время
CONNECTIONTIME Время на связи
MESSAGESSENT Передано сообщений
ALLSENT Передано всего байт
BYTESSENT Передано полезных байт
BYTESPERSECSENT Передано за секунду
MESSAGESRECV Принято сообщений
BYTESRECV Принято полезных байт
ALLRECV Принято всего байт
BYTESPERSECRECV Принято за секунду
AVGSENT Средняя скорость передачи
AVGRECV Средняя скорость приема
LASTPINGTIME Время последней проверки связи
LASTPINGDURATION Задержка данных при обмене с сервером
AVGPINGDURATION Средняя задержка данных
MAXPINGTIME Время максимальной задержки
MAXPINGDURATION Максимальная задержка данных

Пример:

function main(  )
   params = {"VERSION", "TRADEDATE", "SERVERTIME",
               "LASTRECORDTIME", "NUMRECORDS", "LASTRECORD","LATERECORD",
               "CONNECTION", "IPADDRESS", "IPPORT", "IPCOMMENT",
               "SERVER", "SESSIONID", "USER", "USERID", "ORG", "MEMORY",
               "LOCALTIME", "CONNECTIONTIME", "MESSAGESSENT", "ALLSENT",
               "BYTESSENT", "BYTESPERSECSENT", "MESSAGESRECV", "BYTESRECV",
               "ALLRECV", "BYTESPERSECRECV", "AVGSENT", "AVGRECV",
               "LASTPINGTIME", "LASTPINGDURATION", "AVGPINGDURATION",
               "MAXPINGTIME", "MAXPINGDURATION"}
   file = io.open("res.txt", "w+t")
   for key,v in ipairs(params) do
       file:write(v .. " = " .. getInfoParam(v) .. "\n")
   end
   file:close()
end

Руководство пользователя QUIK © ARQA Technologies / www.arqatech.com/ru/products/quik/
 
Цитата
Максим Трейдер написал:
но это всё ненадёждные методы
Надёжных в API нет. В этом и проблема. Искать по форуму - обсуждения были и 10 лет назад.
 
До кучи...  это надежные методы.
Страницы: 1
Читают тему
Наверх