Слияние позиций - страница 2

 
Yedelkin:
Особенность POSITION_PRICE_OPEN в том, что если позиция является результатом срабатывания нескольких однонаправленных ордеров, то в качестве цены позиции указывается некая средняя цена исполнения этих ордеров. Поэтому не совсем понятно, почему у Вас срабатывает условие А. Ведь если цены исполнения ордеров являются разными, то совпадения цены исполнения ордера и цены позиции быть не должно.
Интересная информация... Не знаю, но первая закрывается по коду, а вторая - по тп/сл... Тепрерь вот уж точно совсем запутался... Но я решил больше не заморачиваться с идентификацией - утопия. Сейчас запоминаю лот покупки и при наступлении условия - продаю этим лотом (и наоборот). Полагаю, что это наиболее правильный вариант...
 
Forex_Noob: при дальнейшем переборе открытых позиций сравниваю эту цену с ценой выбранной позиции
Честно говоря, не совсем понятно, зачем надо привязываться к цене исполнения ордера. Наверное, это некий рудимент от МТ4. Вот посудите сами. Мы точно знаем, что по символу может существовать только одна открытая позиция. Допустим, эта позиция сформировалась в результате исполнения двух ордеров объёмами V1 и V2. Соответственно, чтобы "закрыть первый ордер объёмом V1" при наступлении некоего условия А, достаточно дождаться наступления этого условия и отправить противоположнонаправленный ордер с объёмом V1. В результате срабатывания этого ордера объём позиции сократится до V2. Но позиция по символу будет существовать. Затем дожидаемся наступления некоего условия Б, и отправляем второй противоположнонаправленный ордер с объёмом V2.
 
Forex_Noob: Интересная информация... Не знаю, но первая закрывается по коду, а вторая - по тп/сл... Тепрерь вот уж точно совсем запутался... Но я решил больше не заморачиваться с идентификацией - утопия. Сейчас запоминаю лот покупки и при наступлении условия - продаю этим лотом (и наоборот). Полагаю, что это наиболее правильный вариант...

Почему вторая закрывается по стоп-уровням - это как раз понятно. Не выполняется Ваше условие на совпадение цены исполнения ордера и цены позиции - вот и висит позиция, пока стоп-уровни не сработают.

Была вот такая тема: Как выбрать все цены по которым открывалась позиция Не знаю, поможет ли в чём-нибудь.

 
Yedelkin:
Честно говоря, не совсем понятно, зачем надо привязываться к цене исполнения ордера. Наверное, это некий рудимент от МТ4. Вот посудите сами. Мы точно знаем, что по символу может существовать только одна открытая позиция. Допустим, эта позиция сформировалась в результате исполнения двух ордеров объёмами V1 и V2. Соответственно, чтобы "закрыть первый ордер объёмом V1" при наступлении некоего условия А, достаточно дождаться наступления этого условия и отправить противоположнонаправленный ордер с объёмом Vic1. В результате срабатывания этого ордера объём позиции сократится до V2. Но позиция по символу будет существовать. Затем дожидаемся наступления некоего условия Б, и отправляем второй противоположнонаправленный ордер с объёмом V2.
Да я с Вами согласен (см. предыдущий пост). К этому пришел на четвертый день адаптации к MQL5. В этом плане привычная логика MQL4 сильно мешает - приходится изобретать велосипед с квадратными колесами... 
 
Forex_Noob: Да я с Вами согласен (см. предыдущий пост).

Да, одновременно пишем. Надо только к этой схеме ещё прибавить всякие проверки на наличие позиции, величину объёма позиции и т.д.

Forex_Noob: приходится изобретать велосипед с квадратными колесами... 

Зато кататься на нём прикольно! 

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций - Документация по MQL5
 
Yedelkin:

Почему вторая закрывается по стоп-уровням - это как раз понятно. Не выполняется Ваше условие на совпадение цены исполнения ордера и цены позиции - вот и висит позиция, пока стоп-уровни не сработают.

Была вот такая тема: Как выбрать все цены по которым открывалась позиция Не знаю, поможет ли в чём-нибудь.

Я теперь и сам не знаю. Посмотрю, может остались промежуточные сохранения кода - выложу пикчу 4-ки и 5-ки, где 1-й стоп как и в 4-ке - по требованию, а второй - по тп/сл
 
Yedelkin:

Да, одновременно пишем. Надо только к этой схеме ещё прибавить всякие проверки на наличие позиции, величину объёма позиции и т.д.

Зато кататься на нём прикольно! 

Да уж:) 
 
Forex_Noob:
Так вот видимо если ордера сливаются, то цена открытия у них одна (первоначальная)...

Это упущение MQ, при всём уважении.

Специально перечитал F1-Торговля-Торговая деятельность-Изменение позиции.

Доливка отложками и изменение цены при доливке никак не освещены.

PS цена будет средней. Просто на демо поставьте несколько отложек с "круглым" шагом, там, в 10 п, и посмотрите.

 
Silent: PS цена будет средней. Просто на демо поставьте несколько отложек с "круглым" шагом, там, в 10 п, и посмотрите.
 Вот, для примера набросал (сначала покупаем 3 раза по 0.1 лота, затем продаём):
#include <Trade\Trade.mqh>
CTrade t;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   for(int i=0;i<3;i++)
     {
      t.Buy(0.1);
      Sleep(3000);
      PositionSelect(_Symbol);
      Print("POSITION_PRICE_OPEN = ",DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN)));
     }
   for(int i=0;i<3;i++)
     {
      t.Sell(0.1);
      Sleep(3000);
      PositionSelect(_Symbol);
      Print("POSITION_PRICE_OPEN = ",DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN)));
     }
  }    

Результат:

CS      0       PositionPriceOpen (EURGBP,M1)   19:38:59        POSITION_PRICE_OPEN = 0.80476000
QM      0       PositionPriceOpen (EURGBP,M1)   19:39:02        POSITION_PRICE_OPEN = 0.80476500
DG      0       PositionPriceOpen (EURGBP,M1)   19:39:06        POSITION_PRICE_OPEN = 0.80477333
MQ      0       PositionPriceOpen (EURGBP,M1)   19:39:09        POSITION_PRICE_OPEN = 0.80477333
OJ      0       PositionPriceOpen (EURGBP,M1)   19:39:12        POSITION_PRICE_OPEN = 0.80477333
RD      0       PositionPriceOpen (EURGBP,M1)   19:39:15        POSITION_PRICE_OPEN = 0.80477333

Было интересно, изменяется ли значение POSITION_PRICE_OPEN   при уменьшении объёма позиции.

 
Yedelkin:
 Вот, для примера набросал (сначала покупаем 3 раза по 0.1 лота, затем продаём):

Результат:

Было интересно, изменяется ли значение POSITION_PRICE_OPEN   при уменьшении объёма позиции.

При уменьшении то с чего ей меняться? Есть лот по рубль двадцать, стало пол лота... 

Для наглядности надо цену покупки/продажи добавить. Хотя и так понятно.

Во всём виноват хэлп. Там просто пустое место на эту тему.

И название  POSITION_PRICE_OPEN  вроде как вводит в заблуждение.