Antwort

Money Management Problem - Feste % und Losgröße

5 Antworten

Julianrob

Kunde, bbp_participant, Gemeinschaft, 54 Antworten.

Profil besuchen

vor 9 Jahren #113227

Hallo Mark,

 

Zunächst einmal vielen Dank für Ihre hilfreiche Unterstützung so weit. Ich scheine Schwierigkeiten mit meinem Geld-Management mit diesem EA zu haben - ich bin mit vordefinierten MM in meiner Strategie Regeln.

 

Unter dem Strategieabschnitt habe ich Variablen für die Losgröße und den festen Prozentsatz als doppelten Wert definiert, aber wenn ich diesen EA auf AUDUSD oder EURUSD mit einer Losgröße von 0,10 ausführe, eröffnet er immer Trades mit einer Losgröße von 0,01.

 

Wenn ich AccountRiskPerTrade auf 5 setze, werden für jeden Handel 5 Lots geöffnet, aber die Erträge werden nicht aufgeteilt. Bitte beachten Sie die beigefügten Bilder.

 

Für Stop-Loss und Take-Profit verwende ich feste Werte, die als Variablen eingestellt sind, einstellig sind und vom Typ int (Ganzzahl) sind

 

Jede Hilfe wäre großartig, vielen Dank.

0

Mark Fric

Administrator, sq-ultimate, 2 Antworten.

Profil besuchen

vor 9 Jahren #128549

Hallo,

 

bei Ihrer Wahl von MM werden die Lots dynamisch in Abhängigkeit von SL und aktuellem Kontostand berechnet. LotSize wird nur verwendet, wenn MM nicht berechnet werden kann - in der Regel, wenn Sie keinen SL für Ihren Auftrag definiert haben.

Aber Sie haben das Risiko pro Handel auf 0 gesetzt, das macht keinen Sinn.

 

Wenn Sie eine feste Losgröße verwenden möchten, sollten Sie "No money management" wählen, andernfalls sollten Sie festlegen, wie viel % Ihres Kontos Sie bei jedem Handel riskieren möchten.

 

 

Das Problem mit der berechneten Größe ist, dass die Variable LotsDecimals auf 2 gesetzt ist, was bedeutet, dass Lots auf 2 Dezimalzahlen gerundet wird.

 

Es die Erträge nicht zusammensetzt - es wird funktionieren, wenn Sie das Risiko pro Handel auf einen Wert ungleich Null setzen werden.

Mark
StrategyQuant Architekt

0

Julianrob

Kunde, bbp_participant, Gemeinschaft, 54 Antworten.

Profil besuchen

vor 9 Jahren #128585

Danke Mark, ich hab's.

0

loonet

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

Profil besuchen

vor 9 Jahren #129589

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.

 

 

Also habe ich versucht, die EAW-Funktion sqMMFixedRisk zu korrigieren und sie durch eine eigene Funktion zu ersetzen, die ich hier unten vorstelle:

//------ 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 > _maximumLots) {
      LotSize = _maximumLots;
   }
//--------------------------------------------



//--- 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);

  }
//--------------------------------------------------------------------

Damit können Sie auch vermeiden, die   Lose Dezimal  und die   Basiswährungswechselkurs  MM-Parameter, die nicht mehr fließend sind.

0

geektrader

Customer, bbp_participant, community, 522 replies.

Profil besuchen

vor 9 Jahren #129667

SQ scheint einige Probleme mit der korrekten Positionsgröße in Bezug auf StopLoss / Kontobasiswährung und das gehandelte Paar zu haben, da all diese Faktoren berücksichtigt werden müssen, um die resultierende Losgröße für den Handel korrekt zu berechnen. Um Ihnen zu helfen, hier ist mein Code, den ich verfeinert habe und seit 5 Jahren im MT4 verwende. Er berücksichtigt SL, die Währung, in der das Paar nominiert ist, und die Währung, in der das gehandelte Konto nominiert ist, so dass immer die korrekte % verloren geht, wenn ein SL getroffen wird. Es prüft außerdem die minimal und maximal zulässige Losgröße und Losschrittgröße sowie die erforderliche Marge und stellt sicher, dass die Marge nur bis zu 73% verwendet wird, wenn ein voller SL getroffen wird, so dass man nicht wegen einer zu niedrigen Marge ausgestoppt wird (was ohnehin ein verrücktes Overtrading wäre). Vielleicht kann Mark es für SQ anpassen.

 

Sie müssen nur den SL und die maximale Anzahl der anschließend geöffneten Trades angeben (ich verwende das für das Averaging und wenn ich nur einen bestimmten Betrag bei all diesen Trades verlieren möchte - für den reinen Handel geben Sie einfach "1" an):

double GetLotSize(double TotalRiskPercentageAllTrades, double Stop_Loss, int MaximumTrades)
{
    int DigitsMulti = 1;

    if (Ziffern == 5 || Ziffern == 3)
        ZiffernMulti = 10;

    Stop_Loss = Stop_Loss * DigitsMulti;
    double geteilt_durch = 0;
    double Lots = 0;

    if (TotalRiskPercentageAllTrades != 0)
    {
        double RiskBalance = AccountBalance() * (TotalRiskPercentageAllTrades / 100.0);
        if (MarketInfo(Symbol(), MODE_TICKSIZE) != 0 && Stop_Loss != 0)
            divided_by = MarketInfo(Symbol(), MODE_TICKVALUE) * (MarketInfo(Symbol(), MODE_POINT) / MarketInfo(Symbol(), MODE_TICKSIZE));
        if (geteilt_durch == 0)
            Print("Money Management vorübergehend deaktiviert aufgrund von Division By: ", divided_by);
        sonst
            Lots = RiskBalance / divided_by / Stop_Loss;
    }

    Lots = Lots / MaximumTrades;
    Lots = MathMax(Lots, MarketInfo(Symbol(), MODE_MINLOT));
    Lots = MathMin(Lots, MarketInfo(Symbol(), MODE_MAXLOT));
    if (MarketInfo(Symbol(), MODE_MARGINREQUIRED) != 0)
        Lots = MathMin(Lots, AccountEquity() / MarketInfo(Symbol(), MODE_MARGINREQUIRED) * 0.73);
    Lots = MathCeil(Lots / MarketInfo(Symbol(), MODE_LOTSTEP)) * MarketInfo(Symbol(), MODE_LOTSTEP);
    Lots = MathMax(Lots, MarketInfo(Symbol(), MODE_MINLOT));

    return(Lots);
}


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

Julianrob

Kunde, bbp_participant, Gemeinschaft, 54 Antworten.

Profil besuchen

vor 9 Jahren #129673

Vielen Dank für die Informationen.

 

Ich entdeckte, wie man sowohl Money-Management-Risiko % oder feste Losgröße Option in den Variablen in der Codierung der EA zu aktivieren. Die einfache Lösung, die ich verwendet wurde, um eine Variable mit booleschen Wert true/false erstellen und nennen es; "UseRiskPercent"

 

Dann habe ich eine Regel, die den Handel mit Money Management Risk% nur öffnet, wenn die Variable UseRiskPercent auf TRUE gesetzt ist. Eine zweite Regel, die ein Klon der ersten ist und besagt, dass, wenn UseRiskPercent auf false gesetzt ist, stattdessen eine feste Losgröße für den Handel verwendet wird.

 

Julian

0

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