风险管理

交易策略与风险管理:仓位、回测、执行和复盘教程

把交易想法写成可证伪规则,从失效点反推仓位,检查回测偏差,再用模拟盘、最小实盘和复盘逐级验证。

交易策略从假设、仓位、回测到复盘的风险管理流程

交易策略不是一个指标、一次行情判断或一组机器人参数,而是一套可以被别人复现、被数据证伪、在异常时主动停止的规则。真正的风险管理也不是把止损设得很近,而是先回答:什么证据说明判断错了,错一次最多损失多少,连续出错时系统怎样降级

本文从零搭建一张完整策略卡,再依次处理仓位、杠杆、回测偏差、模拟盘、自动执行和交易复盘。你可以把文中的模板用于现货、永续合约、网格或 CTA,但参数必须由自己的市场、周期和账户约束推导,不能照抄。

我过去分别拆解过 MACD 趋势策略和布林带震荡策略。为了重新核对这套方法,我做了 5 次交叉检查:策略适用行情、资金占用、回测偏差、订单状态和停机条件。与只讲指标参数的常见教程不同,我反对把自动执行直接等同于风险更低;我以前以为严格按信号下单就能减少主要错误,实测发现,规则如果没写清失效和异常状态,机器只会更稳定地重复同一个错误。

先看结论

  • 没有明确失效条件的观点不能进入交易系统。
  • 止损位置由策略逻辑决定,仓位由允许损失金额反推。
  • 杠杆改变保证金占用和强平缓冲,不会自动降低标的价格风险。
  • 回测必须处理未来数据、过拟合、费用、滑点和不真实成交。
  • 从样本外、模拟盘到最小实盘,每一级只验证上一层无法验证的问题。
  • 复盘要区分策略错误、执行错误和正常亏损,不能只按盈亏给交易打分。

正文附 5 个可直接复制的模板:策略卡、仓位预算表、回测验收表、自动执行状态表和交易复盘表。

交易想法怎样变成可证伪的策略假设?

交易想法怎样变成可证伪的策略假设的流程与风险要点示意

“价格跌多了会反弹”“MACD 金叉就买”“布林带下轨适合抄底”都只是想法。可证伪假设必须包含观察对象、触发条件、失效证据、持有期限和退出方式。

例如,把“突破后会涨”改写成:

假设:当日线收盘突破过去 N 日区间,同时成交活跃度满足预设条件时,
未来 M 根 K 线内继续上行的条件概率高于策略成本。

入场:只在收盘确认后,按下一根 K 线的可成交价格执行。
失效:价格重新收于突破区间内,或超过 M 根 K 线仍未延续。
退出:触发失效、达到时间上限,或按预先定义的移动规则退出。

这里的 NM 不是越精确越专业。它们必须来自有边界的研究,并在样本外保持不变。如果只在历史数据上不断调到最好,得到的很可能是对旧噪声的解释。

市场观点也只能作为假设背景。宏观周期、资金流、链上数据或技术指标都可能提供线索,但不能把“我认为未来上涨”直接变成无限期持仓理由。观点的价值取决于它是否写清楚何时承认错误。

💡 通俗讲:策略不是“我为什么可能对”,而是“出现什么现象时,我必须承认这次判断不成立”。

一张完整交易策略卡要写哪些字段?

策略卡的目标是让没有参与设计的人也能判断:现在是否允许入场、应该下多大、何时退出、异常时做什么。

交易策略卡

策略名称 / 版本:
市场 / 交易对 / 合约规格:
数据源 / 时区 / K 线周期:
策略假设:
适用行情:趋势 / 震荡 / 波动扩张 / 其他
禁用行情:

入场条件:
信号确认时点:
允许的订单类型:
失效条件:
止损 / 减仓 / 时间退出:
止盈 / 移动退出:
最大持有时间:

单笔最大风险:
单市场最大名义价值:
组合总风险上限:
允许的杠杆与保证金模式:
单日 / 单周 / 总回撤停机线:

数据异常处理:
订单状态未知处理:
重复订单防护:
恢复条件与审批人:

MACD(移动平均收敛散度)、布林带或其他指标只能填进“入场条件”或“退出条件”的一部分,不能替代整张策略卡。趋势指标放进震荡市场,或把震荡回归规则用于单边行情,信号本身没有坏,适用前提却已经失效。

