Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Facebook!
und werden Sie Mitglied unserer Fangruppe
Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Hat Ihnen das Skript gefallen?
Bewerten Sie es im Terminal MetaTrader 5
Expert Advisors

cheduecoglioni - Experte für den MetaTrader 5

Veröffentlicht:
Vladimir Karputov
Ansichten:
800
Rating:
(22)
Veröffentlicht:
2017.07.12 17:32
Aktualisiert:
2018.02.27 13:24
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Der Autor der Ideeef91 (der Anfang der Diskussion auf dem Forum)

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

Wir warten, wann TP oder SL ausgelöst werden, und danach öffnen wir die Position in der entgegengesetzten Richtung. Die Überprüfung, ob Mittel ausreichend sind, bevor eine Handelsoperation durchgeführt wird. OnTradeTransaction.

Zum Beispiel, es wurde schon die Position Buy geöffnet. Wenn TP oder SL ausgelöst wurden, öffnen wir die neue Position Sell. Wenn TP oder SL ausgelöst wurden, öffnen wir die neue Position Buy.

So wird die Schließung des Trades in "OnTradeTransaction" gefangen:

//+------------------------------------------------------------------+
//| 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 (aufgrund des Beispiels der Eröffnung der Position 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;
         }
    //---
      }
    

    Übersetzt aus dem Russischen von MetaQuotes Ltd.
    Originalpublikation: https://www.mql5.com/ru/code/18294

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

    Die Größe der Bar. Die Große der Kerze wird nach der folgenden Formel berechnet: "Minuend" - "Subtrahend".

    All information about the symbol All information about the symbol

    Die ganze Information über das laufende Symbol (die Information wird aus dem Objekt der Klasse CSymbolInfo genommen) in Form vom Feld der Dialoge.

    Die hochproduktive Bibliothek iTimeSeries Die hochproduktive Bibliothek iTimeSeries

    Diese Bibliothek bietet einen blitzschnellen Zugang zu Timeserien für die Realisierung der gewöhnlichen Methoden MQL4 (zum Beispiel, iBarShift) bei den empfindlichen Anwendungen auf MQL5.

    CandleRange CandleRange

    Zwei Histogramme in einem Fenster, die maximalen durchschnittlichen Abweichungen des Preises von dem ursprünglichen Wert zeigen, die in den Punkten gemessen werden.