前言国内期货组合策略很常见同一资金账户里同时持有螺纹钢、铁矿石、豆粕、股指等多个品种各品种由子策略或同一策略的不同腿给出目标净仓。组合层面通常会设总风险度上限、总浮亏上限、单品种贡献度上限。平时各腿波动不大时单合约止损就够但当某一腿突然急涨急跌——政策消息、外盘联动、涨跌停封板——该腿浮亏和保证金占用会瞬间拉高组合risk_ratio可能逼近 1其他腿还没动就已经触及账户级风控。这时不能只问“这个品种要不要止损”而要问“组合先减哪条腿、减多少、是否整体降杠杆”。天勤 TqSdk 可对每个symbol读get_position、get_quote对账户读get_account()。下面解释组合风控里常见英文字段含义、触发条件怎么写、某一腿剧烈波动时先平谁的优先级规则以及如何用TargetPosTask.set_target_volume落地。一、名词对照组合风控读哪些天勤对象代码/字段是什么组合风控里干什么symbol合约代码如SHFE.rb2510多品种时逐个统计get_position(symbol)该合约持仓对象读单腿净仓与浮亏pos.pos净持仓手数减仓后是否归零float_profit_long / float_profit_short多头/空头浮动盈亏单腿亏损排序pos.margin该合约占用保证金若有单腿资金占用排序get_account()资金账户组合总风险risk_ratio风险度文档为保证金除以权益接近 1 时组合危险TargetPosTask天勤调仓工具把净仓推向目标对 victim 品种 set 零或减量set_target_volume(n)把该合约目标净仓设为 n减仓执行动作wait_update()推进行情与交易回报触发判断前要更新组合风控通常写在“上层主机”主循环里wait_update后先算组合指标再决定是否覆盖各子策略给出的目标仓。二、为什么要组合层而不只靠单品种止损单品种止损假设各腿独立组合里两腿可能对冲多螺纹空铁矿单腿剧震时净敞口变向只平剧震腿有时不够有时平错腿会破坏对冲。组合层看的是账户还能不能承受、哪条腿对组合伤害最大、哪条腿最容易平出去。典型触发团队可配置阈值account.risk_ratio 0.90账户级可能所有腿都要减某 symbol 浮亏之和低于-per_sym_loss单腿贡献过大某 symbol 当日振幅或 ATR 突增波动率异常先禁开新仓或减该腿。defportfolio_risk_ok(api,symbols,limits):accapi.get_account()ifacc.risk_ratiolimits[max_risk]:returnFalse,account_riskforsinsymbols:posapi.get_position(s)pnlpos.float_profit_longpos.float_profit_shortifpnl-limits[per_sym_loss]:returnFalse,fsym_loss:{s}returnTrue,limits是团队自定的字典如max_risk0.85、per_sym_loss50000元。risk_ratio刚启动时可能短暂为 nan应wait_update若干帧后再判。三、先平谁四条常见优先级可配置触发后不能对所有 symbol 同时set_target_volume(0)有时只需减最危险的一腿。常见规则选一或组合亏损最大腿先减减小组合方向性暴露适合趋势组合剧震腿已大幅浮亏。流动性最好腿先减看quote.bid_volume1 ask_volume1或历史成交先平容易成交的避免封板腿平不掉、其他腿乱平。非核心 beta 腿先减保留对冲核心腿例如套利里先减投机腿。保证金占用最高腿先减释放available防止后续拒单。实现上生成victim列表依次调仓ifnotok:victimpick_victim(symbols,ruleworst_pnl)# 按规则选 symbolnew_targetreduce_target(victim)# 归零或减 N 手tasks[victim].set_target_volume(new_target)log_portfolio_action(reason,victim,new_target)tasks是每个 symbol 的TargetPosTask实例reduce_target可以是 0 或max(pos.pos - 1, 0)等由团队定。每次 set 后继续wait_update直到pos.pos接近目标或超时。四、与单策略止损、涨跌停的关系单品种止损在策略内如均线破位平该 symbol组合风控在上层。两层同时触发时应合并为一次set_target_volume避免 A 层要平、B 层又要开反复撤单占报单额度。若剧震腿已涨跌停封板set_target_volume(0)可能长时间不成交组合风控只能平其他腿降总杠杆、或触发emergency告警人工介入。日志必须记录残留pos与last_msg不能假设已平。五、回测与极端日验证组合风控规则应在TqBacktest或历史极端日回放里测是否过度交易、是否在震荡日把组合砍光。回测里risk_ratio与实盘字段一致但成交假设可能更乐观应用快期模拟再观察一次减仓是否跟得上盘口。六、多策略同账户时的边界若一账户多策略共 symbol组合层汇总后的目标才传给唯一TargetPosTask见多策略隔离专题。组合风控触发时应通知各子策略暂停新开仓直到portfolio_risk_ok恢复。总结组合风控的难点从来不是‘要不要减仓’而是‘先减哪一腿才最符合组合目标、最能控制账户风险扩散’。当你提前把触发维度account.risk_ratio、单腿浮亏/贡献、流动性指标与优先级规则做成可执行的选择逻辑极端行情下的决策就会从临场拍板变成流程化执行先选 victim再用 set_target_volume 把组合敞口降下来。这样写清楚之后组合层就不会在单腿剧震时出现“忙着平但平错方向”的尴尬。更进一步组合风控触发时要与子策略协同暂停新开仓避免多层逻辑互相踩踏。把这套主线做厚做稳组合系统才能在极端行情里保持可预期的行为。FAQ1两腿相关性高同时触发怎么办可定义成对减例如多螺纹空铁矿同时减相同手数保持价差敞口。2SP 组合合约怎么算按组合symbol一个 task组合腿内部再拆规则。3risk_ratio 一直 nan刚连接时等几帧wait_update仍 nan 查账户是否回报异常。4人工在 APP 改仓见对账专题组合层应以get_position为准同步。风险提示以上内容用于组合风控程序参考不构成投资建议。
多品种组合单品种剧烈波动:组合风控先平谁
发布时间:2026/6/8 20:12:20
前言国内期货组合策略很常见同一资金账户里同时持有螺纹钢、铁矿石、豆粕、股指等多个品种各品种由子策略或同一策略的不同腿给出目标净仓。组合层面通常会设总风险度上限、总浮亏上限、单品种贡献度上限。平时各腿波动不大时单合约止损就够但当某一腿突然急涨急跌——政策消息、外盘联动、涨跌停封板——该腿浮亏和保证金占用会瞬间拉高组合risk_ratio可能逼近 1其他腿还没动就已经触及账户级风控。这时不能只问“这个品种要不要止损”而要问“组合先减哪条腿、减多少、是否整体降杠杆”。天勤 TqSdk 可对每个symbol读get_position、get_quote对账户读get_account()。下面解释组合风控里常见英文字段含义、触发条件怎么写、某一腿剧烈波动时先平谁的优先级规则以及如何用TargetPosTask.set_target_volume落地。一、名词对照组合风控读哪些天勤对象代码/字段是什么组合风控里干什么symbol合约代码如SHFE.rb2510多品种时逐个统计get_position(symbol)该合约持仓对象读单腿净仓与浮亏pos.pos净持仓手数减仓后是否归零float_profit_long / float_profit_short多头/空头浮动盈亏单腿亏损排序pos.margin该合约占用保证金若有单腿资金占用排序get_account()资金账户组合总风险risk_ratio风险度文档为保证金除以权益接近 1 时组合危险TargetPosTask天勤调仓工具把净仓推向目标对 victim 品种 set 零或减量set_target_volume(n)把该合约目标净仓设为 n减仓执行动作wait_update()推进行情与交易回报触发判断前要更新组合风控通常写在“上层主机”主循环里wait_update后先算组合指标再决定是否覆盖各子策略给出的目标仓。二、为什么要组合层而不只靠单品种止损单品种止损假设各腿独立组合里两腿可能对冲多螺纹空铁矿单腿剧震时净敞口变向只平剧震腿有时不够有时平错腿会破坏对冲。组合层看的是账户还能不能承受、哪条腿对组合伤害最大、哪条腿最容易平出去。典型触发团队可配置阈值account.risk_ratio 0.90账户级可能所有腿都要减某 symbol 浮亏之和低于-per_sym_loss单腿贡献过大某 symbol 当日振幅或 ATR 突增波动率异常先禁开新仓或减该腿。defportfolio_risk_ok(api,symbols,limits):accapi.get_account()ifacc.risk_ratiolimits[max_risk]:returnFalse,account_riskforsinsymbols:posapi.get_position(s)pnlpos.float_profit_longpos.float_profit_shortifpnl-limits[per_sym_loss]:returnFalse,fsym_loss:{s}returnTrue,limits是团队自定的字典如max_risk0.85、per_sym_loss50000元。risk_ratio刚启动时可能短暂为 nan应wait_update若干帧后再判。三、先平谁四条常见优先级可配置触发后不能对所有 symbol 同时set_target_volume(0)有时只需减最危险的一腿。常见规则选一或组合亏损最大腿先减减小组合方向性暴露适合趋势组合剧震腿已大幅浮亏。流动性最好腿先减看quote.bid_volume1 ask_volume1或历史成交先平容易成交的避免封板腿平不掉、其他腿乱平。非核心 beta 腿先减保留对冲核心腿例如套利里先减投机腿。保证金占用最高腿先减释放available防止后续拒单。实现上生成victim列表依次调仓ifnotok:victimpick_victim(symbols,ruleworst_pnl)# 按规则选 symbolnew_targetreduce_target(victim)# 归零或减 N 手tasks[victim].set_target_volume(new_target)log_portfolio_action(reason,victim,new_target)tasks是每个 symbol 的TargetPosTask实例reduce_target可以是 0 或max(pos.pos - 1, 0)等由团队定。每次 set 后继续wait_update直到pos.pos接近目标或超时。四、与单策略止损、涨跌停的关系单品种止损在策略内如均线破位平该 symbol组合风控在上层。两层同时触发时应合并为一次set_target_volume避免 A 层要平、B 层又要开反复撤单占报单额度。若剧震腿已涨跌停封板set_target_volume(0)可能长时间不成交组合风控只能平其他腿降总杠杆、或触发emergency告警人工介入。日志必须记录残留pos与last_msg不能假设已平。五、回测与极端日验证组合风控规则应在TqBacktest或历史极端日回放里测是否过度交易、是否在震荡日把组合砍光。回测里risk_ratio与实盘字段一致但成交假设可能更乐观应用快期模拟再观察一次减仓是否跟得上盘口。六、多策略同账户时的边界若一账户多策略共 symbol组合层汇总后的目标才传给唯一TargetPosTask见多策略隔离专题。组合风控触发时应通知各子策略暂停新开仓直到portfolio_risk_ok恢复。总结组合风控的难点从来不是‘要不要减仓’而是‘先减哪一腿才最符合组合目标、最能控制账户风险扩散’。当你提前把触发维度account.risk_ratio、单腿浮亏/贡献、流动性指标与优先级规则做成可执行的选择逻辑极端行情下的决策就会从临场拍板变成流程化执行先选 victim再用 set_target_volume 把组合敞口降下来。这样写清楚之后组合层就不会在单腿剧震时出现“忙着平但平错方向”的尴尬。更进一步组合风控触发时要与子策略协同暂停新开仓避免多层逻辑互相踩踏。把这套主线做厚做稳组合系统才能在极端行情里保持可预期的行为。FAQ1两腿相关性高同时触发怎么办可定义成对减例如多螺纹空铁矿同时减相同手数保持价差敞口。2SP 组合合约怎么算按组合symbol一个 task组合腿内部再拆规则。3risk_ratio 一直 nan刚连接时等几帧wait_update仍 nan 查账户是否回报异常。4人工在 APP 改仓见对账专题组合层应以get_position为准同步。风险提示以上内容用于组合风控程序参考不构成投资建议。