欢迎您光临博庭社区!

 找回密码
 立即注册
查看: 8112|回复: 18

凯利公式和%Risk Model仓位管理公式转换成金魔方   [复制链接]

Rank: 9Rank: 9Rank: 9

发表于 2013-8-24 21:07:49 |显示全部楼层
这是坛友banker2882 提供的一个EL策略,这个策略综合了各种资金仓位管理模型,是值得参考的一个策略模版。
谢谢 banker2882 的提供,原帖在 http://hs633.com/forum.php?mod=viewthread&tid=10412
以下已经用公式转换器转成金魔方实现。
  1. Input: Price(0), {???}
  2. PtUp(4. ), PtDn(4. ), {Max correction to change trend}
  3. MM_Model(2 ), {1 = % Risk Model; 2 = % Volatility Model;
  4. 3 = Drawdown Model; 4 = Kelly Model; 5 = Williams' Model;
  5. 6 = Fixed Ratio Model; 7= Market Money Model}
  6. MM(1 ), {% Risk parameter}
  7. MM_add(0 ), {% Risk for playing market money; 0 to disactivate}
  8. MaxVolat(100 ), {% Risk for playing market money; 100 to disactivate}
  9. MaxDD(20 ), {% Drawdown ?????}
  10. InitCapital(100000 ); {Initial capital to trade ????}
  11. Variable: LL(99999 ), HH(0 ), Trend(0 ), Volat(TrueRange );
  12. Variable: MP(0 ), Risk(High - Low ), Num(1 ), add_num(0 ), red_num(0 ), FRDelta(0 ),
  13. DD(0 ),
  14. Equity1(InitCapital ), TotalEquity(InitCapital ), EqTop(InitCapital ),
  15. AssuredProfit(0 ), HPositionProfit(0 ), Kelly(0 );

  16. Price:=(H+L)*.5;
  17. MP := MarketPosition ;
  18. Volat := 0.5 * TrueRange + 0.5*Volat[1 ] ;
  19. if MP  <= 0  then begin
  20.     if Price  < LL  then LL := Price ;
  21.         if CrossOver(Price,LL*(1 + PtUp*.01 ))  then begin
  22.                         Trend := 1 ;
  23.                         HH := Price ;
  24.                   end;
  25.     end;
  26.    
  27. if MP  >= 0  then begin
  28.     if Price  > HH  then HH := Price ;
  29.         if CrossUnder(Price,HH*(1 - PtDn*.01 ))  then begin
  30.                         Trend := -1 ;
  31.                         LL := Price ;
  32.                   end;
  33.     end;
  34.    
  35. If trend  = 1  then
  36.     Risk := PtDn * .01 * close  {+ Slippage};
  37. If trend  = -1  then
  38.     Risk := PtUp * .01 * close  {+ Slippage};
  39.    
  40. HPositionProfit := Max( PositionProfit , HPositionProfit ) ;
  41. AssuredProfit := HPositionProfit - Risk ;
  42. Equity1 := InitCapital + NetProfit ;
  43. TotalEquity := Equity1 + PositionProfit ;
  44. EqTop := Max(EqTop , TotalEquity ) ;

  45. if MM_Model  = 1  then { % Risk Model }
  46. Num := Floor(MM * Equity1 *.01/Risk ) ;
  47. if MM_Model  = 2  then { % Volatility Model }
  48. Num := Floor(MM * Equity1 *.01/ Volat / BigPointValue  ) ;
  49. if MM_Model  = 3  then begin { Drawdown Model }
  50. Num := Floor(MM * (Equity1 - (1 - MaxDD*.01 ) * EqTop ) * .01 / Volat /
  51. BigPointValue ) ;
  52. end;
  53. if MM_Model  = 4  then begin { Kelly Model }
  54. If TotalTrades  > 20  and GrossProfit  > 0  then
  55. Kelly  = NumWinTrades/TotalTrades * (1 - GrossLoss/GrossProfit )  ;
  56. else
  57. Kelly := 0.1 ;
  58. if Kelly  > .9  then Kelly := .9 ;
  59. Num := Floor(MM * Kelly * Equity1 * .01 / Risk ) ;
  60. {Print(Kelly);}
  61. end;
  62. if MM_Model  = 5  then begin { Larry Williams' Model }
  63. value11 := Max(-LargestLosTrade / Max(CurrentContracts , 1 )  , Risk ) ;
  64. Num := Floor(MM * Equity1 *.01 / value11 ) ;
  65. end;
  66. if MM_Model  = 6  then begin { Fixed Ratio Model }
  67. { DD = MaxList(DD, (EqTop - TotalEquity)/MaxList(CurrentContracts, 1)) ; {Max
  68. Drawdown}
  69. if TotalTrades  > 20  and DD  > 0  then FRDelta  = MM * DD *.01  ;
  70. else  
  71. FRDelta := MM * volat * BigPointValue * .01 ; {Delta}
  72. value12 := Max(Equity1 - .5*close*(close + FRDelta )/FRDelta , 0.25 ) ;
  73. Num := Floor(Sqrt(2*value12/FRDelta + .25 ) + .5 ) ;
  74. end;
  75. if MM_Model  = 7  then { Playing the market money }
  76. num := Floor((MM * (InitCapital + Min(NetProfit , 0 ) ) + MM_add *
  77. Max(NetProfit , 0 ) ) * .01 / Volat / BigPointValue ) ;
  78. { Entries}
  79. if trend  = 1  and trend[1 ]  <> 1  then Buy('', num , 0, 0, OT_Market, OB_NextBar,  'Trend.LE');
  80. if trend  = -1  and trend[1 ]  <> -1  then SellShort('', num , 0, 0, OT_Market, OB_NextBar,  'Trend.SE');
  81. add_num := Floor( MM_add * AssuredProfit * .01/ Volat / BigPointValue ) ;
  82. { Assured Profit Pyramiding }
  83. if add_num  > 0  and PositionProfit  > Volat * BigPointValue  then begin
  84. if Trend  = 1  and MP  = 1  then Buy('', add_num , 0, 0, OT_Market, OB_NextBar,  'Add.LE');
  85. if Trend  = -1  and MP  = -1  then SellShort('', add_num , 0, 0, OT_Market, OB_NextBar,  'Add.SE');
  86. end;
  87. red_num := Floor((CurrentContracts * Volat * BigPointValue - MaxVolat *
  88. TotalEquity * .01 )/ close ) ;
  89. if red_num  > 0  then begin
  90. if Trend  = 1  and MP  = 1  then Sell('', red_num , 0, 0, OT_Market, OB_NextBar, 'Red.LX');
  91. if Trend  = -1  and MP  = -1  then BuyToCover('', red_num , 0, 0, OT_Market, OB_NextBar, 'Red.SX');
  92. end;
  93. if Num  < 1  then Num := 1 ;
复制代码
运行结果

附件: 你需要登录才可以下载或查看附件。没有帐号?立即注册

使用道具 举报

Rank: 6Rank: 6

发表于 2013-8-28 12:27:48 |显示全部楼层
收藏,学习,研究

使用道具 举报

Rank: 2

发表于 2013-8-31 00:46:38 |显示全部楼层
学习学习

使用道具 举报

Rank: 2

发表于 2013-9-9 23:34:21 |显示全部楼层
收藏,学习,研究

使用道具 举报

Rank: 6Rank: 6

激情奖

发表于 2013-9-11 12:41:52 |显示全部楼层
收藏,学习,研究
实盘->理念->技巧->量化->策略->自动交易系统->ctp_api

使用道具 举报

Rank: 6Rank: 6

发表于 2013-9-11 20:09:11 |显示全部楼层
收藏,学习,研究
感觉很复杂啊
福康安--快乐健康平安……不恨年华去也,只恐少年心事,强半为消磨……青春都一晌,忍把浮名,换了浅斟低唱……十有九人堪白眼,百无一用是书生……与有肝胆人共事,从无字句处读书

使用道具 举报

Rank: 4

发表于 2013-9-27 20:46:49 |显示全部楼层
学习,学习

使用道具 举报

Rank: 2

发表于 2013-11-3 15:05:51 |显示全部楼层
顶也~~~












宾馆、酒店、工厂、家庭中央热水系统与中央空调工程咨询电话:400-885-7765    手机:18927541760

使用道具 举报

Rank: 6Rank: 6

发表于 2013-11-16 15:41:53 |显示全部楼层
学习,顶一个。

使用道具 举报

Rank: 6Rank: 6

发表于 2014-1-8 17:30:11 |显示全部楼层
收藏,学习,研究

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

bottom

Archiver|http://www.patiosoft.com

GMT+8, 2017-12-16 04:12 , Processed in 0.116203 second(s), 13 queries .

花生网 Copyrigh©2012

和讯信息科技有限公司 ALL Rights Reserved 版权所有 复制必究

回顶部