Отложенные ордера buy stop/sell stop

 

Добрый вечер.

Брокер предоставляет неттинговый режим. В связи с этим при доливке использовать SL не имеет смысла, так как SL становится общим для всех позиций одного инструмента. Возникает потребность в отложенных ордерах buy stop/sell stop выставления стоп лоса для каждой позиции.

Например, купил 1 лот по цене 60, выставил для него sell stop по цене 55, позже докупил еще 1 лот по цене 65 и для него выставил sell stop по цене 58. При закрытии первого лота необходимо удалить выставленный для него sell stop, то есть тот, у которого цена 55. При этом остальные отложенные ордера должны остаться.

Теперь собственно вопрос. Как определить отложенный sell stop для закрываемого лота, чтобы его удалить? 

Глобальные переменные терминала или ведение данных в отдельном файле не подходят ввиду потребности в независимости от ПК. Хочется сделать универсальный алгоритм, не привязываясь к локальным переменным, ориентируясь только на данные рынка.

Покопавшись в справке была идея записывать в комментарий отложенного ордера POSITION_IDENTIFIER, который появляется после покупки. Но, как я понял, при неттинговом режиме он будет одинаковый при доливке для всех позиций.

Плюс есть необходимость тянуть для каждой позиции отложенный ордер до безубытка. Но надо понять, какой ордер менять.

Поделитесь пожалуйста опытом и идеями.

 

Если речь об эксперте, то используйте поле MagicNumber. При доливке эксперт устанавливает соответствующие долитому объему ордера Sell Stop (эквивалент стопа для Buy) и Sell Limit (эквивалент профита для Buy) с записью нужного MagicNumber. Далее эксперт должен отслеживать срабатывание одного из двух ордеров. Когда один ордер сработал, то второй удаляется.

Таким образом, эксперт всегда будет иметь информацию о том, какой объем совокупной позиции относится именно к нему, подсчитывая отложенные ордера со списком своих MagicNumber.

 
Ihor Herasko:

Если речь об эксперте, то используйте поле MagicNumber. При доливке эксперт устанавливает соответствующие долитому объему ордера Sell Stop (эквивалент стопа для Buy) и Sell Limit (эквивалент профита для Buy) с записью нужного MagicNumber. Далее эксперт должен отслеживать срабатывание одного из двух ордеров. Когда один ордер сработал, то второй удаляется.

Таким образом, эксперт всегда будет иметь информацию о том, какой объем совокупной позиции относится именно к нему, подсчитывая отложенные ордера со списком своих MagicNumber.

Игорь, такое применимо, если я Sell Stop и Sell limit выставляются одновременно. И в них сразу записываются данные по MN. 

Я хотел рассмотреть случаи, когда профит не выставляется сразу или вообще. Закрытие (полное/частичное) происходит по сигналу индикатора. Я к тому, что может возникнуть запросто ситуация, когда мы три раза докупились, выставили sell stop и ждем определенных сигналов индикатора. И начинаем закрываться либо полностью, либо лесенкой. В случае полного закрытия все понятно, а с частичным не совсем. Получается в этом случае нам необходимо хранить MN всех отложенных ордеров в неком локальном массиве, если я верно рассуждаю. Но это приводит нас к локальной зависимости от ПК.

 
up
 
Илья Ребенок:

Игорь, такое применимо, если я Sell Stop и Sell limit выставляются одновременно. И в них сразу записываются данные по MN. 

Я хотел рассмотреть случаи, когда профит не выставляется сразу или вообще. Закрытие (полное/частичное) происходит по сигналу индикатора. Я к тому, что может возникнуть запросто ситуация, когда мы три раза докупились, выставили sell stop и ждем определенных сигналов индикатора. И начинаем закрываться либо полностью, либо лесенкой. В случае полного закрытия все понятно, а с частичным не совсем. Получается в этом случае нам необходимо хранить MN всех отложенных ордеров в неком локальном массиве, если я верно рассуждаю. Но это приводит нас к локальной зависимости от ПК.

Нет никакой разницы, устанавливается профит или не устанавливается. Главное, чтобы у доливки был хотя бы один соответствующий ордер: стоповый или лимитный. То есть на каждую доливку нужно разместить свой ордер. Тогда получается учет количества и объема доливок. На каждое закрытие, даже частичное, нужно удалять/модифицировать отложенные ордера. Если доливка закрыта частично, то соответствующий ей ордер удаляется и вместо него устанавливается новый ордер с новым объемом.

К примеру:

  1. Открыта позиция Buy объемом 0.5 лот. Ей в соответствие ставится Sell Stop объемом 0.5 лот.
  2. Открытие доливки Buy объемом 0.2 лот. Ей в соответствие ставится Sell Stop объемом 0.2 лот. Эксперт видит два своих ордера общим объемом 0.7 лот и определяет, что его совокупная позиция - это Buy 0.7 лот. Причем здесь неважно, какая именно сейчас позиция на счете. Ее может вообще не быть или быть даже Sell.
  3. Закрытие доливки частично на 0.1 лот. Удаляется Sell Stop объемом 0.2 лот и устанавливается Sell Stop объемом 0.1 лот.
  4. Закрытие части основной сделки на 0.3 лот. Удаляется Sell Stop объемом 0.5 лот и устанавливается Sell Stop объемом 0.2 лот.
  5. Закрытие всей своей позиции. Удаляются оба оставшихся ордера.

 
Ihor Herasko:

Нет никакой разницы, устанавливается профит или не устанавливается. Главное, чтобы у доливки был хотя бы один соответствующий ордер: стоповый или лимитный. То есть на каждую доливку нужно разместить свой ордер. Тогда получается учет количества и объема доливок. На каждое закрытие, даже частичное, нужно удалять/модифицировать отложенные ордера. Если доливка закрыта частично, то соответствующий ей ордер удаляется и вместо него устанавливается новый ордер с новым объемом.

