Antwort

RECHENFEHLER BEI DER GELDVERWALTUNG

13 Antworten

loonet

Abonnent, bbp_participant, community, Kunde, sq-ultimate, 15 Antworten.

Profil besuchen

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.

handelsergebnis.jpg

 
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.

 

0

JS17

Kunde, bbp_participant, Gemeinschaft, 73 Antworten.

Profil besuchen

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 🙂

0

loonet

Abonnent, bbp_participant, community, Kunde, sq-ultimate, 15 Antworten.

Profil besuchen

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)

0

Mark Fric

Administrator, sq-ultimate, 2 Antworten.

Profil besuchen

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

0

loonet

Abonnent, bbp_participant, community, Kunde, sq-ultimate, 15 Antworten.

Profil besuchen

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.

0

JS17

Kunde, bbp_participant, Gemeinschaft, 73 Antworten.

Profil besuchen

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

0

Mark Fric

Administrator, sq-ultimate, 2 Antworten.

Profil besuchen

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

0

JS17

Kunde, bbp_participant, Gemeinschaft, 73 Antworten.

Profil besuchen

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?

0

tomas262

Administrator, sq-ultimate, 2 Antworten.

Profil besuchen

vor 9 Jahren #130205

Der Risikowert im Feld % muss größer als Null sein, d. h. 0,1, 1 usw.

0

NirvanaFx

Kunde, bbp_participant, Gemeinschaft, 5 Antworten.

Profil besuchen

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.

0

tturtle

Abonnent, bbp_participant, Gemeinschaft, 6 Antworten.

Profil besuchen

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

 

0

tomas262

Administrator, sq-ultimate, 2 Antworten.

Profil besuchen

vor 8 Jahren #131257

Ok, könnten Sie bitte eine SQW-Datei anhängen?

0

och

Abonnent, bbp_participant, Gemeinschaft, 2 Antworten.

Profil besuchen

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

0

Mark Fric

Administrator, sq-ultimate, 2 Antworten.

Profil besuchen

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

0

Ansicht von 13 Antworten - 1 bis 13 (von insgesamt 13)