设为首页收藏本站

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

求助,参数优化时只执行一次交易 [复制链接]

Rank: 1

精华
0
UID
241219
积分
18
帖子
11
主题
4
阅读权限
10
注册时间
2016-10-2
最后登录
2017-6-6
跳转到指定楼层
1#
发表于 2016-10-20 23:25:12 |只看该作者 |倒序浏览
rt,试运行一个Dual——thrust,原始程序正常运行的,一参数优化就只有一次交易,而且贯穿整个回测区间,有没有知道这是什么问题的,源码如下,比如我优化K1,K2就不行
//------------------------------------------------------------------------
// 简称: Dual_Thrust
// 名称:
// 类别: 公式应用
// 类型: 用户应用
// 输出: Void
//------------------------------------------------------------------------
Params
Numeric K1(0.5);    //买价占比
Numeric K2(0.5);    //卖价占比
Numeric Mday(1);    //卖价幅度天数
Numeric Nday(1);    //买价幅度天数
Numeric lots(1);    //固定手数
Numeric offset(0);  //滑点
Numeric outTime1(0.1454);
Numeric outTime2(0.15);
Numeric inTime(0.0930);

Vars
Numeric BuyRange(0); //买价幅度
Numeric SellRange(0);//卖价幅度
Numeric HH;          //N天的High值最大值
Numeric LL;          //N天的Low值最小值
Numeric HC;          //N天的Close值最大值
Numeric LC;          //N天的Close值最小值
Numeric i_offset;    //滑点价格
Numeric BuyPosition; //买价
Numeric SellPosition;//卖价
Numeric HighD1;//卖价
Begin

        i_offset = offset*MinMove*PriceScale;  //滑点
        HH = Highest(HighD(1),Mday);
        HC = Highest(CloseD(1),Mday);
        LL = Lowest(LowD(1),Mday);
        LC = Lowest(CloseD(1),Mday);

        SellRange = Max((HH - LC), (HC - LL));

        HH = Highest(HighD(1),Nday);
        HC = Highest(CloseD(1),Nday);
        LL = Lowest(LowD(1),Nday);
        LC = Lowest(CloseD(1),Nday);

        BuyRange = Max((HH - LC), (HC - LL));

                BuyPosition = OpenD(0)+K1*BuyRange;
                SellPosition = OpenD(0)-K2*SellRange;

        PlotNumeric("BuyPosition",BuyPosition);
                PlotNumeric("SellPosition",SellPosition);

If(CurrentBar > 44*Max(Mday,Nday))//使用的是5分钟周期,其它的周期自己做相应修改
{
        //入场
        If(MarketPosition == 0 and Time >= inTime and Time < outTime1)   
        {
                If(High>=BuyPosition)
                {
                        Buy(lots,Max(Open,BuyPosition)+i_offset);
                }
               
                If(Low<=SellPosition)
                {
                        SellShort(lots,Min(Open,SellPosition)-i_offset);
                }
        }
                //止损出场

                //收盘出场
        If(Time >= outTime1 and Time < outTime2)
        {
                if(marketposition==-1)  BuyToCover(1,Open);
                Else if(marketposition==1)  Sell(1,Open);

        }
}
End


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

bottom

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

GMT+8, 2024-4-20 19:53

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部