Alexey (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Неверные флаги в функции OnOrder, флаги показывают что лимитная заявка снята, хотя её состояние Активна
 
Всем спасибо!
Обсуждение помогло.
Начал анализировать код и нашёл свою ошибку.
Исправил, теперь будет работать корректно.
Неверные флаги в функции OnOrder, флаги показывают что лимитная заявка снята, хотя её состояние Активна
 
Работаю на четырех брокерах: СБЕР, ВТБ, Финам, Открытие
Код выставляет лимитную заявку, ожидая исполнения.

Рассматривается вариант, что пользователь снимает эту лимитную заявку в ручном режиме, тогда нужно остановить выполнение всего скрипта.

Соответственно код остановки скрипта:
Код
function OnOrder(order)
   if ((order.sec_code == FUT_SEC) and (order.trans_id == Trans_id_SELL)) then

      if ((order.qty >= 1) and (bit.test(order.flags, 0))) then 
         -- заявка активна (не исполнена)
         ToLog("The SELL order is in active status.")
      elseif bit.test(order.flags, 1) then
         ToLog("WARNING: USER's STOP. Flags = "..tostring(order.flags))
         IsRun = false
         return
      end
end
end

Так вот, у брокеров ВТБ и СБЕР иногда возникает ситуация в обработчике OnOrder , когда флаги показывают состояние 26.
бит 0 (0x1) = 0 - заявка не активна
бит 1 (0x2) = 1 - заявка снята

но на самом деле лимитная заявка продолжает находится в активном статусе в терминале Квик.

Это происходит иногда... Не часто. Не понимаю почему так...

Вчера стал это связывать с проблемами запаздывания времени часов Квик относительно часов Windows.
Внезапно время часов Квик, работавшее синхронно с Windows, вдруг начинает запаздывать на 5, 10, 30 сек, потом на минуту и более, потом "догоняет" и работает какое-то время синхронно, потом опять начинается цикл запаздывания и гонок и т.д.
Наблюдается "аритмия" в часах Квик.
"Глючил" именно брокер СБЕР.
Версия QUIK 9.7.1.10

И вот на этой аритмии и возникают неверные флаги OnOrder.

Включил измерение времени в функции OnOrder :
Код
local RoundTripSellOrder = os.clock() - SendSellTM
где SendSellTM - метка времени = os.clock() перед отправкой sendTransaction(transaction) в которой формируется идентификатор Trans_id_SELL.

По всем вчерашним неверным флагам замечено, что обработчик OnOrder вызывается спустя 1 мс после вызова функции sendTransaction(transaction).

Обычный тайминг около 80-120 мс когда проблем с флагами OnOrder не наблюдается.

Вообще среднее время 100 мс - это нормальный такой тайминг callback-функций Квика на отправку транзакции, как здесь может возникать одна миллисекунда ?!

Наверное это как-то связано с часами Квика, которые начинают "сбоить" и работать аритмично относительно нормального времени Windows.

То есть получается как будто OnOrder вызывается и обрабатывается в тот момент когда флаги ещё не установлены, этой лимитной заявки в системе как бы нет.

Вопросы:

1) Возможно ли что функция OnOrder выполняется через 1 мс после отправки sendTransaction(transaction) ??

2) Возможно ли что в первичный вызов OnOrder флаги ещё не приняли правильного положения и будут установлены в последующих вызовах OnOrder ??

3) Что можно ещё сделать в данной ситуации для улучшения стабильности ?
Почему-то не происходит обновления табличных данных лучший спрос и лучшее предложение (брокер СБЕР) ??, Два дня на
 
Бааа!!! Сейчас посмотрел на системное время в терминале Квик СБЕР , а оно на 25 минут запаздывает!!!
Написал в техподдержку и там ответили, что действительно есть проблемы с предоставлением рыночных данных....
Вот ж*па... И что теперь в скрипты встраивать проверки достоверности времени - сравнивать системные часы Windows с временем сервера ?!
Почему-то не происходит обновления табличных данных лучший спрос и лучшее предложение (брокер СБЕР) ??, Два дня на
 
Установлены настройки Программа->Получение данных(запрашивать данные раз в 1 сек.)->Котировки->FORTS:Фьючерсы
Брокер: СБЕР

Два дня назад заметил проблему - в таблице текущие торги перестали обновляться данные в столбцах "Спрос" и "Предл." по фьючерсным контрактам.
Помогла операция "Система->Заказ данных->Перезаказать данные..."
Вроде заработало, потом опять возникла такая же проблема, значения как бы зависают на одном уровне и не обновляются...
Вчера обновил Квик до версии 9.4.2.1 . Вроде проблема ушла... Но сегодня утром опять так же - котировки "Спрос" и "Предл." зависают на каком-то одном уровне и не обновляются...
Такое наблюдаю только в СБЕР. У финам 9.3.3.3 и Открытие 9.3.1.11 система работает нормально.

Дело в брокере СБЕР ??

Что ещё можно сделать?! Куда смотреть - на какие настройки ?!

У меня скрипты заточены именно на эти поля (лучший "Спрос" и "Предл.")
Раньше, более нескольких месяцев всё работало хорошо, но теперь какая-то фигня с лагами по данным и пошли потери денег...
Функции getBuySellInfoEx и getFuturesLimit возвращают nil по одному из клиентских счетов - почему такое может быть ?!
 
Мой торговый скрипт работает на нескольких клиентских счетах у брокеров Финам, Открытие, СБЕР.
В нём используется getBuySellInfoEx и getFuturesLimit .
На одном из новых счетов скрипт стал стабильно возвращать nil по этим функциям
Как будто неверно задан FIRMID.
Что можно сделать чтобы найти причину проблемы ?
Какое быстродействие у агло заявок типа spread ?, начал использовать модуль алгоритмической торговли и непонятно какое здесь быстродействие
 
