Diskussion zum Artikel "Welche Überprüfungen der Handelsroboter vor der Veröffentlichung in Market bestehen soll"
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?
Dies ist der Teil, der Fragen aufwirft:
Warum wird die erforderliche Marge mit dem Eigenkapital verglichen und nicht mit der freien Marge?
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.
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
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.