Проблема происходит в lua скрипте, который реализует заявки по волатильности для опционов. Скрипт запускает в main() таймер, который срабатывает через 500ms и пересчитывает новые цены лимитных заявок опционов в соответствии с текущей ценой фьючерса. Если цена для опциона изменилась, то заявка передвигается - делается sendTransaction (["ACTION"] = "MOVE_ORDERS"). Коллбэк на таймер срабатывает в том же потоке, что и main().
Также скрипт подписан на коллбэк 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). |