RECHENFEHLER BEI DER GELDVERWALTUNG
13 Antworten
loonet
vor 9 Jahren #113539
Hallo Mark, ich bin Riccardo von Sapienza Finanziaria.
Ich möchte Sie darauf hinweisen, dass EAW meiner Meinung nach einen Fehler in der Berechnung des Money Management Risk mit Fixed% des Kontokapitals hat.
Für das Handelssystem, das ich plane, habe ich ein Risiko pro Handel von 1% festgelegt.
Versuchen Sie zum Beispiel zu sehen, was in dem Geschäft # 79 passiert, das ich in der beigefügten Abbildung hervorhebe.
Vor dem #79-Handel habe ich einen Kontostand von 21680 USD, und ich habe ein Risiko pro Handel von 1% festgelegt.
Das bedeutet, dass ich etwa 217 USD verlieren könnte, wenn ich den SL bekomme.
Der Trade # 79 ist eine BUY-Operation mit Entry-Preis bei 1,3703 und SL bei 1,3640.
Die Operation geht zum Markt mit 3:40 Lots, so dass jeder Pip 34 USD ist.
Die Transaktion wird mit einem Verlust von 1241 Pips (= 63 x 34) abgeschlossen.
Um ein Risiko pro Handel von 1% einzuhalten, hätte das Handelssystem diesen Handel mit 0,34 Lots und nicht mit 3,40 Lots eröffnen müssen.
Ich bin MQL-Programmierer und habe versucht, die EAW-Funktion sqMMFixedRisk zu korrigieren, indem ich sie durch eine eigene Funktion ersetzt habe, über die ich hier unten berichte, um Ihnen zu helfen, den Fehler zu lösen:
//------ sqMMFixedRisk behoben von Riccardo double sqMMFixedRisk (int orderMagicNumber, int orderType) { double LotSize=0; double _riskInPercent = RiskPercent; double _maximumLots = 5.0; double slSize = sqMMGetOrderStopLossDistance(orderMagicNumber, orderType) * gPointPow; double riskPerTrade=AccountBalance() *(_riskInPercent/100); if(slSize 0 && TickValue>0) { LotSize = MarketInfo(Symbol(),MODE_TICKSIZE) * riskPerTrade / (slSize * TickValue * MarketInfo(Symbol(),MODE_POINT) ); int err=GetLastError(); if(err==4013) { //ERR_ZERO_DIVIDE Verbose("Err: Division durch Null: StopLoss:",slSize," TickValue:",TickValue," LotSize:",LotSize); return(-1); } } //--- MAXLOT und MINLOT Verwaltung double Smallest_Lot = MarketInfo(Symbol(), MODE_MINLOT); double Largest_Lot = MarketInfo(Symbol(), MODE_MAXLOT); if (LotSize Largest_Lot) LotSize = Largest_Lot; if(Losgröße > _maximumLos) { Losgröße = _maximaleLose; } //-------------------------------------------- //--- LotSize gerundet bezüglich Broker LOTSTEP if(MarketInfo(Symbol(),MODE_LOTSTEP)==1) { LotSize=NormalizeDouble(LotSize,0); } if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.1) { LosGröße=NormalizeDouble(LosGröße,1); } if(MarketInfo(Symbol(),MODE_LOTSTEP)==0,01) { LosGröße=NormalizeDouble(LosGröße,2); } if(MarketInfo(Symbol(),MODE_LOTSTEP)==0,001) { LosGröße=NormalizeDouble(LosGröße,3); } //-------------------------------------------- return (LotSize); } //--------------------------------------------------------------------
Mit dieser Funktion ist es auch möglich, die Einstellung der Lose Dezimal und die Basiswährungswechselkurs MM-Parameter, die nicht mehr einfließen können.
JS17
vor 9 Jahren #129896
Riccardo
Vielen Dank für diese Informationen, aber ich habe eine Reihe von Fragen
1. Welcher Teil des EAW-Codes ist zu streichen?
2. Müssen irgendwelche neuen Variablen deklariert werden, damit Ihr Code funktioniert?
Dankeschön 🙂
loonet
vor 9 Jahren #130005
1. Sie müssen nur die Funktion sqMMFixedRisk durch den von mir geposteten Code ersetzen.
2. Sie brauchen keine zusätzliche Variable zu deklarieren (beachten Sie, dass bei meiner Funktion die Lose Dezimal und die Basiswährungswechselkurs Ea Wizard Money Management Parameter werden unübersichtlich)
Mark Fric
vor 9 Jahren #130015
Hallo Riccardo,
Entschuldigen Sie, dass ich so lange brauche, um zu antworten. Ich habe mir Ihre Funktion bereits angesehen und getestet, aber sie unterscheidet sich stark von unserer eigenen Funktion, und ich hatte noch keine Zeit, sie in allen Umgebungen gründlich zu testen, einschließlich des Handels mit CFDs usw., der sich von Forex unterscheidet.
Ich würde gerne jeden Tag dazu kommen, ich bin nur zu sehr mit unerwarteten Dingen beschäftigt.
Mark
StrategyQuant Architekt
loonet
vor 9 Jahren #130020
Danke, Marc,
Ich verwende es hauptsächlich für den Devisenhandel.
Ich habe die Berechnung zwischen der ursprünglichen Funktion und der geänderten Funktion verglichen.
Die ursprüngliche Funktion zeigt ein merkwürdiges Verhalten bei der Losberechnung: in einigen Fällen scheint sie den von mir festgelegten Risikoprozentsatz nicht zu berücksichtigen.
Wenn Sie möchten, kann ich Ihnen ein Beispiel für die mit beiden Funktionen erzielten Backtest-Ergebnisse schicken.
JS17
vor 9 Jahren #130049
Riccardo,
Vielen Dank für Ihre Antwort und Erklärung - da Mark nun geantwortet hat, werde ich warten, bis er seine Tests abgeschlossen hat - nochmals vielen Dank
Mark Fric
vor 9 Jahren #130154
Ich habe es getestet und alles scheint korrekt zu funktionieren, daher habe ich gerade ein EA Wizard Autoupdate veröffentlicht, das den Money Management Fix von Riccardo enthält.
Mark
StrategyQuant Architekt
JS17
vor 9 Jahren #130163
Darf ich fragen, ob die Funktion, wenn ich bei der Verwendung dieser Funktion in % risk 0 eingebe, den in "lots if no MM" eingegebenen Wert verwenden wird?
tomas262
vor 9 Jahren #130205
Der Risikowert im Feld % muss größer als Null sein, d. h. 0,1, 1 usw.
NirvanaFx
vor 9 Jahren #130401
Ich habe versucht, das Risiko in % zu verwenden, und egal, was ich versuche, egal, welchen Prozentsatz ich in das Feld eintrage (z. B. 1,20,.06, .3 usw.), es ist genau der fest Losgröße, die gehandelt wird. Es ist nicht variieren die Losgröße auf allen... Es ist nicht standardmäßig auf Lose, wenn keine MM oder irgendetwas in der Art, und ich habe die Stoploss für Risiko berechnet werden. Ist dies ein Fehler, dass jemand anderes hat in letzter Zeit erlebt? Ich habe auch das letzte Update.
tturtle
vor 8 Jahren #131241
Hallo Marc und Tomas,
Dieser Thread kommt dem, was ich erlebe, wohl am nächsten.
MM ist auf % des Eigenkapitals festgelegt, ebenso wie der globale Stop Loss. Alle Trades sind so eingestellt, dass sie diese Einstellungen verwenden.
Im TEster in MT4 sind alle Losgrößen auf 0,01 Lots für EURUSD voreingestellt.
Im Anhang finden Sie den Code, den ich verwende. Bitte lassen Sie mich wissen, wenn Sie etwas sehen können.
Ich verwende MT4 Build 840
Vielen Dank und herzliche Grüße
Tim
tomas262
vor 8 Jahren #131257
Ok, könnten Sie bitte eine SQW-Datei anhängen?
och
vor 8 Jahren #133734
Hallo,
Ich bin mir nicht sicher, ob dies der richtige Ort ist, um diese Bemerkung zu posten, aber ich vermute, dass es auch einen Fehler in der StrategyQuant (v3.8.1) Lotberechnung gibt:
Zeile 14 : if(MathMod(lotMM*100, lotStep*100) > 0) {
sollte sein
if(MathMod(lotMM1*100, lotStep*100) > 0) {
double computeMMFromRiskPerTrade(double riskPerTrade, double slSize) { if(slSize 0) { lotMM = lotMM1 - MathMod(lotMM1, lotStep); } sonst { lotMM = lotMM1; } lotMM = NormalizeDouble( lotMM, LotsDecimals); if(MarketInfo(Symbol(), MODE_LOTSIZE)==10000.0) lotMM=lotMM*10.0 ; lotMM=NormalizeDouble(lotMM,LotsDecimals); //Log("Berechnung der Lots, Risiko: ", riskPerTrade, ", lotMM1: ", lotMM1, ", lotStep: ", lotStep, ", lots: ", lotMM); double Smallest_Lot = MarketInfo(Symbol(), MODE_MINLOT); double Largest_Lot = MarketInfo(Symbol(), MODE_MAXLOT); if (lotMM Largest_Lot) lotMM = Largest_Lot; if(lotMM > MaximumLots) { lotMM = MaximumLots; } //Log("SL-Größe: ", slSize, ", LotMM: ", lotMM); return (lotMM); }
Herzliche Grüße,
och
Mark Fric
vor 8 Jahren #133753
Hallo Olivier,
Sie haben Recht, es gibt diesen Fehler. Ich werde morgen ein Update mit einem Fix veröffentlichen.
Mark
StrategyQuant Architekt
Ansicht von 13 Antworten - 1 bis 13 (von insgesamt 13)