Validierungsfehler bei der Freigabe des Handelsroboters für den Markt. - Seite 6

 
Andrey Kaunov:

Sie denken, ich prüfe das nicht. Die Losgröße wird in einer separaten Funktion geprüft

Limits werden hier nicht benötigt, da Stop Loss und Take Profit bei Handelseröffnung gleich Null sind.RefreshRates() aktualisiert die Daten bei der Lotberechnung. Natürlich gibt es keine Überprüfung der Verbindung usw. vor jeder Eingabe, aber das ist nicht der Punkt. Wenn OrderSend eine Anfrage sendet, wird ein bestimmter Fehler angezeigt: 130, 131 usw. Aber was ich habe, ist.

Ich versuche gar nicht, einen Auftrag zum Öffnen zu senden. Auch im letzten Test, als ich in der Funktion OnInit() eine Prüfposition festlegte.


Das ist möglich. Aber ich habe bereits alles doppelt geprüft. Ich weiß nicht, wohin ich als nächstes gehen soll.

In der Funktion Losnormalisierung runden Sie das Los nach der Prüfung auf den Max/Min-Wert auf.
 
Artyom Trishkin:
In der Funktion Losnormalisierung runden Sie das Los nach der Prüfung auf den Max/Min-Wert auf.

Nun, ja, das tue ich.

MathRound();
P.S. Ich glaube, Sie müssen von Eingabeparametern graben, weil es passiert, dass es geht. Führen Sie für jeden Parameter eine "narrensichere" Prüfung durch.
 
Ich spreche nicht von den Prüfprotokollen der Prüfer. Aber zumindest die Parameter, die NICHT validiert sind, können möglicherweise gesendet werden. Es gibt nichts zu entdecken, um den Code zu korrigieren. Mir ist klar, dass die Variabilität bei der Auswahl der Testparameter unendlich groß sein kann. Sie können eine Variable vom Typ int entweder auf +50000 oder -45000 setzen. Aber ich kann nicht einfach einige Eingabeparameter auf einen bestimmten Wertebereich beschränken. Dies ist bei den verschiedenen Werkzeugen unterschiedlich.
 
Andrey Kaunov:
Ich spreche nicht einmal von den Prüfprotokollen der Prüfer. Aber zumindest die Parameter, die NICHT validiert sind, können möglicherweise gesendet werden. Es gibt nichts, woran man sich festhalten könnte, um den Code zu reparieren. Ich bin mir bewusst, dass die Variabilität bei der Wahl der Testparameter unendlich groß sein kann. Sie können eine Variable vom Typ int entweder auf +50000 oder -45000 setzen. Aber ich kann nicht einfach einige Eingabeparameter auf einen bestimmten Wertebereich beschränken, da dieser für verschiedene Instrumente unterschiedlich sein wird.

Sie müssen sicherstellen, dass das Handelslos in jedem Fall gültig ist. Nicht umsonst habe ich darauf hingewiesen, dass Sie das Los in Ihrem Code ändern, nachdem es auf einen gültigen Größenbereich geprüft wurde.

Und es ist die Prüfung auf absolut dumme Eingabeparameter, die durchgeführt werden muss.

 

Es gibt kein Problem mit dem Grundstück. Es wird auf max/min geprüft. Vor dem Runden wird sie durch den Schritt geteilt, dann wird die gerundete ganze Zahl wieder mit dem Schritt multipliziert. Wir erhalten ein völlig korrektes Los.

//+------------------------------------------------------------------+
//| Функция нормализации лота                                        |
//+------------------------------------------------------------------+
double NormalizeLots(string symbol, double lot, bool is_margin=true) {
   if(lot<=0) return(0.0);
   RefreshRates();
   double min=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN);
   double max=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX);
   double step=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP); 
   double free = AccountFreeMargin()*0.95;
   double margin = MarketInfo(symbol,MODE_MARGINREQUIRED);
   double _lot=lot<min?min:(lot>max?max:lot);
          _lot=MathRound(_lot/step)*step;
   if(is_margin && _lot*margin>free)  _lot=0.0; //MathFloor(free/margin/step)*step;
   return(_lot);
}

_lot(0.568)/step(0.01)=56.8

MathRound(56.8)=57

57*Schritt(0,01)=0,57

Als nächstes wird geprüft, ob genügend freier Spielraum zum Öffnen vorhanden ist. Der Prüfer flucht überhaupt nicht viel. Es sieht die Handelsfunktionen nicht, weil die Eingabeparameter falsch sind. Der Expert Advisor macht mit einer bestimmten Kombination von ihnen einfach überhaupt keine Geschäfte! Es ist ja nicht so, dass ich einen nicht konditionierten Martin habe oder einen Gridlocker, der sich bei jedem Kerzenständer öffnet. Wie erkläre ich dem Validator, dass der EA mit bestimmten Parametern logischerweise keine Trades macht?

 
Andrey Kaunov:

