Expert Advisors: Expert Ichimoku - Seite 2

 
Vladimir Karputov #:

Aktivieren Sie das Code-Debugging und testen Sie Schritt für Schritt.

Vielen Dank für Ihre Antwort.

Ich mache Debugging und fand heraus, dass falsche SL aufgrund der hohen Streuung dieses Problem verursacht.

 
amin ghanbari # :

Vielen Dank für Ihre Antwort.

Ich Do Debugging und fand, dass falsche SL aufgrund hoher Spread dieses Problem verursacht.

Der Code innerhalb der Expert Advisor ist richtig - aber wenn im Moment der Platzierung der Preis macht eine starke Bewegung, die POSITION wird nicht geöffnet werden.

 
Vladimir Karputov #:

Der Code im Expert Advisor ist korrekt - aber wenn der Preis im Moment der Platzierung eine starke Bewegung macht, wird die POSITION nicht geöffnet.

Ich denke, dieser Abschnitt sollte für Crypo geändert werden:


//--- Abstimmung für 3 oder 5 Ziffern
   int digits_adjust=1;
   if(m_symbol.Digits()==3 || m_symbol.Digits()==5)
      digits_adjust=10;
   m_adjusted_point=m_symbol.Point()*digits_adjust;

   ExtStopLoss    = InpStopLoss     * m_adjusted_point;
   ExtTakeProfit  = InpTakeProfit   * m_adjusted_point;
   ExtTrailingStop= InpTrailingStop * m_adjusted_point;
   ExtTrailingStep= InpTrailingStep * m_adjusted_point;


Wenn ich RISK für die Bestimmung des Lots verwende, sehe ich den Fehler getpointer und muss fix LOT verwenden:

//+------------------------------------------------------------------+
//| Lots oder Risiko in Prozent für ein Geschäft aus einer freien Marge |
//+------------------------------------------------------------------+
bool LotsOrRisk(const double lots,const double risk,const int digits_adjust)
  {
   if(lots<0.0 && risk<0.0)
     {
      Print(__FUNCTION__,", ERROR: Parameter (\"lots\" or \"risk\") can't be less than zero");
      return(false);
     }
   if(lots==0.0 && risk==0.0)
     {
      Print(__FUNCTION__,", ERROR: Trade is impossible: You have set \"lots\" == 0.0 and \"risk\" == 0.0");
      return(false);
     }
   if(lots>0.0 && risk>0.0)
     {
      Print(__FUNCTION__,", ERROR: Trade is impossible: You have set \"lots\" > 0.0 and \"risk\" > 0.0");
      return(false);
     }
   if(lots>0.0)
     {
      string err_text="";
      if(!CheckVolumeValue(lots,err_text))
        {
         Print(__FUNCTION__,", ERROR: ",err_text);
         return(false);
        }
     }
   else
      if(risk>0.0)
        {
         if(m_money!=NULL)
            delete m_money;
         m_money=new CMoneyFixedMargin;
         if(m_money!=NULL)
           {
            if(!m_money.Init(GetPointer(m_symbol),Period(),m_symbol.Point()*digits_adjust))
               return(false);
            m_money.Percent(risk);
           }
         else
           {
            Print(__FUNCTION__,", ERROR: Object CMoneyFixedMargin is NULL");
            return(false);
           }
        }
//---
   return(true);
  }
//+------------------------------------------------------------------+
 
amin ghanbari # :

***

Wenn ich RISK zur Bestimmung der Partie verwende, sehe ich einen Getpointer-Fehler und muss Fix LOT verwenden:

Sie sehen Ihren Fehler - denken Sie nach: Welchen Wert des Risikos stellen Sie ein?

 

Anmerkung: Wenn Sie Instrumente mit einem GROSSEN Spread verwenden, müssen Sie einen angemessenen Stop Loss setzen.

Denken Sie immer daran - es gibt ZWEI Preise: Ask und Bid.

 
Vladimir Karputov #:

Sie sehen Ihren Fehler - denken Sie nach: Welchen Risikowert setzen Sie an?

Vielen Dank für Ihre Antwort. alles ist richtig in Experte. Probleme sind aufgrund unzureichender Balance undfalsche SL aufgrund hug Spread.

