Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 716

 
Alex Pirate:
Hallo zusammen, was muss überprüft werden??? gibt eine Warnung bei Änderung und beim Öffnen .... (???) es gibt einen Wert zurück und ich muss ihn überprüfen ... wie??? EA öffnet Aufträge, wie ich es für richtig halte ... (((
extern string MMM          = "MMM";
extern double Lot          = 0.1;
extern int    TakeProfit   = 50;
extern int    StopLoss     = 20;
extern int    Slippage     = 3;
extern int    Magic        = 888;
// Moving Average 1
extern string Indi_MA1        = "MA1";
extern int    MA1_Period   = 22;
extern int    MA1_Shift    = 0;
extern int    MA1_Method   = 0;
extern int    MA1_Price    = 0;
// Moving Average 2
extern string Indi_MA2        = "MA2";
extern int    MA2_Period   = 55;
extern int    MA2_Shift    = 0;
extern int    MA2_Method   = 0;
extern int    MA2_Price    = 0;
//+------------------------------------------------------------------+
double MA1,MA2,SL,TP;
int ticket;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
    if (Digits == 3 || Digits == 5)
    {
      TakeProfit = TakeProfit * 10;
      StopLoss = StopLoss     * 10;
      Slippage = Slippage     * 10;
    }
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{
 return(0);
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick() 
 {           
    MA1 = iMA(Symbol(),0,MA1_Period,MA1_Shift,MA1_Method,MA1_Price,0);
    MA2 = iMA(Symbol(),0,MA2_Period,MA2_Shift,MA2_Method,MA2_Price,0);
    
    if (Ask >= MA1 && MA1 >= MA2 && CountBuy() == 0)
    {
       SL = NormalizeDouble(Ask - StopLoss   * Point,Digits);
       TP = NormalizeDouble(Ask + TakeProfit * Point,Digits);
       ticket = OrderSend(Symbol(),OP_BUY ,Lot,Ask,Slippage,0,0,"",Magic,0,Green);
       if (ticket > 0)
       { 
         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
            if( !OrderModify(ticket,OrderOpenPrice(),SL,TP,0) )  return;

       }      
        
    if (Bid <= MA1 && MA1 <= MA2 && CountSell() == 0) 
    
       SL = NormalizeDouble(Bid + StopLoss   * Point, Digits);
       TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);
       ticket = OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,0,0,"",Magic,0,Red);
       if (ticket > 0)
       { 
         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
            if( !OrderModify(ticket,OrderOpenPrice(),SL,TP,0) ) return;

       }                
    }
 }
//+------------------------------------------------------------------+
int CountBuy()
{
   int count = 0; 
   for (int trade = OrdersTotal() - 1; trade >= 0; trade--)
   {
      if( !OrderSelect(trade,SELECT_BY_POS, MODE_TRADES) ) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() ==  Magic)
      {
        if (OrderType() == OP_BUY)
        count++; 
      } 
   }
   return(count);
}
//+------------------------------------------------------------------+
int CountSell()
{
   int count = 0;
   for (int trade = OrdersTotal() - 1; trade >= 0; trade--)
   {
      if( !OrderSelect(trade,SELECT_BY_POS, MODE_TRADES) ) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() ==  Magic) 
      {
        if (OrderType() == OP_SELL)
        count++; 
      }
   }
   return(count);
}
//+------------------------------------------------------------------+
 
Konstantin Nikitin:

Ich danke Ihnen!!! Ich werde es ausprobieren.

 
die Fehler sind verschwunden... Aber aus irgendeinem Grund werden nicht alle Aufträge geöffnet und aktualisiert... es sieht so aus, als ob wir die Modifikation irgendwie überprüfen müssen... ich muss irgendwo einen Fehler gemacht haben...
 
Alex Pirate:
die Fehler sind verschwunden... Aber aus irgendeinem Grund öffnen und aktualisieren sich nicht alle Aufträge... es sieht so aus, als ob wir die Änderungsprüfung irgendwie überprüfen müssen... ich muss irgendwo einen Fehler gemacht haben...

Ich habe den Code nicht durcheinander gebracht. Ich verstehe es nicht... Also, Sie sind der Experte, ich überlasse es Ihnen.

 
Konstantin Nikitin:

Ich habe den Code nicht herausgefunden. Ihr Experte, Ihre Karten liegen also in Ihren Händen.

Ich hab's. Trotzdem danke.

 
Maxim Kuznetsov:

kann dies über die globalen Variablen des Terminals erfolgen. Vorausgesetzt, Sie haben den Quellcode des Indikators und können ihn bearbeiten.

Das bedeutet, dass der Indikator den Parameter nicht durch extern, sondern durch den Aufruf von GlobalVariableGet() berechnet. Dementsprechend wird der Expert Advisor diese Variable über GlobalVariableSet ändern

Danke, Maxim, jetzt weiß ich wenigstens, wo ich anfangen kann.
 
Wie kann ich eine virtuelle Methode einer übergeordneten Klasse aufrufen?
 
Es gibt einen Zickzack-Indikator, der den Kurswert eines Extremums anzeigt. Ich muss eine Trendlinie vom Extremum in die Zukunft (den nächsten Tag) zeichnen, wie kann ich das tun, ohne die Koordinaten des zweiten Punktes und den Zeitwert des ersten Punktes zu kennen?
 
Vladimir Pastushak:
Wie ruft man eine virtuelle Methode einer übergeordneten Klasse auf?

eine virtuelle Methode ist eine virtuelle Methode, weil sie nur eine Beschreibung hat und der Körper in jeder Klasse separat geschrieben wird

Wenn Ihre Aufgabe jedoch nur darin besteht, eine Methode aus einer übergeordneten Klasse aufzurufen (d. h. die Methode hat bereits einen Körper), steht sie (die Methode) durch Vererbung als reguläre Methode zur Verfügung - siehe den Quellcode

 
Igor Makanu:

eine virtuelle Methode ist eine virtuelle Methode, weil sie nur eine Beschreibung hat und der Körper in jeder Klasse separat geschrieben wird

wenn Ihre Aufgabe jedoch nur darin besteht, eine Methode aus einer übergeordneten Klasse aufzurufen (d.h. die Methode hat bereits einen Körper), steht sie (die Methode) durch Vererbung als reguläre Methode zur Verfügung - der Quellcode sollte gesehen werden

Ich danke Ihnen. Ich kann keine Methode einer übergeordneten Klasse aufrufen lassen.

Soweit ich mich erinnere, geschieht dies über die Methode parent ::.

Grund der Beschwerde: