automatische Funktion zur Berechnung der Losgröße? - Seite 5

 

Hallo Phillip, Shawn hier wieder zurück. Ich habe die kleinen Änderungen vorgenommen, die wir beim letzten Mal besprochen haben (ich habe allerdings immer noch nicht deine neueste Version implementiert) und die Probleme mit den Losgrößen der JPY-Paare treten immer noch auf. Ich habe meinen EA gestern Abend laufen lassen und er hat 3 Trades generiert (mein Kontostand war US$2550, das Risiko beträgt 1%, also etwa $25 Risiko pro Trade):


(1) Verkaufe NZDJPY, 0,89 Lots

(2) Verkaufe AUDJPY, 0,23 Lots

(3) Verkaufe CADJPY, 0,94 Lots


Die Losgröße für den AUDJPY-Handel sieht gut aus, aber nicht für die beiden anderen. Ich hatte einige Print-Anweisungen um die Aufrufe zu Ihrem Material eingebettet. Hier ist zunächst der Code meines EA für diesen Teil:


if(Bid > SellPrice && SellPrice != 0.00)
         {       
          CurrentOrderType=OP_SELL;
          CurrentStopLossPrice= FinalSellStopPrice;
          CurrentEquityAtRisk=(MaxPercentEquityAtRisk/100.0)*AccountBalance();
          CurrentLotSize=LotSize(CurrentEquityAtRisk,CurrentStopLossPrice,CurrentOrderType,CurrentSymbolType,CurrentCounterPairForCross);
          Print("SELL - ", Symbol(), "AccountBalance = ", DoubleToStr(AccountBalance(),2), " Max EquityAtRisk = $",DoubleToStr(CurrentEquityAtRisk,2)," and Max Lotsize = ",DoubleToStr(CurrentLotSize,4));
          CurrentLotSize=NormalizeLotSize(CurrentLotSize);
          Print("SELL - ", Symbol(), "Normalized LotSize is now = ", DoubleToStr(CurrentLotSize,4));
          if(CurrentLotSize<MarketInfo(Symbol(),MODE_MINLOT)) CurrentLotSize=MarketInfo(Symbol(),MODE_MINLOT);
          if(CurrentLotSize>MarketInfo(Symbol(),MODE_MAXLOT)) CurrentLotSize=MarketInfo(Symbol(),MODE_MAXLOT);
          CurrentEquityAtRisk=EquityAtRisk(CurrentLotSize,CurrentStopLossPrice,CurrentOrderType,CurrentSymbolType,CurrentCounterPairForCross);
          Print("SELL - ", Symbol(), "Current EquityAtRisk = $",DoubleToStr(CurrentEquityAtRisk,2)," and Current Lotsize = ",DoubleToStr(CurrentLotSize,4));
          Print("SELL - ", Symbol(), " MarketInfo(MODE_STOPLEVEL) = ",DoubleToStr(MarketInfo(Symbol(),MODE_STOPLEVEL),5));
          
          //Check free margin
          if (AccountFreeMargin() < (1000 * CurrentLotSize)) 
          {
             Print("We have no money. Free Margin = ", AccountFreeMargin());
             return(0);
          }
         
          Ticket=OrderSendReliable2Step(Symbol(),OP_SELLSTOP,CurrentLotSize,FinalSellPrice,Slippage,CurrentStopLossPrice,FinalSellProfTarg,Symbol()+DoubleToStr(MagicNumber,0),MagicNumber,0,Red);
          if(Ticket<=0) Print("Error = ",GetLastError());
          else 
          { 


Und hier ist die Ausgabe der Print-Anweisungen aus dem Protokoll, für jeden der 3 Trades oben:


05:16:10 DelphiEA NZDJPY,H1: SELL - NZDJPYAccountBalance = 2550.90 Max EquityAtRisk = $25.51 und Max Lotsize = 0.8988
05:16:10 DelphiEA NZDJPY,H1: SELL - NZDJPYNormalized LotSize ist jetzt = 0.8900
05:16:10 DelphiEA NZDJPY,H1: SELL - NZDJPYCurrent EquityAtRisk = $25.26 und Current Lotsize = 0.8900
05:16:10 DelphiEA NZDJPY,H1: SELL - NZDJPY MarketInfo(MODE_STOPLEVEL) = 70.00000


05:16:56 DelphiEA AUDJPY,H1: SELL - AUDJPYKontostand = 2550.90 Max EquityAtRisk = $25.51 und Max Lotsize = 0.2376
05:16:56 DelphiEA AUDJPY,H1: SELL - AUDJPYNormalized LotSize ist jetzt = 0.2300
05:16:56 DelphiEA AUDJPY,H1: VERKAUFEN - AUDJPYAktuelles Eigenkapital = $24.69 und aktuelle Lotsize = 0.2300
05:16:56 DelphiEA AUDJPY,H1: SELL - AUDJPY MarketInfo(MODE_STOPLEVEL) = 50.00000


07:13:53 DelphiEA CADJPY,H1: SELL - CADJPYKontostand = 2550.90 Max EquityAtRisk = $25.51 und Max Lotsize = 0.9408
07:13:53 DelphiEA CADJPY,H1: SELL - CADJPYNormalized LotSize ist jetzt = 0.9400
07:13:53 DelphiEA CADJPY,H1: SELL - CADJPYCurrent EquityAtRisk = $25.49 und Current Lotsize = 0.9400

07:13:53 DelphiEA CADJPY,H1: SELL - CADJPY MarketInfo(MODE_STOPLEVEL) = 60.00000


Hoffe das hilft!!

Ach Phillip, noch etwas - ich glaube, ich habe einen kleinen Fehler in OrderSendReliable2Step gefunden. Wissen Sie, wem ich das melden sollte?


Danke!

Shawn

 
Ricotter:

Dieser Typ macht das mit Hilfe des Dateiverlaufs.

https://www.mql5.com/en/articles/1493

Da Sie neu hier sind, ist es erwähnenswert, dass diese Einschränkung im MT5 Tester nicht existiert. FYI.

 
gordon:

Da Sie neu hier sind, ist es erwähnenswert, dass diese Einschränkung im MT5 Tester nicht existiert. ZU IHRER INFORMATION.

Danke für den Tipp. Gibt es einen Grund, warum ich MT5 NICHT verwenden sollte?

 
Ricotter:

Danke für den Tipp. Gibt es irgendeinen Grund, warum ich MT5 nicht verwenden sollte?

Wenn Sie sofort live handeln wollen, dann sind Sie besser dran, wenn Sie bei MT4 bleiben, aber wenn Sie planen, zu lernen und Demo's für einige Monate zu machen, bevor Sie live gehen, dann könnten Sie es in Betracht ziehen. Es ist eine neue Plattform mit vielen Verbesserungen gegenüber MT4, aber es ist auch viel komplizierter und noch nicht von vielen Brokern unterstützt. Hier gibt es einige gute Informationen -> http://www.100forexbrokers.com/mt5-metatrader5. Sie sollten sich auch MQL5.com ansehen.
 
shawnh:

Hallo Phillip, Shawn hier wieder zurück. Ich habe die kleinen Änderungen vorgenommen, die wir beim letzten Mal besprochen haben (allerdings habe ich deine letzte Version noch nicht implementiert) und die Probleme mit den Losgrößen der JPY-Paare treten immer noch auf.

In Ihrem Code "sieht" alles gut aus, aber ich habe immer noch keine Ahnung, warum es bei Ihnen auftritt.

Ich empfehle, auf den neueren Code zu wechseln. An diesem Punkt müssen Sie etwas ändern, da das, was Sie jetzt haben, nicht richtig funktioniert.

Ich weiß nicht, wem Sie die Fehler in Bezug auf orderlib-Probleme melden sollten, tut mir leid.
 
1005phillip:

Schritt 1: Legen Sie alle Dateianhänge aus diesem Beitrag in Ihren Include-Pfad (...\experts\include\*.mqh)

Schritt 2: Fügen Sie oben in Ihrem EA Folgendes hinzu, damit er Zugriff auf die in den angehängten Dateien enthaltenen Aufruffunktionen hat

Schritt 3: Zur Berechnung der Losgröße auf der Grundlage eines budgetierten Betrages des zu riskierenden Eigenkapitals fügen Sie Folgendes hinzu

Angenommen, Sie haben MaxPercentEquityAtRisk irgendwo in Ihrem EA als das maximal zulässige Eigenkapital definiert, das Sie dem Risiko eines vollständigen Verlusts pro Handel aussetzen können, falls die Stops erreicht werden, wird dieser Teil des Codes zunächst die maximale Losgröße auf der Grundlage des Eröffnungskurses und des Stop-Loss-Preises (nicht Pips, sondern der tatsächliche Marktpreis, derselbe, den Sie in Ihrer Order an den Broker senden) bestimmen und dann die maximale Positionsgröße ermitteln, die der Broker akzeptiert, ohne dass Ihr budgetiertes Risikokapital überschritten wird.

Schritt 4: Wenn Sie möchten, dass die Ergebnisse der Berechnungen in Ihrem Protokoll ausgedruckt oder dem Handel als Auftragskommentar hinzugefügt werden, können Sie auch Folgendes hinzufügen

Schritt 5: Erteilen Sie Ihren Auftrag (mit der Methode ordersendreliable)

https://c.mql5.com/mql4/forum/2010/10/OrderReliable_2010.10.12.mqh


Hallo 1005phillip,


Haben Sie eine Version der 2 mqh (analyze..., und tradepositionmanage...), die keine Importe von unten hat? Dies ist, weil die beiden haben, dass die Importe, und ist daher nicht von Compiler erlaubt.

//#include <stderror.mqh>
//#include <stdlib.mqh>


...so dass ich die Dateien nicht bearbeiten und sie im schreibgeschützten Zustand belassen kann. Oder kann ich sie bearbeiten und diese Importe entfernen?

 
jcadong5:

...damit ich die Dateien nicht bearbeite und sie im schreibgeschützten Zustand behalte. Oder kann ich sie bearbeiten und diese Importe entfernen?


Machen Sie weiter und bearbeiten Sie sie nach Ihrem Geschmack. Die Duplizität verhindert bei mir nicht das Kompilieren, der Compiler protokolliert einen Hinweis auf die Duplizität, aber das ist alles, was er tut.
 
Danke.
 
1005phillip:
In Ihrem Code "sieht" alles gut aus, aber ich habe immer noch keine Ahnung, warum das bei Ihnen der Fall ist.

Ich empfehle, auf den neueren Code zu wechseln. An diesem Punkt müssen Sie etwas ändern, da das, was Sie jetzt haben, nicht richtig funktioniert.

Ich weiß nicht, an wen Sie die Bugs in Bezug auf orderlib-Probleme melden sollten, tut mir leid.


Hallo Phillip, hier ist wieder Shawn. Nachdem ich Ihre neueste Version vor ein paar Wochen installiert habe, freue ich mich, berichten zu können, dass jetzt alles in Ordnung zu sein scheint und die berechneten Losgrößen genau richtig erscheinen. Ich schätze, ich brauchte einfach die neueste Version!


Nochmals vielen Dank für all Ihre Hilfe, Sie sind ein guter Mann!


Prost

Shawn

 

War mir ein Vergnügen! Und danke, dass Sie mich wissen lassen, dass es bei Ihnen funktioniert, ich weiß das Feedback zu schätzen. Ich bin mir nicht sicher, was mit dem früheren Code schief gelaufen ist. Möglicherweise war es ein Fehler, den ich unwissentlich zwischen den Überarbeitungen korrigiert habe.

Ich werde wahrscheinlich in ein oder zwei Wochen eine aktualisierte Version haben, die einige Fallback-Funktionen für das Backtesting in MT4 aufCross-Currency-Paaren haben wird. Wenn Sie jetzt versuchen, ein Cross-Pair zu testen, während Sie meinen Lot-Size-Code verwenden, wird Ihr Backtest scheitern, weil der Backtester nicht auf die Marktpreise für die erforderlichen Gegen- und Basispaare zugreifen kann. (Dies ist kein Problem beim Live- oder Forward-Testing, sondern eine reine Backtester-Beschränkung von MT4)

Ich werde den Code posten, wenn ich diese Brücke überquert habe, vielleicht finden Sie oder andere ihn hilfreich.

Ich wünsche Ihnen ein schönes Wochenende,
- Phil

Grund der Beschwerde: