设为首页收藏本站

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

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: 2

精华
0
UID
237072
积分
53
帖子
28
主题
9
阅读权限
30
注册时间
2016-6-23
最后登录
2017-6-28
2#
发表于 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: 2

精华
0
UID
237072
积分
53
帖子
28
主题
9
阅读权限
30
注册时间
2016-6-23
最后登录
2017-6-28
3#
发表于 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: 2

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

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

使用道具 举报

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

bottom

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

GMT+8, 2024-5-7 16:31

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部