设为首页收藏本站

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

我发现4.3.0的一个致命bug,原来open是抖动的,一起来测试吧 [复制链接]

Rank: 3Rank: 3

精华
0
UID
64342
积分
172
帖子
28
主题
10
阅读权限
40
注册时间
2011-9-8
最后登录
2015-3-3
跳转到指定楼层
1#
发表于 2012-10-8 09:46:37 |只看该作者 |倒序浏览
本帖最后由 ouyang 于 2012-10-8 09:59 编辑

缘由:最近做了个open价突破开仓的策略,当开盘价在突破点位附近时,经常提示交易信号消失,要求检查公式,我查了好几个月也没查到原因。有一天突然想到是否open价本身忽高忽低导致信号消失呢,于是我做了下面的代码检测open的跳动。结果有惊人的发现,原来新bar产生后的第一个tick的open价与第二个tick的open价的确可能不相同,而且有时差别还很大,从第二个开始之后的tick的open价就是稳定的啦。我测试了所有的品种,得到的结论一致,并且进一步发现在上午开市、下午开市、收市时成交密集时的open价抖动很大,而且当open价产生抖动时,新bar的第一个tick的open就等于前一bar的close价。
下面我把测试代码贴出来,大家一起来测试,注意:周期是1分钟呀:
//------------------------------------------------------------------------
// 简称: test
// 名称: open抖动测试
// 类别: 公式应用
// 类型: 用户应用
// 输出:
//------------------------------------------------------------------------
Params
                         
Vars

Begin

        //全局变量初始化
        if(GetGlobalVar(1)==InvalidNumeric)SetGlobalVar(1,-1);
        if(GetGlobalVar(2)==InvalidNumeric)SetGlobalVar(2,-1);
       
        //在交易时间内
        If(CurrentTime>0.085800 And CurrentTime<0.150000 And BarStatus==2)
        {
                //当Open发生改变时,写入文件
                If(GetGlobalVar(1)!=Open)
                {
                        SetGlobalVar(1,Open); //避免重复写入
                       
                        //当open发生改变时,写入文件(包括bar切换时正常的open改变和同一bar内的open改变)
                        FileAppend("D:\\开盘价跳变_"+Symbol+"_.log","Open:"+Text(Open)+"  BarTime:"+Text(Time)+"  CurrentTime:"+Text(CurrentTime));
                       
                        //同一bar内的open改变就是我们要发现的bug,在文件记录中做标记
                        If(GetGlobalVar(2)==Time)FileAppend("D:\\开盘价跳变_"+Symbol+"_.log","在时间"+Text(CurrentTime)+"发现了1次同一bar内open的抖动!");
                        Else SetGlobalVar(2,Time); //保留open跳变的时间
                }
        }
       
End
//------------------------------------------------------------------------
// 编译版本        GS2010.12.08
// 用户版本        2012/10/06 21:50
// 版权所有        ouyang
// 更改声明        TradeBlazer Software保留对TradeBlazer平台
//                        每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------