Тестирую - Алгоритмическая заявка типа «Spread» от брокера Открытие.
Поставил на фьючерсы СБЕР - продажа спреда между SRU2 и SRM3 на уровне 1010 руб., но словил проскальзывание 196 руб. , то есть по факту спред исполнился = 814 руб.
Не понял почему, движение актива было в виде слабого роста.

Видимо быстродействие очень низкое, но как это понять в цифрах ?

Сколько миллисекунд цикл ? Сколько миллисекунд RoundTrip задержка ?

Через несколько минут работы приложение зависает с ошибкой General Protection Fault - Internal exception happened
 
7 декабря получил ответ на почту:
Цитата
К сожалению, нам не удалось понять причину проблемы. В рабочем месте QUIK начиная с версии 8.11 добавлен Lua интерпретатор версии 5.4. Рекомендуем при запуске скриптов использовать Lua-машину версии 5.4, для этого вы можете либо изменить общие настройки для всех Lua-скриптов в терминале, либо указывать нужную версию непосредственно в момент запуска скрипта в диалоге доступных скриптов.
Приносим извинения за причинённые неудобства.
Да, у меня запускается около 30 скриптов Lua. В настройках квика была установлена версия 5.3.5.
Установил версию Lua 5.4.1 и работа наладилась. В течении трех рабочих сессий не было зависаний.
Надеюсь проблема решена.
Спасибо за оперативную помощь.
Через несколько минут работы приложение зависает с ошибкой General Protection Fault - Internal exception happened
 
QUIK 8.13.3.1
Несколько месяцев всё работало нормально.
На прошлой неделе начались зависания с ошибкой General Protection Fault - Internal exception happened
Система работает несколько минут или пару часов , а потом виснет.

Как это лечить ?
Иногда не срабатывает killorder (во время движений)
 
Цитата
Какое время будете считать за не ответ?
Вроде достаточно 1 секунды. Обычно время между отправкой заявки и OnTransReply меньше 1 сек.
Если за секунду не удалось снять заявку, то выдаём сообщение об ошибке, которое является руководством к действию идти в другие приложения (мобильное, web-интерфейс) и снимать заявки в ручном режиме.
Техподдержка говорит, что эти приложения (мобильное, web-интерфейс) работают на других серверах. В теории вроде получится за несколько секунд снять заявки, если находился у терминала и заметил, что квик начал "лагать".
Цитата
Вот в вашем случае ответ на заявку был спустя 8 секунд, т.е. заявка никуда не потерялась, а просто висела в очереди на исполнение.
Если я правильно понял, то заявка висела на одном из серверов брокера, который отправил её на биржу с большим опозданием.
Возможно, что через другой сервер я бы смог снять зявку быстрее.
Иногда не срабатывает killorder (во время движений)
 
Дозвонился в техподдержку брокера. Они признают, что утром были проблемы с их серверами. О чём они сообщили на сайте.
Цитата
... возможны затруднения с отображением лимитов и проведением операций по срочному рынку.
Тем не менее, повторю вопрос:

Имеет ли смысл отправлять повторный приказ "KILL_ORDER", если не дождался подтверждения исполнения первого приказа ??
Может второй приказ проскочит в другую очередь ? ))
Иногда не срабатывает killorder (во время движений)
 
Хронология событий такая:
1) 10:00:01 Робот отправил приказ удалить заявку "KILL_ORDER"
2) Примерно в это же время (или чуть раньше, на открытии сессии) началось сильное движение в котировках инструмента.
3) 10:00:08 Заявка была исполнена (заключена сделка на бирже) . Спустя СЕМЬ СЕКУНД !!!
4) 10:00:08 Пришёл OnOrder с флагами исполнения заявки.
5) 10:00:09 Пришёл OnTransReply с статусом 5. "Вы не можете снять данную заявку"

В обычных ситуациях (без сильных движений) этот же программный код нормально снимает заявки.
Но вот такой игнор KILL_ORDER наблюдаю второй раз именно на движении. Второй раз зафиксировал события в логах.

Вопросы:
Это где-то у брокера приказ "KILL_ORDER" подвис ?
Как обрабатывать такие коллизии ?
Слать повторный "KILL_ORDER" , если вижу что заявка осталась в активном статусе ?
Функция getParamEx возвращает нули по параметрам максимальная, минимальная цена для акций, проблемы с переходом на новую версию qlua
 
Цитата
Sergey Gorokhov написал:
Alexey,
Откройте в терминале QUIK Таблицу Текущих Торгов и добавьте туда параметры Мин и макс возможной цены по классу TQBR
Убедитесь что они там действительно есть и в них действительно есть числа, после чего повторите попытку запуска скрипта.
Спасибо за подсказку!
Разобрался.
Нужно добавить эти параметры в меню терминала "Система -> Заказ данных -> Поток котировок -> Фильтр параметров"
Функция getParamEx возвращает нули по параметрам максимальная, минимальная цена для акций, проблемы с переходом на новую версию qlua
 
Функция getParamEx стала возвращать нули по параметрам PRICEMIN и PRICEMAX для класса акций "TQBR"
Для облигаций "TQCB" работает нормально.

Как можно иначе получить максимальную цену дня по ценной бумаге?
Функция getParamEx возвращает нули по параметрам максимальная, минимальная цена для акций, проблемы с переходом на новую версию qlua
 
Установил quik 8.8.4.3 и запускаю скрипт, который ранее работал на 7й версии.

Функция getParamEx
Страницы: 1
Наверх