轻松快捷开发 MetaTrader 程序的函数库(第六部分):净持帐户事件·进阶篇
(2/3)·净持与对冲账户持仓表述差异直接决定事件跟踪代码路径,多数库作者在此踩坑
不少开发者直接把对冲账户的事件处理套到净持结算帐户上,结果仓位反转和 partial close 的触发逻辑全乱。净持账户同一品种只允许一笔单向持仓,逆向订单可能改变方向而非开新仓,用错模型就会漏掉关键事件。
◍ 订单属性枚举里的整数与实数分界
在 MT5 的订单/成交/仓位统一属性体系里,整数型属性由 ENUM_ORDER_PROP_INTEGER 枚举定义,从 ORDER_PROP_TYPE 一路列到 ORDER_PROP_DIRECTION,覆盖了类型、来源、状态、仓位 ID、父子票据、盈亏点数与 SL/TP 平仓标志等。其中 ORDER_PROP_GROUP_ID 和 ORDER_PROP_DIRECTION 是后期扩充进来的字段,老版本终端可能不识别。 宏定义给出了硬数字:ORDER_PROP_INTEGER_TOTAL 为 24,即整数属性共 24 个;ORDER_PROP_INTEGER_SKIP 为 1,表示排序时有 1 个属性不参与。实数型属性则另起 ENUM_ORDER_PROP_DOUBLE 枚举,起点直接接在整数总数之后——ORDER_PROP_PRICE_OPEN = ORDER_PROP_INTEGER_TOTAL,也就是下标 24。 开 MT5 按 F4 进 MetaEditor,搜 ENUM_ORDER_PROP_INTEGER 能看到你本地头文件里的实际条目数;若总数不是 24,说明终端版本比文中示例更新或偏旧,写通用 EA 时别写死下标。
ORDER_PROP_TYPE, class=class="str">"cmt">// 订单/成交类型 ORDER_PROP_REASON, class=class="str">"cmt">// 成交/订单/仓位原因或来源 ORDER_PROP_STATE, class=class="str">"cmt">// 订单状态(来自 ENUM_ORDER_STATE 枚举) ORDER_PROP_POSITION_ID, class=class="str">"cmt">// 仓位 ID ORDER_PROP_POSITION_BY_ID, class=class="str">"cmt">// 逆向仓位 ID ORDER_PROP_DEAL_ORDER_TICKET, class=class="str">"cmt">// 触发成交的订单的票据 ORDER_PROP_DEAL_ENTRY, class=class="str">"cmt">// 成交方向 – IN, OUT 或 IN/OUT ORDER_PROP_TIME_UPDATE, class=class="str">"cmt">// 仓位变更时间(秒) ORDER_PROP_TIME_UPDATE_MSC, class=class="str">"cmt">// 仓位变更时间(毫秒) ORDER_PROP_TICKET_FROM, class=class="str">"cmt">// 父订单票据 ORDER_PROP_TICKET_TO, class=class="str">"cmt">// 派生订单票据 ORDER_PROP_PROFIT_PT, class=class="str">"cmt">// 盈利点数 ORDER_PROP_CLOSE_BY_SL, class=class="str">"cmt">// 由止损平仓标志 ORDER_PROP_CLOSE_BY_TP, class=class="str">"cmt">// 由止盈平仓标志 ORDER_PROP_GROUP_ID, class=class="str">"cmt">// 订单/仓位分组 ID ORDER_PROP_DIRECTION, class=class="str">"cmt">// 基于方向的类型(买入,卖出) }; class="macro">#define ORDER_PROP_INTEGER_TOTAL(class="num">24) class=class="str">"cmt">// 整数型属性的总数 class="macro">#define ORDER_PROP_INTEGER_SKIP(class="num">1) class=class="str">"cmt">// 排序中未使用的订单属性数量 class=class="str">"cmt">//+------------------------------------------------------------------+ class=class="str">"cmt">//| 订单, 成交, 仓位的实数型属性 | class=class="str">"cmt">//+------------------------------------------------------------------+ enum ENUM_ORDER_PROP_DOUBLE { ORDER_PROP_PRICE_OPEN = ORDER_PROP_INTEGER_TOTAL, class=class="str">"cmt">// 开单价 (MQL5 成交价)
订单属性枚举与排序基址的拆解
在 MT5 的订单/成交/仓位结构里,属性被拆成整数、实数、字符串三类枚举。上面这段定义里,实数型 ENUM_ORDER_PROP_DOUBLE 从平单价一路列到 StopLimit 激活价,共计 11 项,由宏 ORDER_PROP_DOUBLE_TOTAL 写死为 (11),字符串型再叠加 3 项,总数靠 ORDER_PROP_STRING_TOTAL 控为 (3)。 字符串枚举的起始偏移直接吃掉了前面两类总量:ORDER_PROP_SYMBOL 的赋值就是 (ORDER_PROP_INTEGER_TOTAL+ORDER_PROP_DOUBLE_TOTAL),也就是说它的值依赖于前面整数和实数属性的累计数,改了前两类总数这里会自动顺延,不用手调。 排序基址的两个宏更值得注意:FIRST_ORD_DBL_PROP 和 FIRST_ORD_STR_PROP 都减了一个 ORDER_PROP_INTEGER_SKIP。这个 SKIP 量代表整数属性里不参与订单排序的预留位,真实可排序列要从跳过之后算起。开 MT5 进 Include/Trade 相关头文件搜 ORDER_PROP_INTEGER_SKIP,把它的实际值抄出来,你就能算出订单按实数或字符串排序时,枚举下标从几开始。外汇和贵金属杠杆高,跑这类枚举遍历前先在小周期回测,避免实盘漏单。
ORDER_PROP_PRICE_CLOSE, class=class="str">"cmt">// 平单价 ORDER_PROP_SL, class=class="str">"cmt">// 止损价 ORDER_PROP_TP, class=class="str">"cmt">// 止盈价 ORDER_PROP_PROFIT, class=class="str">"cmt">// 盈利 ORDER_PROP_COMMISSION, class=class="str">"cmt">// 佣金 ORDER_PROP_SWAP, class=class="str">"cmt">// 隔夜利息 ORDER_PROP_VOLUME, class=class="str">"cmt">// 交易量 ORDER_PROP_VOLUME_CURRENT, class=class="str">"cmt">// 未执行交易量 ORDER_PROP_PROFIT_FULL, class=class="str">"cmt">// 盈利+佣金+隔夜利息 ORDER_PROP_PRICE_STOP_LIMIT, class=class="str">"cmt">// 当 StopLimit 挂单激活时的 Limit 订单价 }; class="macro">#define ORDER_PROP_DOUBLE_TOTAL(class="num">11) class=class="str">"cmt">// 实数型属性的总数 class=class="str">"cmt">//+------------------------------------------------------------------+ class=class="str">"cmt">//| 订单, 成交, 仓位字符串型属性 | class=class="str">"cmt">//+------------------------------------------------------------------+ enum ENUM_ORDER_PROP_STRING { ORDER_PROP_SYMBOL = (ORDER_PROP_INTEGER_TOTAL+ORDER_PROP_DOUBLE_TOTAL), class=class="str">"cmt">// 订单品种 ORDER_PROP_COMMENT, class=class="str">"cmt">// 订单注释 ORDER_PROP_EXT_ID class=class="str">"cmt">// 外部交易系统中的订单 ID }; class="macro">#define ORDER_PROP_STRING_TOTAL(class="num">3) class=class="str">"cmt">// 字符串型属性的总数 class=class="str">"cmt">//+------------------------------------------------------------------+ class=class="str">"cmt">//| 订单和成交排序的可能标准 | class=class="str">"cmt">//+------------------------------------------------------------------+ class="macro">#define FIRST_ORD_DBL_PROP(ORDER_PROP_INTEGER_TOTAL-ORDER_PROP_INTEGER_SKIP) class="macro">#define FIRST_ORD_STR_PROP(ORDER_PROP_INTEGER_TOTAL+ORDER_PROP_DOUBLE_TOTAL-ORDER_PROP_INTEGER_SKIP) enum ENUM_SORT_ORDERS_MODE { class=class="str">"cmt">//--- 按整数型属性排序 SORT_BY_ORDER_TICKET = class="num">0, class=class="str">"cmt">// 按订单票据排序
「订单历史排序的 21 个枚举键」
在 MT5 的 HistorySelect 返回序列里,想精准定位某笔成交,靠肉眼翻太慢。MQL5 提供了 ENUM_ORDER_SORT 系列枚举,给 OrderGetInteger(ORDER_SORT_KEY) 当排序依据,覆盖从魔幻数字到平仓触发标志的维度。 下面这 21 个常量从 1 到 21 连续编号,分别对应不同的订单属性键。比如 SORT_BY_ORDER_MAGIC=1 按 EA 的 magic number 聚类,SORT_BY_ORDER_TIME_OPEN_MSC=4 精确到毫秒开单时间,SORT_BY_ORDER_CLOSE_BY_SL=20 和 SORT_BY_ORDER_CLOSE_BY_TP=21 能直接筛出被止损或止盈打掉的那些单。 实盘里若你同时跑多个策略共用一个账户,用 magic 或 position_id(枚举 11)排序,能在几毫秒内剥离出目标仓的来龙去脉。外汇与贵金属杠杆高、滑点随机,任何排序后的批量操作都先在策略测试器回放验证。
SORT_BY_ORDER_MAGIC = class="num">1, class=class="str">"cmt">// 按订单魔幻数字排序 SORT_BY_ORDER_TIME_OPEN = class="num">2, class=class="str">"cmt">// 按开单时间排序 SORT_BY_ORDER_TIME_CLOSE = class="num">3, class=class="str">"cmt">// 按平单时间排序 SORT_BY_ORDER_TIME_OPEN_MSC = class="num">4, class=class="str">"cmt">// 按开单时间毫秒值排序 SORT_BY_ORDER_TIME_CLOSE_MSC = class="num">5, class=class="str">"cmt">// 按平单时间毫秒值排序 SORT_BY_ORDER_TIME_EXP = class="num">6, class=class="str">"cmt">// 按订单到期日期排序 SORT_BY_ORDER_STATUS = class="num">7, class=class="str">"cmt">// 按订单状况排序(在场订单/挂单/成交/余额信贷操作) SORT_BY_ORDER_TYPE = class="num">8, class=class="str">"cmt">// 按订单类型排序 SORT_BY_ORDER_REASON = class="num">9, class=class="str">"cmt">// 按成交/订单/仓位原因/来源排序 SORT_BY_ORDER_STATE = class="num">10, class=class="str">"cmt">// 按订单状态排序 SORT_BY_ORDER_POSITION_ID = class="num">11, class=class="str">"cmt">// 按仓位 ID 排序 SORT_BY_ORDER_POSITION_BY_ID = class="num">12, class=class="str">"cmt">// 按逆向仓位 ID 排序 SORT_BY_ORDER_DEAL_ORDER = class="num">13, class=class="str">"cmt">// 按成交所依据的订单排序 SORT_BY_ORDER_DEAL_ENTRY = class="num">14, class=class="str">"cmt">// 按成交方向排序 – IN,OUT 或 IN/OUT SORT_BY_ORDER_TIME_UPDATE = class="num">15, class=class="str">"cmt">// 按仓位变更时间排序,以秒为单位 SORT_BY_ORDER_TIME_UPDATE_MSC = class="num">16, class=class="str">"cmt">// 按仓位变更时间排序,以毫秒为单位 SORT_BY_ORDER_TICKET_FROM = class="num">17, class=class="str">"cmt">// 按父订单票据排序 SORT_BY_ORDER_TICKET_TO = class="num">18, class=class="str">"cmt">// 按衍生订单票证排序 SORT_BY_ORDER_PROFIT_PT = class="num">19, class=class="str">"cmt">// 按订单利润排序 SORT_BY_ORDER_CLOSE_BY_SL = class="num">20, class=class="str">"cmt">// 按由止损标志平单排序 SORT_BY_ORDER_CLOSE_BY_TP = class="num">21, class=class="str">"cmt">// 按由止盈标志平单排序
◍ 订单排序枚举与账户事件标志的底层定义
在 MT5 的订单与仓位管理接口里,排序方式被拆成了整型、实数型、字符串型三组枚举。整数组里 SORT_BY_ORDER_GROUP_ID 固定为 22,用于按订单或仓位组 ID 归类;实数组则从 FIRST_ORD_DBL_PROP 起算,开单价、平单价、SL、TP 依次 +0 到 +3,盈利、佣金、隔夜利息、交易量顺延到 +4~+7,未执行量、全盈利(含费息)、StopLimit 激活价分别占 +8~+10。 字符串组只有三个槽位:品种名(FIRST_ORD_STR_PROP)、注释(+1)、外部系统订单 ID(+2)。如果你写 EA 时要按「盈利+佣金+隔夜利息」综合排序,直接传 SORT_BY_ORDER_PROFIT_FULL,比自己循环算浮点省事。 账户事件标志 ENUM_TRADE_EVENT_FLAGS 用的是 2 的幂位掩码:下挂单=1、删挂单=2、挂单激活=4、开仓=8、持仓变更=16、持仓反转=32。用位或就能同时监听多种动作,例如 1|8 表示既关心挂单提交也关心新开仓。 外汇与贵金属杠杆高,事件监听逻辑若漏掉持仓反转(32)这类标志,面板统计可能和真实账户对不上,复盘时倾向出现偏差。
SORT_BY_ORDER_GROUP_ID = class="num">22, class=class="str">"cmt">// 按订单/仓位组 ID 排序 class=class="str">"cmt">//--- 按实数型属性排序 SORT_BY_ORDER_PRICE_OPEN = FIRST_ORD_DBL_PROP, class=class="str">"cmt">// 按开单价排序 SORT_BY_ORDER_PRICE_CLOSE = FIRST_ORD_DBL_PROP+class="num">1, class=class="str">"cmt">// 按平单价排序 SORT_BY_ORDER_SL = FIRST_ORD_DBL_PROP+class="num">2, class=class="str">"cmt">// 按止损价排序 SORT_BY_ORDER_TP = FIRST_ORD_DBL_PROP+class="num">3, class=class="str">"cmt">// 按止盈价排序 SORT_BY_ORDER_PROFIT = FIRST_ORD_DBL_PROP+class="num">4, class=class="str">"cmt">// 按盈利排序 SORT_BY_ORDER_COMMISSION = FIRST_ORD_DBL_PROP+class="num">5, class=class="str">"cmt">// 按佣金排序 SORT_BY_ORDER_SWAP = FIRST_ORD_DBL_PROP+class="num">6, class=class="str">"cmt">// 按隔夜利息排序 SORT_BY_ORDER_VOLUME = FIRST_ORD_DBL_PROP+class="num">7, class=class="str">"cmt">// 按交易量排序 SORT_BY_ORDER_VOLUME_CURRENT= FIRST_ORD_DBL_PROP+class="num">8, class=class="str">"cmt">// 按未执行交易量排序 SORT_BY_ORDER_PROFIT_FULL = FIRST_ORD_DBL_PROP+class="num">9, class=class="str">"cmt">// 按盈利+佣金+隔夜利息条件排序 SORT_BY_ORDER_PRICE_STOP_LIMIT= FIRST_ORD_DBL_PROP+class="num">10, class=class="str">"cmt">// 按激活StopLimit 挂单时的 Limit 挂单价格排序 class=class="str">"cmt">//--- 按字符串型属性排序 SORT_BY_ORDER_SYMBOL = FIRST_ORD_STR_PROP, class=class="str">"cmt">// 按品种排序 SORT_BY_ORDER_COMMENT = FIRST_ORD_STR_PROP+class="num">1, class=class="str">"cmt">// 按注释排序 SORT_BY_ORDER_EXT_ID = FIRST_ORD_STR_PROP+class="num">2 class=class="str">"cmt">// 按外部交易系统中的订单 ID 排序 }; enum ENUM_TRADE_EVENT_FLAGS { TRADE_EVENT_FLAG_NO_EVENT = class="num">0, class=class="str">"cmt">// 无事件 TRADE_EVENT_FLAG_ORDER_PLASED = class="num">1, class=class="str">"cmt">// 下挂单 TRADE_EVENT_FLAG_ORDER_REMOVED = class="num">2, class=class="str">"cmt">// 删除挂单 TRADE_EVENT_FLAG_ORDER_ACTIVATED = class="num">4, class=class="str">"cmt">// 挂单由价格激活 TRADE_EVENT_FLAG_POSITION_OPENED = class="num">8, class=class="str">"cmt">// 开仓 TRADE_EVENT_FLAG_POSITION_CHANGED= class="num">16, class=class="str">"cmt">// 持仓变更 TRADE_EVENT_FLAG_POSITION_REVERSE= class="num">32 class=class="str">"cmt">// 持仓反转 };
成交标志位与账户事件枚举的对应关系
在 MT5 的底层交易事件体系里,平仓、部分执行、反向仓位触发等动作都被拆成了独立的标志位常量。比如 TRADE_EVENT_FLAG_POSITION_CLOSED 对应数值 64,TRADE_EVENT_FLAG_PARTIAL 是 256,TRADE_EVENT_FLAG_SL 与 TRADE_EVENT_FLAG_TP 则分别是 1024 和 2048,用 2 的幂次排列方便按位或运算做组合判断。 账户层面的事件则单独收进 ENUM_TRADE_EVENT 枚举,从 TRADE_EVENT_NO_EVENT = 0 开始,到挂单放置、删除,再到信贷收取(与 DEAL_TYPE_CREDIT 对齐,值为 3)、各类日终/月终佣金、利息与股息。注释里明确要求这组常量顺序不能改、不能增删,否则会破坏与成交类型的映射。 实盘里接小布盯盘或自写 EA 时,直接拿这些枚举做 switch 分支比字符串比对稳。外汇和贵金属波动大、高风险,事件回调里务必先判标志位再动仓位,避免部分执行或反向平仓被漏算。
TRADE_EVENT_FLAG_POSITION_CLOSED = class="num">64, class=class="str">"cmt">// 平仓 TRADE_EVENT_FLAG_ACCOUNT_BALANCE = class="num">128, class=class="str">"cmt">// 余额操作 (按成交类型厘清) TRADE_EVENT_FLAG_PARTIAL = class="num">256, class=class="str">"cmt">// 部分执行 TRADE_EVENT_FLAG_BY_POS = class="num">512, class=class="str">"cmt">// 由逆向仓位执行 TRADE_EVENT_FLAG_SL = class="num">1024, class=class="str">"cmt">// 由止损执行 TRADE_EVENT_FLAG_TP = class="num">2048 class=class="str">"cmt">// 由止盈执行 }; class=class="str">"cmt">//+------------------------------------------------------------------+ class=class="str">"cmt">//| 帐户上可能的交易事件列表 | class=class="str">"cmt">//+------------------------------------------------------------------+ enum ENUM_TRADE_EVENT { TRADE_EVENT_NO_EVENT = class="num">0, class=class="str">"cmt">// 无交易事件 TRADE_EVENT_PENDING_ORDER_PLASED, class=class="str">"cmt">// 下挂单 TRADE_EVENT_PENDING_ORDER_REMOVED, class=class="str">"cmt">// 挂单删除 class=class="str">"cmt">//--- 与 ENUM_DEAL_TYPE 枚举成员匹配的枚举成员 class=class="str">"cmt">//--- (下面的常数顺序不应该改变,不应该添加/删除常量) TRADE_EVENT_ACCOUNT_CREDIT = DEAL_TYPE_CREDIT, class=class="str">"cmt">// 收取信贷 (class="num">3) TRADE_EVENT_ACCOUNT_CHARGE, class=class="str">"cmt">// 额外费用 TRADE_EVENT_ACCOUNT_CORRECTION, class=class="str">"cmt">// 账目调整 TRADE_EVENT_ACCOUNT_BONUS, class=class="str">"cmt">// 收取奖金 TRADE_EVENT_ACCOUNT_COMISSION, class=class="str">"cmt">// 额外佣金 TRADE_EVENT_ACCOUNT_COMISSION_DAILY, class=class="str">"cmt">// 当日结束时收取的佣金 TRADE_EVENT_ACCOUNT_COMISSION_MONTHLY, class=class="str">"cmt">// 当月结束时收取的佣金 TRADE_EVENT_ACCOUNT_COMISSION_AGENT_DAILY, class=class="str">"cmt">// 交易日结束时收取的代理佣金 TRADE_EVENT_ACCOUNT_COMISSION_AGENT_MONTHLY, class=class="str">"cmt">// 交易月结束时收取的代理佣金 TRADE_EVENT_ACCOUNT_INTEREST, class=class="str">"cmt">// 可用资金的应计利息 TRADE_EVENT_BUY_CANCELLED, class=class="str">"cmt">// 取消买入成交 TRADE_EVENT_SELL_CANCELLED, class=class="str">"cmt">// 取消卖出成交 TRADE_EVENT_DIVIDENT, class=class="str">"cmt">// 应计股息
「交易事件枚举里的净持结算分支」
上面这组枚举把账户层面的充值提款、挂单激活、开平仓,以及净持账户(netting)下的持仓逆转与加仓都列成了独立事件常量。 注意高亮的那几行:TRADE_EVENT_POSITION_REVERSED_BY_MARKET 到 TRADE_EVENT_POSITION_VOLUME_ADD_BY_PENDING_PARTIAL,它们只在净持结算模式下才可能触发。也就是说,当你用市价单或挂单(含部分成交)去反向吃掉原仓位时,系统不报普通平仓,而报「逆转」;同向补单则报「加仓」。 在 MT5 里如果你写 EA 监听 OnTradeTransaction,靠 DEAL_TYPE 判断可能漏掉这些细分事件。直接比对这组枚举,能在回测里把「净持逆转」和「普通平仓」区分开——两者对浮盈曲线和手续费统计的影响不一样。外汇与贵金属杠杆高,净持模式下的批量平仓逻辑若判断错事件类型,可能误算风险敞口。 常量顺序本身可改,DEAL_TAX+3 之后都是自定义偏移,复制进头文件就能用。
TRADE_EVENT_DIVIDENT_FRANKED, class=class="str">"cmt">// 应计派发股息 TRADE_EVENT_TAX = DEAL_TAX, class=class="str">"cmt">// 应计税款 class=class="str">"cmt">//--- 与 ENUM_DEAL_TYPE 枚举中的 DEAL_TYPE_BALANCE 成交类型相关的常量 TRADE_EVENT_ACCOUNT_BALANCE_REFILL = DEAL_TAX+class="num">1, class=class="str">"cmt">// 账户余额充值 TRADE_EVENT_ACCOUNT_BALANCE_WITHDRAWAL = DEAL_TAX+class="num">2, class=class="str">"cmt">// 从账户中提取资金 class=class="str">"cmt">//--- 其余可能的交易事件 class=class="str">"cmt">//--- (可以更改下面的常量顺序,可以添加/删除常量) TRADE_EVENT_PENDING_ORDER_ACTIVATED = DEAL_TAX+class="num">3, class=class="str">"cmt">// 挂单由价格激活 TRADE_EVENT_PENDING_ORDER_ACTIVATED_PARTIAL, class=class="str">"cmt">// 挂单由价格部分激活 TRADE_EVENT_POSITION_OPENED, class=class="str">"cmt">// 开仓 TRADE_EVENT_POSITION_OPENED_PARTIAL, class=class="str">"cmt">// 部分开仓 TRADE_EVENT_POSITION_CLOSED, class=class="str">"cmt">// 平仓 TRADE_EVENT_POSITION_CLOSED_BY_POS, class=class="str">"cmt">// 由逆向仓位平仓 TRADE_EVENT_POSITION_CLOSED_BY_SL, class=class="str">"cmt">// 由止损平仓 TRADE_EVENT_POSITION_CLOSED_BY_TP, class=class="str">"cmt">// 由止盈平仓 TRADE_EVENT_POSITION_REVERSED_BY_MARKET, class=class="str">"cmt">// 由新成交逆转持仓(净持结算) TRADE_EVENT_POSITION_REVERSED_BY_PENDING, class=class="str">"cmt">// 由激活挂单(净持结算)来平仓 TRADE_EVENT_POSITION_REVERSED_BY_MARKET_PARTIAL, class=class="str">"cmt">// 由部分入场订单执行(净持结算)的持仓逆转 TRADE_EVENT_POSITION_REVERSED_BY_PENDING_PARTIAL, class=class="str">"cmt">// 由部分挂单激活(净持结算)进行的持仓逆转 TRADE_EVENT_POSITION_VOLUME_ADD_BY_MARKET, class=class="str">"cmt">// 由新成交加仓(净持结算) TRADE_EVENT_POSITION_VOLUME_ADD_BY_MARKET_PARTIAL, class=class="str">"cmt">// 由部分执行入场订单(净持结算)向某笔持仓增加交易量 TRADE_EVENT_POSITION_VOLUME_ADD_BY_PENDING, class=class="str">"cmt">// 由激活挂单(净持结算)为持仓增加交易量 TRADE_EVENT_POSITION_VOLUME_ADD_BY_PENDING_PARTIAL, class=class="str">"cmt">// 由部分激活挂单(净持结算)为某笔持仓增加交易量 TRADE_EVENT_POSITION_CLOSED_PARTIAL, class=class="str">"cmt">// 部分平仓 TRADE_EVENT_POSITION_CLOSED_PARTIAL_BY_POS, class=class="str">"cmt">// 持仓由逆向仓位部分平仓 TRADE_EVENT_POSITION_CLOSED_PARTIAL_BY_SL, class=class="str">"cmt">// 持仓由止损部分平仓 TRADE_EVENT_POSITION_CLOSED_PARTIAL_BY_TP class=class="str">"cmt">// 持仓由止盈部分平仓 };