期货策略触及亏损线紧急平仓:可靠执行流程写法
2026/6/23 1:09:54 网站建设 项目流程

前言

国内期货实盘通常会有风控线:例如当日权益从开盘回撤超过 5% 就全部平仓并停机,或浮亏超过固定金额触发强平逻辑。紧急时刻若只在代码里print("要平仓了"),而主循环仍按 5 分钟 K 线慢慢算均线,可能来不及在夜盘跳水时把仓位减掉。可靠流程需要:用天勤get_account()持续读资金 → 触发后冻结新开仓 → 对每个合约TargetPosTask.set_target_volume(0)把目标净仓调成零 → 多次wait_update直到get_position显示净仓为零或超时 → 告警并停机。

下面解释触发用的 account 字段含义、emergency 标志是什么、以及 enter_emergency 函数应包含哪些步骤。代码名均为天勤对象属性或团队自定变量,第一次出现会说明。

一、触发条件:account 里几个常用字段

api.get_account()返回资金账户对象,在每次wait_update()后更新:

字段含义(见 objs.py 注释)紧急平仓常见用法
balance账户权益相对日初算回撤比例
float_profit浮动盈亏绝对值过大告警
risk_ratio风险度,保证金/权益接近 1 时先减仓
available可用资金强平后是否还能挂单

示例:日初记录day_start_balance = acc.balance(在首根有效 K 线或约定 9:00 记录),盘中若acc.balance <= day_start_balance * (1 - MAX_DD)则触发,MAX_DD如 0.05 表示 5% 回撤。

夜盘跨自然日时,要在团队约定时刻重置日初权益,否则用昨天基准算今天回撤会失真。

二、emergency 是什么

emergency 不是天勤内置字段,而是策略里常用的布尔状态,例如state["emergency"] = True,表示已进入紧急模式:后续信号逻辑不得再set_target_volume开新仓,只允许平仓或停机。监控脚本可检查日志里 emergency 触发后是否还有开仓记录,有则说明冻结逻辑写漏了。

三、enter_emergency 推荐步骤(带说明)

defenter_emergency(api,tasks,symbols,reason):state["emergency"]=Trueforsinsymbols:tasks[s].set_target_volume(0)# 目标净仓调为零deadline=time.time()+60whiletime.time()<deadline:api.wait_update()ifall(api.get_position(s).pos==0forsinsymbols):breaklog_emergency(reason)# 写清 reason、各 symbol 最终 pos

说明:

  1. tasks是每个合约的TargetPosTask实例字典;set_target_volume(0) 不会立刻成交,要靠后续 wait_update 驱动发单。
  2. pos是净持仓手数,归零才算平仓完成;部分成交时循环要继续。
  3. 60 秒超时后若仍有仓位,打严重告警,考虑人工介入或改用 ACTIVE 对价平仓(团队规范)。
  4. 结束后api.close()或进入永久 pause,需人工复位才能再交易。

四、与拒单、涨跌停

紧急时若平时用 PASSIVE 排队,可能平不出去;可临时改用price="ACTIVE"的 task 或对价insert_order(勿与 task 混用同一合约)。涨跌停时对手盘缺失,可能无法完全平仓,日志必须记录残留poslast_msg,不能假装已全平。

五、进程崩溃后

emergency 存在内存里,崩溃后会丢。重启时先wait_updateget_position:若有仓,默认继续平或告警,不要直接按策略信号重新开仓。

六、与 TqRiskRule 的关系

天勤提供TqRuleOpenVolumesLimitTqRuleOrderRateLimit等(见 risk_rule 模块),在超限时报TqRiskRuleError,属于预防性限制,与 emergency 互补,不能替代“回撤超限全平”的业务规则。

总结

紧急平仓的关键在于它是一条完整的工程链路,而不是一句‘触发后停下来’的逻辑。触发时需要先冻结新开仓意图(进入 emergency),再对每个 symbol 把目标净仓推到 0,并在循环里持续 wait_update 直到pos归零或超时;同时把 balance、pos、last_msg 等关键证据写进日志并告警,便于事后判断是否真的平干净。更重要的是平时要演练一次紧急链路:只有当系统在异常中也能稳定跑完,真正波动来临时才不会依赖临场补救。把这条链路反复验证后,风控才会从“阈值”变成“可执行的保障”。

FAQ

1)只平部分品种?

配置emergency_symbols列表,只对这些 set 零。

2)组合多腿?

所有腿同时 set_target_volume(0),避免单腿裸露。

3)夜盘触发日切?

重置 day_start_balance 的规则写进 config。

4)回测要加吗?

建议加同样逻辑,观察历史最大回撤日是否按预期全平。

风险提示

以上内容用于风控程序参考,不构成投资建议。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询