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

 
Zvezdochet:

YES. Genau darum geht es im Lehrbuch von Sergei Kovalev. Sie ist diejenige, die im Moment am meisten fehlt.

Es gibt kein Lehrbuch über mql5 als solches auf dieser Website, ich weiß nicht, ob es andere gibt. Aber es gibt eine Menge Artikel, lesen Sie sie, vielleicht haben Sie Erfolg.

Статьи по MQL5
Статьи по MQL5
  • www.mql5.com
Статьи по программированию на языке MQL5
 

Meine Herren Programmierer!

Bitte helfen Sie mir, ein Problem zu lösen, mit dem ich seit einem Monat zu kämpfen habe.

Mein TS schließt aus irgendeinem Grund manchmal keine Aufträge ab.

Das sieht folgendermaßen aus:

Die ersten drei Aufträge - 44329646, 44330563 und 44337351 - lassen sich problemlos öffnen und schließen.

Und bei der vierten Bestellung kommt es zur Tragödie:

und so weiter bis ins Unendliche...

Das heißt, ein Expert Advisor eröffnet die Order 44339156 und versucht, die Order 44337351 zu schließen, die er selbst (!!!!) einige Stunden zuvor erfolgreich geschlossen hat.

Sie müssen ihn manuell schließen; wenn Sie das nicht tun, werden Sie mitunter unter dem stärksten Drawdown leiden. Was für eine Katastrophe!

Wie ist das möglich?

Der Code des Expert Advisors ist so einfach wie nur möglich:

здесь - условие открытия сделки
{
         RefreshRates();
         total_orders_NZDUSD=TotalOrders("NZDUSD.I");
         if(total_orders_NZDUSD==0)
         {
         Balance=AccountBalance();
         Lots=NormalizeDouble((Balance/(Ask*10.0))*0.01,2);
         double AskNorm=NormalizeDouble(Ask,Digits);
         ticket_buy_NZDUSD=OrderSend("NZDUSD.I",OP_BUY,0.01,AskNorm,0,0,0);
         }
      }
