Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 26.09.17
piptrade piptrade ist offline
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 157
piptrade befindet sich auf einem aufstrebenden Ast
Standard martingales MoneyManagement

Liebe Programmier-"Gemeinde",

habe im letzten 1/2 Jahr meinen ersten kleinen robot geschrieben, welcher bis zum heutigen Tag, - entsprechend der Auswertungen des strategy-testers, - ein Profit-Losses-Verhältnis von ca. 60 : 40 aufweist. Um das "Teil" weiterhin zu optimieren, soll nun eine zweite Strategie, ein Hedging-Part und ein martingales Money Management ergänzt werden.

Um den letztgenannten Code zu realisieren, habe ich als erstes versucht, die Anzahl der bestehenden offenen Positionen eines Vehikels (openOrders) zu bestimmen (Calculate open positions). Dieser Wert wird abschließend mit "return" zurückgegeben.
Als zweites (MM - Calculate martingale lot size ...) soll dann die Berechnung von "lot" unter Verwendung von "extern Lot" und "MaximumRisk" erfolgen. - Und dies für den ersten zu öffnenden Trade.
Abschließend soll dann das martingale System zur Anwendung kommen, in dem die Anzahl der ggf. offenen Positionen (openOrders) aufgegriffen und die lot für 2, 3, ... usw. offene Positionen berechnet wird.

Alles in Allem sieht das "Teil" so aus:
Code:
//+==================================================================================+
//| Calculate open positions                                                         | 
//+==================================================================================+

int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==OrderMagicNumber)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
     if(openOrders>0) openOrders = buys+sells;
   return (openOrders);
}  
//+===================================================================================+
//| MoneyManagement - Calculate martingale lot size for open positiones               |            
//|===================================================================================+
double LotsOptimized()
  {
   double lot=Lots;
   
//--- select lot size
   lot=NormalizeDouble(AccountFreeMargin() *MaximumRisk / 100, 2);  //  2 = Digits for DAX

//--- calculate martingale steps
   if(ProfitFactor>0)
     {
//-- MathPow(double base,double exponent); = bereits im Editor implementiert
//-- Formel für Zahlenreihe der Verdopplung: a(openOrders) = 2 *2(hoch openOrders - 1)
     lot = NormalizeDouble(lot *2 *MathPow(2,openOrders - 1),2);
     }  
//--- return lot size
   if(lot<0.01) lot=0.01;
   return(lot);
  }  
//+=======================================================================================+
Nach dem Kompellieren: 0 errors / 0 warnigs ! Zumindest diese Aussage stimmt mich erst einmal optimistisch. Ob aber alles, wie gewollt, funktioniert oder ob ich Änderungen/Verbesserungen vornehmen kann oder muss ... ?

An dieser Stelle wäre ich für Eure Unterstützung sehr dankbar.

LG. piptrade