Проблема происходит в lua скрипте, который реализует заявки по волатильности для опционов. Скрипт запускает в main() таймер, который срабатывает через 500ms и пересчитывает новые цены лимитных заявок опционов в соответствии с текущей ценой фьючерса. Если цена для опциона изменилась, то заявка передвигается - делается sendTransaction (["ACTION"] = "MOVE_ORDERS"). Коллбэк на таймер срабатывает в том же потоке, что и main().
Также скрипт подписан на коллбэк OnTransReply для получения информации о передвижении заявки.
Для UI используется iup.
Версия QUIK: 7.5.0.72
Это скрипт корректно работает, но не долго. Где-то через 5 -20 минут QUIK падает с ошибкой:
Я сделал трейсинг в скрипте, но проблема в том, что падение происходит в произвольном месте. Т.е. нет определенной точки в коде, которая приводит к ошибке. Падение происходит не в потоке обрабатывающим таймер, а в главном потоке QUIK, который вызывает коллбэки. Т.е. что-то просто отваливается в самом QLUA.
Могу выслать сам код для того чтобы воспроизвести ошибку.
Фрагмент лога одного из падений (скрипт перед этим минут 20 нормально работал):
Также скрипт подписан на коллбэк OnTransReply для получения информации о передвижении заявки.
Для UI используется iup.
Версия QUIK: 7.5.0.72
Это скрипт корректно работает, но не долго. Где-то через 5 -20 минут QUIK падает с ошибкой:
Код |
---|
First-chance exception at 0x6D8AEEE2 (qlua.dll) in info.exe: 0xC0000005: Access violation reading location 0x8B0C77A3. |
Я сделал трейсинг в скрипте, но проблема в том, что падение происходит в произвольном месте. Т.е. нет определенной точки в коде, которая приводит к ошибке. Падение происходит не в потоке обрабатывающим таймер, а в главном потоке QUIK, который вызывает коллбэки. Т.е. что-то просто отваливается в самом QLUA.
Могу выслать сам код для того чтобы воспроизвести ошибку.
Фрагмент лога одного из падений (скрипт перед этим минут 20 нормально работал):
Код |
---|
main_timer:action_cb():1 main_timer:action_cb():2 recalcOrders():1 recalcOrders():2 recalcOrders():3 recalcOrders():4 recalcOrders():5 recalcOrders():6 recalcOrders():7 recalcOrders():8 recalcOrders():9 recalcOrders():10 recalcOrders():11 recalcOrders():12 recalcOrders():13 recalcOrders():14 recalcOrders():15 recalcOrders():16 recalcOrders():2 recalcOrders():3 recalcOrders():4 recalcOrders():5 recalcOrders():6 recalcOrders():7 recalcOrders():8 recalcOrders():9 recalcOrders():10 recalcOrders():11 recalcOrders():12 recalcOrders():13 recalcOrders():14 recalcOrders():15 recalcOrders():16 recalcOrders():2 recalcOrders():3 recalcOrders():4 recalcOrders():5 recalcOrders():6 recalcOrders():7 recalcOrders():8 recalcOrders():9 recalcOrders():10 recalcOrders():11 recalcOrders():12 recalcOrders():13 recalcOrders():14 recalcOrders():15 recalcOrders():16 recalcOrders():2 recalcOrders():3 recalcOrders():4 recalcOrders():5 recalcOrders():6 recalcOrders():7 recalcOrders():8 recalcOrders():9 recalcOrders():10 recalcOrders():11 recalcOrders():12 OnTransReply():begin OnTransReply():end recalcOrders():13 recalcOrders():14 recalcOrders():15 recalcOrders():16 recalcOrders():2 recalcOrders():3 recalcOrders():4 First-chance exception at 0x6D8AEEE2 (qlua.dll) in info.exe: 0xC0000005: Access violation reading location 0x8B0C77A3. recalcOrders():5 Unhandled exception at 0x6D8AEEE2 (qlua.dll) in info.exe: 0xC000041D: An unhandled exception was encountered during a user callback. The program '[852] info.exe' has exited with code 0 (0x0). |