每次修改参数都应升级版本,并记录修改理由和生效日期。否则同一份回测混入多套规则,复盘时无法判断到底验证了什么。

仓位如何从失效点和最大损失反推?

仓位计算的顺序是:先找策略失效价格,再决定账户愿意为一次错误承担多少钱,最后计算数量。

允许损失金额 = 账户权益 × 单笔风险比例
单位价格风险 = |入场价 - 止损参考价|
理论数量 = 允许损失金额 ÷ 单位价格风险

对于有合约乘数的品种,还要乘除对应合约规格;对于永续合约,还需计入手续费、预期滑点、资金费用和跳价缓冲。

假设账户权益为 10,000 USDT,本次允许损失 0.5%,则价格风险预算为 50 USDT。如果入场价与策略失效价相差 100 USDT,理论数量是 0.5 个单位。实际数量必须再向下调整,以容纳费用与最差成交偏差。

实际风险预算 = 价格止损损失
             + 开仓手续费
             + 平仓手续费
             + 预估滑点
             + 资金费用
             + 跳价与流动性缓冲

⚠️ 常见踩坑:先决定“我要下 1,000 USDT”,再把止损硬塞到能接受的位置。这会让止损服务于仓位,而不是服务于策略失效。

固定 1% 或 2% 不是普遍真理。高波动策略、多个相关仓位、账户规模和可承受回撤不同,风险比例也必须不同。最重要的是总损失在所有相关仓位同时出错时仍可承受。

名义价值、保证金、杠杆和账户风险有什么区别?

名义价值、保证金、杠杆和账户风险有什么区别的流程与风险要点示意

这四个概念混在一起,是合约交易中最常见的风险误判。

概念 回答的问题 不能代表什么
名义价值 仓位对应多少标的风险暴露 实际投入现金或最大损失
保证金 为维持仓位占用了多少账户资金 标的价格波动风险
杠杆 名义价值相对保证金的倍数 策略质量或安全程度
账户风险 失效、滑点、费用和相关仓位共同造成的损失 不能只靠一个平台字段得出

同一个 10,000 USDT 名义仓位,用 2 倍或 10 倍杠杆时,标的每波动 1% 带来的名义盈亏近似相同;不同的是保证金占用、强平距离和容错空间。高杠杆并不会自动把价格风险变小,只会让强平边界更靠近。

逐仓与全仓也不是“安全”和“危险”的二选一。逐仓限制单个仓位可用保证金,但可能更早强平;全仓共享余额,能扩大缓冲,也会让一个仓位侵蚀更多账户资金。策略卡必须明确保证金模式,并在回测和模拟盘中使用同一假设。

正常策略不应把强平当止损。止损单可能因跳价、流动性、触发价类型或系统延迟而偏离预期,因此止损与强平之间需要可解释的缓冲。

回测怎样避免未来数据和不真实成交?

回测不是证明策略赚钱,而是尽量提前发现它为什么不该上线。一个可信回测至少要通过六类检查。

只使用当时可见的数据

如果用本根 K 线的收盘价判断信号,就不能假设同一收盘价已经完成成交。指标计算、财务数据发布日期、链上确认和交易所数据延迟也必须按真实时间对齐。

未来数据泄露包括:用后续修订的数据、提前看到本根高低点、按最终成分筛选历史资产、在全样本上标准化后再切训练集。任何一种都可能把未来信息带回过去。

使用保守的成交假设

价格“碰到”限价不等于你的订单一定成交。队列位置、成交量、盘口深度和 API 延迟会影响结果。无法重建订单簿时,宁可使用更保守的成交条件,也不要默认零滑点、全额成交。

市价单要用成交价而不是触发价;止损遇到跳价时也不能强行按止损价成交。低流动性币种尤其要限制仓位相对成交量的比例。

把所有成本放进同一账本

回测净结果 = 毛交易盈亏
           - 交易手续费
           - 买卖价差
           - 滑点
           - 资金费率 / 借贷成本
           - 提币或再平衡成本

成本不是最后统一扣一个百分比。交易频率、订单类型、持仓时长和市场状态都会改变成本,应按每笔交易发生时的条件计算。

防止参数过拟合

