Positionsgröße für Indizes berechnen

 

Hallo, ich möchte gerne Positionsgrößen für Indizes bei einem bestimmten Risiko berechnen.

Dafür habe ich folgende Formel im Internet gefunden:

1. Schritt: Risk pro Punkt = AccountSize * Risk(%) / stop loss points

2. Schritt: Rik pro Punkt von der Accountwährung in die jeweilige Index-Währung umwandeln

3. Schritt: lotSize = Risk pro Punkt (in der Index-Währung) / Kontraktgröße


Erste Frage: stimmt diese Formel?

Zweite Frage: Wie setzt man das in mql4 um? Mein Ansatz ist der Folgende:

double moneyRiskAccountCurrency = AccountBalance() * (risk / 100) / slPoints;

double moneyRiskIndexCurrency = ????;
   
double lots = moneyRiskIndexCurrency / MarketInfo(_Symbol, ???); 

Allerdings weiß ich nicht, wie ich die beiden anderen Schritte korrekt umsetze.

 
UnknownInnocent:

Hallo, ich möchte gerne Positionsgrößen für Indizes bei einem bestimmten Risiko berechnen.

Dafür habe ich folgende Formel im Internet gefunden:

1. Schritt: Risk pro Punkt = AccountSize * Risk(%) / stop loss points

2. Schritt: Rik pro Punkt von der Accountwährung in die jeweilige Index-Währung umwandeln

3. Schritt: lotSize = Risk pro Punkt (in der Index-Währung) / Kontraktgröße


Erste Frage: stimmt diese Formel?

Zweite Frage: Wie setzt man das in mql4 um? Mein Ansatz ist der Folgende:

Allerdings weiß ich nicht, wie ich die beiden anderen Schritte korrekt umsetze.

Indexwährung ist meistens usd, das heist du musst von usd auf kontowährung umrechnen

mql4, keine ahnung

 
Dafür gibt es nun genug Lösungen, man muss nur suchen..
 
UnknownInnocent:

Hallo, ich möchte gerne Positionsgrößen für Indizes bei einem bestimmten Risiko berechnen.


Interessant das du eine Formel findest, aber den fertigen code dazu nicht.

Hier wäre ein Beispiel. Schau dir den Code an und extrahiere, was du brauchst.

MT5:    https://www.mql5.com/de/code/19870

MT4  https://www.mql5.com/de/code/7749
Lot-Berechnung - Risikomanagement
Lot-Berechnung - Risikomanagement
  • www.mql5.com
Mit diesem Hilfsmittel können Sie die korrekte Lotgröße der nächsten Position berechnen, indem Sie einige einfache Regeln für die Geldverwaltung befolgen.
 
UnknownInnocent:

Hallo, ich möchte gerne Positionsgrößen für Indizes bei einem bestimmten Risiko berechnen.

Dafür habe ich folgende Formel im Internet gefunden:

1. Schritt: Risk pro Punkt = AccountSize * Risk(%) / stop loss points

2. Schritt: Rik pro Punkt von der Accountwährung in die jeweilige Index-Währung umwandeln

3. Schritt: lotSize = Risk pro Punkt (in der Index-Währung) / Kontraktgröße


Erste Frage: stimmt diese Formel?

Zweite Frage: Wie setzt man das in mql4 um? Mein Ansatz ist der Folgende:

Allerdings weiß ich nicht, wie ich die beiden anderen Schritte korrekt umsetze.

Hallo,

hier ein Beispiel auf eine einfache Weise.

extern double           loteingabe = 0.01; // Loteingabe
extern double                 Risk = 1;    // Risiko pro Order in Prozent
extern int                stoploss = 100; // Stoploss

double lot;

int OnInit(){  

} // OnInit Ende 

void OnDeinit(const int reason){

  } // Ende OnDeinit

void OnTick(){

   string Lotgroesse = DoubleToStr(LotsByRisk(OP_BUY,Risk,(int)stoploss),2);
   
// OrderSend() Funktion Vollumen "lot" eingeben!! 

  } // OnTick Ende

//+------------------------------------------------------------------+
//| Calculate Positionsgrösse mit Stop                               |
//+------------------------------------------------------------------+
double GetLots(){
   double clots = AccountBalance()/10000*loteingabe;
   clots = MathMax(clots, MarketInfo(Symbol(), MODE_MINLOT));
   clots = MathMin(clots, MarketInfo(Symbol(), MODE_MAXLOT));
   clots = NormalizeDouble(clots,2);
   return(clots);
  }

//+-----------------------------------------------------------------
double LotsByRisk(int op_type,double risk,int sloss){
   double  lot_min = MarketInfo(Symbol(), MODE_MINLOT);
   double  lot_max = MarketInfo(Symbol(), MODE_MAXLOT);
   double lot_step = MarketInfo(Symbol(),MODE_LOTSTEP);
   double  lotcost = MarketInfo(Symbol(),MODE_TICKVALUE);
   lot = 0;
   double UsdPerPip = 0;
   lot = AccountBalance()*risk/100;
   UsdPerPip = lot/sloss;
   lot = NormalizeDouble(UsdPerPip/lotcost, 2);
   lot = NormalizeDouble(lot/lot_step, 0) * lot_step;
   if(lot < lot_min)
      lot = lot_min;
   if(lot > lot_max)
      lot = lot_max;
   return(lot);
  }

Ich hoffe, dass ich Ihnen helfen könnte.


Gruß Igor.

 
 Carl Schreiber #:
Dafür gibt es nun genug Lösungen, man muss nur suchen..
Na du bist aber nett
 
Benjamni Steingruber #:
Na du bist aber nett

Ich versuche mich an den Besten zu orientieren:
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben.
Konfuzius *551 v. Chr. †479 v. Chr. Chinesischer Philosoph

 
Carl Schreiber #:

Ich versuche mich an den Besten zu orientieren:
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben.
Konfuzius *551 v. Chr. †479 v. Chr. Chinesischer Philosoph

Wahre Worte Carl ......

 
//+------------------------------------------------------------------+
//|Calculates Lostsize wuth correct Lotsteps (untested)              |
//+------------------------------------------------------------------+
double calcLots(double slPoints)
{
   double riskPerTrade = AccountInfoDouble(ACCOUNT_EQUITY) * RiskPercent / 100;

   double ticksize = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE);
   double tickvalue = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE);
   double lotstep = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP);
   double moneyPerLotstep = slPoints / ticksize * tickvalue * lotstep;

   double lots = MathFloor(riskPerTrade / moneyPerLotstep) * lotstep;
   lots = MathMin(lots, SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX));
   lots = MathMax(lots, SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN));
   return lots;
}