OnOrder 中 order结构体中 ord.combOffset 开平标志有哪些枚举值?

老师好,请教个问题,在平仓时OnOrder事件域获取到的 ord.combOffset 值是 5 ,这个值 代表是什么意思。当是平仓的委托时,ord.combOffset 得是 Enum_Exit ,这样理解正确吗?



以下是OnOrder的代码:

OnOrder(OrderRef ord)

   {

       // Order 的订阅是以执行的策略程序(Enum_Trade_Source_Program)进行的订阅,一个策略程序可被应用于多个品种,这里只对当前执行策略的品种(同一个委托源)进行操作.

       If (ord.symbol <> Symbol Or ord.createSource <> A_GetOrderCreateSource) Return;

       

       If (ord.status >= Enum_Deleted)

       {

           myLogInfo(9, "OnOrder", "持仓数据状态更新--前:");

           outPutPositionRecordMaps(PositionRecordMaps, 9, "OnOrder--更新前");

           myLogInfo(9, "OnOrder", " (委托更新) " + "报单状态=" + Text(ord.status) + ", 报单id=" + Text(ord.orderId) + ", note=" + ord.note + ", 账户id:" + ord.accountId +  ", 交易所报单编号=" + ord.exchOrderId + "," + ord.createSource);

       }

       

       //如果没有同步过的账号委托,暂时不加入监控,要先在Timer同步

       //检查当前key是否已经添加到Map变量中

       If (!MapContain(accountIdMap, ord.accountId))

       {

           Return;

       }

       

       //如果委托已经撤单,且撤单操作员是当前策略,则重新委托

       If (ord.status == Enum_Canceled)

       {

           //检查当前key是否已经添加到Map变量中

           If (MapContain(activeOrderMap, ord.orderId))

           {

               //根据Key删除当前记录

               MapErase(activeOrderMap, ord.orderId);

               

               myLogInfo(9, "OnOrder", " (委托更新) " + "报单状态=已撤单" + ", 账户id:" + ord.accountId + ", 报单id=" + Text(ord.orderId) + ", 交易所报单编号=" + ord.exchOrderId);

               

               If (ord.cancelSource == A_GetOrderCreateSource)

               {

                   // 撤单时要更新原报单状态数据,可能有部分成交

                   If (ord.combOffset == Enum_Entry And ord.fillVolume > 0)

                   {

                       If (MapContain(PositionRecordMaps, ord.orderId))

                       {

                           myLogInfo(9, "OnOrder", "撤单的报单id= " +  Text(ord.orderId) + " 更新前持仓数据:" + TextArray(PositionRecordMaps[ord.orderId]));

                           PositionRecordMaps[ord.orderId][Enum_myEntryOrder_Num] = ord.fillVolume;

                           PositionRecordMaps[ord.orderId][Enum_myEntryOrder_Status] = Enum_FillPart;

                           PositionRecordMaps[ord.orderId][Enum_myEntryOrder_FillTime] = ord.createDateTime;

                           Bool ret = updateEntryOrderFilledNews(PositionRecordMaps, ord.orderId, ord.fillVolume);

                           myLogInfo(9, "OnOrder", "撤单有部分成交,更新报单id= " +  Text(ord.orderId) +  IIFString(ret, " 成功", " 失败") + ", 更新后持仓数据为:" + TextArray(PositionRecordMaps[ord.orderId]));

                           myLogInfo(9, "OnOrder", "持仓数据状态更新--撤单部分成交:");

                           outPutPositionRecordMaps(PositionRecordMaps, 9, "OnOrder-撤单");

                       }

                   }

                   

                   Array<Integer> orders;

                   // 买开仓或平仓,为 开多 或 平空,为使能成交委托价格应加价,相反 卖开仓或平仓,为 开空 或 平多,应减价.

                   Numeric newPrice = IIF(ord.side == Enum_Buy, ord.price + priceOffset*MinPoint, ord.price - priceOffset*MinPoint);

                   Bool ret = mySendOrderEx(ord.side, ord.combOffset, ord.volume - ord.fillVolume, newPrice, orders, "OnOrder-OrderReSent", Enum_myOrder_NotExit, BeExitOrderIdMaps[ord.orderId]);

               

                   // 如果是开仓则进行记录

                   If (ret == True And ord.combOffset == Enum_Entry)

                   {

                       myLogInfo(9, "OnOrder", "撤单后重新开仓,新建持仓数据...");

                       Array<Numeric> newEntryOrder;

                       createNewEntryOrder(newEntryOrder, ord.side, ord.volume - ord.fillVolume, newPrice);

               

                       If (GetArraySize(orders) == 1)

                       {

                           newEntryOrder[Enum_myEntryOrder_OrderId] = orders[0];   // 报单id(委托单id)

                           PositionRecordMaps[orders[0]] = newEntryOrder;

                           last_orderId = orders[0];

                       }

                       Else If (GetArraySize(orders) > 1)

                       {

                           myLogInfo(9, "!!! Order Warn", "委托单返回多个订单id的情况:" + TextArray(orders));

                           Integer i;

               

                           For i = 0 To GetArraySize(orders) - 1

                           {

                               newEntryOrder[Enum_myEntryOrder_OrderId] = orders[i];

                               PositionRecordMaps[orders[i]] = newEntryOrder;

                               last_orderId = orders[i];

                           }

                       }

                       myLogInfo(9, "OnOrder", "持仓数据状态更新--撤单重发:");

                       outPutPositionRecordMaps(PositionRecordMaps, 9, "OnOrder-撤单重发");

                   }

               

                   If (ret == True)

                   {

                       myLogInfo(9, "OnOrder", " (撤单后重新委托成功) " + "账户id:" + ord.accountId + ", 重新报单id=" + TextArray(orders) + ", 交易所报单编号=" + ord.exchOrderId);

                   } Else

                   {

                       myLogInfo(9, "OnOrder", " (撤单后重新委托失败!!!) " + "账户id:" + ord.accountId + ", 原报单id=" + Text(ord.orderId) + ", 交易所报单编号=" + ord.exchOrderId);

                   }

               }

           }

       }

       Else If (ord.status == Enum_Filled || ord.status == Enum_Deleted)

       {

           String ordStatusStr = IIFString(ord.status == Enum_Filled, "全部成交", "已废除");

           myLogInfo(9, "OnOrder", " (委托更新) " + "报单状态=" + ordStatusStr + " 账户id:" + ord.accountId + ", 报单id=" + Text(ord.orderId) + ", 交易所报单编号=" + ord.exchOrderId + "," + ord.createSource + IIFString(ord.status == Enum_Deleted, "," + ord.note, ""));

           

           //检查当前key是否已经添加到Map变量中

           If(MapContain(activeOrderMap, ord.orderId))

           {

               //根据Key删除当前记录

               MapErase(activeOrderMap, ord.orderId);

               //myLogInfo(9, "OnOrder", "删除监控委托" + "账户id:" + ord.accountId + ", 报单id=" + Text(ord.orderId) + ", 交易所报单编号=" + ord.exchOrderId);

           }

           

           // 如果是完全成交且是开仓则更新持仓状态数据

           If (ord.status == Enum_Filled And ord.combOffset == Enum_Entry)

           {

               If (MapContain(PositionRecordMaps, ord.orderId))

               {

                   PositionRecordMaps[ord.orderId][Enum_myEntryOrder_Num] = ord.fillVolume;

                   PositionRecordMaps[ord.orderId][Enum_myEntryOrder_Status] = Enum_Filled;

                   PositionRecordMaps[ord.orderId][Enum_myEntryOrder_FillTime] = ord.createDateTime;

                   updateEntryOrderFilledNews(PositionRecordMaps, ord.orderId, ord.fillVolume);

                   myLogInfo(9, "OnOrder", "持仓数据状态更新--开仓完全成交:");

                   outPutPositionRecordMaps(PositionRecordMaps, 9, "OnOrder-开仓完全成交");

               }

           }

           

           myLogInfo(9, "OnOrder-完全成交debug-2", "ord.status:" + Text(ord.status) + ", ord.combOffset:" + Text(ord.combOffset) + ", ord.orderId:" + Text(ord.orderId) + ", BeExitOrderId:" + Text(BeExitOrderIdMaps[ord.orderId]));

           myLogInfo(9, "OnOrder-完全成交debug-2", "BeExitOrderIdMaps:" + TextMap(BeExitOrderIdMaps));

           myLogInfo(9, "OnOrder-完全成交debug-2", "PositionRecordMaps:" + TextMap(PositionRecordMaps));

           // 如果是完全成交且是平仓则更新持仓状态数据

           If (ord.status == Enum_Filled And ord.combOffset == Enum_Exit)

           {

               myLogInfo(9, "OnOrder-完全平仓成交debug", "---------------1");

               If (MapContain(BeExitOrderIdMaps, ord.orderId))

               {

                   myLogInfo(9, "OnOrder-完全平仓成交debug", "---------------2");

                   Integer beExitOrderId = BeExitOrderIdMaps[ord.orderId];

                   If (MapContain(PositionRecordMaps, beExitOrderId))

                   {

                       myLogInfo(9, "OnOrder-完全平仓成交debug", "---------------3");

                       PositionRecordMaps[beExitOrderId][Enum_myEntryOrder_isClosed] = Enum_myOrder_Exited;

                       PositionRecordMaps[beExitOrderId][Enum_myEntryOrder_ExitTime] = ord.createDateTime;

                       myLogInfo(9, "OnOrder", "持仓数据状态更新--平仓完全成交:");

                       outPutPositionRecordMaps(PositionRecordMaps, 9, "OnOrder-平仓完全成交");

                   }

               }

           }

           

           // 如果是废单且是开仓操作则更新持仓数据为关闭

           If (ord.status == Enum_Deleted And ord.combOffset == Enum_Entry)

           {

               If (MapContain(PositionRecordMaps, ord.orderId))

               {

                   PositionRecordMaps[ord.orderId][Enum_myEntryOrder_Status] = Enum_Deleted;

                   PositionRecordMaps[ord.orderId][Enum_myEntryOrder_isClosed] = Enum_myOrder_Exited;

                   myLogInfo(9, "OnOrder", "持仓数据状态更新--交易所开仓废单:");

                   outPutPositionRecordMaps(PositionRecordMaps, 9, "OnOrder-交易所开仓废单");

               }

           }

           

           // 如果是废单且是平仓操作则更新持仓数据

           If (ord.status == Enum_Deleted And ord.combOffset == Enum_Exit)

           {

               If (MapContain(BeExitOrderIdMaps, ord.orderId))

               {

                   Integer beExitOrderId = BeExitOrderIdMaps[ord.orderId];

               

                   If (MapContain(PositionRecordMaps, beExitOrderId))

                   {

                       PositionRecordMaps[beExitOrderId][Enum_myEntryOrder_Status] = Enum_Deleted;

                       PositionRecordMaps[beExitOrderId][Enum_myEntryOrder_isClosed] = Enum_myOrder_NotExit;

                       myLogInfo(9, "OnOrder", "持仓数据状态更新--交易所平仓废单:");

                       outPutPositionRecordMaps(PositionRecordMaps, 9, "OnOrder-交易所平仓废单");

                   }

               }

           }

       }

       Else

       {

           activeOrderMap[ord.orderId] = ord;

           If (ord.status >= Enum_Deleted) myLogInfo(5, "OnOrder", "提示: 报单id=" + Text(ord.orderId) + " 状态未完成,存入定时器处理...");

       }

   }


请教!!! 内嵌结构体中的Order
Events中FillRef结构体的文档在哪找
tick结构体
内嵌结构体,合约属性CodeProperty中的交易时段dealTimes怎么用?
驱动区域和变量声明结构体应用的不同
状态枚举值和直接用函数来读取开平仓有什么区别吗?
内嵌结构体CodeProperty:合约属性
账户成交更新事件void OnFill(FillRef ordFill)中,结构体调用开平标志combOffset,只有开仓能通过,平仓为什么通过不了
关于Position-持仓结构体中各持仓字段含义的若干疑问
请教!!!关于内嵌结构体

已找到答案。

谢谢!