- 精华
- 0
- 在线时间
- 378 小时
- UID
- 234307
- 积分
- 153
- 帖子
- 103
- 阅读权限
- 40
- 注册时间
- 2016-5-12
- 最后登录
- 2023-7-26
- 精华
- 0
- UID
- 234307
- 积分
- 153
- 帖子
- 103
- 主题
- 29
- 阅读权限
- 40
- 注册时间
- 2016-5-12
- 最后登录
- 2023-7-26
|
是分笔撤单,然后根据撤单情况,补发单子。现在内盘测试只会发生撤单动作,但补发单子委托不出现,怀疑是撤单后的检测信号有问题。部分代码如下:
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);
}
}
}
}
|
|