开拓者期货期权程序化系统交易论坛

标题: 收盘平仓模型遇到的问题 [打印本页]

作者: zxjt10201098    时间: 2016-6-15 10:18:17     标题: 收盘平仓模型遇到的问题

老师,对于日内收盘平仓,我的思路是这样的:加载到PTA1小时K线上,如果是历史K线,我不仅想在23:30夜盘结束时以收盘价平仓,也想在每日15:00收盘时平仓;对于实时行情,我不仅想在23:25平仓,也想在14:55平仓。以下是我的测试模型,现在已经能实现历史K线23:30收盘时平仓,但让我实在不能理解的是为何历史K线的15点收盘无法出现平仓信号呢,我的用户函数TrueDateAmend返回的值确实发生变化了啊?请各位高手和老师们帮我想想办法,我已经想了2天了,依然找不到问题。
Params
Numeric FastLen(5);
Numeric SlowLen(10);
Vars
NumericSeries ma1;
NumericSeries ma2;
BoolSeries Con1;
BoolSeries Con2;
Begin
ma1=AverageFC(C,FastLen);
ma2=AverageFC(C,SlowLen);
PlotNumeric("ma1",ma1);
PlotNumeric("ma2",ma2);
Con1=CrossOver(ma1,ma2);
Con2=CrossUnder(ma1,ma2);
If(Con1[1]) Buy(0,Open);
If(Con2[1]) SellShort(0,Open);
If(MarketPosition<>0)
{
  If((Date[-1]!=InvalidInteger && Date!=Date[-1]) || (Date[-1]==InvalidInteger && Date<CurrentDate) || (Date[-1]!=InvalidInteger && TrueDateAmend!=TrueDateAmend[-1]))
  {
   Sell(0,Close);
   BuyToCover(0,Close);
   }Else If((Date==CurrentDate && Time==0.1400 && CurrentTime>=0.1455) || (Date==CurrentDate && Time==0.2300 && CurrentTime>=0.2325))
  {
   Sell(0,0);
   BuyToCover(0,0);
   }
}
Commentary("TrueDateAmend="+DatetoString(TrueDateAmend));
End

以下是我引用的用户函数TrueDateAmend:
Vars
        Numeric newDate;
        Numeric DayOffset;
        Numeric dow;
Begin
        If(BarType==0||BarType==4||BarType==5)//日线,周线,月线
        {
                newDate = Date;
        }Else
        {
                //18点以后算下一个交易日
                DayOffset = 0;
                dow = Weekday;
                If(Hour>=18)
                {                       
                        If(dow==Friday) // 周五晚上
                        {
                                DayOffset = 3;
                        }Else
                        {
                                DayOffset = 1;
                        }
                }Else
                {
                        DayOffset=0;
                }
                newDate = DateAdd(Date,DayOffset);
        }
        Return NewDate;
End




作者: zxjt10201098    时间: 2016-6-15 16:43:41

老师,我看了一下软件的说明书,其中有这么一段话对我提示很大:“用户函数的回溯和系统函数原理基本一致,但考虑到系统的执行速度和效率等因素,目前,TradeBlazer公式不支持对用户函数的回溯,如果您想要获取用户函数的回溯值,建议您将函数返回值赋值给一个序列变量,通过对序列变量的回溯来达到相同的目的。”于是我把上面的模型改编为:
Params
Numeric FastLen(5);
Numeric SlowLen(10);
Vars
NumericSeries ma1;
NumericSeries ma2;
BoolSeries Con1;
BoolSeries Con2;
NumericSeries TrueDateAmendTS;
Begin
ma1=AverageFC(C,FastLen);
ma2=AverageFC(C,SlowLen);
PlotNumeric("ma1",ma1);
PlotNumeric("ma2",ma2);
Con1=CrossOver(ma1,ma2);
Con2=CrossUnder(ma1,ma2);
If(Con1[1]) Buy(0,Open);
If(Con2[1]) SellShort(0,Open);
TrueDateAmendTS=TrueDateAmend;
If(MarketPosition<>0)
{
  If((Date[-1]!=InvalidInteger && Date!=Date[-1]) || (Date[-1]==InvalidInteger && Date<CurrentDate) || (Date[-1]!=InvalidInteger && TrueDateAmendTS!=TrueDateAmendTS[-1]))
  {
   Sell(0,Close);
   BuyToCover(0,Close);
   }Else If((Date==CurrentDate && Time==0.1400 && CurrentTime>=0.1455) || (Date==CurrentDate && Time==0.2300 && CurrentTime>=0.2325))
  {
   Sell(0,0);
   BuyToCover(0,0);
   }
}
Commentary("TrueDateAmendTS="+DatetoString(TrueDateAmendTS));
Commentary("Date="+DateToString(Date));
End
上面红字部分为发生的改动,本以为能实现收盘平仓功能了,但是还是不行,测试表现与思路完全不符啊,我技穷了,各位高手和老师指点一下吧
作者: zxjt10201098    时间: 2016-6-16 13:20:19

哪位老师能给我看看,解决我的问题啊,我是求助无门了!
作者: zxjt10201098    时间: 2016-6-17 12:21:12

此问题已解决,求助了四个渠道:1、TBqq客服;2、TB论坛;3、北京某投资公司朋友;4、大连某投资公司。最后在大连某公司朋友的帮助下成功解决问题。这个公式无法体现收盘的思路主要是因为TB联机帮助里的公式策略进阶的误导,采用date!=date[-1]等之类的对未来数据的引用判断收盘Bar线,软件的使用说明书有误导之嫌,有兴趣的同学可以自己加载测试。[attach]34069[/attach]




欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2