Смотри, как бесплатно скачать роботов
Ищи нас в Telegram!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Советники

TypePendingOrderTriggered - эксперт для MetaTrader 5

Просмотров:
2332
Рейтинг:
(25)
Опубликован:
2017.02.14 11:48
Обновлен:
2022.03.23 10:08
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Советник показывает пример решения задачи: как определить момент, когда сработал отложенный ордер?

Как работает советник: в функции OnTradeTransaction() ожидаем транзакцию с типом "TRADE_TRANSACTION_DEAL_ADD":

TRADE_TRANSACTION_DEAL_ADD

Добавление сделки в историю. Осуществляется в результате исполнения ордера или проведения операций с балансом счета.


Как только мы "поймали" такую транзакцию, то сразу вводим флаг "bln_find_order" поиска ордера и присваиваем переменной "ul_find_order" тикет ордера:

//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//+------------------------------------------------------------------+
//| TRADE_TRANSACTION_DEAL_*                                         |
//| The following fields in MqlTradeTransaction structure            |
//| are filled for trade transactions related to deals handling      |
//| (TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_DEAL_UPDATE       |
//| and TRADE_TRANSACTION_DEAL_DELETE):                              |
//|  •deal - deal ticket;                                            |
//|  •order - order ticket, based on which a deal has been performed;|
//|  •symbol - deal symbol name;                                     |
//|  •type - trade transaction type;                                 |
//|  •deal_type - deal type;                                         |
//|  •price - deal price;                                            |
//|  •price_sl - Stop Loss price (filled, if specified in the order, |
//|  •based on which a deal has been performed);                     |
//|  •price_tp - Take Profit price (filled, if specified             |
//|   in the order, based on which a deal has been performed);       |
//|  •volume - deal volume in lots.                                  |
//|  •position - the ticket of the position that was opened,         |
//|   modified or closed as a result of deal execution.              |
//|  •position_by - the ticket of the opposite position.             |
//|   It is only filled for the out by deals                         |
//|   (closing a position by an opposite one).                       |
//+------------------------------------------------------------------+
//--- get transaction type as enumeration value
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      bln_find_order=true;                // true -> you should look for a order
      ul_find_order=trans.order;
     }
  }

В OnTick() мы все время проверяем состояние флага "bln_find_order" и как только флаг равен true — то начинаем поиск ордера.

  • Сначала пытаемся по тикету найти этот ордер
  • Если попытка удачная (это означает, что ордер уже записан в историю), определяем тип этого ордера. Для обращения за свойством ордера из торговой истории нужно использовать HistoryOrderGetInteger.

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(bln_find_order) // true -> you should look for a order
     {
      static long counter=0;
      Print("Attempt number ",counter);
      ResetLastError();
      if(HistoryOrderSelect(ul_find_order))
        {
         long type_order=HistoryOrderGetInteger(ul_find_order,ORDER_TYPE);
         if(type_order==ORDER_TYPE_BUY_LIMIT || type_order==ORDER_TYPE_BUY_STOP ||
            type_order==ORDER_TYPE_SELL_LIMIT ||type_order==ORDER_TYPE_SELL_STOP)
           {
            Print("The pending order ",ul_find_order," is found! Type of order is ",
                  EnumToString((ENUM_ORDER_TYPE)HistoryOrderGetInteger(ul_find_order,ORDER_TYPE)));
            bln_find_order=false;         // true -> you should look for a order
            counter=0;
            return;
           }
         else
           {
            Print("The order ",ul_find_order," is not pending");
            bln_find_order=false;         // true -> you should look for a order
            return;
           }
        }
      else
        {
         Print("Order ",ul_find_order," is not find, error#",GetLastError());
        }
      counter++;
     }
  }
HistoryPositionInfo HistoryPositionInfo

Возвращает прибыль позиции в пунктах на основании торговой истории.

The Simple Trend Detector The Simple Trend Detector

Простейший осциллятор с использованием разницы цен открытия и закрытия свечей.

Currencyprofits_01.1 Currencyprofits_01.1

Пересечение двух iMA. Расчёт лота в процентах риска от маржи.

XCHV_HTF XCHV_HTF

Индикатор XCHV с возможностью изменения таймфрейма индикатора во входных параметрах.