设为首页收藏本站

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

A函数控制没有成功开仓的,撤单后再下单,这样写可以不 [复制链接]

Rank: 2

精华
0
UID
237072
积分
53
帖子
28
主题
9
阅读权限
30
注册时间
2016-6-23
最后登录
2017-6-28
跳转到指定楼层
1#
发表于 2016-7-25 19:38:26 |只看该作者 |倒序浏览
希望高手解答,用A函数比较怕,想做到保证没成交的单一直追单到成交为止再执行下面的。我在开始的时候通过以下的代码控制可以吗?请帮我看看。
可以的话,帮我改一下可以吗?请一定帮我解决一下,自己看A函数,因为不能回测,很多不明白
Vars
        Numeric BuyOrSell;
        Numeric        EntryOrExit;
        Numeric        Lot;
        SetTBProfileString(Symbol,X,0);//用此变量记录过了多少TICK
Begin
        If(GetTBProfileString(Symbol,Check) == 1)//当每次开仓时把CHECK改为1,进入监测状态
        {
                If(GetTBProfileString(Symbol,X) < 3)//记录3TICK缓冲期,保证没成交的可以成交
                {
                        If(A_GetOpenOrderCount() > 0)//当检测到有未成交的单时
                        {
                                BuyOrSell = A_GetLastOpenOrderIndex(BuyOrSell);//疑问:可不可以通过这样来赋值
                                EntryOrExit = A_GetLastOpenOrderIndex(EntryOrExit);//同上
                                Lot = A_OpenOrderLot();
                                A_DeleteOrder("");
                                If(BuyOrSell = Enum_Buy)//疑问:这样的判断可以不
                                {
                                        A_SendOrder(BuyOrSell,EntryOrExit,Lot,Q_AskPrice+1,);
                                }
                                Else If(BuyOrSell = Enum_Sell)//疑问:这样的判断可以不
                                {
                                        A_SendOrder(BuyOrSell,EntryOrExit,Lot,Q_BidPrice-1,);
                                }
                                SetTBProfileString(Symbol,X,0);//发了新单后重置TICK计数,重新计算
                                Return;
                        }
                        SetTBProfileString(Symbol,X,GetTBProfileString(Symbol,X)+1);
                        Return;
                }
        SetTBProfileString(Symbol,X,0);//计数重置
        SetTBProfileString(Symbol,Check,0);//检测状态关闭,再次进入下面的开平仓判断
        }
End

这样的控制可以不,还有会不会出现A_DeleteOrder发出去后,原来没有成交的单成交了,就等于我反而重复发了单

Rank: 3Rank: 3

精华
0
UID
234307
积分
153
帖子
103
主题
29
阅读权限
40
注册时间
2016-5-12
最后登录
2023-7-26
2#
发表于 2016-7-25 20:01:36 |只看该作者
用A_DeleteOrder撤单后,撤单有个过程,必须等到确认撤单成功后,才能进行下一步开仓的动作,否则有可能重复发单。比较简单的检测方法,就是用A_GetOpenOrderCount是否为0来判断。

使用道具 举报

Rank: 2

精华
0
UID
237072
积分
53
帖子
28
主题
9
阅读权限
30
注册时间
2016-6-23
最后登录
2017-6-28
3#
发表于 2016-7-25 20:34:50 |只看该作者
laofu602 发表于 2016-7-25 20:01
用A_DeleteOrder撤单后,撤单有个过程,必须等到确认撤单成功后,才能进行下一步开仓的动作,否则有可能重 ...

那A_GetOpenOrderCount是马上可以得到确定的返回值吗?当根K线就可以得到吗?还是A_GetOpenOrderCount也是有一个过程的。我现在A_DeleteOrder发出去的条件就是A_GetOpenOrderCount>0,是要撤单后,等A_GetOpenOrderCount==0了,再重新用A_sendorder发出去?

感觉TB的帮助写得太差太差了,一点都不详细,看了还是很多不懂,A函数说得一点都不清楚,就像A_GetOpenOrderCount的返回值到底是什么,“部分成交和已申报”我真的看不明白。、

求解答

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
4#
发表于 2016-7-26 10:54:40 |只看该作者
buwqwew 发表于 2016-7-25 20:34
那A_GetOpenOrderCount是马上可以得到确定的返回值吗?当根K线就可以得到吗?还是A_GetOpenOrderCount也 ...

a_getopenordercount返回的是已报未成交单的笔数。。。
这个不会马上得到返回值,从报单发出,到交易所撮合后再将回报推送到客户端需要一个时间差的。
一般来说网络理想的情况下1-2个tick可以返回。
在使用A函数,建议要配合全局变量来控制发单 的操作,以免在成交回报回来前的判断错误而导致的重复发单 。

使用道具 举报

高级操盘手

「你若能信,在信之人,凡事皆能。」

Rank: 10Rank: 10Rank: 10

