elelel / qluacpp-tutorial

Tutorial for Qluacpp library (C++ interface for Quik trading terminal)
28 stars 13 forks source link

l2q_spread_bot #11

Closed QApplication closed 6 years ago

QApplication commented 6 years ago

Попробовал Ваш пример по спредовому боту. После запуска quik зависает, загрузка процесса на нуле. Бот выставляет сделки, однако, текущее состояние пользователь не может видеть.

one thwoo three

Вот что выдает дебагер

'info.exe' (Win32): Loaded 'C:\QUIK-Junior\lualib_l2q_spread_bot.dll'. Symbols loaded.
'info.exe' (Win32): Unloaded 'C:\QUIK-Junior\lualib_l2q_spread_bot.dll'
'info.exe' (Win32): Loaded 'C:\QUIK-Junior\lualib_l2q_spread_bot.dll'. Symbols loaded.
'info.exe' (Win32): Loaded 'C:\Windows\SysWOW64\vcruntime140d.dll'. Cannot find or open the PDB file.
'info.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ucrtbased.dll'. Cannot find or open the PDB file.
'info.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcp140d.dll'. Cannot find or open the PDB file.
'info.exe' (Win32): Unloaded 'C:\Windows\SysWOW64\ucrtbased.dll'
'info.exe' (Win32): Unloaded 'C:\Windows\SysWOW64\msvcp140d.dll'
'info.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ucrtbased.dll'. Cannot find or open the PDB file.
'info.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcp140d.dll'. Cannot find or open the PDB file.
The thread 0x48d8 has exited with code 0 (0x0).
The thread 0x39d4 has exited with code 0 (0x0).
The thread 0x1c68 has exited with code 0 (0x0).
The thread 0x2784 has exited with code 0 (0x0).

Может требуются спецефические настройки QUIK? Или проблема в чем-то другом?

elelel commented 6 years ago

Проблема в том, что часть функций QLua не может в действительности вызываться одновременно. Т.е. например функцию Clear если вызывать и main скрипта и любого callback-а скрипта, то, если вызов на main скрипта произойдет до того, как OnXXX закончится, info.exe повиснет в ожидании. В спредовом боте я делал синхронизацию тремя разными способами, думая, что проблема у меня. В итоге дело закончилось вот этой темой на форуме Arqa: https://forum.quik.ru/forum10/topic3225/ Думаю, что исправлять они это не будут, потому что у тех, кто пишет на Lua такой локинг случается раз в годы и они просто перезапустят терминал. В Qlua скриптах main скрипта обычно 99% ничего не делает и ждет во вставленном в цикле sleep.

Чтоб подвисания не было, пока единственный способ, который я вижу, либо убрать эту таблицу с интерфейсом, либо сделать синхронизацию через lock-free структуру, как в log_all_trades.

elelel commented 6 years ago

Упростил бота - 02712e52fbf32665d7f37a4c92525daf79c6fed7 Должно работать.