Cheduecoglioni: Ihr Experte für MetaTrader 5 und automatisiertes Trading

Mike 2017.08.10 18:48 15 0 0
Anhang

Der Autor der Idee: ef91 (Diskussion zu finden )

Autor des MQL5-Codes: Vladimir Karputov.

Der EA wartet darauf, dass ein Take Profit (TP) oder Stop Loss (SL) ausgelöst wird, um dann eine Position in die entgegengesetzte Richtung zu eröffnen. Bevor eine Handelsanfrage gesendet wird, wird überprüft, ob genügend Kapital vorhanden ist. Dies geschieht in der Funktion OnTradeTransaction.

Zum Beispiel: Angenommen, wir haben eine offene Kauf-Position. Sobald der TP oder SL ausgelöst wird, wird eine neue Verkaufs-Position eröffnet. Nach der Auslösung des TP oder SL wird dann eine neue Kauf-Position eröffnet.

Die Schließung einer Position wird in der Funktion "OnTradeTransaction" überwacht:

//+------------------------------------------------------------------+
//| TradeTransaction-Funktion                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//--- Transaktionstyp als Enumerationswert abrufen 
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- Wenn die Transaktion das Ergebnis einer Addition der Transaktion in der Historie ist
   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;
           }
        }
     }
  }

Überprüfen Sie das Volumen vor OrderSend (nehmen Sie die Eröffnung einer Kauf-Position als Beispiel):

//+------------------------------------------------------------------+
//| Kauf-Position eröffnen                                                |
//+------------------------------------------------------------------+
void OpenBuy(double sl,double tp)
  {
   sl=m_symbol.NormalizePrice(sl);
   tp=m_symbol.NormalizePrice(tp);

//--- Überprüfen Sie das Volumen vor OrderSend, um den Fehler "nicht genügend Geld" zu vermeiden (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("Kauf -> falsch. Ergebnis Retcode: ",m_trade.ResultRetcode(),
                     ", Beschreibung des Ergebnisses: ",m_trade.ResultRetcodeDescription());
              }
              else
              {
               Print("Kauf -> wahr. Ergebnis Retcode: ",m_trade.ResultRetcode(),
                     ", Beschreibung des Ergebnisses: ",m_trade.ResultRetcodeDescription());
              }
         }
         else
         {
            Print("Kauf -> falsch. Ergebnis Retcode: ",m_trade.ResultRetcode(),
                  ", Beschreibung des Ergebnisses: ",m_trade.ResultRetcodeDescription());
           }
        }
      else
        {
         m_is_trade=false;
        }
     }
   else
     {
      m_is_trade=false;
     }
//---
  }

Liste
Kommentar 0