Diskussion zum Artikel "Welche Überprüfungen der Handelsroboter vor der Veröffentlichung in Market bestehen soll" - Seite 2

 

Vielen Dank, der Artikel ist sehr nützlich.

Mir ist nicht ganz klar, dass im Unterthema "Begrenzung der Anzahl der Lots um ein Symbol" der Code der Funktion PositionVolume() zweimal angegeben ist.
Gleich darunter steht die Beschreibung der Funktion NewOrderAllowedVolume() und deren Aufruf:

double orders_volume_on_symbol=PendingsVolume(symbol);

Nur die Beschreibung der Funktion PendingsVolume() ist in dem Artikel nirgends zu finden.

Sollte statt der Funktion PendingsVolume() irrtümlich wieder die Funktion PositionVolume() angegeben sein, so korrigieren Sie dies bitte.

 
ok google, wie die Validierung zu passieren, nein nicht so, ich brauche ein Beispiel für eine einfache EA, die 100% passieren Validierung zu studieren seinen Code und vergleichen Sie es mit meinem eigenen zu finden, was ein Fehler sein kann, und noch besser, mehr Details über die Validierung - wie es geschieht, was es tut.
 

Das ist ein interessanter Artikel, leider gibt es zu viele Fehler (Tippfehler oder sogar logische Fehler im vorgeschlagenen Code), und es wird wahrscheinlich mehr Leute verwirren als ihnen an einigen Stellen helfen.

//+------------------------------------------------------------------+
//| Rückgabe des maximal erlaubten Volumens für eine Order auf das Symbol |
//+------------------------------------------------------------------+
double NewOrderAllowedVolume(string symbol)
  {
   double allowed_volume=0;
//--- die Begrenzung des maximalen Auftragsvolumens
   double symbol_max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
//--- die Begrenzung des Volumens durch ein Symbol erhalten
   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT);

//--- Ermitteln des Volumens der offenen Position für ein Symbol
   double opened_volume=PositionVolume(symbol);
   if(opened_volume>=0)
     {
      //--- wenn wir das Volumen ausgeschöpft haben
      if(max_volume-opened_volume<=0)
         return(0);

      //--- das Volumen der offenen Position übersteigt nicht max_volume
      double orders_volume_on_symbol=PendingsVolume(symbol);
      allowed_volume=max_volume-opened_volume-orders_volume_on_symbol;
      if(allowed_volume>symbol_max_volume) allowed_volume=symbol_max_volume;
     }
   return(allowed_volume);
  }

Logischer Fehler. Wenn es noch keine Position gibt, muss man immer noch das anhängige Volumen prüfen und das erlaubte Volumen berechnen. Dieser Code gibt allowed_volume=0 zurück, wenn noch keine Position geöffnet ist, ohne die Pendings zu berücksichtigen.

bool OrderModifyCheck(ulong ticket,double price,double sl,double tp)
  {
//--- Bestellung nach Ticket auswählen
   if(orderinfo.Select(ticket))
     {
      //--- Punktgröße und Name des Symbols, für das ein schwebender Auftrag erteilt wurde
      string symbol=orderinfo.Symbol();
      double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
      int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);
      //--- prüfen, ob es Änderungen im offenen Preis gibt
      bool PriceOpenChanged=(MathAbs(orderinfo.PriceOpen()-price)>point);
      //--- prüfen, ob es Änderungen in der StopLoss-Ebene gibt
      bool StopLossChanged=(MathAbs(orderinfo.StopLoss()-sl)>point);
      //--- prüfen, ob es Änderungen in der Takeprofit-Stufe gibt
      bool TakeProfitChanged=(MathAbs(orderinfo.TakeProfit()-sl)>tp);
      //--- wenn es Änderungen in den Ebenen gibt
      if(PriceOpenChanged || StopLossChanged || TakeProfitChanged)
         return(true);  // Reihenfolge kann geändert werden 
      //--- es gibt keine Änderungen in den Ebenen Open, StopLoss und Takeprofit
      else
      //--- Benachrichtigung über den Fehler
         PrintFormat("Order #%d already has levels of Open=%.5f SL=.5f TP=%.5f",
                     ticket,orderinfo.StopLoss(),orderinfo.TakeProfit());
     }
//--- zum Ende gekommen, keine Änderungen für den Auftrag
   return(false);       // Änderungen sind sinnlos 
  }

Ein weiterer logischer Fehler. Das Ändern eines SL/TP um 1 Punkt ist erlaubt. Es sollte >= sein.

+ Tippfehler, sollte "-tp)>=Punkt);" sein

+ fehlender Parameter (PrintFormat hat für %, aber nur 3 Parameter sind vorgesehen).

bool PositionModifyCheck(ulong ticket,double sl,double tp)

Ähnlicher Fehler wie Punkt 2° oben.

