设为首页收藏本站

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

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

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
6221
积分
274
帖子
103
主题
42
阅读权限
50
注册时间
2009-12-20
最后登录
2015-3-15
19#
发表于 2014-2-9 21:03:20 |只看该作者
希望LZ将代码的逻辑翻译过来才是。

使用道具 举报

Rank: 2

精华
0
UID
168964
积分
80
帖子
58
主题
3
阅读权限
30
注册时间
2013-9-21
最后登录
2017-11-6
18#
发表于 2014-2-9 11:14:36 |只看该作者
这个看上去不错,要试试看

使用道具 举报

Rank: 1

精华
0
UID
175389
积分
6
帖子
5
主题
0
阅读权限
10
注册时间
2013-11-9
最后登录
2013-12-3
17#
发表于 2013-11-25 23:35:15 |只看该作者
无心 发表于 2013-1-12 17:28
要把所有的行情当成趋势
或者把所有的行情当成盘整
这样盈利的可能反而大些 ...

为什么啊?不是很明白啊

使用道具 举报

Rank: 1

精华
0
UID
114434
积分
44
帖子
43
主题
1
阅读权限
10
注册时间
2012-12-26
最后登录
2014-11-3
16#
发表于 2013-5-22 19:26:47 |只看该作者
反正我就觉得一大堆代码  交易思想能简单说一下么

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
116243
积分
152
帖子
129
主题
9
阅读权限
40
注册时间
2013-3-20
最后登录
2022-9-13
15#
发表于 2013-4-26 10:23:27 |只看该作者
谢谢 分享

使用道具 举报

Rank: 4

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

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

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

使用道具 举报

Rank: 4

精华
0
UID
113600
积分
251
帖子
192
主题
20
阅读权限
50
注册时间
2012-11-20
最后登录
2013-6-7
13#
发表于 2013-1-14 09:02:16 |只看该作者
sorakiraa 发表于 2013-1-14 08:41
这个是以前写的
问题比较多

使用道具 举报

Rank: 4

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

序列函数那个问题

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

TB应该是用C编的

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

使用道具 举报

Rank: 4

精华
0
UID
110420
积分
547
帖子
326
主题
16
阅读权限
50
注册时间
2012-5-11
最后登录
2019-1-11
11#
发表于 2013-1-13 04:25:09 |只看该作者
本帖最后由 受伤的小鱼 于 2013-1-13 04:27 编辑

您的自定义函数mylowestbar其实就是公式自带数lowestbar。
这类函数是序列函数,在进行赋值计算时不要放在条件内,以免条件限制导致取值不完全,运算结果不符合。
可修改公式如下:

01.aa = MyLowestBar(MACDValue, 5);

02.    If(CrossOver(MACDValue[1], AvgMACD[1]))

03.    {

04.            lotNumeric("oint", MACDValue, 0, Blue);

05.            MACDLowPointIndex = aa;

06.    }
复制代码
楼主,关于这点你得提醒下新手啊!比如那个closed(1),当然我没细看你的代码!只是说一下啊!莫见怪啊!

使用道具 举报

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

bottom

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

GMT+8, 2024-5-23 19:05

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部