设为首页收藏本站

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

漏单现象! [复制链接]

Rank: 5Rank: 5

精华
0
UID
15246
积分
704
帖子
167
主题
74
阅读权限
60
注册时间
2010-8-17
最后登录
2021-9-5
跳转到指定楼层
1#
发表于 2010-11-15 19:29:47 |只看该作者 |倒序浏览
自动挂机交易,100万模拟资金,挂12个交易品种,每个品种只开1手,结果每天都有漏单现象。是因为模拟柜台的原因么?还是因为别的?

Rank: 7Rank: 7Rank: 7

精华
0
UID
8209
积分
3268
帖子
413
主题
78
阅读权限
80
注册时间
2010-4-6
最后登录
2013-3-18
2#
发表于 2010-11-15 21:27:59 |只看该作者
怎么漏的单,能否说详细些?
最好在发单是用FileAppend记录一下,然后对比结果。

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
15246
积分
704
帖子
167
主题
74
阅读权限
60
注册时间
2010-8-17
最后登录
2021-9-5
3#
发表于 2010-11-15 21:33:15 |只看该作者
H>Open+某个值开仓。实际中有满足条件,但没开仓。采用的buy\sell命令。没用A函数
If (buycondition1 &&  GetGlobalVar(0)==0)
                {
                        NewPrice=Q_AskPrice+ShiftUnit*MinMove*PriceScale;
                        Buy(1,NewPrice);
                        SetGlobalVar(0,1);

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
1307
积分
866
帖子
134
主题
37
阅读权限
60
注册时间
2008-3-11
最后登录
2020-4-26
4#
发表于 2010-11-15 23:31:38 |只看该作者
我以前用buy/sell也发现有漏单现象,现在全用A函数了

使用道具 举报

Rank: 7Rank: 7Rank: 7

精华
0
UID
8209
积分
3268
帖子
413
主题
78
阅读权限
80
注册时间
2010-4-6
最后登录
2013-3-18
5#
发表于 2010-11-16 07:21:15 |只看该作者
交易助手是否设置了撤单?

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
15246
积分
704
帖子
167
主题
74
阅读权限
60
注册时间
2010-8-17
最后登录
2021-9-5
6#
发表于 2010-11-16 08:51:09 |只看该作者
5# cnbiz850
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
15246
积分
704
帖子
167
主题
74
阅读权限
60
注册时间
2010-8-17
最后登录
2021-9-5
7#
发表于 2010-11-16 09:02:16 |只看该作者
4# CFXQM


也用过A函数发单,但总解决不了重复发单的问题!我用了一个很烂的网络做测试。
论坛上的说法
TB平台的A_SendOrder以及Buy、Sell等函数是针对当前公式应用的帐户、商品发送委托单,发送成功返回True,发送失败返回False。这里的返回值是客户端自身返回的,我们无法根据这个返回值来判断是否成交。

因此,我们如果使用以下代码,则非常容易出现重复开平仓的问题。 Begin

        If ( MarketPosition==0  )
        {
                  //开仓条件检查;   
                //相关开仓指令(A_SendOrder以及Buy、SellShort等);
        }
        If ( MarketPosition==1 && 平多仓条件 ) Sell(0,Price);
        If ( MarketPosition==-1 && 平空仓条件 ) BuyToCover(0,Price);
End
复制代码这是因为开仓指令并不从服务器取返回值,只要客户端发送成功就返回true值。而这时如果由于网络延迟等原因造成委托价格与当前价格偏离无法成交,或者已成交但是还未传回客户端,都会导致MarketPosition函数返回0值,从而造成重复发单。

关于交易助手,我仔细观察了一下,似乎交易助手也是根据MarketPosition函数的返回值来判断是否成交的。在网络延迟的情况下,经常会出现类似于“委托单已成交,无法撤单”的提示。因此,交易助手对因价格偏离而导致的挂单可以成功撤单,但是对由于网络延迟导致的成交信息滞后无法处理。还是会出现重复发单的情况。

既然MarketPosition函数无法判断持仓,那么如果使用GolbalVar来解决会怎么样呢?代码如下: Params
        Numeric SetPos(0);
Begin
        If ( GetGlobalVar(0)==InvalidNumric )        SetGlobalVar(0,SetPos);        
        If ( GetGlobalVar(0)==0  )
        {
                  If ( 开多仓条件满足 )
                {
                        A_SendOrder(...);
                        SetGlobalVar(0,1);
                }
                  If ( 开空仓条件满足 )
                {
                        A_SendOrder(...);
                        SetGlobalVar(0,-1);
                }
        }
        If ( GetGlobalVar(0)==1 && 平多仓条件满足 )
        {
                A_SendOrder(...);
                SetGlobalVar(0,0);
        }
        If ( GetGlobalVar(0)==-1 && 平空仓条件满足 )
        {
                A_SendOrder(...);
                SetGlobalVar(0,0);
        }
End
复制代码以上代码中的SetPos参数是为了手动调整GlobalVar的初始值,否则如果由于一些意外的情况导致客户端重启或者是隔日交易,持仓位置就有可能会与实际情况不同。

由于我们这段代码使用GlobalVar的值来判断持仓情况,一旦交易指令A_SendOrder发出,相关全局变量就会被赋值。如果此时由于各种原因导致委托单没有成交,这就与实际持仓情况不同,给我们代码的执行会带来很大的麻烦。

要解决这个问题,我们必须保证一旦我们的交易指令发出,则必须成交!这一点非常重要!而要做到这一点,我们有两种办法:

办法一:使用交易助手,设置不成交即撤单与撤单成功后续重发委托来配合保证成交。我个人不推荐采用这个办法,因为,我不太清楚其“撤单成功”的真实含义,究竟是成功发出撤单指令还是指取得服务器的返回信息,如果是前者的话,则有可能会产生大量的重复委托,而这一点正是我们极力要避免的。

办法二:其实很简单,就是在发出交易指令的时候指定价格,该价格要偏移几个点以保证成交。也就是说,如果是发买入单则+几个点,如果是发卖出单则-几个点,开仓平仓一样。“

但根据这个做的还是重复发单。个人理解,如果是因为网络延时造成委托价格与当前价格偏离无法成交,或者已成交但是还未传回客户端而产生重复发单的话,这算不算软件的缺陷了,因为即使你用再好的网络,也难保证网络不会出现延时等问题。99次发单正确,1次错误就有可能带来灾难。不知道究竟怎么解决。TB的客服,普及知识跟不上。

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
15246
积分
704
帖子
167
主题
74
阅读权限
60
注册时间
2010-8-17
最后登录
2021-9-5
8#
发表于 2010-11-16 09:04:05 |只看该作者
所以我现在开仓用的是buy、sell函数,平仓用的发单。但开仓总是出现漏单情况。

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
15246
积分
704
帖子
167
主题
74
阅读权限
60
注册时间
2010-8-17
最后登录
2021-9-5
9#
发表于 2010-11-16 09:06:22 |只看该作者

使用道具 举报

Rank: 7Rank: 7Rank: 7

精华
0
UID
8209
积分
3268
帖子
413
主题
78
阅读权限
80
注册时间
2010-4-6
最后登录
2013-3-18
10#
发表于 2010-11-16 09:59:37 |只看该作者
7# 文韦

你谈的问题我很有同感,现在也很难说得清是否解决这个问题。

我现在是用A函数发单,用交易助手延时撤单但不做其它操作,为确保发单成功我在发单后10秒的时间用A函数检查账户持仓来确认,若发单不成功则重发。至于持仓状态(类似于MarketPosition),我用数据库函数保存。

用模拟盘测试很长时间了,绝大多数情况没问题,但有一次不知什么原因,遇到A函数账户信息不更新的情况(这点很致命),致使指令大量重复发单。指点TB客服查找原因,结论是模拟柜台问题。由于这点,我目前对实盘交易仍没有信心。

使用道具 举报

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

bottom

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

GMT+8, 2024-5-17 14:47

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部