我的测试结果的一部分(品种:ag888):
文件名:开盘价跳变_ag888_.log
Open:7378  BarTime:0.090000  CurrentTime:0.085902
Open:7256  BarTime:0.090000  CurrentTime:0.085902
在时间0.085902发现了1次同一bar内open的抖动!
Open:7210  BarTime:0.090100  CurrentTime:0.090100
Open:7209  BarTime:0.090100  CurrentTime:0.090100
在时间0.090100发现了1次同一bar内open的抖动!
Open:7218  BarTime:0.090200  CurrentTime:0.090201
Open:7210  BarTime:0.090300  CurrentTime:0.090301
Open:7211  BarTime:0.090400  CurrentTime:0.090401
Open:7181  BarTime:0.090500  CurrentTime:0.090500
Open:7194  BarTime:0.090600  CurrentTime:0.090601
Open:7193  BarTime:0.090600  CurrentTime:0.090601
在时间0.090601发现了1次同一bar内open的抖动!
Open:7188  BarTime:0.090700  CurrentTime:0.090701
Open:7187  BarTime:0.090700  CurrentTime:0.090701
在时间0.090701发现了1次同一bar内open的抖动!
Open:7189  BarTime:0.090800  CurrentTime:0.090800
Open:7184  BarTime:0.090900  CurrentTime:0.090900
Open:7182  BarTime:0.090900  CurrentTime:0.090900
在时间0.090900发现了1次同一bar内open的抖动!
Open:7169  BarTime:0.091000  CurrentTime:0.091001
Open:7168  BarTime:0.091000  CurrentTime:0.091001
在时间0.091001发现了1次同一bar内open的抖动!
Open:7169  BarTime:0.091100  CurrentTime:0.091101
Open:7171  BarTime:0.091100  CurrentTime:0.091101
在时间0.091101发现了1次同一bar内open的抖动!
Open:7166  BarTime:0.091200  CurrentTime:0.091200
Open:7167  BarTime:0.091200  CurrentTime:0.091200
在时间0.091200发现了1次同一bar内open的抖动!
Open:7165  BarTime:0.091300  CurrentTime:0.091300
Open:7175  BarTime:0.091400  CurrentTime:0.091400
Open:7179  BarTime:0.091500  CurrentTime:0.091501
Open:7172  BarTime:0.091600  CurrentTime:0.091602
Open:7173  BarTime:0.091600  CurrentTime:0.091602
在时间0.091602发现了1次同一bar内open的抖动!
Open:7169  BarTime:0.091700  CurrentTime:0.091700
Open:7173  BarTime:0.091800  CurrentTime:0.091801
Open:7174  BarTime:0.092000  CurrentTime:0.092001
Open:7180  BarTime:0.092300  CurrentTime:0.092300
Open:7176  BarTime:0.092400  CurrentTime:0.092400
Open:7177  BarTime:0.092400  CurrentTime:0.092400
在时间0.092400发现了1次同一bar内open的抖动!
Open:7178  BarTime:0.092500  CurrentTime:0.092501
Open:7177  BarTime:0.092600  CurrentTime:0.092603
Open:7178  BarTime:0.092600  CurrentTime:0.092603
在时间0.092603发现了1次同一bar内open的抖动!
Open:7177  BarTime:0.092700  CurrentTime:0.092701
Open:7171  BarTime:0.092800  CurrentTime:0.092802
Open:7170  BarTime:0.092800  CurrentTime:0.092802
在时间0.092802发现了1次同一bar内open的抖动!
Open:7174  BarTime:0.092900  CurrentTime:0.092901
Open:7173  BarTime:0.092900  CurrentTime:0.092901
在时间0.092901发现了1次同一bar内open的抖动!
Open:7169  BarTime:0.093000  CurrentTime:0.093000
Open:7160  BarTime:0.093100  CurrentTime:0.093101
Open:7159  BarTime:0.093100  CurrentTime:0.093101
在时间0.093101发现了1次同一bar内open的抖动!
Open:7161  BarTime:0.093200  CurrentTime:0.093203
Open:7164  BarTime:0.093300  CurrentTime:0.093300
Open:7162  BarTime:0.093400  CurrentTime:0.093400
Open:7164  BarTime:0.093500  CurrentTime:0.093501
Open:7162  BarTime:0.093600  CurrentTime:0.093601
Open:7163  BarTime:0.093600  CurrentTime:0.093601
在时间0.093601发现了1次同一bar内open的抖动!
Open:7168  BarTime:0.093700  CurrentTime:0.093701
Open:7165  BarTime:0.093800  CurrentTime:0.093800
Open:7164  BarTime:0.093900  CurrentTime:0.093902
Open:7163  BarTime:0.094000  CurrentTime:0.094000
Open:7160  BarTime:0.094100  CurrentTime:0.094100
Open:7159  BarTime:0.094100  CurrentTime:0.094100
在时间0.094100发现了1次同一bar内open的抖动!
Open:7161  BarTime:0.094200  CurrentTime:0.094201
Open:7152  BarTime:0.094500  CurrentTime:0.094500
Open:7150  BarTime:0.094600  CurrentTime:0.094600
Open:7136  BarTime:0.094700  CurrentTime:0.094700
Open:7137  BarTime:0.094700  CurrentTime:0.094701
在时间0.094701发现了1次同一bar内open的抖动!
Open:7127  BarTime:0.094800  CurrentTime:0.094800
Open:7129  BarTime:0.094800  CurrentTime:0.094801
在时间0.094801发现了1次同一bar内open的抖动!