Ich habe 1% Risiko für 500$ Balance eingestellt. leverage auf 100 eingestellt. diese Fehler apears:

OpenBuy, ERROR: Methode CheckOpenLong

OpenSell, ERROR: Methode CheckOpenShort

bedeutet das, dass das Guthaben nicht ausreicht, um eine Position mit einer Mindestlosgröße in BTC zu eröffnen?

Stimmt das?

 
amin ghanbari # :

Vielen Dank für Ihre Antwort. Alles ist richtig in Experte. Probleme sind aufgrund unzureichender Balance und falsche SL aufgrund hug Verbreitung.

Ich setze 1% Risiko für 500$ Balance. Hebelwirkung auf 100 gesetzt. diese Fehler apears:

OpenBuy, ERROR: Methode CheckOpenLong

OpenSell, ERROR: Methode CheckOpenShort

bedeutet dies, dass der Kontostand nicht ausreicht, um eine Position mit einer Mindestlosgröße in BTC zu eröffnen?

Stimmt das?

Sie haben Ihren Fehler gefunden. Denken Sie jetzt darüber nach, wie Sie Ihren Fehler korrigieren können.

 

Hallo, Vladimir

Vielen Dank für die Freigabe der Experte, ich versuche, eine Bedingung für das Schließen der Position hinzufügen, wenn die Bar schließen die Wolke passieren, das ist der Code, den ich hinzugefügt, können Sie mir helfen, bitte, ich bin sehr neu zu mql5


 
Mahmoud Ahmed Mahmoud Fahmy # :

Hallo, Wladimir

Vielen Dank für die Freigabe der Experte, ich versuche, eine Bedingung für das Schließen der Position hinzufügen, wenn die Bar schließen die Wolke passieren, das ist der Code, den ich hinzugefügt, können Sie mir helfen, bitte, ich bin sehr neu zu mql5


Bitte fügen Sie den Code korrekt ein: ERST drücken Sie die Schaltfläche Code, und DANN fügen Sie den Code in das Pop-up-Fenster ein.

 
Vladimir Karputov #:

Bitte fügen Sie den Code korrekt ein: Drücken Sie ZUERST die Schaltfläche , und fügen Sie DANN den Code in das Pop-up-Fenster ein.

Hallo, nochmals

Vielen Dank für Ihre Antwort, und es tut mir sehr leid für den Schlamassel, den ich angerichtet habe. Ich habe den Code gegenüber meinem letzten Beitrag ein wenig geändert, und er schließt die Position immer noch nicht, und ich habe stoploss = 0 gesetzt.

   double Kij2=iIchimokuGet(KIJUNSEN_LINE,3);
   double SpanA2=iIchimokuGet(SENKOUSPANA_LINE,3);
   double SpanB2=iIchimokuGet(SENKOUSPANB_LINE,3);
   double Chinkou2=iIchimokuGet(CHIKOUSPAN_LINE,3);
   
   
   //Schließende Aufträge
   
  
   
   
  // m_trade.PositionClose(m_symbol.Name());
   //Bestellungen kaufen
  // {
      
     // if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY )
     // {
        // if(iClose(_Symbol,Zeitraum(),1) < SpanB)
       // {
            //m_trade.PositionClose(_Symbol);
          // }
            
     // } 
     // }
      
      //VERKAUF VON AUFTRÄGEN
      
     // if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)
     // {
         
       // if(iClose(_Symbol,Zeitraum(),1) > SpanB)
        // {
         // m_trade.PositionClose(_Symbol);
         //}
      // }
            
          // if(m_trade.ResultRetcode()==10008 || m_trade.ResultRetcode()==10009) //Anfrage ist abgeschlossen oder Auftrag erteilt
             // {
             // Print("Exit rules: Eine Close-Order wurde erfolgreich platziert mit Ticket#: ",m_trade.ResultOrder());
             // }
            //else
              // {
              // Print("Exit-Regeln: Die Anforderung für die Schließung des Auftrags konnte nicht abgeschlossen werden.Fehler: ",GetLastError());
             // ResetLastError();
               //zurück;
              // }
            
        // }
    // }
  // }
   
   
