Ясно, спасибо.
Возникли ещё вопросы:
1. Если функция main и коллбэки вызывают одну и ту же функцию, то она должна быть потокобезопасная (раньше их называли реентерабельными). Я правильно понимаю, что если в такой функции все переменные, в которые она пишет, объявить как local, то они будут размещены в её стеке и она будет потокобесопасной?
В Perl можно написать for my $i=..., тогда $i будет локализована в теле этого цикла, а в Lua почему-то не сделали, чтобы можно было написать for local i=1... Где в этом случае будет локализована переменная i, если она не будет объявлена? Надо ли в потокобезопасных функциях обязательно писать
local i
for i=... ?
2. Есть ли в Lua проверка на ошибки в именах переменных (чтобы все переменные были оъявлены), напр., один раз я написал quantity, а другой раз quantyti? В Perl для этого есть директива use strict, а как в Lua?
3. Как можно в OnOrder убедиться, что моя заявка полностью выполнена? Там есть поле balance. Вроде бы, когда оно равно нулю (а поле qty тогда вроде бы должно быть равно заданному количеству лотов в заявке), заявка полностью выполнена. Но на каком-то форуме я видел старое сообщение от swerg, что поле balance иногда может иметь значение nil. Это правда? Я в описании OnOrder такого не видел... И ещё можно вроде бы в этом убедиться, если выполняется order.flags % 4 == 0. Что из этой кучи проверок предпочесть?