CyberTrader пишет:C ошибками-то понятно. Вопрос именно по правильному с точки зрения Lua коду. Т.е., когда скрипт рабочий, но ведёт себя нестабильно время от времени.
У нас в основном потоке, работа идёт только в колбэках (если не считать первичной инициализации).
Ну библиотеке то до лампы что там в остальном lua коде, ей важно чтобы с её контролами нежно обращались. ) Если переменная с корректным значением приготовлена, и во время отправки на контрол не дергается из соседнего потока (main), особенно при отправке таблиц, то всё всегда гладко. Если код валится не в этих случаях, наверное стоит проверить lua код в отрыве от vcl, например закрыть все выводы в библиотеку, открыть взамен в message или дебагер и там ловить...
Насчет трех колбеков, тоже столкнулся с этой хренью, делаю так:
1. отправляю транзакцию, сразу получаю ответ в переменную
res = sendTransaction(transact)
res парсю на наличие серверного номера заявки
2. тут же добавляю серверный номер заявки в массив (таблицу) ордеров
3. В onTrade() из каждого колбэка достаю номер ордера и проверяю его наличие в своём массиве ордеров, если есть, и пришел флаг "исполнено", исключаю эту запись из массива. Таким образом остальные повторы фильтруются.
Если ордер лимитированный и будет исполняться несколькими колбэками, можно чуть усложнить учет - проверять неповторяемость номеров сделок и суммировать лоты до суммы в заявке.
У меня так. Ну, гемор конечно, но что ж делать...