Es gibt kein Problem mit dem Grundstück. Es wird auf max/min geprüft. Vor dem Runden wird sie durch den Schritt geteilt, dann wird die gerundete ganze Zahl wieder mit dem Schritt multipliziert. Wir erhalten ein völlig korrektes Los.

_lot(0.568)/step(0.01)=56.8

MathRound(56.8)=57

57*Schritt(0,01)=0,57

Anschließend wird geprüft, ob genügend Spielraum zum Öffnen vorhanden ist. Der Prüfer flucht überhaupt nicht viel. Es sieht die Handelsfunktionen nicht, weil die Eingabeparameter falsch sind. Der Expert Advisor macht mit einer bestimmten Kombination von ihnen einfach keine Trades! Es ist ja nicht so, dass ich einen nicht konditionierten Martin habe oder einen Gridlocker, der sich bei jedem Kerzenständer öffnet. Wie kann ich dem Validator erklären, dass der EA logischerweise keine Trades mit bestimmten Parametern macht?

Erklären Sie nicht, sondern lassen Sie den EA die falschen Eingabeparameter korrigieren. Vorzugsweise mit einer Meldung an das Journal über ihren ungültigen Wert und die Korrektur auf den gültigen Wert.

Und wenn Sie aus irgendeinem Grund den Benutzer für die Eingabe falscher Parameter in der realen Welt verantwortlich machen wollen, sollte der Benutzer über die falschen Parameter informiert werden.
Aber für den Tester müssen sie auch korrigiert werden - damit der EA tradet.

 

Wie können sie also angepasst werden, wenn es einige Parameter für EURUSD und andere für Gold gibt? Im Moment sind die Standardeinstellungen für die wichtigsten Paare mehr oder weniger akzeptabel, aber für Gold werden sie überhaupt nicht funktionieren. Dort wird es keinen Handel geben. Deshalb gibt es ja die Parameter (so wie ich sie verstehe), um sie an jedes Instrument anzupassen. Wenn alles so einfach wäre, hätte ich alle Parameter in den Expert Advisor eingebettet und nichts an die äußeren Parameter gesendet.

Ein weiterer Fehler des Validators ist, dass er andere Zeitrahmen überhaupt nicht erkennt. Ich habe sie umgangen, was aber zu einem gewissen Grad zu Lasten des Algorithmus geht. Der Expert Advisor übernimmt Daten aus anderen Zeitrahmen, von wöchentlich, D1, H4, etc. bis M1. Aber die Daten sind null, wie ich durch zahlreiche Experimente herausgefunden habe. Wir können nichts dagegen tun, wir können sie nur umgehen. Warum müssen wir den Expert Advisor zum Nachteil des Algorithmus ändern? Ist es nicht umgekehrt: Der Validator sollte an die Tests angepasst werden. Andernfalls wird die Überprüfung eines perfekt funktionierenden EA zu einer Art Schwerstarbeit!

 
Andrey Kaunov:
Wie können sie also angepasst werden, wenn es einige Parameter für EURUSD und andere für Gold gibt? Im Moment sind die Standardeinstellungen für die wichtigsten Paare mehr oder weniger akzeptabel, aber für Gold werden sie überhaupt nicht funktionieren. Dort wird es keinen Handel geben. Deshalb gibt es ja die Parameter (so wie ich sie verstehe), um sie an jedes Instrument anzupassen. Wenn alles so einfach wäre, hätte ich alle Parameter in den Expert Advisor eingebettet und nichts an die äußeren Parameter gesendet.
Sie haben eine Division durch 0 direkt vor OrderSend gesetzt - und es gab einen solchen Fehler. Sie erreicht also OrderSend, wird aber nicht geöffnet. Das heißt, bei den Partien/Margen/Limits/Preisen ist etwas davon nicht berücksichtigt.
 
Maxim Kuznetsov:
Sie haben die Division durch 0 bereits kurz vor OrderSend gesetzt - und es gab einen solchen Fehler. Sie gelangt also zu OrderSend, wird aber nicht geöffnet. Partien/Spanne/Limits/Preis, einige davon werden nicht berücksichtigt.

Maxim, wenn eines dieser Dinge nicht berücksichtigt wird, gibt der Prüfer einen sehr eindeutigen Fehler an: 130, 131, 134, 145 usw. Das ist hier nicht der Fall!

P.S. Glauben Sie mir, ich habe in 4 Tagen über hundert Validierungen verschickt und viele Optionen ausprobiert.

 

Ja, sie erreicht sofort die Division durch 0 (daher OrderSend). Und es wird ein Fehler erzeugt.

Aber wenn ich für die Überprüfung der Expert Advisor ohne Division durch 0 in den Code zu senden, es irgendwie magisch setzt Parameter, die nicht öffnen Trades überhaupt während des angegebenen Zeitraums und gibt einen Fehler. Dies ist meine Version der Geschehnisse, aber offenbar ist sie nicht weit von der Wahrheit entfernt.

Grund der Beschwerde: