Не гарантируется что отправленные транзакции будут обработаны в порядке отправки, а также не гарантируется что ответы о регистрации заявки придут последовательно.
Kolossi написал: Еще бы кто рассказал как это выгрузить не имея Экселя (у меня Квик на Mac)
есть простой способ. настройки-программа-буфер обмена-формальные поля. далее капируем всё из таблицы и вставляем куда угодно. хоть в блокнот. там в полях столбцов будут нужные поля
Спасибо большое за эту информацию, так гораздо проще получать имена столбцов!Столько лет пользуюсь терминалом и впервые узнал об этой возможности.
Станислав написал: Таблица текущих торгов MORN_SESS_ALLOWE и EV_SESS_ALLOWED это?
Кто-нибудь расскажите мне, убогому, где находится секретная документация включающая эти param_name. Раньше помню админ посылал на... QPile с этими вопросами. Но нет там этого.
Nikolay написал: Подход особо не изменился - найти максимальное числовое значение в таблице money_limit по полю limit_kind. Либо, если версия терминала выше 10.2.0, передавать не число, а строковое значение "Tx" - это такое тихое нововведние.
"Tx" это предлагает в соседней теме служба поддержки для их самописной функции, и хоть они в примере и передают этот параметр напрямую в getDepoEx, я бы так делать не стал, т.к. в справке limit_kind имеет тип number.
Цитата
Nikolay написал: В Junior транслируется в поле limit_kind дата в виде числа. Т.е. можно взять максимум.
Да, у себя так и сделал. Но еще нужно учесть что максимум необходимо вычислять каждый раз перед вызовом, т.к. если нет сделок, то максимумом будет являться сегодняшнее число, а после совершения сделки дата следующего торгового дня.
В скриптах используются всего 2 потока, один для колбэков и один в main.
В main для каждого скрипта создается отдельный поток, а вот колбэки находятся в некой очереди и вызываются синхронно, т.е. каждый колбэк ждет возвращения управления перед вызовом следующего.
Из-за этого имеем 2 особенности: 1. Нет нужды синхронизировать колбэки. 2. Надолго блокировать или производить тяжелые расчеты в колбэках не стоит, это приводит к подвисанию всех скриптов и даже терминала.
Ну вы конечно очень глубоко копнули, а человек спросил просто можно ли одним скриптом в окне "доступные скрипты" перевести второй скрипт из состояния "остановлен" в состояние "запущен".
Штатными средствами сделать этого нельзя. Понятно что имея возможность запускать любой код в подключаемых библиотеках можно сделать вообще все что угодно, однако это не будет хорошим решением.
Андрей написал: Последним параметром дату передавать что ли?
Ага, в виде 20250203. Но не просто дату, а дату следующего торгового дня (T+ T1), т.е. в пятницу нужно передавать дату на понедельник и не забыть учесть праздники если они есть.
SetUpdateCallback - как определить что начали приходить Не исторические данные., SetUpdateCallback - как определить что начали приходить Не исторические данные.
Anton Belonogov написал: Предлагаем воспользоваться следующими функциями - функции могут принимать на ввод в параметре limit_kind конкретную дату расчетов, либо значение "Tx".
А справку не нужно поправить? В ней limit_kind указан как NUMBER. Какой еще "Tx"? getBuySellInfoEx теперь тоже будет возвращать не пойми что? Тоже поправьте в справке.
А в целом кто так делает? По сути limit_kind это теперь новый параметр содержащий не вид лимита а дату, соответственно никакой обратной совместимости, это приведет к полной неработоспособности всех ранее написанных программ.
Acaw написал: не повлечет ли это за собой то, что терминал будет обновлять кучу копий
Не повлечет. Вы в своих функциях работаете всего лишь со ссылкой на первоначальный ds.
Цитата
Acaw написал: И еще вопрос - после выполнения функции ее локальные переменные "разинициализируются" (обнуляются в памяти)?
Память отведенная под переменные на которые больше нет ссылок со временем будет очищена сборщиком мусора.
Цитата
Acaw написал: Также есть вопрос по параметру Interval в функции CreateDataSource. Его типа по документации Number, т.е. числовой, при этом он передается через константы, например INTERVAL_H1.А как его передать через переменную?
Ну просто переменной присвойте значение константы. Для INTERVAL_H1 это вроде 60.
Увы, другой информации биржа не транслирует (на сколько мне известно). Как вариант, через api биржи и http запрос, можно получить график выплаты купонов в формате json. Но это уже совсем другая история..
"COMPLEXPRODUCT" "Сложный продукт" содержит код «8» – облигации со структурным доходом;
По названию ОФЗ можно сразу понять, к какому классу бумаг относится конкретный выпуск. Существуют четыре основные категории гособлигаций, которые можно различать по номерам. Расскажем, как это делать Что означают эти 5 цифр
Первые 2 цифры в номере ОФЗ указывают на класс облигации:
• ОФЗ-ПД (постоянный доход) — номера начинаются на 25 и 26 • ОФЗ-ПК (переменный купон) — номера начинаются на 24 и 29 • ОФЗ-ИН (индексируемый номинал) — номера начинаются на 52 • ОФЗ-АД (амортизируемый доход) — номера начинаются на 46
событие Заявка активна в OnOrder() при попытке отмены заявки., При отправке транзакции на отмену заявки. приходят два события, в OnOrder() . 1 заявка активна. 2 заявка снята.
Предположу, что есть какой-то флаг (возможно даже недоступный в lua), который изменяет свое состояние при попытке снять заявку и тем самым дергает коолл-бек.
Определение входящих остатков по инструментам на начало торговой сессии, Проблемы при определении входящих остатков по инструментам открытых позиций на начало торговой сессии
swerg очень верно описал ситуацию с классами. В depo_limits мы имеем остаток, который может торговаться на бирже в разных режимах торгов с разными классами (самый простой пример: полные и неполные лоты).
В ботах также возможно добавить кнопки (в том числе динамические) и управлять скриптом прямо из приложения. Однако, встает вопрос на сколько это все безопасно, как никак речь идет про деньги.
И еще интересно, какие уведомления вы используете в своих скриптах, например, сделки и так отображаются в приложении брокера и более информативны чем просто текст.
Vladimir spb написал: Я так понимаю, что стаканы, через подписки на них, мне не светят. Буду курить прямой запрос котировок по таймеру.
Без подписки не будет и данных в getQuoteLevel2().
Цитата
Когда стаканы приходят, повторить https://www.quantower.com DOM Surface (история стаканов) на Питоне не сложно. Правда я нигде не нашел, что они называют Imbalance ?
Такие графики строятся по таблице обезличенных сделок.
Subscribe_Level_II_Quotes работает нормально, ищите проблему у себя. onQuote передает только изменения стакана, возможно вы торгуете неликвид, где стаканы обновляются раз в час.
Все что расположено вне блоков выполняется первым и только один раз после запуска. getParamEx("QJSIM", "SPBE", "LAST").param_value может вернуть nil, если нет заказа данных с сервера этого параметра.
Для заказа данные должна быть открыта таблица ТТТ с данным инструментом и параметром или осуществлен заказ данных самим скриптом через:
Запрос не мгновенный, и серверу необходимо время что бы начать отправлять запрошенное значение, поэтому вызов getParamEx сразу после ParamRequest вернет все тот же nil. Хорошей практикой будет производить подписку в колбэке OnInit().
Горячих клавиш для вывода отдельных таблиц нет, поэтому надежное и простое решение не получится найти. Конечно есть разные программы для автоматизации и написания макросов (например, autoit) но все эти решения я не считаю надежными.
1. getParamEx никогда не возвращает nil, но вот 0 там может быть запросто 2. Скорее всего у вас цена запрашивается тоже через getParamEx и тоже может быть 0, кроме того до первой сделки по инструменту, после открытия торговой сессии она гарантировано 0. 3. Money/(Price * LOTSIZE) Вызовет ошибку при 0 значениях в делителе.
Пожалуйста добавьте возможность получения доходности облигаций в функцию getQuoteLevel2, в стаканах в самой программе она есть, но по видимому ее забыли добавить в getQuoteLevel2.
Все еще интереснее, если снять эту заявку, то в таблице не обновляется значение, а по другой бумаге значение устанавливается в "-1" Вот скриншот, активных заявок нет. Была снята стоп-заявка POLY, в результате имеем AGRO "-1"
После выставления стоп-заявки (тейк-профит) признак ее наличия (колонка стоп-заявки) в таблице "состояние счета" отображается для совсем другой бумаги, для бумаги для которой в реальности выставлен стоп - не отображается. После перезаказа данных локальных справочников и перезапуска терминала отображение корректное.
Функции обратного вызова вызываются по нескольку раз и это обычное поведение. Вызываются они не только после изменения свойств входящего параметра доступных внутри луа, но и свойств которые остаются "за кадром".
Не нужно вставлять задержки в main, организуйте очередь задач и обрабатывайте их последовательно, возвращаясь к незавершенным (требующим ожидания) задачам уже после.
Все так как и должно быть. Просто вы не учитываете, что процедура Subscribe_Level_II_Quotes выполняется асинхронно и требует значительного времени на выполнение.