26 (2023-01-01 22:07:43 отредактировано Serge1234)

Re: Простой вопрос по сделке через QLua скрипт

Почему, к примеру, в OnTransReply(trans_reply) к элементу таблицы можно обращаться через точку:
trans_reply.trans_id
а в моём массиве
a1=1
m={ [a1]='111' }
надо использовать квадратные скобки:
m[a1]

Почему не получается обратиться как m.a1? Как можно это сделать?

27

Re: Простой вопрос по сделке через QLua скрипт

Serge1234 пишет:

Почему не получается обратиться как m.a1? Как можно это сделать?

Тут есть один маленький ньюанс
m.a1 это не m[a1]
m.a1 это m["a1"]

28 (2023-01-03 15:36:56 отредактировано Serge1234)

Re: Простой вопрос по сделке через QLua скрипт

Ясно, спасибо.
Возникли ещё вопросы:

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. Что из этой кучи проверок предпочесть?

29

Re: Простой вопрос по сделке через QLua скрипт

Serge1234 пишет:

2. Есть ли в Lua проверка на ошибки в именах переменных (чтобы все переменные были объявлены), напр., один раз я написал quantity, а другой раз quantyti? В Perl для этого есть директива use strict, а как в Lua?

Увы, в Lua такого нет.
Можно попробовать воспользоваться какими-нибудь статическими анализаторами для Lua, таковые есть.

Serge1234 пишет:

3. Как можно в OnOrder убедиться, что моя заявка полностью выполнена?

Использование order.flags % 4 == 0 будет отличным вариантом, думаю. Во всяком случае это будет точно признак "заявка исполнена".
Хотя, хорошо бы проверить какое будет состояние битов 0 и 1 поля flags для частично исполненной заявки, после чего снятой. Из справки сложно сделать однозначный вывод. Только постановка эксперимента (хотя бы на демо-контуре).

30

Re: Простой вопрос по сделке через QLua скрипт

Спасибо, а в каком коллбэке (видимо, что-то типа OnAccountBalance) и в каком параметре таблицы узнать после совершения сделки, сколько сейчас денег на счёте, чтобы скрипт знал, какой суммой для покупки акций располагает в данный момент?

31 (2023-01-18 21:50:53 отредактировано Serge1234)

Re: Простой вопрос по сделке через QLua скрипт

Кто скажет, зачем столько условий для проверки, что заявка выполнена (balance == 0, 2 мл. бита флагов == 0)? Чем эти условия отличаются? Может быть, когда balance == 0, но флаги говорят, что заявка ещё не выполнена, деньги от продажи акций ещё не вернулись на счёт? Меня интересует, как скрипту узнать, что эти деньги от продажи акции вернулись на счёт и их можно снова использовать для покупки?

32

Re: Простой вопрос по сделке через QLua скрипт

Определение "заявка выполнена" - оно не совсем точное, потому в зависимости от трактовки разные указанные вами признаки могут быть использованы или не могут.

В самом деле, что есть "заявка выполнена"? Варианты есть:
- заявка не активна (по флагам) - это означает или полностью снята, или частично исполнена, остаток снят, или полностью исполнена;
- balance == 0 - возникает только в случае "заявка полностью исполнена"; однако заявка может быть исполнена не полностью, после чего снята, тогда balance != 0, хотя по флагам "исполнена / не активна".

Так что в зависимости от того что вы понимаете под термином "заявка исполнена" зависит то, на какие признаки смотреть.
Более того, возможно следует смотреть на разные признаки, т.к. ситуации могут быть разные, в которых следует принимать разные решения.

33

Re: Простой вопрос по сделке через QLua скрипт

Serge1234 пишет:

деньги от продажи акций ещё не вернулись на счёт? Меня интересует, как скрипту узнать, что эти деньги от продажи акции вернулись на счёт и их можно снова использовать для покупки?

При исполнении заявки лимиты меняются не по изменению статуса заявки, а по сделке.
Сделки и заявки с точки зрения трансляции данных с биржи - не связанные сущности. Т.е. они, конечно, связаны логически, но запросто может возникнуть ситуация (да и постоянно она происходит), когда информацию об изменении статуса заявки уже пришла и флажки, например, на заявке уже изменились (и balance), но информация о сделке еще не пришла. Соответственно, лимиты еще не изменились. Лимиты изменятся только по приходу сделки.

Глазом это не видно, конечно, но в скрипте, в событиях скрипта - "видно".

34

Re: Простой вопрос по сделке через QLua скрипт

Спасибо. Подскажите, какой бесплатной программой можно визуализировать графики цен акций, которые сохраняет в файл Quik, напр., свечные графики с интервалом 1 мин.? Сам Quik, похоже, не показывает графики из файла.

35

Re: Простой вопрос по сделке через QLua скрипт

Для этого есть единственная и бесплатная программа QUIK.