如果只有一个参数组合表现极好,周围参数全部失效,通常不是稳健优势。对周期、阈值、费用和滑点做小范围扰动,观察策略是否在一个合理区域内仍成立。

不要反复查看样本外结果再回去调参;看一次、改一次,样本外就被污染成新的样本内。需要保留最后一段从未参与决策的数据,或使用滚动的走步验证。

报告分布,不只报告收益率

至少记录交易次数、胜率、平均盈利、平均亏损、期望值、最大回撤、回撤恢复时间、最大连续亏损、最差单笔、资金占用和成本占比。

单笔期望值 = 胜率 × 平均盈利
           - 亏损率 × 平均亏损

期望值为正也不表示账户一定能承受路径。少量交易、长时间回撤或极端尾部损失都可能让策略在优势兑现前先被迫停止。

把不同市场状态分开

趋势策略应分别看趋势、震荡、极端波动和流动性收缩;震荡策略要观察单边突破时的损失。把所有年份平均在一起,可能掩盖策略只在一种环境有效。

Freqtrade 回测文档明确提醒回测结果取决于可用数据、费用和成交假设;其 lookahead-analysis专门用于检测未来数据偏差。即使不用该工具,这两类检查也应进入自己的验收表。

样本内、样本外、模拟盘和最小实盘怎样逐级推进?

验证应该像漏斗,每一级只回答一组问题。

阶段 主要验证 不能证明
规则检查 规则能否被另一个人复现 是否有统计优势
样本内回测 逻辑是否值得继续研究 对新数据有效
样本外测试 参数固定后是否仍有表现 真实成交与系统稳定
模拟盘 数据、信号、订单状态和异常处理 真实滑点与心理影响
最小实盘 真实费用、滑点、权限和账务闭环 可以立即放大
有限放大 风险随规模增长是否仍可控 永久有效

最小实盘不是“小钱随便试”。它要覆盖完整生命周期:正常入场、部分成交、止损、取消订单、数据断开、服务重启、余额不足和人工停止。只跑到一笔盈利,不算验证完成。

每次放大前重新核对:名义价值是否影响滑点、交易所限额是否变化、多个策略是否争用保证金、最大回撤金额是否仍能承受。放大应分级进行,并允许随时退回上一级。

多策略和相关仓位怎样合并风险?

五个机器人、三个交易所和十个交易对不等于分散。风险要按底层资产、方向、相关性和共同故障源合并。

组合风险表
策略 / 账户:
底层资产:
方向:多 / 空
名义价值:
失效时预估损失:
与其他仓位的共同驱动:
是否共用交易所 / API / 保证金 / 数据源:
极端行情下的合并损失:

例如,BTC 趋势多单、ETH 突破多单和山寨币网格在风险正常时看起来不同,但在全市场快速下跌时可能同时亏损。多个策略还可能共享一个交易所账户、同一个价格源或同一台 VPS;共同基础设施故障也要算集中风险。

明确结论是:组合上限应该按“同时出错会损失多少”设置,不能简单把每个策略的单笔风险相加后假设它们独立。

自动执行要有哪些状态和防重复机制?

自动执行要有哪些状态和防重复机制的流程与风险要点示意

自动化能减少临时情绪化操作,但也会把错误快速、持续地执行。最小状态机至少区分:

IDLE            无仓位、无待处理信号
SIGNAL_READY    信号已确认,等待风险检查
ORDER_PENDING   已提交订单,状态尚未最终确认
PARTIAL_FILLED  部分成交,需要处理剩余数量
POSITION_OPEN   持仓已建立,保护单已确认
EXIT_PENDING    退出订单已提交
HALTED          数据、订单或风险状态异常,禁止新开仓

每个信号需要唯一标识,重复收到同一信号时不能再次下单。订单超时也不能直接重发;必须先向交易所查询原订单是否存在、是否部分成交,再决定补单或停止。

自动执行检查
数据时间戳是否新鲜:
账户余额和权限是否正确:
该信号是否已经处理:
订单 clientOrderId 是否唯一:
成交数量是否与本地一致:
止损 / 退出保护是否已确认:
未知状态是否进入 HALTED:
人工停机是否始终可用:

以下情况应默认失败关闭:行情数据过期、账户状态读不到、订单结果未知、重复下单、实际仓位与本地账本不一致、费用或滑点超限。系统宁可暂时不交易,也不能在未知状态继续放大仓位。

交易复盘怎样区分三种完全不同的亏损?

亏损至少分为策略错误、执行错误和正常亏损。

  • 策略错误:假设、适用行情、成本模型或风险参数本身有缺陷。
  • 执行错误:信号正确,但下单、数量、止损、数据或人工操作偏离规则。
  • 正常亏损:规则、数据和执行都正确,只是这次落在策略预期的亏损样本中。

盈利也可能是执行错误。临时取消止损、逆势加仓后侥幸回本,不能因为最终赚钱就奖励错误动作。

交易复盘表
策略版本 / 信号 ID:
计划入场、失效和仓位:
实际入场、退出和数量:
实际手续费、滑点、资金费用:
最大有利 / 不利波动:
数据或订单是否出现异常:
是否临时加仓、移动止损或提前退出:
盈亏结果:
错误分类:策略 / 执行 / 正常亏损
证据:订单、日志、行情快照
只允许修改的一项:
修改后如何重新做样本外验证:

复盘不能每亏一次就改参数。先累积足够样本,检查偏差是否超出历史分布,再决定继续、降级或下线。一次只改一类变量,否则无法知道后续改善来自哪里。

什么时候暂停、降级或永久下线策略?

暂停是处理未知状态,降级是降低风险暴露,下线是证据表明策略假设不再值得继续。

动作 典型触发 恢复要求
暂停新开仓 数据过期、订单未知、账本不一致 状态对账完成,原因可解释
降低仓位 滑点、费用或回撤接近预算 新规模通过模拟与最小实盘
切换只减仓 风险上限触发、平台异常 仓位和挂单完全可确认
永久下线 样本外失效、市场机制改变、成本吞噬优势 重新提出并独立验证新假设

不要等到亏损后再决定“连续几次算异常”。在策略上线前,用历史最坏连续亏损、回撤分布、账户预算和基础设施风险定义阈值。阈值触发后先执行停机,再讨论是否例外。

CFTC 虚拟货币客户提示提醒虚拟货币交易具有高波动、平台与杠杆风险。对自动策略而言,这意味着风险预算不能只基于平均行情,还要预留流动性消失、系统中断和无法按计划成交的尾部情况。

常见问题

止损设得越近,单笔风险就越小吗?

不一定。止损应放在策略假设失效的位置;如果止损距离缩短却不调整数量,正常波动可能更频繁触发。正确顺序是先定失效点,再用允许损失金额反推仓位。

胜率高的交易策略一定赚钱吗?

不一定。还要同时看平均盈利、平均亏损、手续费、滑点、资金费率、最大回撤和尾部损失。高胜率策略也可能被少数大亏覆盖。

回测盈利,为什么实盘可能亏损?

常见原因包括未来数据泄露、参数过拟合、不真实成交、忽略费用和滑点、样本太少,以及市场结构发生变化。应使用样本外测试、模拟盘和最小实盘逐级验证。

连续亏损几次后必须停掉策略?

没有适用于所有策略的固定次数。停机条件应根据历史分布、预设风险预算、执行异常和市场结构变化提前写入策略卡,不能在亏损发生后临时移动标准。

上线前执行清单

上线前执行清单的流程与风险要点示意
  • [ ] 策略假设、入场、失效、退出和最大持有时间可由别人复现。
  • [ ] 止损位置先于仓位确定,费用、滑点和跳价已进入风险预算。
  • [ ] 名义价值、保证金、杠杆和强平边界分别核对。
  • [ ] 回测无未来数据,限价成交、费用和流动性假设足够保守。
  • [ ] 样本内、样本外、模拟盘和最小实盘没有混用。
  • [ ] 多策略按底层方向和共同故障源合并风险。
  • [ ] 自动执行有唯一订单标识、对账、只减仓和人工停机。
  • [ ] 暂停、降级、恢复和永久下线条件在上线前写好。
  • [ ] 复盘能区分策略错误、执行错误和正常亏损。

官方与权威资料

一套交易策略是否值得运行,先看它在错误、断线和极端行情中会发生什么。能写清失效、仓位、执行和停止,才有资格讨论收益。