Beunruhigt durch den Fehler gibt es keine Handelsgeschäfte - Seite 6

 

Dieses Problem ist sogar noch interessanter. Ich habe einen einfachen EA basierend auf dem Code aus dem obigen Beitrag erstellt. Außerdem werden 5 Geschäfte eröffnet, die jeweils 5 Minuten lang auf dem Markt sind und dann geschlossen werden. Hier ist der Code:

#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   static int test_ticket[2]={0,0};
   if(test_ticket[1]<5 && test_ticket[0]==0) {
      test_ticket[0]=OrderSend(_Symbol,OP_BUY,SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN),NormalizeDouble(Ask,_Digits),30,0.0,0.0,"test",33333,0,clrNONE);
      if(test_ticket[0]>0) test_ticket[1]++;
   }   
   if(OrderSelect(test_ticket[0],SELECT_BY_TICKET))
      if(OrderCloseTime()==0 && OrderOpenTime()+300<TimeCurrent())
         if(OrderClose(test_ticket[0],OrderLots(),NormalizeDouble(Bid,_Digits),30,clrNONE)) {
            printf("Test order closed, ticket #%d",test_ticket[0]);
            test_ticket[0]=0;
         }   
   
  }
//+------------------------------------------------------------------+

Er hat die Validierung beim ersten Versuch bestanden, aber es gibt keine Trades auf NZDUSD. Und warum?


Auch wenn der Validator die Einlage als unzureichend für die Eröffnung mit einer minimalen Menge festlegt, wird der Fehler 134 wie in der obigen Meldung angezeigt. Aber es gibt einfach keinen Handel! Und warum?

Vielleicht funktioniert der Validator nicht richtig oder es gibt eine vernünftige Erklärung?

 
Renat Akhtyamov:

und Sie stellen die vollständige Antwort des Validierers hier zuerst ein

Und wie kommen Sie darauf, dass der Entwerter die Fahrscheine nach dem von Ihnen erdachten Prinzip zuweist?

um 5 Geschäfte zu eröffnen, müssen Sie die Anzahl der offenen Geschäfte zählen und sich nicht mit Tickets herumschlagen

Renat, ich denke, dass es sich um Transaktionen handelt, schauen Sie sich das genauer an. Sie können meinen Code sogar im Testprogramm ausführen. Es gibt ein Array mit zwei Werten: test_ticket[0] - speichert die Reihenfolge der Tickets, test_ticket[1] - Anzahl der Versuche.

Durch Änderung der Anzahl der Versuche in der ersten Bedingung können Sie eine unterschiedliche Anzahl von Geschäften eröffnen

