Можно ли использовать поля type="M" и price="0" в таблице, которая передаётся в функцию sendTransaction для купли/продажи фьючерсов по рыночной цене? Или надо использовать лимитную заявки (type="L") со специально завышенной ценой для покупки и специально заниженной ценой для продажи?
Пользователь
Сообщений: Регистрация: 20.03.2023
28.08.2025 19:59:39
Я использую type="M" и завышенную цену одновременно
Пользователь
Сообщений: Регистрация: 30.10.2024
28.08.2025 20:05:31
Цитата
funduk написал: Я использую type="M" и завышенную цену одновременно
А может быть можно не париться с завышенной/заниженной ценой? А то ведь не всякую цену можно указать, она должна быть в диапазоне минимуму до максимума, заданных биржей на текущий день.
Пользователь
Сообщений: Регистрация: 20.03.2023
29.08.2025 00:11:12
0 для срочки для рыночной сделки нельзя ставить, на сколько я помню.
Пользователь
Сообщений: Регистрация: 30.10.2024
29.08.2025 02:07:51
Цитата
funduk написал: 0 для срочки для рыночной сделки нельзя ставить, на сколько я помню.
А разве квику не должно быть пофиг на выставленную цену, если выставлен type="M"?
Пользователь
Сообщений: Регистрация: 27.01.2017
29.08.2025 08:24:13
На срочной секции нет рыночных ордеров. Можно только устанавливать ордера внутри ценовых границы последнего клиринга. Причина проста - сумма ГО зависит от цены. Поэтому устанавливая ордер далеко от цены клиринга, ГО возрастает и существенно.
Пользователь
Сообщений: Регистрация: 20.03.2023
29.08.2025 08:44:39
Цитата
Сергей Че написал: А то ведь не всякую цену можно указать, она должна быть в диапазоне минимуму до максимума, заданных биржей на текущий день.
Да, надо брать параметры PICEMAX / PRICEMIN.
Пользователь
Сообщений: Регистрация: 30.10.2024
29.08.2025 14:01:11
Цитата
Nikolay написал: На срочной секции нет рыночных ордеров. Можно только устанавливать ордера внутри ценовых границы последнего клиринга. Причина проста - сумма ГО зависит от цены. Поэтому устанавливая ордер далеко от цены клиринга, ГО возрастает и существенно.
И какую цену ставить? Текущая + сколько? (для покупки) Может быть, текущая + (текущая + максимум)/2 ?
Пользователь
Сообщений: Регистрация: 27.01.2017
29.08.2025 14:05:46
Цитата
Сергей Че написал: И какую цену ставить? Текущая + сколько? (для покупки) Может быть, текущая + (текущая + максимум)/2 ?
Это Вам решать, понимая, что чем дальше цена, тем больше ГО. ГО по факту будет по цене исполнения, но брокер проверит наличие средств именно по цене ордера. Ну и учитывая ликивдность инструмента, для кого-то отступ 100 шагов - достаточно, а для другого 500 и более.
Пользователь
Сообщений: Регистрация: 30.10.2024
29.08.2025 14:05:59
Ой, я немного ошибся. Я хотел предложить (текущая + максимум) / 2 для покупки (текущая + минимум) / 2 для продажи Подойдёт такой вариант?
Пользователь
Сообщений: Регистрация: 27.01.2017
30.08.2025 10:37:32
В большинстве случаев этого, будет достаточно. Но не забывайте про ситуации, когда торги идут у границ.
написал: На срочной секции нет рыночных ордеров. Можно только устанавливать ордера внутри ценовых границы последнего клиринга. Причина проста - сумма ГО зависит от цены. Поэтому устанавливая ордер далеко от цены клиринга, ГО возрастает и существенно.
И какую цену ставить? Текущая + сколько? (для покупки) Может быть, текущая + (текущая + максимум)/2 ?
написал: На срочной секции нет рыночных ордеров. Можно только устанавливать ордера внутри ценовых границы последнего клиринга. Причина проста - сумма ГО зависит от цены. Поэтому устанавливая ордер далеко от цены клиринга, ГО возрастает и существенно.
И какую цену ставить? Текущая + сколько? (для покупки) Может быть, текущая + (текущая + максимум)/2 ?
Лучшая цена предложения/ спроса.
То есть ты предлагаешь перед подачей заявки сканировать стакан?
написал: На срочной секции нет рыночных ордеров. Можно только устанавливать ордера внутри ценовых границы последнего клиринга. Причина проста - сумма ГО зависит от цены. Поэтому устанавливая ордер далеко от цены клиринга, ГО возрастает и существенно.
И какую цену ставить? Текущая + сколько? (для покупки) Может быть, текущая + (текущая + максимум)/2 ?
Лучшая цена предложения/ спроса.
То есть ты предлагаешь перед подачей заявки сканировать стакан?
Можно читать из ТТП. Можно читать стакан. Затраты времени не большие. При этом еще анализирую спред и глубину рынка. Если глубина рынка устраивает, то можно ставить цену на весь нужный объем.
Пользователь
Сообщений: Регистрация: 30.01.2015
02.09.2025 10:05:46
Если делаете цену как предлагают выше, то ваша заявка будет всегда активной. если ставить перед лучшей ценой при наличии спреда, то будет пассивной (ком. биржи==0)
Пользователь
Сообщений: Регистрация: 27.01.2017
02.09.2025 10:31:04
Вы определитесь уже - хотите исполнения ордера, сдвигаете цену и платите комиссию. Хотите экономить - читаете лучшие цены (для этого не надо сканировать стакан) и ставите в спред, ожидая исполнения. Если цена убегает, то придется реализовать алгоритм, чтобы догнать цену или отменить вход. Также можно реализовать порционное исполнение. Либо, действительно читаете стакан и понимаете на сколько пройдет цена при исполнении вашего ордера, оцениваете результат и принимает решение. На некоторых инструментах только так и можно войти.
Алгоритмическая торговля - это именно про это: алгоритм входа. Никто кроме Вас не знает какая ваша цель, какой объем и т.д. Алгоритм входа для 1-ого контракта существенно отличается от такового для 1000 контрактов, даже для 100 на многих инструментах.
Это и было сказано: рыночная заявка - это просто смещенная от текущей цены к границам текущего клиринга. Что не сказано в документации - изменение ГО при удалении от цены последнего клиринга. Чем дальше - тем больше. Что приводит к неявному ответу от брокера о нехватке средств у любителей торговать на грани обеспечения. Нажимают кнопку в стакане "купить по рынку" - ответ: не хватает средств для покупки по цене (граница). Вводишь руками цену, скажет на 100 пунктов от текущей - и магически уже денег хватает. Как же так - ошибка терминала, явно. Поэтому на срочном рынке нет заявок по рынку - есть ордера по указанной цене, и брокер проверит наличие средств именно для указанной цены, т.к. есть ненулевой шанс, что когда заявка дойдет до биржи, именно по этой цене она и исполнится.
Пользователь
Сообщений: Регистрация: 30.10.2024
05.09.2025 12:22:27
Цитата
Nikolay написал: Вы определитесь уже - хотите исполнения ордера, сдвигаете цену и платите комиссию.
Я определился уже - мне нужна активная покупка, а не пассивное ожидание. Я разрабатываю торговый робот. Поэтому мне надо именно купить/продать, а не ждать у моря погоды. Допустим, мои индикаторы сигналят, что будет рост, а я выставляю цену в спред, в надежде, что цена до неё дойдёт и тогда я куплю без комиссии. Так можно профукать вход в позицию.
Пользователь
Сообщений: Регистрация: 30.10.2024
14.01.2026 13:00:11
Если в заявке указать цену меньше PRICE_MIN (или больше PRICE_MAX), она всё равно приведётся к PRICE_MIN (PRICE_MAX)? Или заявка просто будет отклонена?
Пользователь
Сообщений: Регистрация: 20.03.2023
14.01.2026 13:45:16
Цитата
Сергей Че написал: Если в заявке указать цену меньше PRICE_MIN (или больше PRICE_MAX), она всё равно приведётся к PRICE_MIN (PRICE_MAX)? Или заявка просто будет отклонена?
Будет отклонена.
Надо ставить ту цену, по которой вы готовы купить. Ожидая роста, неплохо бы еще прикинуть, на сколько оно может вырасти. И учесть комиссии. А ставя PRICE_MAX, есть ненулевой шанс по этой цене и купить. Что может оказаться сильно завышено.
написал: Если в заявке указать цену меньше PRICE_MIN (или больше PRICE_MAX), она всё равно приведётся к PRICE_MIN (PRICE_MAX)? Или заявка просто будет отклонена?
Будет отклонена.
Надо ставить ту цену, по которой вы готовы купить. Ожидая роста, неплохо бы еще прикинуть, на сколько оно может вырасти. И учесть комиссии. А ставя PRICE_MAX, есть ненулевой шанс по этой цене и купить. Что может оказаться сильно завышено.
Выставляя цену, равную PRICE_MAX, я куплю по PRICE_MAX только в одном случае - если в стакане есть только 1 продавец, который выставил заявку в районе PRICE_MAX. На ликвидном инструменте это просто невозможно.
Пользователь
Сообщений: Регистрация: 20.03.2023
14.01.2026 14:31:52
Несколько таких же роботописателей уверенных что "на ликвидном инструменте это просто невозможно" выгребут весь стакан...
Пользователь
Сообщений: Регистрация: 30.10.2024
14.01.2026 14:45:05
Цитата
paluke написал: Несколько таких же роботописателей уверенных что "на ликвидном инструменте это просто невозможно" выгребут весь стакан...
1) Чтобы выгрести весь стакан, надо скупить всё. В этом случае средняя цена покупки будет меньше PRICE_MAX. 2) Не понимаю, зачем на срочном рынке покупать 100 фьючерсом? Чтобы что? Чтобы торговать с 100-м плечом? Малейшее колебание цены не в твоём направлении, и ты обнуляешься.
написал: Если в заявке указать цену меньше PRICE_MIN (или больше PRICE_MAX), она всё равно приведётся к PRICE_MIN (PRICE_MAX)? Или заявка просто будет отклонена?
Будет отклонена.
Надо ставить ту цену, по которой вы готовы купить. Ожидая роста, неплохо бы еще прикинуть, на сколько оно может вырасти. И учесть комиссии. А ставя PRICE_MAX, есть ненулевой шанс по этой цене и купить. Что может оказаться сильно завышено.
Выставляя цену, равную PRICE_MAX, я куплю по PRICE_MAX только в одном случае - если в стакане есть только 1 продавец, который выставил заявку в районе PRICE_MAX. На ликвидном инструменте это просто невозможно.
Выставляйте цену для покупки по лучшей цене предложений либо больше , чем она на несколько шагов цены. Еще можно делать так. Найти в стакане максимальный объем и выставить по его цене. тогда точно купите .
написал: Если в заявке указать цену меньше PRICE_MIN (или больше PRICE_MAX), она всё равно приведётся к PRICE_MIN (PRICE_MAX)? Или заявка просто будет отклонена?
Будет отклонена.
Надо ставить ту цену, по которой вы готовы купить. Ожидая роста, неплохо бы еще прикинуть, на сколько оно может вырасти. И учесть комиссии. А ставя PRICE_MAX, есть ненулевой шанс по этой цене и купить. Что может оказаться сильно завышено.
Выставляя цену, равную PRICE_MAX, я куплю по PRICE_MAX только в одном случае - если в стакане есть только 1 продавец, который выставил заявку в районе PRICE_MAX. На ликвидном инструменте это просто невозможно.
Выставляйте цену для покупки по лучшей цене предложений либо больше , чем она на несколько шагов цены. Еще можно делать так. Найти в стакане максимальный объем и выставить по его цене. тогда точно купите .
А если максимальный объём близко к границе (PRICE_MIN/PRICE_MAX)?
Пользователь
Сообщений: Регистрация: 27.01.2017
14.01.2026 15:46:33
Цитата
Сергей Че написал: 1) Чтобы выгрести весь стакан, надо скупить всё. В этом случае средняя цена покупки будет меньше PRICE_MAX. 2) Не понимаю, зачем на срочном рынке покупать 100 фьючерсом? Чтобы что? Чтобы торговать с 100-м плечом? Малейшее колебание цены не в твоём направлении, и ты обнуляешься.
Если алгоритм не учитывает наличие планок (да и просто сумму стакана), то это опасно. У нас планка - почти нормальная ситуация. 100 - контрактов - это не такой и большой объем. Отношение ГО к объему контракта не имеет никакого отношения к числу контрактов. Для кого-то 10 контрактов - это весь депозит, а кому-то 100 - всего 10%.
Пользователь
Сообщений: Регистрация: 30.10.2024
14.01.2026 16:03:30
Цитата
Nikolay написал: Если алгоритм не учитывает наличие планок (да и просто сумму стакана), то это опасно. У нас планка - почти нормальная ситуация. 100 - контрактов - это не такой и большой объем. Отношение ГО к объему контракта не имеет никакого отношения к числу контрактов. Для кого-то 10 контрактов - это весь депозит, а кому-то 100 - всего 10%.
Я не это. 100-е плечо означает, что движение цены на 1% не в твоём направлении - это уменьшение вар.маржи на 100%.
Пользователь
Сообщений: Регистрация: 30.10.2024
14.01.2026 16:55:39
Если я ставлю стоп-ордер на закрытие позиции, то я не могу знать, когда именно он исполнится: может через минуту, а может через месяц. Поэтому я не знаю, какой будет диапазон [ PRICE_MIN, PRICE_MAX ], когда цена достигнёт уровня срабатывания стопа. Если бы знал, то сразу бы выставил известный заранее PRICE_MIN при закрытии лонга (или известный заранее PRICE_MAX при закрытии шорта). Дело в том, что на срочном рынке нельзя выставить type="M" + price="0", как документация советует для фондового рынка. А раз так, то приходится в стоп-заявке писать, что цена срабатывания Х, а цена исполнения Х ± 100 шагов (в зависимости от того, что закрываю, шорт или лонг). И тут вопрос, а не выйдет ли Х ± 100 шагов за пределы диапазона[ PRICE_MIN, PRICE_MAX ] ?
Пользователь
Сообщений: Регистрация: 22.02.2023
14.01.2026 18:02:27
Цитата
Сергей Че написал: Если я ставлю стоп-ордер на закрытие позиции
Если нужен стоп-ордер, почему бы не выставить именно стоп, а не закрывать позицию лимитной? У меня в "автостопе" сделано так:
написал: Если я ставлю стоп-ордер на закрытие позиции
Если нужен стоп-ордер, почему бы не выставить именно стоп, а не закрывать позицию лимитной?
Точно. Я перепутал лимитную заявку со стоп-заявкой. Но проблема та же всё равно. Есть STOPPRICE - цена, по которой сработает стоп-ордер, а есть PRICE - цена, по которой выставится лимитная заявка. И тут надо вручную делать отступ (вверх/вниз) всё равно. Нельзя задать стоп-ордеру "короче, сам закройся по рынку, когда цена достигнет уровня"
Пользователь
Сообщений: Регистрация: 22.02.2023
14.01.2026 18:29:31
Цитата
Сергей Че написал: Нельзя задать стоп-ордеру "короче, сам закройся по рынку, когда цена достигнет уровня"
MARKET_STOP_LIMIT = "YES", и брокер отправит на биржу рыночную заявку? Тогда зачем ты указываешь цену, по которой выставится лимитная заявка (PRICE)?
Пользователь
Сообщений: Регистрация: 30.01.2015
14.01.2026 19:07:07
Цитата
Сергей Че написал: Если я ставлю стоп-ордер на закрытие позиции, то я не могу знать, когда именно он исполнится: может через минуту, а может через месяц. Поэтому я не знаю, какой будет диапазон [ PRICE_MIN, PRICE_MAX ] , когда цена достигнёт уровня срабатывания стопа. Если бы знал, то сразу бы выставил известный заранее PRICE_MIN при закрытии лонга (или известный заранее PRICE_MAX при закрытии шорта). Дело в том, что на срочном рынке нельзя выставить type="M" + price="0" , как документация советует для фондового рынка . А раз так, то приходится в стоп-заявке писать, что цена срабатывания Х , а цена исполнения Х ± 100 шагов (в зависимости от того, что закрываю, шорт или лонг). И тут вопрос, а не выйдет ли Х ± 100 шагов за пределы диапазона [ PRICE_MIN, PRICE_MAX ] ?
Если речь про стоп-ордер, то я делал так. ставлю цену, сместив ее относительно стоп например на 5 шагов. Когда стоп сработает, то лимитная заявка либо сработает, либо останется активной. Если она осталась активной, то на следующем тике робот ее переставляет на лучшую цену и так делает, пока вся позиция не закроется.
написал: Если я ставлю стоп-ордер на закрытие позиции, то я не могу знать, когда именно он исполнится: может через минуту, а может через месяц. Поэтому я не знаю, какой будет диапазон [ PRICE_MIN, PRICE_MAX ] , когда цена достигнёт уровня срабатывания стопа. Если бы знал, то сразу бы выставил известный заранее PRICE_MIN при закрытии лонга (или известный заранее PRICE_MAX при закрытии шорта). Дело в том, что на срочном рынке нельзя выставить type="M" + price="0" , как документация советует для фондового рынка . А раз так, то приходится в стоп-заявке писать, что цена срабатывания Х , а цена исполнения Х ± 100 шагов (в зависимости от того, что закрываю, шорт или лонг). И тут вопрос, а не выйдет ли Х ± 100 шагов за пределы диапазона [ PRICE_MIN, PRICE_MAX ] ?
Если речь про стоп-ордер, то я делал так. ставлю цену, сместив ее относительно стоп например на 5 шагов. Когда стоп сработает, то лимитная заявка либо сработает, либо останется активной. Если она осталась активной, то на следующем тике робот ее переставляет на лучшую цену и так делает, пока вся позиция не закроется.
Хмм, хитрО, умнО! Спасибо за подсказку.
Пользователь
Сообщений: Регистрация: 22.02.2023
14.01.2026 19:31:28
Цитата
Сергей Че написал: огда зачем ты указываешь цену, по которой выставится лимитная заявка (PRICE)?
Скрипт может выставлять стоп закрывающий по рынку, или с заданным отступом.
Поэтому PRICE либо указывается, либо ноль, а таблица для sendTransaction одна, универсальная, и для срочного и для фондового рынка.
Всё пройдет. Но это не точно.
Пользователь
Сообщений: Регистрация: 30.10.2024
14.01.2026 19:32:08
Цитата
nikolz написал: Если речь про стоп-ордер, то я делал так. ставлю цену, сместив ее относительно стоп например на 5 шагов. Когда стоп сработает, то лимитная заявка либо сработает, либо останется активной. Если она осталась активной, то на следующем тике робот ее переставляет на лучшую цену и так делает, пока вся позиция не закроется.
То есть, насколько я правильно понял, ты в коллбеке OnStopOrder(stop) читаешь поле stop.linkedorder (номер заявки, зарегистрированной по наступлению условия стоп-цены) и по номеру ищешь заявку в таблице orders, и у найденной зяавки проверяешь битовые флаги. И если она активна, то снимаешь её, и ставишь новый стоп-ордер на новую цену?
написал: Если речь про стоп-ордер, то я делал так. ставлю цену, сместив ее относительно стоп например на 5 шагов. Когда стоп сработает, то лимитная заявка либо сработает, либо останется активной. Если она осталась активной, то на следующем тике робот ее переставляет на лучшую цену и так делает, пока вся позиция не закроется.
То есть, насколько я правильно понял, ты в коллбеке OnStopOrder(stop) читаешь поле stop.linkedorder (номер заявки, зарегистрированной по наступлению условия стоп-цены) и по номеру ищешь заявку в таблице orders , и у найденной зяавки проверяешь битовые флаги. И если она активна, то снимаешь её, и ставишь новый стоп-ордер на новую цену?
Почти так. Но заявку linkedorder ловим в OnOrder, так как она там будет до таблицы.
Пользователь
Сообщений: Регистрация: 30.10.2024
14.01.2026 19:39:33
Цитата
nikolz написал: Но заявку linkedorder ловим в OnOrder, так как она там будет до таблицы.
А как тогда ты тогда определишь, что это не просто лимитная заявка, а лимитная заявка, созданная при активации стопа? По полю trans_id, который мы запоминаем при создании стопа?
написал: Но заявку linkedorder ловим в OnOrder, так как она там будет до таблицы.
А как тогда ты тогда определишь, что это не просто лимитная заявка, а лимитная заявка, созданная при активации стопа? По полю trans_id , который мы запоминаем при создании стопа?
order.linkedorder содержит order_num стоп-ордера, а узнать его заранее не получится (надо копаться в таблице stop_orders) Конечно, если стоп-ордер всегда один, то и сверять его ни с чем не надо, можно просто проверять, что поле order.linkedorder не пустое.
Пользователь
Сообщений: Регистрация: 30.10.2024
14.01.2026 22:20:34
Цитата
nikolz написал: Если речь про стоп-ордер, то я делал так. ставлю цену, сместив ее относительно стоп например на 5 шагов. Когда стоп сработает, то лимитная заявка либо сработает, либо останется активной. Если она осталась активной, то на следующем тике робот ее переставляет на лучшую цену и так делает, пока вся позиция не закроется.
И ещё вдогонку пару вопросов. 1) что если заявка исполнена частично - часть фьючерсов продал, а часть нет. И завяка осталась активной. 2) что если стоп НЕ исполнился (и лимитная заявка не создана), потому что цена минус 5 шагов оказалось мало, потому что цена сильно уехала вниз?