全部的测试结果在附件中
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
交易就是人生

Rank: 5Rank: 5

精华
0
UID
5696
积分
1213
帖子
256
主题
111
阅读权限
60
注册时间
2009-10-18
最后登录
2023-6-10
2#
发表于 2012-10-8 18:29:00 |只看该作者

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
3#
发表于 2012-10-10 17:29:18 |只看该作者
个人觉得,这种测试方法是不合理的。。。。
TB里在切换新的bar时,会将上一个bar的最后一个tick与当前bar的第一个tick做为同一个索引来运算的。
你的测试记录里,也完全可以看得出来,同一个time里输出的两个open里,只有一个是当前bar的open,而另一个则是上一个bar的最后一个tick的价格,即上一个bar的收盘价。
而那些所谓的没有抖动的open,是因为正好新bar的open与前一个bar的close一样,才没有满足你的条件被记录两次。

你完全可以试一下不要任何的条件,将每一个tick的值都记录下来看看bar的open会不会有改变。

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
64342
积分
172
帖子
28
主题
10
阅读权限
40
注册时间
2011-9-8
最后登录
2015-3-3
4#
发表于 2012-10-10 22:07:24 |只看该作者
本帖最后由 ouyang 于 2012-10-10 22:28 编辑

管理员老大,其实作为使用者,不知道TB切换bar的机制,其实也无需知道(绝大多数交易者根本不关心这些也照样交易得很好)。只有当设计的公式出现异常情况时才花时间测试是否TB机制出了问题。现在的问题就是:如果有一个公式的建仓过程是,if(open>buyposition)Buy(lots,open);  if(open<sellposition)SellShort(lots,open); 那么当新bar产生后第一个tick的open满足了open>buyposition,系统就发出了Buy指令,图表显示了开多仓;但第二个tick的open发生改变却使open>buyposition的条件不满足,导致TB提示“交易信号丢失”,且直到本BAR结束,图表都显示没有开仓;这就郁闷了(本来图标没显示开仓,但账单中却有开仓记录)。
      所以不管有多少理由,在同一个time同一个BAR下出现2个不同的open,会导致交易混乱。我建议的解决办法有2个:1,把新bar的第一个tick丢掉,用户接收到的是第二个及以后的tick;2,把新bar的第一个tick的开盘价记录成旧bar的open,视同旧BAR的最后一个tick,这样就不会触发新的建仓;本人现在采用过滤新BAR的第一个tick的方法彻底解决了信号丢失的问题;在没有过滤之前,每天都会收到几条信号丢失的警告,且错误建仓后又必须通过一键同步平掉,每天多增加的手续费就超过千元。希望TB的老大仔细琢磨一下,提出一个完美的解决办法。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
5#
发表于 2012-10-11 17:05:56 |只看该作者
ouyang 发表于 2012-10-10 22:07
管理员老大,其实作为使用者,不知道TB切换bar的机制,其实也无需知道(绝大多数交易者根本不关心这些也照 ...


不会出现你所谓的一个bar有两个open的情况。
信号丢失肯定与此机制无关。。请从公式条件里进行问题的排查。

使用道具 举报

Rank: 2

精华
0
UID
92525
积分
50
帖子
9
主题
1
阅读权限
30
注册时间
2012-1-12
最后登录
2012-11-8
6#
发表于 2012-10-12 00:10:11 |只看该作者
这个应该还是你的公式编写问题

使用道具 举报

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

bottom

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

GMT+8, 2024-5-16 04:03

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部