К примеру:

  1. Открыта позиция Buy объемом 0.5 лот. Ей в соответствие ставится Sell Stop объемом 0.5 лот.
  2. Открытие доливки Buy объемом 0.2 лот. Ей в соответствие ставится Sell Stop объемом 0.2 лот. Эксперт видит два своих ордера общим объемом 0.7 лот и определяет, что его совокупная позиция - это Buy 0.7 лот. Причем здесь неважно, какая именно сейчас позиция на счете. Ее может вообще не быть или быть даже Sell.
  3. Закрытие доливки частично на 0.1 лот. Удаляется Sell Stop объемом 0.2 лот и устанавливается Sell Stop объемом 0.1 лот.
  4. Закрытие части основной сделки на 0.3 лот. Удаляется Sell Stop объемом 0.5 лот и устанавливается Sell Stop объемом 0.2 лот.
  5. Закрытие всей своей позиции. Удаляются оба оставшихся ордера.

Игорь, извиняюсь, но не все моменты смог понять. По приведенному примеру вопросов нет, мое представление совпадает с описанным. Но вот этот момент до меня пока не доходит. 

Если доливка закрыта частично, то соответствующий ей ордер удаляется и вместо него устанавливается новый ордер с новым объемом.

Как определить соответствующий доливке Sell Stop? Мы долили/открыли позицию, выставляем ей Sell Stop и так делаем несколько раз. Вот например, если вернуться к 3му пункту из вашего примера - "Удаляется Sell Stop объемом 0.2 лот" для доливки. Как эксперт определил что именно sell stop с объемом 0.2 нужно отредактировать, а не sell stop с объемом 0.5? Вот отловить именно соответствие...

Может я неверно формирую мысль...

Смотрите. Я купил 1 лот, поставил SS с уникальным MN (например 111), докупил еще 2 лота и поставил для этих 2 лотов SS с другим MN (222). Через некоторое время выставляю sell limit для 2 лотов (которые докупил) и мне по идее нужно для этого ордера указать MN 222, но как это объяснить роботу, который в рынке видит еще и 111. 

 
Илья Ребенок:

Игорь, извиняюсь, но не все моменты смог понять. По приведенному примеру вопросов нет, мое представление совпадает с описанным. Но вот этот момент до меня пока не доходит. 

Если доливка закрыта частично, то соответствующий ей ордер удаляется и вместо него устанавливается новый ордер с новым объемом.

Как определить соответствующий доливке Sell Stop? Мы долили/открыли позицию, выставляем ей Sell Stop и так делаем несколько раз. Вот например, если вернуться к 3му пункту из вашего примера - "Удаляется Sell Stop объемом 0.2 лот" для доливки. Как эксперт определил что именно sell stop с объемом 0.2 нужно отредактировать, а не sell stop с объемом 0.5? Вот отловить именно соответствие...

Это уже внутренняя бухгалтерия эксперта. Ведь на каждом тике эксперт опрашивает текущее состояние, составляя список своих ордеров. Если нашел два своих ордера Sell Stop, то представляет для себя картину как наличие двух рыночных ордеров Buy (в терминологии МТ4). Соответствие между рыночным ордером и отложенным ордером устанавливается именно исходя из логики, по которой было установлено, что имеется два рыночных ордера. 

Смотрите. Я купил 1 лот, поставил SS с уникальным MN (например 111), докупил еще 2 лота и поставил для этих 2 лотов SS с другим MN (222). Через некоторое время выставляю sell limit для 2 лотов (которые докупил) и мне по идее нужно для этого ордера указать MN 222, но как это объяснить роботу, который в рынке видит еще и 111. 

Здесь же приведено отличие между этими ордерами - 1 лот и 2 лота. Если нужно поставить лимитный для 2-ух лотов, то ордер будет иметь MN 222, если для 1-ого лота, то - 111.

Если имеется несколько ордеров с одинаковым объемом, то нет никакой разницы, какому именно стоповому ордеру будет соответствовать тот или иной лимитный ордер. Ставим соответствие по первому попавшемуся с таким же объемом. Если нужно два лимитных ордера, то каждому из них ставим в соответствие разные стоповые ордера и т. д., если нужно больше три и более лимитников.

 
Была статья по реализации таких ордеров. Но сейчас не смог найти.
 
Неттингой режим такая шняга...)
 
Ihor Herasko:

Это уже внутренняя бухгалтерия эксперта. Ведь на каждом тике эксперт опрашивает текущее состояние, составляя список своих ордеров. Если нашел два своих ордера Sell Stop, то представляет для себя картину как наличие двух рыночных ордеров Buy (в терминологии МТ4). Соответствие между рыночным ордером и отложенным ордером устанавливается именно исходя из логики, по которой было установлено, что имеется два рыночных ордера. 

Здесь же приведено отличие между этими ордерами - 1 лот и 2 лота. Если нужно поставить лимитный для 2-ух лотов, то ордер будет иметь MN 222, если для 1-ого лота, то - 111.

Если имеется несколько ордеров с одинаковым объемом, то нет никакой разницы, какому именно стоповому ордеру будет соответствовать тот или иной лимитный ордер. Ставим соответствие по первому попавшемуся с таким же объемом. Если нужно два лимитных ордера, то каждому из них ставим в соответствие разные стоповые ордера и т. д., если нужно больше три и более лимитников.

Игорь спасибо! Вроде уловил суть, сегодня попробую формализовать это в код.


Andrey Khatimlianskii:
Была статья по реализации таких ордеров. Но сейчас не смог найти.

Да уж, сложности определенные вызывает.

Причина обращения: