Обычно выставление стоп-лосса затачивается на то какой объем был куплен или продан. Продали 100 контрактов = 1 стоп на 100 контрактов Учитывая то что продажа 100 контрактов может происходить частями по 45 по 5 и по 50 контрактов, то соответственно можно и стопы также выставить по 45 по 5 и по 50. И здесь при закрытии позиции начинаются сложности - закрытие также может произойти частями по 30, по 20 и по 50. И сложно пересчитать каждый из ордеров.
Другое дело если каждый ордер это 1 контракт. Продалось 30 контрактов - сняли 30 стопов. Продалось еще 20 - сняли 20 и т.д. Насколько вообще в принципе жизнеспособна идея купив к примеру 100 контрактов выставить не 1 стоп, а 100 стопов по 1 контракту.
При торговле на 10 контрактов по инструменту допускаю что все это допустимо 10 продано = 10 ордеров. А вот когда число контрактов 100, 500?
Иван написал: Обычно выставление стоп-лосса затачивается на то какой объем был куплен или продан. Продали 100 контрактов = 1 стоп на 100 контрактов Учитывая то что продажа 100 контрактов может происходить частями по 45 по 5 и по 50 контрактов, то соответственно можно и стопы также выставить по 45 по 5 и по 50. И здесь при закрытии позиции начинаются сложности - закрытие также может произойти частями по 30, по 20 и по 50. И сложно пересчитать каждый из ордеров.
Другое дело если каждый ордер это 1 контракт. Продалось 30 контрактов - сняли 30 стопов. Продалось еще 20 - сняли 20 и т.д. Насколько вообще в принципе жизнеспособна идея купив к примеру 100 контрактов выставить не 1 стоп, а 100 стопов по 1 контракту.
При торговле на 10 контрактов по инструменту допускаю что все это допустимо 10 продано = 10 ордеров. А вот когда число контрактов 100, 500?
теоретически можно сколько душе угодно. практически - трудно придумать смысл этому. ---------------- Надо учитывать следующее: ----------------- стопы хранятся в очереди стопов на сервере брокера и отсылаются им на биржу, если условие true ------------------ ордер находится на бирже ----------------- Если вы хотите выставить ордер на продажу на 100, а стопы выставлять по мере исполнения ордера, то надо делать HFT робот и ставить максимально близко к бирже. --------------- на квике - как на велосипеде обгонять самолет. Упаритесь.
Не совсем понял при чем здесь HFT роботы (высокочастотники как понимаю)?
Сейчас у меня стоп выставляется через функцию OnTrade(). Прошла сделка объемом 7 = выставился стоп объемом 7.
Сложность начинается тогда, когда мне нужно сделать закрытие частями. К примеру хочу закрыть 30% сделки - это будет 3 контракта.
Соответственно сделка прошла и OnTrade() вижу что мне нужно изменить стоп на 7 контрактов. И здесь начинаются сложности - удали стоп 7, выставь стоп 4. Это хорошо сработает если исполнится 3 контракта сразу. А если они исполнятся по 1, 1 и 1. Т.е. мне нужно удалить стоп 7, выставить стоп 6. Удалить стоп 6 (которого возможно еще нет в живых), поставить стоп 5, удалить стоп 5 (которого также еще нет), поставь стоп 4. Сложность в этом.
Иван написал: Это хорошо сработает если исполнится 3 контракта сразу. А если они исполнятся по 1, 1 и 1. Т.е. мне нужно удалить стоп 7, выставить стоп 6. Удалить стоп 6 (которого возможно еще нет в живых), поставить стоп 5, удалить стоп 5 (которого также еще нет), поставь стоп 4. Сложность в этом.
Суть проблемы описал выше. У меня стоп выставляется сейчас когда срабатывает событие OnTrade().
Купили 30 лотов. Сработало в OnTrade() 10 лотов - выставиться стоп 10 лотов. Сработало в OnTrade() 20 лотов - выставиться стоп 20 лотов. Итого 2 стопа на 30 лотов.
А вот как быть когда начинаем закрытие частями этих 30 лотов. Как объем стопов пересчитать? Если бы у меня стояло не 2 стопа, а 30 стопов по 1 лоту каждый, то здесь также можно сделать через OnTrade(). Закрыли 15 лотов (50% позиции), убрали 15 стопов.
Иван написал: А вот как быть когда начинаем закрытие частями этих 30 лотов.
Закрываем то не по стопу, а по тейку? Есть поза 30 лотов и есть уже 2е стоп-заявки 10 и 20 лот. Закрыли по тейку 7 лотов - поза = 23, стопов пока что 30, снимаем скажем стоп 10 лот и вместо него ставим стоп на 3 лота. OnTrade() - давно уже не пользуюсь. 7 лотов прошли - отследили по Таблице сделок. Бот видит что поза стала 23 - пересчитали объем стоп-заявок.
Иван написал: А вот как быть когда начинаем закрытие частями этих 30 лотов.
Закрываем то не по стопу, а по тейку? Есть поза 30 лотов и есть уже 2е стоп-заявки 10 и 20 лот. Закрыли по тейку 7 лотов - поза = 23, стопов пока что 30, снимаем скажем стоп 10 лот и вместо него ставим стоп на 3 лота. OnTrade() - давно уже не пользуюсь. 7 лотов прошли - отследили по Таблице сделок. Бот видит что поза стала 23 - пересчитали объем стоп-заявок.
Я имею в виду про ручное закрытие. Цена может подойти к стопу, в ручную закрылись. Цена может подойти к тейку. В ручную закрылись.
Константин Рейм, а как понять какие сделки актуальны на данный момент в таблице сделок? Допустим было куплено 10 контрактов, и в ручную закрыто 3. 7 никак не висят в статусе активно в отличие от таблицы заявок и таблицы стоп-ордеров.
Простой пример. Есть робот - отслеживает ваши ручные манипуляции. Открыли руками 10 лотов - робот это увидел через Таблицу сделок (они - сделки там появились). Как только открыли 10 лотов, бот самостоятельно уже без вашего участия выставил по за ранее заданным вами параметрам стоп и тейк. Потом вы решили закрыть руками 3 лота - закрываем 3 лота - 3 закрытых лота так же появились в Таблице сделок - бот видит что закрыто 3 лота - значит открытая ранее позиция на 10 лотов сократилась и стала 7 лотов. Бот заявки стоп и тейк по 10 лотов снимает и выставляет по 7 лотов.
Иван написал: Не совсем понял при чем здесь HFT роботы (высокочастотники как понимаю)?
Сейчас у меня стоп выставляется через функцию OnTrade(). Прошла сделка объемом 7 = выставился стоп объемом 7.
Сложность начинается тогда, когда мне нужно сделать закрытие частями. К примеру хочу закрыть 30% сделки - это будет 3 контракта.
Соответственно сделка прошла и OnTrade() вижу что мне нужно изменить стоп на 7 контрактов. И здесь начинаются сложности - удали стоп 7, выставь стоп 4. Это хорошо сработает если исполнится 3 контракта сразу. А если они исполнятся по 1, 1 и 1. Т.е. мне нужно удалить стоп 7, выставить стоп 6. Удалить стоп 6 (которого возможно еще нет в живых), поставить стоп 5, удалить стоп 5 (которого также еще нет), поставь стоп 4. Сложность в этом.
поясню Проблема в скорости поступления в терминал(ваш комп) информации с сервера биржи и в скорости исполнения сервером квика поручений с терминала В HFT задержки составят десятки микросекунд а в квике сотни миллисекунд. Поэтому пока вы снимаете старый стоп и выставляете новый - это все будет исполнять сервер квика, сервер биржи уже продаст следующую часть в вашей заявке. ----------------- Поэтому для высоколиквидного инструмента квик не обеспечит нужной скорости исполнения ------------------ поэтому для конкретного ответа надо рассматривать конкретный алгоритм конкретный инструмент иначе это лишь теория. Программу можете написать, но реально это не всегда будет работать как хочется.
Николай Камынин Поэтому пока вы снимаете старый стоп и выставляете новый - это все будет исполнять сервер квика, сервер биржи уже продаст следующую часть в вашей заявке. -----------------
Можно пожалуйста про эту часть поподробнее что имеется в виду?
Константин Рейм написал: Простой пример. Есть робот - отслеживает ваши ручные манипуляции. Открыли руками 10 лотов - робот это увидел через Таблицу сделок (они - сделки там появились). Как только открыли 10 лотов, бот самостоятельно уже без вашего участия выставил по за ранее заданным вами параметрам стоп и тейк. Потом вы решили закрыть руками 3 лота - закрываем 3 лота - 3 закрытых лота так же появились в Таблице сделок - бот видит что закрыто 3 лота - значит открытая ранее позиция на 10 лотов сократилась и стала 7 лотов. Бот заявки стоп и тейк по 10 лотов снимает и выставляет по 7 лотов.
Получается это никак не отличается от события OnTrade(). Вы отслеживаете число. Хотя я пробовал отслеживать кол-во из таблицы ограничений по клиентским счетам.
Константин Рейм написал: Простой пример. Есть робот - отслеживает ваши ручные манипуляции. Открыли руками 10 лотов - робот это увидел через Таблицу сделок (они - сделки там появились). Как только открыли 10 лотов, бот самостоятельно уже без вашего участия выставил по за ранее заданным вами параметрам стоп и тейк. Потом вы решили закрыть руками 3 лота - закрываем 3 лота - 3 закрытых лота так же появились в Таблице сделок - бот видит что закрыто 3 лота - значит открытая ранее позиция на 10 лотов сократилась и стала 7 лотов. Бот заявки стоп и тейк по 10 лотов снимает и выставляет по 7 лотов.
И получается что вы снимаете всю пачку стоп-пов и их по новому переставляете.
Иван написал: Получается это никак не отличается от события OnTrade().Вы отслеживаете число. Хотя я пробовал отслеживать кол-во из таблицы ограничений по клиентским счетам.
OnTrade() при обрыве связи вы потеряете сделки, а в таблице сделок нет. В "Ограничения по клиентским счетам" нет объема, вы перепутали видимо с таблицей "Позиции по клиентским счетам (Фьючерсы)".
Иван написал: И получается что вы снимаете всю пачку стоп-пов и их по новому переставляете.
Нет не получается. Из примера видно что стоп эта одна заявка объемом в 10 лотов. Если бы у меня было 10 заявок по 1 лоту, то в этом случае вообще ни чего не нужно переставлять.
Иван написал: И получается что вы снимаете всю пачку стоп-пов и их по новому переставляете.
Нет не получается. Из примера видно что стоп эта одна заявка объемом в 10 лотов. Если бы у меня было 10 заявок по 1 лоту, то в этом случае вообще ни чего не нужно переставлять.
Изначально тема - "Жизнеспособность идеи - 100 контрактов = 100 стоп-ордеров по 1 контракту каждый".
Мне на самом деле больше всего сейчас понравилась идея пойти дальше: человек покупает 30 контрактов - будет сделано 30 транзакций по 1 лоту каждый. Т.е. 1 контрат = 1 установленный стоп = 1 снятый стоп. Но получается при торговле 50 контрактами = 50 сделок = 50 транзакций = 50 стопов. 100 контрактов = 100 сделок = 100 стопов и т.д.. Все по 1 лоту. Не надо заморачиваться ни на какие изменения стоп ордеров (только добавить, только снять). Возможно это не очень удобно с точки зрения производительности и избыточно - возможно вернусь к этой идее 1=1=1 позже. Подобный подход кто так реализовывал смог найти только в 1 приводе. Кроме того если какой-то из стоп-ордеров начал исполняться, это тоже удобно анализировать, вернее это не нужно анализировать, т.к. всегда знаешь что исполнился 1 лот, в отличие от стопа когда он весит например на 7 лотов. Хотя это одно и тоже.
Из последний вариантов что осталось попробовать - это реализовать алгоритм отслеживания очереди и по 1 ордеру отрабатывать в main() с подтверждением исполнения ордера в onStopOrder(). Т.е. скажем в 1 раз в 100 мил. отслеживать состояние очереди с заявками на стоп ордера - где добавить, а где снять.
Как оказалось жизнеспособно - 10, 20, 30 контрактов. И нет нужны заморачиваться на ORDER_MODIFY(). На очень большое кол-во контрактов пока не тестировал.