设为首页收藏本站

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

一起改股指震荡策略 [复制链接]

Rank: 5Rank: 5

精华
0
UID
116737
积分
781
帖子
210
主题
32
阅读权限
60
注册时间
2013-3-14
最后登录
2019-8-16
跳转到指定楼层
1#
发表于 2013-10-9 13:15:58 |只看该作者 |倒序浏览
本帖最后由 yebenli 于 2014-7-17 13:07 编辑



//------------------------------------------------------------------------
// 简称: 布林轨震荡系统
// 名称: IF--5min
// 类别: 公式应用
// 类型: 内建应用
//------------------------------------------------------------------------

Params        
        Numeric Lots(1);
        Numeric Length(20);
Vars
        NumericSeries mClose(0);
        NumericSeries mOpen(0);
        NumericSeries mhigh(0);
        NumericSeries mlow(0);
        
        NumericSeries MidBand;
        NumericSeries Band;
        NumericSeries UpBand;
        NumericSeries DnBand;
        NumericSeries OpenBar;
        NumericSeries BB;
        NumericSeries BandAcc;
        //衡量当日波动
        NumericSeries ATR;
        NumericSeries StopPoint;
        NumericSeries ExitLine;
Begin

        if(CurrentBar == 0)
        {
                mopen = open;
                mclose = (O+H+L+C)/4;
                mhigh = Max( high, mopen);
                mhigh = Max( mhigh, mclose);      
                mlow = Min( low, mopen);
                mlow = Min( mlow,mclose);
                        
        }else if(CurrentBar > 0)
        {
                mclose = (O+H+L+C)/4;
                mopen = (mopen [1] + mclose [1])/2 ;
                mhigh = Max(High, mopen) ;
                mhigh = Max(mhigh, mclose) ;
                mlow = Min(Low, mopen) ;
                mlow = Min(mlow, mclose) ;
        }
        
        PlotNumeric("Close",mclose);
        PlotNumeric("Open",mopen);
        PlotNumeric("High",mhigh);
        PlotNumeric("Low",mlow);
        
        MidBand=Average(mclose[1],Length);
        Band=StandardDev(mclose[1],Length);
        UpBand=MidBand+2*Band;
        DnBand=MidBand-2*Band;
        PlotNumeric("MidBand",MidBand);
        PlotNumeric("UpBand",UpBand);
        PlotNumeric("DnBand",DnBand);
        
        BandAcc=Band-Band[1];
        BB=(mclose[1]-DnBand[1])/(UpBand[1]-DnBand[1]);
        Commentary("BB="+Text(BB));
        Commentary("BandAcc="+Text(BandAcc));
        
        if( MarketPosition==0 && BandAcc[1]<BandAcc[2]  )
        {
                if(  L<L[1]  &&  mclose[1]<mopen[1]  && mClose[3]> mopen[3]  && BB[4]>1 )
                {
                        SellShort(Lots,Min(o,L[1]));
                        OpenBar=CurrentBar;
                }
                if(  H>H[1]  && mclose[1]>mopen[1]  && mClose[3]< mopen[3]  && BB[4]<0 )
                {
               
                        Buy(Lots,max(o,H[1]));
                        OpenBar=CurrentBar;
                }
        }
        if(MarketPosition==1 && mclose[1]<mopen[1] && L<L[1] )
        {
                Sell(lots,Min(o,L[1]));
        }
        if(MarketPosition==-1 && mclose[1]>mopen[1] && H>H[1] )
        {
                BuyToCover(lots,max(o,H[1]));
        }
        //防止极端行情平仓
        ATR=AvgTrueRange(Length);
        If(MarketPosition<>0)
        {
                StopPoint=IIf(MarketPosition>0,C[1]-2*ATR[1],C[1]+2*ATR[1]);
                If(Currentbar==OpenBar)
                {
                        ExitLine=StopPoint;
                }
                If(MarketPosition>0 && CurrentBar>OpenBar)
                {
                        ExitLine=Max(StopPoint,ExitLine[1]);
                }
                If(MarketPosition<0 && Currentbar>OpenBar )
                {
                        ExitLine=Min(StopPoint,ExitLine[1]);
                }
                PlotNumeric("ExitLine",ExitLine);
        }
        
        if(MarketPosition==1 && L<ExitLine  )
        {
                Sell(lots,Min(o,ExitLine));
                OpenBar=0;
        }
        if(MarketPosition==-1  && H>ExitLine  )
        {
                BuyToCover(lots,Max(O,ExitLine));
                OpenBar=0;
        }  
End

//------------------------------------------------------------------------
// 编译版本        GS2010.12.08
// 版权所有        TradeBlazer Software 2003-2010
// 更改声明        TradeBlazer Software保留对TradeBlazer平
//                        台每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

Rank: 3Rank: 3

精华
0
UID
81930
积分
151
帖子
72
主题
8
阅读权限
40
注册时间
2011-11-24
最后登录
2018-12-5
2#
发表于 2013-10-9 17:46:27 |只看该作者
楼主思路很好,代码也很严谨,我抛砖引玉,说点自己的看法:我加了2跳滑点和2%%手续费后,曲线就不那么理想了,回看测试报告,主要是交易次数过多,我设置了较高的交易成本后盈利就打折扣了(倒不是我吹毛求疵,我平时给自己的模型设的更高)。震荡策略不像趋势策略,靠抓大行情来补小亏损,从逻辑上讲,震荡模型既然是抓顶抄底,不会像趋势那样不错过任何一个大行情,而错过任何一个大行情,会给最后的总盈利会打不少折扣,要填补较高的交易成本的话,要么就是提高模型胜率,减少错误的交易比例,要么配合一套趋势模型,做模型组合,给趋势模型削峰填谷

