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

 
Vitaly Muzichenko:
Ja, Sie haben recht, aber der Code ist so geschrieben, dass mein Vorredner ihn falsch interpretiert hat.

Und zur Kontrolle?

//+------------------------------------------------------------------+
//|                                                   TestLogics.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int      Value=0;    // Количество имеющихся ордеров
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   if(Value>0) Alert("1. Количество ордеров=",Value);
   else Alert("2. Это код после else");
      {
      Alert("3. Ордера отсутствуют");
      }
  }
//+------------------------------------------------------------------+
Der Code in geschweiften Klammern bezieht sich nicht auf die if-else-Bedingung und wird immer ausgeführt, unabhängig von dem Wert in Value
 
Artyom Trishkin:

Und prüfen?


Der Code in geschweiften Klammern bezieht sich nicht auf die if-else-Bedingung und wird immer ausgeführt, unabhängig von dem Wert in Value

Oh je, jetzt habe ich mir den ursprünglichen Code noch einmal angesehen, und ich habe mich geirrt. Der Schreibstil ist irgendwie schief - hat mich verwirrt.

 

Erneut geprüft, das "Extra" entfernt.

DieDivision durch Null hat nichts gebracht.

Dateien:
zero.mq4  5 kb
 
trader781:

Erneut geprüft, das "Extra" entfernt.

DieDivision durch Null hat nichts gebracht.

 
trader781:

Erneut geprüft, das "Extra" entfernt.

Die Division durch Null ist nicht verschwunden

Denn es wird nicht geprüft, ob der Divisor ungleich 0 ist. Was nützt es, weiteren Code auszuführen, wenn es keine Aufträge und 0 Lots gibt?

 

Setzen Sie einen Scheck darauf

void ModifyOrders()
  {
   double avg_price=0;
   price=0;
   bool z=true;
   double orderlots=0;

   for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
      && (OrderMagicNumber()==Magic) && (OrderType()==FindLastOType()))
        {
         price+=OrderOpenPrice()*OrderLots();
         orderlots+=OrderLots();
        }
     }
    
   if(orderlots==0) { return; } // если ничего нет - выходим
   avg_price=NormalizeDouble(price / orderlots,Digits);
  
   if(FindLastOType()==OP_BUY)     tp=NormalizeDouble(avg_price+TakeProfit*Point(),Digits);
   if(FindLastOType()==OP_SELL)    tp=NormalizeDouble(avg_price-TakeProfit*Point(),Digits);


   for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
      && (OrderMagicNumber()==Magic) &&(OrderType()==FindLastOType()))

         z=OrderModify(OrderTicket(),OrderOpenPrice(),0,tp,0);
         if (!z)
         Print("Ошибка функции модифицирования");
     }
  }
 
Vitaly Muzichenko:

Setzen Sie einen Scheck darauf


Vitalie Postolache:


Ich habe allerdings die Lose vermisst, danke.
 
trader781:
Aber ich habe die Lose verpasst, danke.
Es ist in Ordnung, es zu übersehen, aber es ist nicht in Ordnung, das Fahrtenbuch nicht zu lesen, da steht alles drin, und es steht drin, welche Zeile falsch ist.
 
Vitaly Muzichenko:
Es ist in Ordnung, es zu verpassen, aber es ist nicht in Ordnung,die Zeitschrift nichtzu lesen, denn dort steht alles drin.

Ich hatte nicht vor, es zu lesen. Es heißt 'auf dem Markt zu überprüfen'. Meine Produkte werden nie auf den Markt kommen.

über das Dividieren durch Null.

Was ist mit dem oben genannten?Von dort aus soll es weitergehen.

{
Preis+=OrderOpenPrice()*OrderLots();
orderlots+=OrderLots();
}
}

if(orderlots==0) {return; }// wenn es nichts gibt, exit
avg_price=NormalizeDouble(price / orderslots,Digits);

if(FindLastOType()==OP_BUY) tp=NormalizeDouble(avg_price+TakeProfit*Point(),Digits);
if(FindLastOType()==OP_SELL) tp=NormalizeDouble(avg_price-TakeProfit*Point(),Digits);

 
trader781:
Ich hatte nicht vor, es zu lesen. Es heißt "auf dem Markt zu testen". Meine Produkte werden nie auf dem Markt sein.

Ich spreche von dem Magazin im Testgerät

Hinzugefügt: Montieren Sie den Code in seinen normalen Zustand, überarbeiten Sie ihn, führen Sie ihn dann im Tester aus und lesen Sie die Fehler im Protokoll. Sie geben mir hier Codefragmente.

Grund der Beschwerde: