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

 

Neuer Artikel Welche Überprüfungen der Handelsroboter vor der Veröffentlichung in Market bestehen soll :

Alle Markets Produkte vor der Veröffentlichung bestehen eine obligatorische vorläufige Überprüfung, um eine Standarte Qualität zu haben. In diesem Artikel werden wir von den häufigsten Fehlern erzählen, die die Hersteller in den Handelsrobotern und den technischen Indikatoren machen. Auch werden wir zeigen, wie man sein Produkt vor der Sendung in Market selbständig überprüfen soll.

Der in der Plattform eingebaute Strategietesters ermöglicht Handelssysteme nicht nur auf der History zu prüfen, sondern findet auch die logischen und Algorithmenfehler heraus, die bei der Schreibung des Handelsroboters gemacht wurden. Während der Prüfung werden alle Benachrichtigungen von den Handelsoperationen und den gezeigten Fehlern im Journal des Testers gezeigt. Diese Benachrichtigungen für die Analyse bequem, in speziellem Logs Viewer zu betrachten, der vom Befehl des kontextabhängigen Menüs gerufen wird.

Autor: MetaQuotes Software Corp.

 

Dies ist der Teil, der Fragen aufwirft:

bool CheckMoneyForTrade(string symb,double lots,ENUM_ORDER_TYPE type)
  {
//--- den Eröffnungskurs ermitteln
   MqlTick mqltick;
   SymbolInfoTick(symb,mqltick);
   double price=mqltick.ask;
   if(type==ORDER_TYPE_SELL)
      price=mqltick.bid;
//--- Eigenkapital und erforderliche Marge
   double margin,equity=AccountInfoDouble(ACCOUNT_EQUITY);
   //--- Aufruf der Testfunktion
   if(!OrderCalcMargin(type,symb,lots,price,margin))
     {
      //--- etwas ist schief gelaufen, melden und false zurückgeben
      Print("Error in ",__FUNCTION__," code=",GetLastError());
      return(false);
     }
   //--- wenn nicht genügend Mittel für die Durchführung der Operation vorhanden sind
   if(margin>equity)
     {
      //--- einen Fehler melden und false zurückgeben
      Print("Not enough money for ",EnumToString(type)," ",lots," ",symb," Error code=",GetLastError());
      return(false);
     }
//--- der Test war erfolgreich
   return(true);
  }

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

 
Andrey Barinov:

Dies ist der Teil, der Fragen aufwirft:

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

Vernünftig - wir werden es ändern.
 

Vielen Dank für den Artikel, aber bis jetzt habe ich nicht in der Lage, ein funktionierendes Ergebnis mit der

bool CheckMoneyForTrade(string symb, double lots,int type)
  {
   double free_margin=AccountFreeMarginCheck(symb,lots,type);
   //-- wenn nicht genug Geld vorhanden ist
   if(free_margin<0)
     {
      string oper=(type==OP_BUY)? "Buy":"Sell";
      Print("Not enough money for ", oper," ",lots, " ", symb, " Error code=",GetLastError());
      return(false);
     }
   //-- der Test war erfolgreich
   return(true);
  }

Alle Variationen von AccountFreeMarginCheck geben Fehler, es ist unmöglich, den Expert Advisor für den Markt überhaupt einzurichten, ich habe versucht, von Benutzern herauszufinden, dann erschien der Artikel, keine Möglichkeit, egal, was Sie tun oder nicht tun

Wenn man die Bedingung GetLastError()!=134 hinzufügt oder die obige Funktion verwendet, schlägt sie einfach mit Fehlern fehl.

Die obige Funktion führt zu Fehlern wie diesem.

2016.07.25 15:15:54.200 2016.01.04 19:59  RSI_Grabber.1.1 XAUUSD,H1: invalid lots amount for FreeMarginCheck function
2016.07.25 15:15:54.200 2016.01.04 19:59  RSI_Grabber.1.1 XAUUSD,H1: Not enough money for Buy 0.1 XAUUSD Error code=4051

Ich kann mich irren, aber 0,1 ist ein normales Lot, das von Hand angegeben wird. MODE_MINLOT für ein Währungspaar ist 0,01.

Aber um ehrlich zu sein, je weiter ich graben, desto weniger verstehe ich, was das Problem (s) ist.

 

Vielleicht sollte das Lot in dieser Funktion normalisiert werden, so dass es kein Disabled gibt.