精华
0
UID
117005
积分
98549
帖子
1121
主题
14
阅读权限
200
注册时间
2013-3-18
最后登录
2022-10-29
5#
发表于 2016-7-26 11:12:13 |只看该作者
最好是用A_OrderStatus,如果返回Enum_Canceled,那就肯定是已经撤单了,这个比用A_GetOpenOrderCount还加延迟多少个tick要稳妥得多,网络有波动,有时候1个tick就有回报了,有时候几个tick才有回报,而固定延迟一定的tick,多了浪费时间,少了达不到效果,不如用A_OrderStatus,根据返回处理,安全又高效。


不要因为众生的愚疑,而带来了自己的烦恼。

使用道具 举报

Rank: 2

精华
0
UID
237072
积分
53
帖子
28
主题
9
阅读权限
30
注册时间
2016-6-23
最后登录
2017-6-28
6#
发表于 2016-7-26 18:47:39 |只看该作者
superwin 发表于 2016-7-26 11:12
最好是用A_OrderStatus,如果返回Enum_Canceled,那就肯定是已经撤单了,这个比用A_GetOpenOrderCount还加 ...

A_OrderStatus的返回值不会有延迟吗?如果发单的当根或下根K线就可以得到A_OrderStauts的返回状态的话,那就真的很好,不过我不是很了解A_OrderStatus,帮助文档说得很少,有多少种返回值,而且用它进行枚举是怎么写.
IF(A_OrderStatus == Enum_Canceled)
{}
Else If(A_OrderStatus == Canceling)
{}
这样写吗?

使用道具 举报

高级操盘手

「你若能信,在信之人,凡事皆能。」

Rank: 10Rank: 10Rank: 10

精华
0
UID
117005
积分
98549
帖子
1121
主题
14
阅读权限
200
注册时间
2013-3-18
最后登录
2022-10-29
7#
发表于 2016-7-26 22:29:59 |只看该作者
buwqwew 发表于 2016-7-26 18:47
A_OrderStatus的返回值不会有延迟吗?如果发单的当根或下根K线就可以得到A_OrderStauts的返回状态的话, ...

帮助里面Enum开头的都是枚举值,基本涵盖所有交易状态,A_OrderStatus在收到新的回报之前,是前一个状态,接收到新的回报,就会更新到最新的状态,你把交易状态做成if……elseif……elseif……else……这类的,很好处理,而且已收到回报,马上就更新了,不需要按固定的tick来等待,我用A函数实盘3年有余,一直使用各种枚举值判断,比帮助示例里的固定tick延迟要稳定高效很多,当然,你要先熟悉他的机制是怎么样的。
已有 2 人评分威望 收起 理由
moneymachine + 2 赞一个!
laofu602 + 8 赞一个!

总评分: 威望 + 10   查看全部评分



不要因为众生的愚疑,而带来了自己的烦恼。

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
234307
积分
153
帖子
103
主题
29
阅读权限
40
注册时间
2016-5-12
最后登录
2023-7-26
8#
发表于 2016-7-26 22:58:58 |只看该作者
本帖最后由 laofu602 于 2016-7-26 23:04 编辑
superwin 发表于 2016-7-26 22:29
帮助里面Enum开头的都是枚举值,基本涵盖所有交易状态,A_OrderStatus在收到新的回报之前,是前一个状态 ...


干货!

另外顺带问前辈一个问题,有没有遇到A_BuyPosition,A_SellPosition 出错的情况,我前几天可能遇到了。

详情见我这个帖子 http://bbs.tb18.net/thread-111638-1-1.html

使用道具 举报

Rank: 2

精华
0
UID
237072
积分
53
帖子
28
主题
9
阅读权限
30
注册时间
2016-6-23
最后登录
2017-6-28
9#
发表于 2016-7-27 10:58:36 |只看该作者
superwin 发表于 2016-7-26 22:29
帮助里面Enum开头的都是枚举值,基本涵盖所有交易状态,A_OrderStatus在收到新的回报之前,是前一个状态 ...

谢谢,这样的话真的好很多。我去研究下什么状态应该怎么处理,有问题再来请教。

使用道具 举报

Rank: 2

精华
0
UID
251800
积分
61
帖子
49
主题
7
阅读权限
30
注册时间
2017-5-29
最后登录
2017-11-6
10#
发表于 2017-8-19 16:12:16 |只看该作者
superwin 发表于 2016-7-26 22:29
帮助里面Enum开头的都是枚举值,基本涵盖所有交易状态,A_OrderStatus在收到新的回报之前,是前一个状态 ...

翻看大量  论坛历史记录  感觉TB可以聘请你兼职做管理员  这么热心!!  很多问题一语道破  这些回答本该是版主 管理员做的事情!!感觉TB在服务上真需要提高  这其实并不是用户不刻苦 不想学  想不劳而获的问题  很多问题官方做一次 可以让千万用户都少烦恼N次

使用道具 举报

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

bottom

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

GMT+8, 2024-4-27 06:11

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部