Особенности языка mql5, тонкости и приёмы работы - страница 20

Alexey Viktorov
37644
Alexey Viktorov  
Andrey Dik:

‌Для хеджа тоже.

За несколько лет у меня мозг заточился под нетинг.‌ Ордер->Сделка->Позиция. Сделок может быть много в позиции (при хедже только одна сделка, гуру поправьте если не так), по типу сделки можно определить что произошло с позицией.

В хедже конечно проще в понимании, но сложнее в сопровождении. ИМХО конечно.‌

Одна пока позиция существует в рынке. Но когда она закрылась появляется второй ордер и вторая сделка.

ps; Наверное я не прав. См. ps в сообщении ниже.‌

Alexey Viktorov
37644
Alexey Viktorov  
Artyom Trishkin:
А трал SL ? Как будешь определять, что закрылось по тралу SL в плюсе?

Ну хорошо, это я не учёл. Тогда сверим цену ордера открывшего позицию и цену ордера закрывшего позицию.

Хотя можно наверное не трогать ордера, а оперировать только сделками.‌

ps; Нет... Что-то тут не так. Ведь каждое изменение тейка или стопа после открытия позиции есть новый ордер и новая сделка. Видимо с ними и надо работать...‌

Я не могу проверить, у меня нет позиций со стопами. Только некоторые с тейками.‌

Andrey Dik
13307
Andrey Dik  
Alexey Viktorov:

Когда находишь последнюю сделку DEAL_ENTRY_OUT и выбираешь всю историю позиции HistorySelectByPosition в этом списке есть, для hadge счетов 2 сделки и 2 ордера, открытие позиции и закрытие её. Ордер на основании которого произошло закрытие содержит ORDER_PRICE_OPEN. Дальше проверяешь тип позиции и тип ордера по которому было закрытие... Если ордер имеет противоположный тип, значит это было закрытие. Соответственно цена ордера и есть искомая цена, с небольшим уточнением: Если профит ордера > 0 то это цена ТР, если-же < 0 то позиция закрылась по SL.

Полагаться на комментарий к ордеру, я-бы не стал.‌

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

А на счет SL и TP - по коменту определить самый простой и надёжный способ. Сравнивать цены для SL и TP будет не всегда работать корректно, так как и SL и TP могут быть как в зоне прибыли так и в зоне убытка.‌ На форуме уже обсуждалось это довольно бурно, ув. Sergeev и дал соответствующее решение по коменту, которое я привел.

Alexey Viktorov
37644
Alexey Viktorov  
Andrey Dik:

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

А на счет SL и TP - по каменту определить самый простой и надёжный способ. Сравнивать цены для SL и TP будет не всегда работать корректно, так как и SL и TP могут быть как в зоне прибыли так и в зоне убытка.‌

Так я и не говорил что просто. Ордер перевернувший позицию не может быть тейком или стопом. Да и вообще только на счетах netting. На счетах hedging чтобы перевернуть позицию, её надо закрыть противоположной большего объёма. Разве не так?

‌Тема интересная, но у меня нет возможности проверить по причине уже озвученной. Нет у меня позиций со стопами и тейками, тем более траленных.

Andrey Dik
13307
Andrey Dik  
Alexey Viktorov:

Ордер перевернувший позицию не может быть тейком или стопом.

‌TP и SL это не ордера в системе учета МТ, это свойство позиции. Поэтому по ордерам/сделкам нельзя работать со SL/TP (даже мудрый движек сайта подтверждает ссылкой).

Alexey Viktorov:

На счетах hedging чтобы перевернуть позицию, её надо закрыть противоположной большего объёма. Разве не так?

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

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

‌TP и SL это не ордера в системе учета МТ, это свойство позиции. Поэтому по ордерам/сделкам нельзя работать со SL/TP (даже мудрый движек сайта подтверждает ссылкой).

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

Но после закрытия позиции её свойства уже недоступны. Остаётся только искать нужную информацию по ордерам и сделкам.
fxsaber
14313
fxsaber  

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

MQL5 Как узнать закрылась сделка по стоп-лоссу или нет?

fxsaber, 2017.02.14 19:46

Тикет ордера, который был причиной закрытия позиции, запихнуть сюда
#define ORDER_TYPE_TAKEPROFIT (-1)
#define ORDER_TYPE_STOPLOSS   (-2)

int GetOrderType(const ulong OrderTicket)
{
  int OrderType=(int)::HistoryOrderGetInteger(OrderTicket,ORDER_TYPE);

  if((OrderType==ORDER_TYPE_BUY) || (OrderType==ORDER_TYPE_SELL))
    {
     const string OrderComment=HistoryOrderGetString(OrderTicket,ORDER_COMMENT);
     const string OrderPrice=::DoubleToString(::HistoryOrderGetDouble(OrderTicket,ORDER_PRICE_OPEN),
                                              (int)::SymbolInfoInteger(HistoryOrderGetString(OrderTicket,ORDER_SYMBOL),SYMBOL_DIGITS));

     if(OrderComment=="tp "+OrderPrice)
        OrderType=ORDER_TYPE_TAKEPROFIT;
     else if(OrderComment=="sl "+OrderPrice)
        OrderType=ORDER_TYPE_STOPLOSS;
    }

  return(OrderType);
}
Alexey Viktorov
37644
Alexey Viktorov  
Andrey Dik:
Приведите пример, пожалуйста.
Пример чего? Что свойства позиции после её закрытия недоступны?
Andrey Dik
13307
Andrey Dik  
Alexey Viktorov:
Пример чего? Что свойства позиции после её закрытия недоступны?
Пример того, как Вы определяете, по чему закрылась позиция SL или TP по ордерам и сделкам. Я привел пример определения по коментарию, а как делаете Вы?
Alexey Viktorov
37644
Alexey Viktorov  
Andrey Dik:
Пример того, как Вы определяете, по чему закрылась позиция SL или TP по ордерам и сделкам. Я привел пример определения по коментарию, а как делаете Вы?

Да пока никак не делаю. Даже в mql4 считал бесполезным занятием перебирать историю ордеров. А здесь пока фантазирую в какую-бы сторону я начал копать при необходимости. Чуть раньше я сказал что проверить не могу по простой причине, нет у меня траленных позиций ни в одном терминале, а специально заводить нет желания пока.

Соответственно после закрытия позиции на моих счетах только 2 ордера и 2 сделки относящиеся к позиции. По ним и можно хоть какую-то информацию о позиции получить. Например по какой цене была заявка на открытие и по какой конкретно открылась. Соответственно легко определяется с каким проскальзыванием было открытие позиции.

К комментарию отношусь с опаской ещё с мт4 потому, что встречал что ДЦ затирает весь комментарий по своим каким-то соображениям.