使用道具 举报

高级操盘手

「你若能信,在信之人,凡事皆能。」

Rank: 10Rank: 10Rank: 10

精华
0
UID
117005
积分
98549
帖子
1121
主题
14
阅读权限
200
注册时间
2013-3-18
最后登录
2022-10-29
3#
发表于 2013-10-11 08:31:33 |只看该作者
看了一下,代码里有隐藏偷价格的地方,比如下面这里:

if(  L<L[1]  &&  mclose[1]<mopen[1]  && mClose[3]> mopen[3]  && BB[4]>1 )
{
       SellShort(Lots,Min(o,L[1]));
       OpenBar=CurrentBar;
}

这里是小于,并不是小于等于,也就是说,满足的时候,价格是比L[1]要小的,在等于L[1]的时候并不满足,也就是不能用L[1]来发单,后面应该改成:

SellShort(Lots,Min(o,L[1]+MinMove*PriceScale));

又或者是直接把前面L<L[1]改成L<=L[1]


不要因为众生的愚疑,而带来了自己的烦恼。

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
116737
积分
781
帖子
210
主题
32
阅读权限
60
注册时间
2013-3-14
最后登录
2019-8-16
4#
发表于 2013-10-11 08:46:23 |只看该作者
本帖最后由 yebenli 于 2013-10-11 08:49 编辑
superwin 发表于 2013-10-11 08:31
看了一下,代码里有隐藏偷价格的地方,比如下面这里:

if(  L1 )


在实盘的时候报价是q_askPrice和Q_BidPrice, 这两个价格本身与close相差了一个跳点以上,因此实盘命令相应改为Q_AskPrice>=H[1],Q_BidPrice<=L[1],这个与回测的时候H>H[1],和L<L[1]是一样的,因此上述写法是没问题的。

使用道具 举报

高级操盘手

「你若能信,在信之人,凡事皆能。」

Rank: 10Rank: 10Rank: 10

精华
0
UID
117005
积分
98549
帖子
1121
主题
14
阅读权限
200
注册时间
2013-3-18
最后登录
2022-10-29
5#
发表于 2013-10-11 08:52:04 |只看该作者
本帖最后由 superwin 于 2013-10-11 08:53 编辑

没问题的吗?你可以测试一下因为这一跳而导致整个利润的相差差了多少,很多人就因为这些小细节,导致了测试很完美,实盘很悲惨,如果是实盘是多了一跳,而你做的测试是少了一跳的,那这个测试成绩的水分……

我对楼主的“上述写法是没问题的。”表示很惊讶。


不要因为众生的愚疑,而带来了自己的烦恼。

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
116737
积分
781
帖子
210
主题
32
阅读权限
60
注册时间
2013-3-14
最后登录
2019-8-16
6#
发表于 2013-10-11 08:57:00 |只看该作者
本帖最后由 yebenli 于 2013-10-11 08:58 编辑
superwin 发表于 2013-10-11 08:52
没问题的吗?你可以测试一下因为这一跳而导致整个利润的相差差了多少,很多人就因为这些小细节,导致了测试 ...


只是说H[1],L[1]这个价格速度快是可以吃到的,当q_AskPrice>=H[1]时,H已经大于H[1]了, 我们的目标成交价仍是H[1]。。。跳点问题只能去扣计算机速度问题,不是回测程序问题。。。当然这个程序大概率上是不能赚钱的。。。

使用道具 举报

Rank: 4

精华
0
UID
240
积分
433
帖子
23
主题
4
阅读权限
50
注册时间
2007-9-1
最后登录
2019-4-5
7#
发表于 2014-9-21 01:23:51 |只看该作者
感谢楼主的思路启发,跟通道系统结合起来用效果更好,1手股指收益160万左右,回撤也比较适中。

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
20707
积分
164
帖子
22
主题
8
阅读权限
40
注册时间
2010-12-1
最后登录
2016-5-18
8#
发表于 2014-11-19 21:23:03 |只看该作者
策略,简单,干净,
思路清晰,
唯一遗憾是成本估计上的疏忽,L<L[1]需要改为小于等于,
另外,我个人会再加上一个点的滑点,
总的来说,这个帖子意义是健康向上的!
鼓励这种氛围!

使用道具 举报

Rank: 2

精华
0
UID
166204
积分
102
帖子
89
主题
12
阅读权限
30
注册时间
2013-1-24
最后登录
2022-3-28
9#
发表于 2014-12-14 23:42:51 |只看该作者
程序化交易策略火爆群: 332381283 ,这里的人很热心,欢迎加入我们团队!

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
12849
积分
230
帖子
109
主题
13
阅读权限
40
注册时间
2010-6-23
最后登录
2024-2-2
10#
发表于 2016-11-30 15:55:24 |只看该作者
偷价

使用道具 举报

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

bottom

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

GMT+8, 2024-4-25 01:59

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部