开拓者期货期权程序化系统交易论坛
标题:
收盘平仓模型遇到的问题
[打印本页]
作者:
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