if(test_ticket[1]<5 && test_ticket[0]==0) {
 

Dies ist die Geschichte der folgenden Versuche mit unterschiedlicher Anzahl von Aufträgen


Und hier, bei einem der nächsten Versuche, verwendet der Prüfer tatsächlich den Mindestbetrag, der wissentlich nicht mit einer Einzahlung von 1 $ eröffnet werden kann. Es stellt sich die Frage, warum die Versuche nicht früher gehandelt wurden. Und warum wird bei diesem Lauf ein wissentlich falsches Mindestlos und eine falsche Einzahlung verwendet, die einen Validierungsfehler auslösen?

Vladimir Karputov:

...

Alles in allem hat der Validator seine Hauptaufgabe bisher gut gemeistert: unvollständigen Code aus dem Markt herauszufiltern.

Hmmm...

Und es ist keine zufällige Aufnahme. Hier sind die nächsten drei Versuche.


 

Der Fehler im Protokoll "No money to open such-and-such transaction..." deutet darauf hin, dass Sie zwar einen Handelsauftrag gesendet haben, aber vorher nichts (oder nicht alles) vollständig überprüft haben. Der Artikel enthält einen klaren Algorithmus zur Überprüfung.


Erinnern Sie sich an den Fehler "Es ist kein Geld da, um dieses oder jenes Geschäft zu eröffnen ...". - ist 99% des Fehlers in der Logik des Expert Advisors. Es sind fehlende Kontrollen (oder das völlige Fehlen von Kontrollen). Dies ist ein Zeichen für ein unzureichendes Verständnis der Kodierungsgrundsätze.


Denken Sie daran: In der realen Welt kann die Einzahlung 1 $ betragen, und die Hebelwirkung ist nicht immer 1:100, und das Mindestlos kann 0,01 und 0,02 und 0,30 und 1,0 sein, und eine Menge anderer Dinge...

 
Vladimir Karputov:

Der Fehler im Protokoll "No money to open such-and-such transaction..." deutet darauf hin, dass Sie zwar einen Handelsauftrag gesendet haben, aber vorher nichts (oder nicht alles) vollständig überprüft haben. Der Artikel enthält einen klaren Algorithmus zur Überprüfung.


Erinnern Sie sich an den Fehler "Es ist kein Geld da, um dieses oder jenes Geschäft zu eröffnen ...". - ist 99% des Fehlers in der Logik des Expert Advisors. Es geht um fehlende Kontrollen (oder das völlige Fehlen von Kontrollen). Dies ist ein Zeichen für ein unzureichendes Verständnis der Kodierungsgrundsätze.


Denken Sie daran: In der realen Welt kann die Einzahlung 1 $ betragen, und die Hebelwirkung ist nicht immer 1:100, und das Mindestlos kann 0,01 und 0,02 und 0,30 und 1,0 sein, und eine Menge anderer Dinge...

Vladimir, du hast den Elefanten übersehen. Das war der Hauptfehler.

Ich kann in Ihrer Sprache antworten und Ihnen einen Vortrag halten.

 
Vladimir Karputov:

Der Fehler im Protokoll "No money to open such-and-such transaction..." deutet darauf hin, dass Sie zwar einen Handelsauftrag gesendet haben, aber vorher nichts (oder nicht alles) vollständig überprüft haben. Der Artikel enthält einen klaren Algorithmus zur Überprüfung.


Erinnern Sie sich an den Fehler "Es ist kein Geld da, um dieses oder jenes Geschäft zu eröffnen ...". - ist 99% des Fehlers in der Logik des Expert Advisors. Es geht um fehlende Kontrollen (oder das völlige Fehlen von Kontrollen). Dies ist ein Zeichen für ein unzureichendes Verständnis der Kodierungsgrundsätze.


Denken Sie daran: In der realen Welt kann die Einzahlung 1 $ betragen, und die Hebelwirkung ist nicht immer 1:100, und das Mindestlos kann 0,01 und 0,02 und 0,30 und 1,0 sein, und eine Menge anderer Dinge...

Vladimir, ich weiß nicht, ob Sie die Beiträge generell lesen oder nur interessante Bilder heraussuchen. Lesen Sie alles noch einmal sorgfältig durch oder zumindest mehrmals vom Anfang der Seite an. Und lesen Sie den Code! Ich will mir gar nicht erst die Mühe machen, Ihnen das alles zu erklären!

 
Andrey Kaunov:

Ich will mir gar nicht die Mühe machen, Ihnen alles zu erklären!

Andrew, niemand will wiederholen, was bereits geschrieben und wiedergekäut wurde.

 
Ja, aber das Problem ist offensichtlich. Vielleicht wird jemand von dieser starken Website versuchen, sie zu analysieren und den Validator zu überprüfen. Der einfache, transparente Code ohne Parameter führt bei der Überprüfung von NZDUSD und GBPUSD manchmal nicht zum Ziel. Und wenn wir einige Bedingungen hinzufügen, und es wird auch kein Gold gehandelt, dann erhalten wir wieder den Fehler, dasskeine Handelsoperationen durchgeführt wurden und die Prüfung fehlte.
 
Andrey Kaunov:
Ja, aber das Problem ist da. Vielleicht wird jemand von dieser starken Seite versuchen, es trotzdem zu verstehen und den Validator zu überprüfen. Der einfache transparente Code ohne Parameter funktioniert bei NZDUSD und GBPUSD Check manchmal überhaupt nicht. Und wenn wir einige Bedingungen hinzufügen, und es wird auch kein Gold gehandelt, dann erhalten wir wieder den Fehler, dasskeine Handelsoperationen durchgeführt wurden und die Prüfung fehlte.

Verlassen Sie sich nicht darauf, dass der Validator einen Fehlercode aus der Fehlerliste des Handelsservers zurückgibt. Protokollieren Sie die Fehlermeldung immer selbst. Lesen Sie sorgfältig, was in dem Artikel steht, den Sie über die Unfähigkeit, den Auftrag auszuführen, kennen und was Sie in diesem Fall tun müssen.

Es ist durchaus möglich, dass das Fehlen einer Fehlermeldung im Protokoll, z.B. bei der Berechnung der Losgröße, die Ursache für Validierungsfehler ist.

 
Andrey Kaunov:

Dies ist die Geschichte der folgenden Versuche mit unterschiedlicher Anzahl von Aufträgen


Und hier, bei einem der folgenden Versuche, verwendet der Prüfer tatsächlich den Mindestbetrag, der wissentlich nicht mit einer Einzahlung von 1 $ eröffnet werden kann. Es stellt sich die Frage, warum die Versuche nicht früher gehandelt wurden. Und warum wird bei diesem Lauf ein wissentlich falsches Mindestlos und eine falsche Einzahlung verwendet, die einen Validierungsfehler auslösen?

Hmmm...

Und es ist keine zufällige Aufnahme. Hier sind die nächsten drei Versuche.


Fehler beim Senden eines Handelsauftrags 134 ...

Hat der Prüfer diesen Fehler geschrieben? Wenn ja, ist dies auch eine der Ursachen für Validierungsfehler. Sie müssen die Möglichkeit der Eröffnung einer Position selbst berechnen und, falls dies nicht möglich ist, eine eigene Meldung über die Unmöglichkeit des Handels mit den eingestellten Parametern in das Journal schreiben, anstatt einen wissentlich falschen Auftrag an den Server zu senden und sich darauf zu verlassen, dass das Terminal und der Server alles für Sie erledigen. Mit solchen falschen Aufträgen können Sie den Server überschwemmen und werden dann sicher vom automatischen Handel ausgeschlossen. Das ist Ihr Fehler, nicht der des Validierers.