设为首页收藏本站

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

疑似TB数据中心问题 [复制链接]

Rank: 2

精华
0
UID
113408
积分
81
帖子
44
主题
13
阅读权限
30
注册时间
2012-11-9
最后登录
2013-5-10
1#
发表于 2013-2-13 22:49:57 |显示全部楼层
这种情况我在模拟交易多次遇到,问题出在TB回报延迟,亦即后台(交易柜台)已经成交,但是结果不能正常反馈到客户端,导致客户端重复发单,这个问题在用户的客户端程序中无解!希望TB公司能彻底根治这个顽疾 否则实盘中可能导致客户爆仓。。。

使用道具 举报

Rank: 2

精华
0
UID
113408
积分
81
帖子
44
主题
13
阅读权限
30
注册时间
2012-11-9
最后登录
2013-5-10
2#
发表于 2013-2-23 18:22:24 |显示全部楼层
我之前说过,这个“回报延迟”的问题在用户客户端程序中无解!好比无法去证明公理一样。这个问题既和用户的程序无关,也和用户的网络环境无关(假使不是因为网络太慢,换句话说,即使用户的网络环境延迟是0,这个问题依旧存在)。

请TB同仁相信大家的能力,尤其是已经用过TB几个月,并动手写过数千行TB程序的人,断不会不知道通过全局变量来控制重复发单问题。并不是出了什么问题缺省就怀疑客户的程序是否写得有问题。

回到这个问题,我第一次发现重复发单,也猜测是不是自己程序有什么问题。尝试过无数的方法,最终发现是TB的机制问题 -- 即可能出现后台成交了,但无法正常将成交信息返回到客户端,从而导致重复发单。

我再来梳理下思路:在所有TB的函数中,A_GetOpenOrderCount(有无未成交的委托单)是最重要的函数,只有通过它(注意是“只有”),才能判断是否开仓或平仓成功。但现在的问题是,客户端程序开仓后,在A_GetOpenOrderCount==0时,持仓数却可以为0,这在逻辑上是矛盾的,从而会导致重复发单。而重复发单的问题,TB会按照客户当前最大资金量开仓,一旦行情瞬间逆转,而且幅度很大,直接爆仓。。。!!比如股指期货模拟交易,100万资金量,TB经常能开7个单。这点想到实盘我就害怕。

和TB公司电话、网络沟通过多次,希望TB公司能彻底解决这个问题。即为什么开仓成功了,客户端却无法获知?(再次说明,这和网络无关)从理论上讲,不应该出现这个问题。问题根源还是在TB客户端底层通讯上!希望TB资深研发同事看下TB Datacenter底层代码。早日彻底解决这个问题。

写了这么多,是帮助TB同事深刻认识到这个问题的严重性,而无半点责骂抱怨之意,我是希望一辈子在TB这条大船上啊。。,衷心希望TB公司茁壮发展!

谢谢!!


帅牛
2013.2.23

使用道具 举报

Rank: 2

精华
0
UID
113408
积分
81
帖子
44
主题
13
阅读权限
30
注册时间
2012-11-9
最后登录
2013-5-10
3#
发表于 2013-2-25 05:30:21 |显示全部楼层
小米 发表于 2013-2-24 10:38
谢谢您对TB的支持与理解,也谢谢您给出的建议,我会转交开发人员的。

首先,我们从来没有怀疑或是说过大 ...

谢谢小米周末加班忘我工作,我为TB公司有这样称职的员工倍感放心。

关于成交回报延迟的问题,的确极其严重,关键是无法在客户端程序中解决(真的是无解啊!),否则我不会赘述这么多话。

小米,不知道你是否明白我说的“如果TB软件不做调整,客户端任何程序都无解”这句话的意思?无论是延迟20个Tick,还是延迟10分钟,只要后台柜台出现延迟回报问题,在客户端是无法捕获的,必然存在重复发单问题。无论是模拟交易还是实盘,只要TB通讯机制不调整,这个问题永远存在。

其实要彻底解决这个回报延迟和重复发单问题并不难,只要TB公司将底层通讯稍作调整即可,即但凡客户端发出A_SendOrder开仓指令后,必须等到后台得到明确回应,否则再次发送A_SendOrder开仓指令无效。


再次感谢小米!


帅牛
2013.2.25

使用道具 举报

Rank: 2

精华
0
UID
113408
积分
81
帖子
44
主题
13
阅读权限
30
注册时间
2012-11-9
最后登录
2013-5-10
4#
发表于 2013-2-25 05:44:22 |显示全部楼层
小米 发表于 2013-2-24 09:45
可参考F1策略进阶里的方法,只要发过委托就改变全局变量的值以控制同一条件下只发单 一次。 ...

小米:“可参考F1策略进阶里的方法,只要发过委托就改变全局变量的值以控制同一条件下只发单 一次”,貌似可以解决重复发单,其实是不行的!!因为发出开仓指令后,如果不能得到明确是否成交的信息,那么将无法撤单。

很多品种抖动很大,不是一开仓就能成功,通常的做法都是发出开仓指令后,延迟多少时间去check是否还有未成交的委托单,如果还有就得撤单,然后再次开仓。

按照你的这个建议,一旦存在回报延迟,如果后台不成交,那么永远也无法再开仓,必然错失很多行情,因此不是根本解决之道。

使用道具 举报

Rank: 2

精华
0
UID
113408
积分
81
帖子
44
主题
13
阅读权限
30
注册时间
2012-11-9
最后登录
2013-5-10
5#
发表于 2013-2-25 05:53:09 |显示全部楼层
小米 发表于 2013-2-24 19:18
我们参考F1进阶,是想要它的控制方式,而不必要去照搬它的条件。
进阶里例子里的的条件是有读帐户信息, ...

小米,梳理下你的案例code:

If(getglobalvar(0) == invalidnumeric)
    {   
        SetGlobalVar(0,0);
    }
    if(barstatus==2)
    {
         if( 开仓条件  && a_buyposition==0 && getglobalvar(0)==0)
          {
                a_sendorder(enum_buy,enum_entry,lots,price);
                setglobalvar(0,1);
          }
          if(a_buyposition>0) //或者在平仓动作时重置全局变量
          {
               setglobalvar(0,0);
         }
    }

上面的code核心思想是发出开仓指令后,设置一个全局变量,除非检测到持仓数发生变化,否则不调整全局变量状态,从而不能再次开仓。问题是:一旦出现回报延迟问题,持仓数为0,全局变量状态永远不会变,进而永远无法再次开仓啊(除非退出TB程序重进)!那一旦开仓失败(即因为行情剧烈发展,即使增加了N多滑点也未成交),如何撤单?如何再次开仓呢?

使用道具 举报

Rank: 2

精华
0
UID
113408
积分
81
帖子
44
主题
13
阅读权限
30
注册时间
2012-11-9
最后登录
2013-5-10
6#
发表于 2013-2-25 09:47:35 |显示全部楼层
小米 发表于 2013-2-25 09:38
关于恒生柜台成交回报的问题,我想本贴的文字中,我已经讲明白了,这里不再重复。
关于此例子,我在本贴 ...

晕。。, 小米同学 你可能搞错意思了 我是谈这个问题 和你的回复对错无关!

希望您将大家的建议反馈到TB研发同事,看能不能从TB底层程序fix这个bug?

谢谢!

使用道具 举报

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

bottom

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

GMT+8, 2024-5-19 20:17

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部