设为首页收藏本站

 找回密码
 注册
查看: 17469|回复: 2
打印 上一主题 下一主题

【源码】恒温器策略 [复制链接]

Rank: 4

精华
0
UID
112594
积分
333
帖子
281
主题
8
阅读权限
50
注册时间
2012-9-20
最后登录
2013-12-4
跳转到指定楼层
1#
发表于 2013-1-11 09:08:47 |显示全部楼层 |倒序浏览
本帖最后由 sorakiraa 于 2013-1-14 09:08 编辑

原帖请见金字塔:
【震荡+趋势混合策略】恒温器策略

by RogarZ

源码:
  1. Params
  2.         Numeric bollinglengths(50);
  3.         Numeric trendliqlength(50);
  4.         Numeric numstddevs(2);
  5.         Numeric swingprcnt1(0.5);
  6.         Numeric swingprcnt2(0.75);
  7.         Numeric atrlength(10);
  8.         Numeric swingtrendswitch(50);
  9. Vars
  10.                 BoolSeries swing(False);
  11.                 NumericSeries cmival;
  12.                 NumericSeries buyeasierday(0);
  13.                 NumericSeries selleasierday(0);
  14.                 NumericSeries trendlokbuy;
  15.                 NumericSeries trendloksell;
  16.                 NumericSeries trendbuypt;
  17.                 NumericSeries trendsellpt;
  18.                 NumericSeries keyofday;
  19.                 NumericSeries ma1;
  20.                 NumericSeries midd;
  21.                 Numeric swingprotstop;       
  22.                 Numeric atr;
  23.                 Numeric swingbuypt;
  24.                 Numeric swingsellpt;
  25. Begin
  26.         Commentary("BarInterval= "+Text(BarInterval));
  27.                 cmival=Abs(Close[1]-Close[31])/(Highest(High[1],30)-Lowest(Low[1],30));
  28.                 trendloksell=Average(Low[1],3*240/BarInterval);
  29.                 trendlokbuy=Average(High[1],3*240/BarInterval);
  30.                 keyofday=(HighD(0)+LowD(0)+CloseD(0))/3;
  31.                 If(Date<>Date[1]){
  32.                 If(CloseD(1)>keyofday[1])
  33.                 {
  34.                 selleasierday=1;//空头日
  35.                 }Else{
  36.                 buyeasierday=1;//多头日
  37.                 }
  38. }
  39.         Atr=XAverage(TrueRange,atrlength*240/BarInterval);
  40. If(buyeasierday==1){
  41.         swingbuypt=OpenD(0)+swingprcnt1*atr;
  42.         swingsellpt=OpenD(0)-swingprcnt2*atr;
  43. }
  44. If(selleasierday==1){
  45.         swingbuypt=OpenD(0)+swingprcnt2*atr;
  46.         swingsellpt=OpenD(0)-swingprcnt1*atr;
  47. }
  48. swingbuypt=Max(swingbuypt,trendlokbuy);
  49. swingsellpt=Min(swingsellpt,trendloksell);

  50. PlotNumeric("Buy",swingbuypt);
  51. PlotNumeric("Sell",swingsellpt);

  52. ma1=Average(Close[1],trendliqlength);//趋势均线
  53. midd=Average(Close[1],bollinglengths);//布林中线
  54. trendbuypt=midd+numstddevs*StandardDev(Close[1],bollinglengths);
  55. trendsellpt=midd-numstddevs*StandardDev(Close[1],bollinglengths);

  56. If(cmival<swingtrendswitch/100)
  57. {
  58.         If(MarketPosition==0&&High[1]>=swingbuypt)
  59.         //开多仓
  60. {
  61.                                 Buy(1,Max(Open,swingbuypt));
  62.                                 swing=True;
  63. }
  64.         If(MarketPosition==0&&Low[1]<=swingsellpt)
  65.         //开空仓
  66. {
  67.                                 SellShort(1,Min(Open,swingsellpt));
  68.                                 swing=True;
  69. }
  70. If(MarketPosition>0&&Low[1]<=swingsellpt)
  71. //多头反手
  72. {
  73.                                 SellShort(1, Min(Open,swingsellpt));
  74.                                 swing=True;
  75. }
  76. If(MarketPosition<0&&High[1]>=swingbuypt)
  77. //空头反手
  78. {
  79.                                 Buy(1, Max(Open,swingbuypt));
  80.                                 swing=True;
  81. }
  82. }Else{
  83.         swingprotstop=atr*3;
  84.         If(MarketPosition==0&&High[1]>=trendbuypt)
  85. //开多仓
  86. {
  87.         Buy(1,Max(Open,trendbuypt));
  88.         swing=False;
  89. }
  90. If(MarketPosition==0&&Low[1]<=trendsellpt)
  91. //开空仓
  92. {
  93.         SellShort(1,Min(Open,trendsellpt));
  94.         swing=False;
  95. }
  96. If(MarketPosition>0&&swing)
  97. //多头止损
  98. {
  99.         If(Low[1]<=EntryPrice-swingprotstop)
  100. {
  101.         Sell(1,Min(Open, EntryPrice-swingprotstop));
  102. }Else If(Low[1]<=ma1)
  103. {
  104.         Sell(1,Min(Open,ma1));
  105. }
  106. }
  107. If(MarketPosition<0&&swing)
  108. //空头止损
  109. {
  110.         If(High[1]>=EntryPrice+swingprotstop)
  111. {
  112.         BuyToCover(1,Max(Open, EntryPrice+swingprotstop));
  113. }Else If(High[1]>=ma1)
  114. {
  115.         BuyToCover (1,Max(Open,ma1));
  116. }
  117. }
  118. }

  119. End
复制代码
简单的翻译了一下,某些指标与原帖有点出入。。。。。。

Rank: 4

精华
0
UID
112594
积分
333
帖子
281
主题
8
阅读权限
50
注册时间
2012-9-20
最后登录
2013-12-4
2#
发表于 2013-1-14 08:41:37 |显示全部楼层
这个是以前写的
问题比较多

序列函数那个问题

可以单独提个用户函数出来

TB应该是用C编的

我是学Java的,老是说我对C里面的指针很反感

使用道具 举报

Rank: 4

精华
0
UID
112594
积分
333
帖子
281
主题
8
阅读权限
50
注册时间
2012-9-20
最后登录
2013-12-4
3#
发表于 2013-1-16 09:08:35 |显示全部楼层
家纺3362 发表于 2013-1-15 22:18
这个不知道哪里有点不对,帮我看看

我不知道你说的问题是什么

不过你开仓用High,Low进行判断,盘中可能出现信号消失和反复开仓

使用道具 举报

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

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-23 18:56

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部