The Simplest System #3 with Money Management. Copyright (c) 2002 DT ****************************************************} Input: Price((H+L)*.5), PtUp(4.), PtDn(4.), {Max correction to change trend} MM_Model(2), {1 = % Risk Model; 2 = % Volatility Model; 3 = Drawdown Model; 4 = Kelly Model; 5 = Williams' Model; 6 = Fixed Ratio Model; 7= Market Money Model} MM(1), {% Risk parameter} MM_add(0), {% Risk for playing market money; 0 to disactivate} MaxVolat(100), {% Risk for playing market money; 100 to disactivate} MaxDD(20), {% Drawdown} InitCapital(100000); {Initial capital to trade} Vars: LL(99999), HH(0), Trend(0), Volat(TrueRange); Vars: MP(0), Risk(Range), Num(1), add_num(0), red_num(0), FRDelta(0), DD(0), Equity(InitCapital), TotalEquity(InitCapital), EqTop(InitCapital), AssuredProfit(0), HPositionProfit(0), Kelly(0); MP = MarketPosition; Volat = .5 * TrueRange + .5*Volat[1]; if MP <= 0 then begin if Price < LL then LL = Price; if Price cross above LL*(1 + PtUp*.01) then begin Trend = 1; HH = Price; end; end; if MP >= 0 then begin if Price > HH then HH = Price; if Price cross below HH*(1 - PtDn*.01) then begin Trend = -1; LL = Price; end; end; If trend = 1 then Risk = PtDn * .01 * close {+ Slippage}; If trend = -1 then Risk = PtUp * .01 * close {+ Slippage}; HPositionProfit = maxlist( OpenPositionProfit, HPositionProfit); AssuredProfit = HPositionProfit - Risk; Equity = InitCapital + NetProfit; TotalEquity = Equity + OpenPositionProfit; EqTop = MaxList(EqTop, TotalEquity); if MM_Model = 1 then { % Risk Model } Num = floor(MM * Equity *.01/Risk); if MM_Model = 2 then { % Volatility Model } Num = floor(MM * Equity *.01/ Volat / BigPointValue ); if MM_Model = 3 then begin { Drawdown Model } Num = floor(MM * (Equity - (1 - MaxDD*.01) * EqTop) * .01 / Volat / BigPointValue); end; if MM_Model = 4 then begin { Kelly Model } If TotalTrades > 20 and GrossProfit > 0 then Kelly = NumWinTrades/TotalTrades * (1 - GrossLoss/GrossProfit) else Kelly = 0.1; if Kelly > .9 then Kelly = .9; Num = floor(MM * Kelly * Equity * .01 / Risk); {Print(Kelly);} end; if MM_Model = 5 then begin { Larry Williams' Model } value11 = MaxList(-LargestLosTrade / MaxList(CurrentContracts, 1) , Risk); Num = floor(MM * Equity *.01 / value11); end; if MM_Model = 6 then begin { Fixed Ratio Model } { DD = MaxList(DD, (EqTop - TotalEquity)/MaxList(CurrentContracts, 1)) ; {Max Drawdown} if TotalTrades > 20 and DD > 0 then FRDelta = MM * DD *.01 else } FRDelta = MM * volat * BigPointValue * .01; {Delta} value12 = MaxList(Equity - .5*close*(close + FRDelta)/FRDelta, 0.25); Num = floor(SquareRoot(2*value12/FRDelta + .25) + .5); end; if MM_Model = 7 then { Playing the market money } num = floor((MM * (InitCapital + MinList(NetProfit, 0)) + MM_add * MaxList(NetProfit, 0)) * .01 / Volat / BigPointValue); { Entries} if trend = 1 and trend[1] <> 1 then buy("Trend.LE") num contracts at market; if trend = -1 and trend[1] <> -1 then sell("Trend.SE") num contracts at market; add_num = floor( MM_add * AssuredProfit * .01/ Volat / BigPointValue); { Assured Profit Pyramiding } if add_num > 0 and OpenPositionProfit > Volat * BigPointValue then begin if Trend = 1 and MP = 1 then buy("Add.LE") add_num contracts at market; if Trend = -1 and MP = -1 then sell("Add.SE") add_num contracts at market; end; red_num = floor((CurrentContracts * Volat * BigPointValue - MaxVolat * TotalEquity * .01)/ close); if red_num > 0 then begin if Trend = 1 and MP = 1 then exitlong("Red.LX") red_num contracts at market; if Trend = -1 and MP = -1 then exitshort("Red.SX") red_num contracts at market; end; if Num < 1 then Num = 1;