//--- check BUY
      if (iClose(_Symbol,PERIOD_D1,1) < iClose(_Symbol,PERIOD_D1,2) && iHigh(_Symbol,PERIOD_H4,2) - iLow(_Symbol,PERIOD_H4,2) > iHigh(_Symbol,PERIOD_H4,1)- iLow(_Symbol,PERIOD_H4,2) )
      {  

      if (iOpen(m_symbol.Name(),Period(),0) > Kij && iOpen(m_symbol.Name(),Period(),0) > SpanA)
  // if(Ten1<=Kij1 && Ten>Kij &&
   //&& m_symbol.Ask()>SpanA1 
   //&& m_symbol.Ask()>SpanB1 && 
     // iOpen(m_symbol.Name(),Period(),1)<iClose(m_symbol.Name(),Period(),1)) //|| 
      //(Chinkou1<=iClose(m_symbol.Name(),Period(),11) && Chinkou>iClose(m_symbol.Name(),Period(),10) && 
     // m_symbol.Ask()>SpanA1 && m_symbol.Ask()>SpanB1 && 
     // iOpen(m_symbol.Name(),Period(),1)<iClose(m_symbol.Name(),Period(),1))
     {
      double sl=(InpStopLoss==0)?0.0:m_symbol.Ask()-ExtStopLoss;
      if(sl>=m_symbol.Bid()) // Zwischenfall: die Position ist noch nicht geöffnet und muss bereits geschlossen sein
        {
         PrevBars=0;
         return;
        }
      double tp=(InpTakeProfit==0)?0.0:m_symbol.Ask()+ExtTakeProfit;
           if(iClose(_Symbol,Period(),1) < SpanB)
   {
      if(m_position.Select(_Symbol))                     //wenn die Position für dieses Symbol bereits existiert
        {
         if(m_position.PositionType()==POSITION_TYPE_BUY) m_trade.PositionClose(_Symbol);   //und dies ist eine Kaufposition, dann schließen Sie sie
        // if(m_Position.PositionType()==POSITION_TYPE_SELL) return;
         }
   }
      
      OpenBuy(sl,tp);
     }
     }
     
//--- SELL prüfen
         
     if (iClose(_Symbol,PERIOD_D1,1) > iClose(_Symbol,PERIOD_D1,2) && iHigh(_Symbol,PERIOD_D1,2) - iLow(_Symbol,PERIOD_H4,2) > iHigh(_Symbol,PERIOD_H4,1)- iLow(_Symbol,PERIOD_H4,2) )
      {
 
      if(iOpen(m_symbol.Name(),Period(),0) < Kij && iOpen(m_symbol.Name(),Period(),0) < SpanB)
        
         
        
  // if(Ten1>Kij1 && Ten<Kij &&
   //&& m_symbol.Bid()<SpanA1 && m_symbol.Bid()<SpanB1 && 
     // iOpen(m_symbol.Name(),Period(),1)>iClose(m_symbol.Name(),Period(),1)) //|| 
      //(Chinkou1>=iOpen(m_symbol.Name(),Period(),11) && Chinkou<iOpen(m_symbol.Name(),Period(),10) && 
      //m_symbol.Bid()<SpanA1 && m_symbol.Bid()<SpanB1 && 
      //iOpen(m_symbol.Name(),Period(),1)>iClose(m_symbol.Name(),Period(),1)))
     {
      double sl=(InpStopLoss==0)?0.0:m_symbol.Bid()+ExtStopLoss;
      if(sl<=m_symbol.Ask()) // Zwischenfall: die Position ist noch nicht geöffnet und muss bereits geschlossen sein
        {
         PrevBars=0;
         return;
        }
      double tp=(InpTakeProfit==0)?0.0:m_symbol.Bid()-ExtTakeProfit;
      
         if(iClose(_Symbol,Period(),1) > SpanB)
         {
            if(m_position.Select(_Symbol))                     //wenn die Position für dieses Symbol bereits existiert
            {
               if(m_position.PositionType()==POSITION_TYPE_SELL) m_trade.PositionClose(_Symbol);   //und dies ist eine Kaufposition, dann schließen Sie sie
        // if(m_Position.PositionType()==POSITION_TYPE_SELL) return;
            }
         }
      
      OpenSell(sl,tp);
     }
    } 
    // m_trade.PositionClose(_Symbol);
  }