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

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

Опубликовал:
Vladimir Karputov
Просмотров:
2513
Рейтинг:
(22)
Опубликован:
2017.05.12 13:56
Обновлен:
2018.02.16 13:34
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Автор идеиef91 (начало обсуждения на форуме)

Автор mql5 кодаVladimir Karputov.

Мы ждем, когда TP или SL сработают, и после этого открываем позицию в противоположном направлении. Проверка на достаточность средств перед отсылкой торгового приказа. OnTradeTransaction.

Например, уже была открыта позиция Buy. Когда TP или SL сработают, мы открываем новую позицию Sell. Затем, когда TP или SL сработают, мы открываем новую позицию Buy.

Вот так отлавливается закрытие сделки в "OnTradeTransaction":

//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//--- 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)
     {
      long     deal_entry        =0;
      long     deal_type         =0;
      string   deal_symbol       ="";
      long     deal_magic        =0;
      long     deal_time         =0;
      if(HistoryDealSelect(trans.deal))
        {
         deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE);
         deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
         deal_time=HistoryDealGetInteger(trans.deal,DEAL_TIME);
        }
      else
         return;
      if(deal_symbol==m_symbol.Name() && deal_magic==m_magic)
        {
         if(deal_entry==DEAL_ENTRY_OUT)
           {
            if(deal_type==DEAL_TYPE_BUY || deal_type==DEAL_TYPE_SELL)
              {
               if(deal_type==DEAL_TYPE_BUY)
                  m_close_pos_type=POSITION_TYPE_SELL;
               else if(deal_type==DEAL_TYPE_SELL)
                  m_close_pos_type=POSITION_TYPE_BUY;
               else
                  return;
               m_is_trade=true;
              }
           }
         else if(deal_entry==DEAL_ENTRY_IN)
           {
            m_is_trade=false;
           }
        }
     }
  }

    Check volume before OrderSend (на примере открытия позиции Buy):

    //+------------------------------------------------------------------+
    //| Open Buy position                                                |
    //+------------------------------------------------------------------+
    void OpenBuy(double sl,double tp)
      {
       sl=m_symbol.NormalizePrice(sl);
       tp=m_symbol.NormalizePrice(tp);
    
    //--- check volume before OrderSend to avoid "not enough money" error (CTrade)
       double check_volume_lot=m_trade.CheckVolume(m_symbol.Name(),InpLots,m_symbol.Ask(),ORDER_TYPE_BUY);
    
       if(check_volume_lot!=0.0)
         {
          if(check_volume_lot>=InpLots)
            {
             if(m_trade.Buy(InpLots,NULL,m_symbol.Ask(),sl,tp))
               {
                if(m_trade.ResultDeal()==0)
                  {
                   Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
                         ", description of result: ",m_trade.ResultRetcodeDescription());
                  }
                else
                  {
                   Print("Buy -> true. Result Retcode: ",m_trade.ResultRetcode(),
                         ", description of result: ",m_trade.ResultRetcodeDescription());
                  }
               }
             else
               {
                Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
                      ", description of result: ",m_trade.ResultRetcodeDescription());
               }
            }
          else
            {
             m_is_trade=false;
            }
         }
       else
         {
          m_is_trade=false;
         }
    //---
      }

    Size of candles (text) Size of candles (text)

    Размер бара. Размер свечи считается по формуле: "уменьшаемое" минус "вычитаемое".

    RSI and Bollinger Bands RSI and Bollinger Bands

    Торговая стратегия по RSI и Bollinger Bands.

    TotalPowerIndicatorX_HTF TotalPowerIndicatorX_HTF

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

    CandleRange CandleRange

    Две гистограммы в одном окне, показывающие максимальные усредненные отклонения цены от первоначального значения, измеряемые в пунктах.