Извечный вопрос: повторные вызовы OnTrade, Даже при заявке на одну акцию
Пользователь
Сообщений: Регистрация: 26.11.2025
06.01.2026 22:52:46
Создаю заявку из lua-скрипта на покупку ровно одной акции. Т.е. никаких финтов с частичным исполнением не может быть. При исполнении происходят два вызова функции OnTrade. Сделал полную распечатку всей таблицы от обоих вызовов. Отличие только в трёх полях: uid, on_behalf_of_uid, trans_id. При первом вызове все три нулевые, при втором все три - ненулевые.
Вопросы следующие: 1. Гарантируется ли, что вызов OnTrade, в котором эти поля нулевые, является не последним, т.е. я могу его игнорировать, т.к. после него будет следующий? 2. Гарантируется ли, что вызов, в котором эти поля ненулевые, является последним? 3. Являются ли эти три поля синхронными всегда? (Т.е. либо все три равны 0, либо все три не равны 0?) Т.е. можно ли проверять только одно из них, а не все три вместе?
в таблице текущих торгов некоторые цены нулевые
Пользователь
Сообщений: Регистрация: 26.11.2025
28.12.2025 15:32:14
На скриншоте текущее состояние моей таблицы текущих торгов. Видно, что по акциям T, TUCH, X5 что-то странное, как будто торги не идут. Но функция getParamEx возвращает правильную цену, и в приложении сбер инвестиций тоже всё ок. Т.е. это ошибка в таблице квик. В чём может быть причина?
Я эту акцию добавлял сам, при изначальной установке квика её по умолчанию почему-то не было.
OnTrade отображает неверное количество акций, Изменения в состоянии счёта отображаются не мгновенно
Пользователь
Сообщений: Регистрация: 26.11.2025
27.12.2025 00:36:40
Предположим была заявка на покупку акции. В момент исполнения заявки вызывается OnTrade. Если из этой функции OnTrade напечатать текущий размер позиции с помощью getDepoEx, только что исполненная заявка там не будет учтена, т.е. напечатается неверное количество (которое было до исполнения заявки). Почему так происходит и как это исправить? Спустя несколько миллисекунд количество становится правильным, уже в следующих функциях. Но мне нужно в функции OnTrade использовать текущее количество акций. Как я могу его надёжно получить?
Разрыв соединения quik по ночам, Приходится каждое утро переподключаться
Пользователь
Сообщений: Регистрация: 26.11.2025
18.12.2025 12:48:01
Здравствуйте. Пользуюсь системой quik версии 12.6.0.53 через брокера сбербанк. Каждую ночь ровно в 3 часа ночи происходит автоматический разрыв соединения, и в течение ночи подключение невозможно. Утром подключение становится возможным, но не автоматически, т.е. приходится вручную вводить пароль. В техподдержке сбера сказали, что да, они на ночь отключаются из-за тех. работ, никаких способов устранить это нет. Но проблема в том, что невозможно ставить скрипт на автоматическую работу по расписанию с утра, т.к. всё равно пока я сам не проснулся и не подключился, ничего работать не будет. В той же техподдержке сказали, что и это исправить нельзя, т.е. да, надо каждый день переподключаться заново, все, кто пользуется квиком, так делают. Соответственно все, кто хотят торговать в утреннюю сессию, исправно просыпаются в 7 утра.
Хотелось бы уточнить, насколько это правда.
Функции обратного вызова не вызываются одновременно?, Т.е. отследить изнутри OnTrade выполнение другого OnOrder невозможно?
Пользователь
Сообщений: Регистрация: 26.11.2025
14.12.2025 19:48:43
Допустим у меня есть заявка. Я хочу сразу, как только она сработает, прямо из функции OnTrade создать новую заявку. Чтобы убедиться, что заявка принята успешно, я дожидаюсь выполнения функции OnOrder, которая должна присвоить значение глобальной переменной. Т.е. схематично код выглядит так:
OnTrade(trd) somevariable = false ord = .... sendTransaction(ord) repeat sleep(100) until somevariable=true
OnOrder(ord) somevarialbe = true
Этот код не работает, т.к. функция OnTrade виснет в ожидании OnOrder, а OnOrder не вызывается, пока не завершится OnTrade (проверял, если в OnTrade поставить return после нескольких итераций цикла, OnOrder сразу вызывается)
Т.е. отследить изнутри OnTrade успешное выполнение новой заявки невозможно?
Поле trans_id для закрытия заявки: в чём смысл?, Есть ли примеры, где оно может быть использовано?
Пользователь
Сообщений: Регистрация: 26.11.2025
13.12.2025 23:58:46
Предположим я создал заявку, присвоив ей trans_id=1. При создании срабатывает OnOrder(ord), где ord.trans_id=1, ord.order_num = номер новой заявки. Теперь я хочу отменить эту заявку. Для этого я создаю новую транзакцию, в которой пишу trans_id=2, action = kill_order. Но при срабатывании OnOrder(ord) я опять вижу, что ord.trans_id=1, ord.order_num = номер удаляемой заявки. Т.е. новая транзакция, у которой trans_id=2, не вернулась в OnOrder, и даже не отобразилась в общем списке заявок. Это в целом понятно и логично, но непонятно, для чего тогда указывать trans_id=2? Т.е. если я не заполню поле trans_id=2, будет ошибка, но по факту это значение 2 дальше нигде не будет использовано. Или есть какие-то случаи, когда оно может пригодиться?
Не получается запустить два скрипта одновременно, При запуске второго первый останавливается
Пользователь
Сообщений: Регистрация: 26.11.2025
08.12.2025 14:33:06
Есть скрипт, который включен на постоянную работу, мониторит цены некоторых акций. Хочу не прекращая его, запустить второй учебный скрипт. При запуске второго примерно через 10 секунд первый останавливается. Так и должно быть?
getBuySellInfo в QuikPy, Правильно ли я понимаю, что эта функция не реализована?
Пользователь
Сообщений: Регистрация: 26.11.2025
26.11.2025 01:44:45
В модуле QukPy нет функции getBuySellInfoEx. Есть закомментированная строка с этой функцией, т.е. я как понял, в планах на реализацию. Попробовал сделать вот так: