设为首页收藏本站

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

请教小米版主,A_DeleteOrder撤单后, [复制链接]

Rank: 3Rank: 3

精华
0
UID
234307
积分
153
帖子
103
主题
29
阅读权限
40
注册时间
2016-5-12
最后登录
2023-7-26
跳转到指定楼层
1#
发表于 2016-6-29 07:58:35 |只看该作者 |倒序浏览
如何确认撤单成功?可以用if (A_DeleteOrder==True&&......)来判断吗?
投机像山岳一样古老

Rank: 3Rank: 3

精华
0
UID
234307
积分
153
帖子
103
主题
29
阅读权限
40
注册时间
2016-5-12
最后登录
2023-7-26
2#
发表于 2016-6-30 07:34:58 |只看该作者
版主不来论坛了吗?一天多了也不见回复。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
3#
发表于 2016-6-30 08:23:02 |只看该作者
是撤全部还是撤单 笔?
如果是撤全部只需要看a_getopenordercount是否大于0就清楚了。
如果只是撤单笔,就要取该笔合同号的委托单 状态,不是已报状态就算是撤掉了或是已经成交了。

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
234307
积分
153
帖子
103
主题
29
阅读权限
40
注册时间
2016-5-12
最后登录
2023-7-26
4#
发表于 2016-6-30 08:36:32 |只看该作者
是分笔撤单,然后根据撤单情况,补发单子。现在内盘测试只会发生撤单动作,但补发单子委托不出现,怀疑是撤单后的检测信号有问题。部分代码如下:

                nCount = A_GetOpenOrderCount;//取得未成交委托数量
                if (nCount>0) //开始撤单等操作
                {
                        For i = 1 To nCount
                        {
                                nEntryFlag = A_OrderEntryOrExit(i);//取得第i个未成交单开平类型
                                nBuyFlag = A_OrderBuyOrSell(i);//取得第i个未成交单多空类型
                                If(nEntryFlag == Enum_Exit&&Abs((A_OpenOrderPrice(i)-Q_Last))>=wtpyl*2)//是平仓单且其委托价偏离当前价2跳以上
                                {       
                                        A_DeleteOrder(A_OpenOrderContractNo(i));//取得第i个未成交单合同号,并针对该合同号发撤单指令
                                        //以现价加大偏移重发平仓单
                                        if (A_DeleteOrder==True&&nBuyFlag == Enum_Sell&&A_BuyPosition>0&&Q_Last<ql) //确认撤单后重发平多指令
                                        {
                                                A_SendOrder(Enum_Sell,Enum_Exit, A_BuyPosition,Q_Last-offSet*wtpyl);
                                                HasSendsell = 1;
                                                SetGlobalVar(2,HasSendsell);
                                                HasSendbuy = 0;//平仓后允许开多仓
                                                SetGlobalVar(1,HasSendbuy);
                                        }
                                        Else if (A_DeleteOrder==True&&nBuyFlag == Enum_Buy&&A_SellPosition>0&&Q_Last>qh) //确认撤单后重发平空指令
                                        {       
                                                A_SendOrder(Enum_Buy,Enum_Exit, A_SellPosition,Q_Last+offSet*wtpyl);
                                                HasSendBuyToCover = 1;
                                                SetGlobalVar(4,HasSendBuyToCover);
                                                HasSendSellShort = 0;
                                                SetGlobalVar(3,HasSendSellShort);
                                        }
                                }
                                Else If(nEntryFlag == Enum_Entry&&Abs((A_OpenOrderPrice(i)-Q_Last))>=wtpyl*3 )//是开仓单且其委托价偏离当前价3跳以上
                                {
                                        A_DeleteOrder(A_OpenOrderContractNo(i));
                                        if (A_DeleteOrder==True&&nBuyFlag == Enum_Sell&&A_SellPosition==0&&Q_Last<ql) //确认撤单后重发开空指令
                                        {
                                                A_SendOrder(Enum_Sell,Enum_Entry, jyss,Q_Last-offSet*wtpyl);
                                                HasSendSellShort = 1;
                                                SetGlobalVar(3,HasSendSellShort);
                                                HasSendBuyToCover = 0;
                                                SetGlobalVar(4,HasSendBuyToCover);
                                        }
                                        Else if (A_DeleteOrder==True&&nBuyFlag == Enum_Buy&&A_BuyPosition==0&&Q_Last>qh) //确认撤单后重发开多指令
                                        {       
                                                A_SendOrder(Enum_Buy,Enum_Entry,jyss,Q_Last+offSet*wtpyl);
                                                HasSendbuy = 1;//开仓后,禁止重复发单
                                                SetGlobalVar(1,HasSendbuy);
                                                HasSendsell = 0;//开仓后,允许平仓
                                                SetGlobalVar(2,HasSendsell);
                                        }
                                       
                                }
                        }
                }

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
5#
发表于 2016-6-30 08:42:08 |只看该作者
laofu602 发表于 2016-6-30 08:36
是分笔撤单,然后根据撤单情况,补发单子。现在内盘测试只会发生撤单动作,但补发单子委托不出现,怀疑是撤 ...

只看了第一段代码,
在撤单后就直接去重发平仓了,实际上这笔重发的委托与撤单委托基本是同时发出的。
且这会撤单成功的状态还没有从交易所返回,你本地还是判断有挂单的,再去平自然没法成功。。
还是要先判断一下状态 ,确保当前合同号的委托单 不是已报状态了,再去重发平仓吧。

使用道具 举报

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

bottom

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

GMT+8, 2024-5-14 02:44

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部