Tuesday, 14 August 2012

Step Money Management

Money Management is crucial... It will not make a system profitable, but it seriously affects profitability. Most of the trading systems allocate some account percentage per each trade... While this method in theory protects you before blowing up the account, it also seriously limits the profitability for some types of trading systems. Just consider the following example: trading system enters a loosing streak and decreases the lot sizes. Then when it starts winning again first winners win less amount of money that system actually actually lost (because the lot size is decreased). Especially if a system has low winning percentage but high risk:reward ratio. 

For those kind of systems I use step money management. It basically calculates the lot size not based on actual account balance but based on highest balance. This money management method will not suite all trading strategies. As said, it is best for system that have low winning percentage, but when they win - they win big (trend followers and breakout systems). So when a win comes - it will win with larger lot value. 

Code that implements discussed step money management is placed below. It requires specifying maximum  initial account balance.


   int round;
   double lotStep;
   double tickvalue = MarketInfo(Symbol(), MODE_TICKVALUE);
   if (Digits == 5) tickvalue = 10.0 * tickvalue;
   if (Digits == 3) tickvalue = 10.0 * tickvalue;
   lotStep = MarketInfo(Symbol(), MODE_LOTSTEP);
   if (lotStep == 0.01) round = 2;
   if (lotStep == 0.1) round = 1;
   if (lotStep == 1.0) round = 0;


   if(AccountBalance()>maxAccountBalance)
      maxAccountBalance=AccountBalance();
   
   return(MathAbs(NormalizeDouble(riskPercent1 * maxAccountBalance / 100.0 / mmStopLoss / maxOrders / tickvalue, round)));