здесь - условие закрытия сделки
      {
         RefreshRates();
         if(OrderSelect(ticket_buy_NZDUSD, SELECT_BY_TICKET)==true)
         {
         total_orders_NZDUSD=TotalOrders("NZDUSD.I");
         ctm_ticket_buy_NZDUSD=OrderCloseTime();
         order_type_NZDUSD=OrderType();
            if(total_orders_NZDUSD>0)
            {
               if(ctm_ticket_buy_NZDUSD==0)
               {
                  if(order_type_NZDUSD==OP_BUY)
                  {
                  double BidNorm=NormalizeDouble(Bid,Digits);
                  OrderClose(ticket_buy_NZDUSD,0.01,BidNorm,0);
                  }
               }
            }
         }

Wie kann ein und dasselbe Programm "immer und immer wieder" funktionieren? Ich verstehe das nicht...

 
Alexander_K2:

Meine Herren Programmierer!

Bitte helfen Sie mir, ein Problem zu lösen, mit dem ich seit einem Monat zu kämpfen habe.

Mein TS schließt aus irgendeinem Grund manchmal keine Aufträge ab.

Es sieht so aus:

Die ersten drei Aufträge - 44329646, 44330563 und 44337351 - lassen sich problemlos öffnen und schließen.

Und bei der vierten Bestellung kommt es zur Tragödie:

und so weiter bis ins Unendliche...

Das heißt, ein Expert Advisor eröffnet die Order 44339156 und versucht, die Order 44337351 zu schließen, die er selbst (!!!!) einige Stunden zuvor erfolgreich geschlossen hat.

Sie müssen ihn manuell schließen; wenn Sie das nicht tun, werden Sie mitunter unter dem stärksten Drawdown leiden. Was für eine Katastrophe!

Wie ist das möglich?

Der Code des Expert Advisors ist so einfach wie nur möglich:

Wie kann ein und dasselbe Programm "immer und immer wieder" funktionieren? Ich verstehe das nicht...

Lesen Sie die Hilfe zu OrderSelect(). Lesen Sie insbesondere den Hinweis zur Auswahl per Ticket. Auch ein abgeschlossener Auftrag wird per Ticket ausgewählt. Es ist bereits geschlossen, und Sie versuchen, es wieder zu schließen.

Wenn 0, bedeutet es, dass es noch auf dem Markt ist, schließen Sie es, wenn > 0, bedeutet es, dass es bereits geschlossen ist und es gibt keine Notwendigkeit, es wieder zu treten, wird es nicht zum Leben kommen und wird nicht geschlossen.

 
Artyom Trishkin:

Lesen Sie die Hilfe zu OrderSelect(). Insbesondere über die Auswahl per Ticket. Auch ein abgeschlossener Auftrag wird über das Ticket ausgewählt. Es ist bereits geschlossen, und Sie versuchen, es wieder zu schließen.

Wenn es ausgewählt ist, überprüfen Sie die Schließungszeit - wenn 0, bedeutet es, dass es noch auf dem Markt ist - schließen Sie es, wenn > 0, bedeutet es, dass es bereits geschlossen ist und Sie es nicht noch einmal treten müssen - es wird nicht zum Leben erweckt und wird nicht geschlossen.

Vielen Dank - ich werde es versuchen.

 
Alexander_K2:

Vielen Dank - ich werde es ausprobieren.

Bitte sehr. Sie müssen es nicht versuchen, Sie müssen es tun...

 
Artyom Trishkin:

Ich bitte Sie. Sie müssen es nicht versuchen, Sie müssen es tun...

Artem, ich habe die Hilfe gelesen - alles scheint richtig zu sein.

ctm_ticket_buy_NZDUSD=OrderCloseTime();
         ...
               if(ctm_ticket_buy_NZDUSD==0)
            ...

Ich überprüfe die Schließungszeit.

Hier sind einige Informationen aus der MQL4-Referenz:

Es wird empfohlen, die Funktion OrderSelect() unmittelbar vor der Abfrage der letzten Auftragsdaten aufzurufen.

Auch das ist richtig.

Was ist dann falsch?

 
Alexander_K2:

Artem, ich habe die Hilfe gelesen - alles scheint richtig zu sein.

Ich überprüfe die Schließungszeit.

Ich habe es in der MQL4-Referenz gelesen:

Es wird empfohlen, die Funktion OrderSelect() unmittelbar vor der Abfrage der letzten Auftragsdaten aufzurufen.

Auch das ist richtig.

Was ist dann los?

Was ist das für eine Funktion?

total_orders_NZDUSD=TotalOrders("NZDUSD.I");
Und welcher Auftrag wird nach der Bearbeitung vergeben?
 
Alexander_K2:

Meine Herren Programmierer!

Bitte helfen Sie mir, ein Problem zu lösen, mit dem ich seit einem Monat zu kämpfen habe.

Mein TS schließt aus irgendeinem Grund manchmal keine Aufträge ab.

Es sieht so aus:

Die ersten drei Aufträge - 44329646, 44330563 und 44337351 - lassen sich problemlos öffnen und schließen.

Und bei der vierten Bestellung kommt es zur Tragödie:

und so weiter bis ins Unendliche...

Das heißt, ein Expert Advisor eröffnet die Order 44339156 und versucht, die Order 44337351 zu schließen, die er selbst (!!!!) einige Stunden zuvor erfolgreich geschlossen hat.

Sie müssen ihn manuell schließen; wenn Sie das nicht tun, werden Sie mitunter unter dem stärksten Drawdown leiden. Was für eine Katastrophe!

Wie ist das möglich?

Der Code des Expert Advisors ist so einfach wie nur möglich:

Wie kann ein und dasselbe Programm "immer und immer wieder" funktionieren? Ich verstehe das nicht...

In welche Richtung schauen Sie auf das Auftragsfeld?

Wenn es bei der "Überarbeitung" zu Schließungen/Löschungen kommt, ist es besser, in die entgegengesetzte Richtung zu schauen. Von OrdersTotal()-1 bis einschließlich 0.

Andernfalls könnten Sie auf sie treten :-)


 
Artyom Trishkin:

Was ist diese Funktion?

Diese Funktion wurde mir freundlicherweise von Goldtrader zur Verfügung gestellt, wofür ich aufrichtig dankbar bin.

//+------------------------------------------------------------------+
//| Calculate Market Orders function                                 |
//+------------------------------------------------------------------+
int TotalOrders(string sy) {    // sy - Currency Pair
int orders=0;
   for (int i=0; i<OrdersTotal(); i++) {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
        if (OrderSymbol()==sy) {
           if (OrderType()==OP_SELL || OrderType()==OP_BUY) {
             orders++;
           }
         }
       }
     }
return(orders);
}

Es ermöglicht Ihnen, Aufträge für verschiedene Währungspaare gleichzeitig zu eröffnen.

:))) Meiner Meinung nach hat damit alles angefangen, denn ich habe sie vor etwa einem Monat aktiviert... Ohne sie kann ich den Gral nicht sehen.

Stimmt etwas nicht mit ihm?

 

Aber irgendetwas stimmt wirklich nicht...

Ich meine, ich macheOrderSelect einmal und dann wieder von der Funktion aus... Das macht doch keinen Sinn...

Grund der Beschwerde: