|
- 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 = 0.5 * TrueRange + 0.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 next bar at market;
- if trend = -1 and trend[1] <> -1 then sellshort("Trend.SE") num contracts next bar 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 next bar at market;
- if Trend = -1 and MP = -1 then sellshort("Add.SE") add_num contracts next bar 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 sell("Red.LX") red_num contracts next bar at market;
- if Trend = -1 and MP = -1 then buytocover("Red.SX") red_num contracts next bar at market;
- end;
- if Num < 1 then Num = 1;
|
|