Und die gleichen Fehler auch in OrderModifyCheck() mql4 Version.

Vielen Dank für die Behebung dieser Fehler, bitte beachten Sie, dass ich nicht alle Artikel in der Tiefe zu überprüfen, so vielleicht gibt es mehr.

 

Einige andere Kommentare zu diesem Artikel, aber diesmal nicht auf Fehler bezogen, sondern mehr auf meine persönliche Meinung:

Access violation

Dieser Fehler tritt auf, wenn versucht wird, Speicher zu adressieren, auf den der Zugriff verweigert wird. In jedem solchen Fall ist es notwendig, die Entwickler über den Service Desk in Ihrem Profil oder über die Seite Kontakte zu kontaktieren.
  • Lustigerweise hat dies nichts in einem Artikel über Benutzer (Programmierer) Fehler zu tun. Eine Zugriffsverletzung bedeutet, dass es sich um einen Fehler im Code von Metaquotes handelt.

Diese Art von Fehlern ist relativ selten, viele von ihnen haben fertige Codes, die bei der Suche nach der Ursache helfen sollen.

Konstante Wert Beschreibung
ERR_INTERNAL_ERROR 4001 Unerwarteter interner Fehler
ERR_WRONG_INTERNAL_PARAMETER 4002 Falscher Parameter im inneren Aufruf der Client-Terminal-Funktion
  • Fehlercodes sind dazu da, um zu helfen, aber "Unerwarteter interner Fehler" ist völlig nutzlos und "Falscher Parameter im inneren Aufruf der Client-Terminal-Funktion" ist wirklich kryptisch (zumindest für mich).

Neueinsteigern wird empfohlen, alle Artikel über Fehlerbehandlung zu lesen, sowie Fragen im Forum und in den Kommentaren zu den Artikeln zu stellen. Andere, erfahrenere Mitglieder der MQL5.community werden Ihnen dabei helfen, unklare Punkte zu klären. Wir hoffen, dass die in diesem Artikel gesammelten Informationen Ihnen helfen werden, zuverlässigere Handelsroboter in kürzerer Zeit zu erstellen.

  • Der Markt ist ein kommerzieller Service, der von Metaquotes angeboten wird. Sie sollten den Support übernehmen und sich nicht auf die Community verlassen. Meiner Meinung nach ist das kein professioneller Ansatz.

Trotz der Kritik möchte ich Metaquotes für ihre großartige Arbeit an MT4/MT5 danken und sie ermutigen, ihr Niveau an Qualität und Professionalität weiter zu steigern.

 
Andrey Barinov:

Dies ist der Teil, der Fragen aufwirft:

Warum wird die erforderliche Marge mit dem Eigenkapital verglichen und nicht mit der freien Marge?

http://prntscr.com/dgd6s4

Was ist jetzt los?

prüft die Marge, nicht genug Geld, nicht handeln, aber nicht lassen Sie die Eule zu erhöhen.

Снимка на екрана
Снимка на екрана
  • prnt.sc
Снимано с Lightshot
 
Bitte sagen Sie mir, wie es geht! Ich möchte ein Produkt auf den Markt bringen - Expert Advisor Assistant, das gebunden werden muss, um Geschäfte zu eröffnen, damit es funktioniert. Ohne Bindung wird es keine Trades in der Tester und es wird nicht den Test bestehen
 
Haben Sie es ausprobiert, oder war das nur eine beiläufige Bemerkung?
 
Vladislav Andruschenko:
Hast du es versucht? Oder hast du das nur gesagt?
Habe ich! Es kam die Meldung, dass es nicht geklappt hat, keine Eule hat einen Handel eröffnet! Nun, das wird er nicht, wenn er ein Assistent ist.
 
Bogdan Bovykin:
Ich habe es ausprobiert! Ich bekam die Meldung, dass er nicht verifiziert wurde, kein einziger Handel wurde geöffnet! Nun, er wird nicht geöffnet, wenn es ein Assistent ist.

Wenn es sich um ein Dienstprogramm handelt, prüfen die Moderatoren den EA persönlich.

Das Dienstprogramm kann so eingerichtet werden, dass der Tester zumindest ein paar Trades öffnet und sie als Assistent begleitet. Das ist kein Problem.

 
Vladislav Andruschenko:

Wenn es sich um ein Dienstprogramm handelt, prüfen die Moderatoren den EA persönlich.

Das Dienstprogramm kann so eingerichtet werden, dass der Tester zumindest ein paar Trades eröffnet und sie als Assistent begleitet. Das ist kein Problem.

Ich meine, wollen Sie es als Panel einrichten und es auf diese Weise überprüfen oder was?

Öffnen Sie einfach jeden Handel manuell im Moment und fügen Sie diesen EA auf dem Chart an das Ticket der offenen Bestellung.