und dann schreibt die Funktion, dass kein Geld vorhanden ist, aber sie sendet keine Anfrage an den Server, um Positionen zu öffnen, was den Regeln des Marktes entspricht.

Ich habe vor kurzem begonnen, eine solche Anweisung vor etwa 2 Jahren zu verwenden:

double margin=EMPTY_VALUE;
      margin=AccountFreeMarginCheck(sy,op,ll);
      if(margin>0)
        {

        ticket=OrderSend(sy,op,ll,NormalizeDouble(pp,MarketInfo(sy,MODE_DIGITS)),Slippage,NormalizeDouble(sl,MarketInfo(sy,MODE_DIGITS)),NormalizeDouble(tp,MarketInfo(sy,MODE_DIGITS)),
coomment,mn,0,clOpen);
         
        }
      else Print("Not Enought Money Margin Required"+(string)margin);

Eigentlich funktioniert alles.

Wenn ein Handel eröffnet wird, gibt der Expert Advisor einfach dieZeichenfolge Print("Not Enought Money Margin Required "+( string)margin) zurück;

Der Expert Advisor ist auf dem Markt getestet, alle sind zufrieden damit

 

Ich verwende diese Option für die exakte Berechnung, sie ist die einzige, die mir geholfen hat, dieses Problem zu lösen. Sie können sie dann frei vergleichen.

Laverage = AccountInfoInteger(ACCOUNT_LEVERAGE);  //Schulter 
RazmerKontrakta=LotSize*MarketInfo(Symbol(),MODE_LOTSIZE);  //TradeVol*1 Partie 
MargaB=(RazmerKontrakta/Laverage)*NormalizeDouble(MarketInfo(Symbol(),MODE_BID),Digits());
MargaS=(RazmerKontrakta/Laverage)*NormalizeDouble(MarketInfo(Symbol(),MODE_ASK),Digits());
FreeMargin  = AccountInfoDouble(ACCOUNT_MARGIN_FREE);
 

Vor einem halben Jahr testete ich einen Expert Advisor aus dem Markt, es war in der Tester am zweiten oder dritten Tag mit einer Division auf Null Fehler abstürzen. Expert Advisor mit mehreren Dutzend Bewertungen, das heißt, es ist gekauft. Und mehrere hundert Kommentare.

Und viele schreiben, dass es dieses Problem gibt und raten sich gegenseitig, einmal am Tag neu zu starten!!!!

Es stellt sich heraus, dass die Strenge der Regeln auf dem Markt durch die Optionalität ihrer Umsetzung kompensiert wird?

SUS: Ich erinnere mich nicht an den Namen des Expert Advisor, aber es ist ein Top und nicht billig. Eine Art von Scalper.

 

Lieber Autor, ich danke Ihnen für den Artikel.

Es gibt einen kleinen Fehler im Code für MQL4, wenn ich darf. Bei der Funktion CheckMoneyForTrade:

double free_margin=AccountFreeMarginCheck(symb,lots,type);

erforderlich:

double free_margin=AccountFreeMarginCheck(symb,type,lots);
 

In der Funktion

bool CheckMoneyForTrade(string symb, double lots,int type)

müssen Sie die Funktion zur Überprüfung des freien Spielraums von,

double free_margin=AccountFreeMarginCheck(symb,lots,type);

auf,

double free_margin=AccountFreeMarginCheck(symb,type,lots);

ändern, damit sie richtig funktioniert.

 
Artikel in allen Sprachen korrigiert, danke.
 
Dart-Zirkus. Anstatt alle notwendigen Prüfungen einmal auf der Terminalseite zu programmieren, haben die Entwickler beschlossen, sich nicht die Mühe zu machen und jeden Benutzer dazu zu bringen, die gleichen Codes zu schreiben und zu debuggen, indem sie "Tänze mit Tamburinen" um einen elementaren Befehl OrderSend arrangieren. Vielen Dank an den Autor des Artikels, dass er sich die Zeit genommen hat, die Fallstricke zu beschreiben, die es gar nicht geben sollte, wenn die Terminalentwickler einen freundlichen Ansatz für die Benutzer haben. Ich persönlich kann die Terminalentwickler für eine solche Vorgehensweise nur verachten. Denn ihre Faulheit kostet Tausende von verlorenen Entwicklerstunden in MQL.