Dadurch kann der Berater kein Geld verdienen. - Seite 4

 
FAQ:

... bitte:

Die Hälfte der globalen und lokalen Variablen sind nicht initialisiert - ich bin mir sicher, dass sie irgendwann einmal eine Menge Müll enthalten.

Mit OrderSelect() wird nie geprüft, ob eine Bestellung ausgewählt ist, es wird nicht einmal geprüft, ob sie überhaupt offen oder geschlossen ist.

Ich habe keine Aktualisierung der Kurse vor den Handelsfunktionen bemerkt...

GetLastError wird vor dem Öffnen/Schließen nicht zurückgesetzt, sondern überprüft - auch hier wird es Fälle geben, in denen die Variable nicht funktioniert.

Sie überprüfen und normalisieren die Preise beim Abschluss nicht

Möchten Sie fortfahren?

Fahren Sie fort.

Sehr nützlich.

 

Hier https://www.mql5.com/ru/forum/137651/page3 habe ich meine Abschlussfunktion gepostet

Ersetzen Sie GetInfo() durch print, Fun_Error() = ErrorDescription()

 
FAQ:

Sie prüfen nie, ob eine Bestellung mit OrderSelect() ausgewählt wurde,


Ehrlich gesagt, verstehe ich nicht ganz, was zu tun ist, wenn bei der Auswahl einer Bestellung ein Wert - false - zurückgegeben wird.

Bedeutet "falsch", dass es bei MODE_TRADES zu 100 % fehlt?

Ich habe Order Opening Codes nach Ihren Empfehlungen neu gezeichnet, ehrlich gesagt, habe ich die Konfiguration des Expert Advisors nicht berührt, also bin ich gespannt... Wird es sich verkaufen oder wird es einen weiteren Gewinn einfahren?

 
valenok2003:


Um ehrlich zu sein, verstehe ich nicht ganz, was zu tun ist, wenn bei der Auswahl einer Bestellung false zurückgegeben wird.

Bedeutet "falsch", dass es bei MODE_TRADES zu 100 % fehlt?


bedeutet dies zu 100 %, dass nichts mit dem Auftrag gemacht werden kann, weil er nicht ausgewählt ist.
 
PapaYozh:

bedeutet dies zu 100 %, dass nichts mit ihm [dem Auftrag] gemacht werden kann, da er nicht ausgewählt ist.



Genau... Oh, Mann... aber wenn es nicht ausgewählt ist, gibt es einen Fehler, nicht wahr? Es muss etwas getan werden...

Siehe zum Beispiel diese Funktion,

//+-------
//+------------------------------------------------------------------+
//|   valenok2003@mail.ru                                05.07.2011
//+------------------------------------------------------------------+
//| check_open_order() ПРОВЕРКА реального открытия рыночного ордера по тикету
//| Требует:
//| - тикет ордера 
//| Возвращает тикет открытого ордера или -1
//+------------------------------------------------------------------+
int check_open_order(int _Ticket)
{  string _Function = "check_open_order(): ";
//-----------------
   if(_Ticket > 0) {  
      OrderSelect(_Ticket,SELECT_BY_TICKET);             
      if(OrderType() <= 1) {  
         output_mov_string(order_type_in_txt(OrderType())+ " успешно открыт!", Clr_Report);
         output_sound(Name_Sound_Open);
         OrderPrint();
//-----------------         
         for(int _n = 0; _n < MAX_ORDERS; _n++)  {
            // Если место свободно
            if(Arr_Tickets[_n] == 0)   {
               // Создаём запись об ордере
               Arr_Tickets[_n] = OrderTicket();
               break;
            }
         }
      }
      else _Ticket = -1;
   }
//-----------------
   return(_Ticket);
}
//+-------------------------------------------------------------------
//+-------
Wenn die Bestellung nicht ausgewählt ist, sollte ich -1 zurückgeben. Und wenn er aus irgendeinem anderen Grund nicht ausgewählt wird - zum Beispiel wegen eines Fehlers -, der Auftrag aber offen ist, was soll ich dann tun?
 
valenok2003:


Genau... Verdammt... Aber wenn es nicht ausgewählt ist, ist es eine Art Fehler, oder? Es muss etwas getan werden...


Sie darf nicht ausgewählt werden:

1) aufgrund von Fehlern im Code des Expert Advisors;

2) es wurde aufgrund von Umständen geschlossen, die außerhalb der Kontrolle des EA liegen (ausgelöster SL/TP, manuell geschlossen, vom EA geschlossen)

 
valenok2003:


Genau... Oh, Mann... aber wenn es nicht ausgewählt ist, gibt es einen Fehler, nicht wahr? Es muss etwas getan werden...

Wollen Sie mich auf den Arm nehmen oder ist das Ihr Ernst?

Halten Sie an und wählen Sie erneut. Ich habe es so organisiert, es funktioniert online:

// ------------------------------------------------Ищем наш ордер---------------------------------
   int orderType;
   for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
   {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))     continue;
      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber)) continue;
      orderType = OrderType();
      if ((orderType != OP_BUY) && (orderType != OP_SELL)) continue;
          ticket = OrderTicket( );                         // Номер ордера
          orderLots = OrderLots();                         // Lots   
          orderProfit = OrderProfit() + OrderSwap();       // Profit
          Price = OrderOpenPrice();                        // Цена открытия рыночного ордера
          SL =  OrderStopLoss();                           // Значение StopLoss ордера
          TP = OrderTakeProfit();                          // Значение TakeProfit ордера          
          if (ticket>0)                                    // Если позиция открылась
              {
                while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                Sleep(100);                                 
                double OpenPrice=OrderOpenPrice();
       // Print("OrderTicket()=",OrderTicket(),  "OrderOpenTime()=",OrderOpenTime()); 
       // Print("TimeLocal()=",TimeLocal());                                                                    
                     //---------------------Запоминаем значения сл и тп ордера   
...
...
...
                  
 
Roman.:

Wollen Sie mich auf den Arm nehmen oder ist das Ihr Ernst?

Halten Sie an und wählen Sie erneut. Ich habe es so organisiert, dass es online funktioniert:

Ich habe meinen Beitrag dort ergänzt.

Wie viele Male muss ich wählen?

 
valenok2003:

Ich habe meinen Beitrag dort ergänzt.

Und wie oft soll man wählen?

BEFORE. Bis es in einer Schleife ausgewählt wird:

if (ticket>0)                                    // Если позиция открылась
              {
                while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                Sleep(100);                                 
                double OpenPrice=OrderOpenPrice();
       // Print("OrderTicket()=",OrderTicket(),  "OrderOpenTime()=",OrderOpenTime()); 
       // Print("TimeLocal()=",TimeLocal());                                                                    
                     //---------------------Запоминаем значения сл и тп ордера                     
                if (orderType == OP_BUY) 
                   {                
                     
                   }
            
                if (orderType == OP_SELL) 
                   {        
                   
                   }   
                            
              }
 
PapaYozh:


Sie darf nicht ausgewählt werden:

1) Wegen eines Fehlers im EA-Code;

das ist ganz klar

2) weil der Auftrag aufgrund von Umständen geschlossen wurde, die sich der Kontrolle des EA entziehen (ausgelöster SL/TP, manuell geschlossen, durch den EA geschlossen)

nur diese beiden Gründe oder könnte es noch etwas anderes geben?
Grund der Beschwerde: