OptimalF money management

For re-investing or assigning capital, Zorro can automatically calculate the optimal capital allocation factor - named OptimalF - separately for every component in a portfolio strategy. It uses a computer algorithm that evaluates the balance curve for calculating the percentage of the gained capital to be reinvested for maximum profit. For instance, if OptimalF is 0.05, then the maximum margin for trading that component is 5% of the profit. The margin can be smaller - for the reasons mentioned above not the full profit but only its square root should be reinvested - but it must not be higher. This algorithm was developed by Ralph Vince and described in several publications (see links).

When the FACTORS flag is set, the OptimalF factors are calculated in a special test run at the end of the [Train] process, and stored in a file Data\*.fac. It's a simple text file that looks like this:

AUD/USD:ES          .036  1.14   45/87     0.1
AUD/USD:ES:L        .036  1.14   45/87     0.1 
AUD/USD:ES:S        .000  ----    0/0      0.0  
EUR/USD:VO          .027  2.20   24/23     3.3  
EUR/USD:VO:L        .027  1.58   12/11     0.9 
EUR/USD:VO:S        .032  2.90   12/12     2.5 
NAS100:ES           .114  1.42   63/90     4.6 
NAS100:ES:L         .101  1.39   33/44     2.1  
NAS100:ES:S         .128  1.46   30/46     2.5  
USD/CAD:BB          .030  1.41   19/25     1.3 
USD/CAD:BB:L        .030  1.41   19/25     1.3  
USD/CAD:BB:S        .000  ----    0/0      0.0  
USD/CAD:HU          .012  1.74   48/36     3.3  
USD/CAD:HU:L        .066  1.42   24/20     0.2 
USD/CAD:HU:S        .012  1.79   24/16     3.1  
USD/CHF:CT          .104  1.60   16/17     0.6  
USD/CHF:CT:L        .104  1.60   16/17     0.6  
USD/CHF:CT:S        .000  ----    0/0      0.0  
USD/CHF:CY          .025  1.10   21/24     0.1  
USD/CHF:CY:L        .025  1.10   21/24     0.1  
USD/CHF:CY:S        .000  ----    0/0      0.0 
USD/CHF:HP          .025  1.45   31/48     3.2 
USD/CHF:HP:L        .000  ----    0/0      0.0 
USD/CHF:HP:S        .025  1.45   31/48     3.2  
USD/CHF:VO          .011  3.93   17/8      7.6 
USD/CHF:VO:L        .011  3.93   17/8      7.6 
USD/CHF:VO:S        .000  ----    0/0      0.0 

The first column identifies the component; it consists of the asset name and the algorithm identifier. "S" or "L" are separate statistics for short or long trades. The second column contains the OptimalF factors for that component. The higher the factor, the more capital should be reinvested by the strategy component. A 0 indicates that this component should not be traded. The further columns contain the profit factor, the number of winning and losing trades, and the weight of the component.

As the factors are stored in a simple text file, they can be edited anytime with a text editor, even while live trading. Zorro detects if factors have been changed, and automatically reloads them. If the factors are evaluated in the strategy, as in some of the Z strategies, a component can be excluded from further trading by setting its factor to zero, or by placing a minus sign in front of it for making it negative.

Variables

The following variables can be used for evaluating or generating OptimalF factors in the script:

OptimalF

OptimalFLong

OptimalFShort

OptimalF factors, combined for long/short and separately for long and short trades of the current strategy component that is selected with the asset and algo functions. For long-only systems only OptimalFLong is relevant. The margin to be invested per trade can be calculated by multiplying the investment amount with OptimalF. In [Train] mode or when the FACTORS flag is not set, the OptimalF factors are always 1. If a component was unprofitable in the training run, its OptimalF factor is zero.

OptimalFRatio

Generate OptimalF factors with the given ratio of the highest to the lowest factor (default = 0 = no ratio). For instance, at OptimalFRatio = 3 large factors are reduced and small factors are increased so that the highest OptimalF factor is 3 times the lowest factor. The average of all factors remains unchanged. Useful for preventing large component margin differences when using OptimalF factors in portfolio systems.

Remarks

Examples of different investment methods

// reinvest the square root of your portfolio component profits, separately for long and short trades
if(GoLong) 
  Margin = OptimalFLong * Capital * sqrt(1 + (WinLong-LossLong)/Capital);
else
  Margin = OptimalFShort * Capital * sqrt(1 + (WinShort-LossShort)/Capital);
 
// reinvest the square root of your portfolio component profits
Margin = OptimalFLong * Capital * sqrt(1 + ProfitClosed/Capital);
 
// reinvest the square root of your total profits
Margin = OptimalFLong * Capital * sqrt(1 + (WinTotal-LossTotal)/Capital);

See also:

Margin, RISKLIMIT, Win/Loss, Markowitz, Performance, Tutorial

 

► latest version online