设为首页收藏本站

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

收盘平仓模型遇到的问题 [复制链接]

Rank: 1

精华
0
UID
232018
积分
26
帖子
13
主题
4
阅读权限
10
注册时间
2016-4-12
最后登录
2016-7-5
跳转到指定楼层
1#
发表于 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



Rank: 1

精华
0
UID
232018
积分
26
帖子
13
主题
4
阅读权限
10
注册时间
2016-4-12
最后登录
2016-7-5
2#
发表于 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
上面红字部分为发生的改动,本以为能实现收盘平仓功能了,但是还是不行,测试表现与思路完全不符啊,我技穷了,各位高手和老师指点一下吧

使用道具 举报

Rank: 1

精华
0
UID
232018
积分
26
帖子
13
主题
4
阅读权限
10
注册时间
2016-4-12
最后登录
2016-7-5
3#
发表于 2016-6-16 13:20:19 |只看该作者
哪位老师能给我看看,解决我的问题啊,我是求助无门了!

使用道具 举报

Rank: 1

精华
0
UID
232018
积分
26
帖子
13
主题
4
阅读权限
10
注册时间
2016-4-12
最后登录
2016-7-5
4#
发表于 2016-6-17 12:21:12 |只看该作者
此问题已解决,求助了四个渠道:1、TBqq客服;2、TB论坛;3、北京某投资公司朋友;4、大连某投资公司。最后在大连某公司朋友的帮助下成功解决问题。这个公式无法体现收盘的思路主要是因为TB联机帮助里的公式策略进阶的误导,采用date!=date[-1]等之类的对未来数据的引用判断收盘Bar线,软件的使用说明书有误导之嫌,有兴趣的同学可以自己加载测试。
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

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

bottom

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

GMT+8, 2024-5-1 22:22

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部