风险管理与保护机制

风险管理与保护机制

Protections(保护机制)是用于在出现意外事件或不利市场条件时,临时停止交易的机制,以保护你的交易策略免受重大损失。它们可以针对单个交易对(pair)或所有交易对全局生效。例如,当出现过多止损、最大回撤过大、盈利过低或刚卖出后立即重新入场等情况时,Protections会自动暂停交易,给市场时间恢复或避免情绪化交易。所有保护机制的结束时间都会向上取整到下一个K线的开始,避免在K线内部发生突然的买入或卖出,从而确保交易行为的稳定性与可预测性。

是的,Protections完全支持回测(backtesting)和超参数优化(hyperopt),但必须显式启用。默认情况下,回测和优化过程会忽略所有保护机制。要启用Protections,必须在命令行中添加 --enable-protections 标志。例如,在运行回测时,你需要使用类似 freqtrade backtesting --enable-protections 的命令。否则,即使你在策略中配置了保护规则,它们也不会在回测中生效,可能导致测试结果与实盘表现严重不符。

所有Protections都共享一组通用配置参数,用于控制保护的触发条件和持续时间:

  • method:指定要使用的保护机制名称,如 StoplossGuard、MaxDrawdown 等。
  • stop_duration_candles:指定保护生效的持续时间,单位为K线数量(正整数)。
  • stop_duration:指定保护生效的持续时间,单位为分钟(浮点数),不能与 stop_duration_candles 同时使用。
  • lookback_period_candles:仅考虑最近指定数量K线内的交易记录(正整数),用于计算触发条件。
  • lookback_period:仅考虑最近指定分钟数内的交易记录(浮点数),不能与 lookback_period_candles 同时使用。
  • trade_limit:设置触发保护所需的最少交易次数(正整数),某些保护机制(如 CooldownPeriod)不使用此参数。
  • unlock_at:指定一个固定时间(格式为 "HH:MM",24小时制),在该时间点自动解除保护,部分保护机制支持此功能。

建议在测试不同时间框架时优先使用基于K线的参数(如 *_candles),因为它们对时间框架变化更具弹性。

StoplossGuard 是一种保护机制,用于监控在指定时间窗口内发生的止损交易次数。当在 lookback_period_candles(或 lookback_period)定义的时间范围内,出现 trade_limit 次或更多止损交易时,系统将立即停止所有交易对(或仅当前交易对,若启用 only_per_pair)的交易,持续时间为 stop_duration_candles(或 stop_duration)。

默认情况下,它统计所有亏损的止损类型,包括 "stop_loss"、"stoploss_on_exchange" 和 "trailing_stop_loss"。required_profit 参数默认为 0.0,表示只要盈利为负就计入止损;若设置为正值(如 0.05),则仅当亏损超过5%时才触发保护。若设置 only_per_side=True(适用于期货机器人),则仅统计多头或空头一方的止损,不影响另一方的交易。例如,若过去24根K线内有4次以上止损,则停止交易4根K线,以防止连续亏损的恶性循环。

要配置 StoplossGuard 避免在一天内频繁止损后继续交易,你可以设置 lookback_period_candles 为24(假设时间框架为1小时,则代表过去24小时),trade_limit 为4,表示如果在过去24小时内发生了4次或更多止损,就触发保护;然后设置 stop_duration_candles 为4,表示停止交易4根K线(即4小时)。同时,保持 only_per_pair=False 以确保全局保护,防止所有交易对在系统性风险下继续操作。示例配置如下:

{
    "method": "StoplossGuard",
    "lookback_period_candles": 24,
    "trade_limit": 4,
    "stop_duration_candles": 4,
    "required_profit": 0.0,
    "only_per_pair": False
}

此配置能有效防止在市场剧烈波动或趋势反转时,因连续止损而持续亏损。

MaxDrawdown(最大回撤)保护机制用于监测在指定历史窗口内所有交易的累计最大回撤比例。当回撤幅度超过 max_allowed_drawdown 设定的阈值时,系统将暂停交易,防止在市场深度调整期间继续加仓或扩大风险。

例如,若设置 max_allowed_drawdown=0.2(即20%),并且 lookback_period_candles=48(假设为1小时K线,即过去48小时),trade_limit=20(过去48小时内至少完成20笔交易),则当这20笔交易的整体最大回撤超过20%时,系统将停止交易12根K线(stop_duration_candles=12),等待市场恢复。这种机制特别适合在趋势反转或黑天鹅事件后避免情绪化交易。注意,回撤是基于所有交易对的累计盈亏计算的,除非你单独配置按交易对隔离。

LowProfitPairs 保护机制通过监控每个交易对在指定时间窗口内的平均盈利能力,自动锁定表现不佳的交易对,从而避免在低效资产上浪费资金和交易机会。它计算每个交易对在 lookback_period_candles 内所有交易的总盈利比例,若该比例低于 required_profit 且交易次数达到 trade_limit,则该交易对会被锁定 stop_duration 时间。

例如,若某交易对在过去6根K线内完成了2笔交易,但总盈利仅为1.5%,而你设置了 required_profit=0.02(2%),则该交易对将被锁定60分钟。这有助于策略自动过滤掉表现差的市场,集中资源在高盈利潜力的交易对上。对于期货机器人,设置 only_per_side=True 可仅锁定多头或空头一方,保持另一方向的交易能力。

CooldownPeriod(冷却期)保护机制的作用是在一笔交易结束后,暂时禁止同一交易对再次开仓,给市场时间重新形成趋势或避免重复交易。它不依赖历史交易数据或统计指标,而是仅基于最近一笔交易的结束时间来触发。

与其他保护机制不同的是:

  • 它只作用于单个交易对,不会全局锁定所有交易对。
  • 它忽略 lookback_period 参数,因为它只关心上一笔交易是否刚结束。
  • 它不统计交易次数或盈亏,仅关注时间间隔。

例如,设置 stop_duration_candles=2 表示每卖出一笔后,该交易对必须等待2根K线才能再次买入。这有助于防止在价格波动剧烈时反复进出,减少手续费损耗和假信号干扰,特别适用于高频或震荡市场策略。

你可以将多个Protections按顺序组合在一起,形成一个层层递进的保护屏障,以应对不同类型的市场风险。所有保护机制会按照你在 protections 列表中定义的顺序依次评估,只要任意一个保护被触发,交易就会被暂停。

例如,一个完整的保护体系可能包括:

  1. CooldownPeriod:每笔交易结束后冷却5根K线,避免重复交易。
  2. MaxDrawdown:若过去48根K线内发生20笔交易且最大回撤超过20%,则全局停止4根K线。
  3. StoplossGuard:若过去24根K线内发生4次以上止损,则全局停止2根K线。
  4. LowProfitPairs(两次):
    • 若过去6根K线内某交易对盈利低于2%且有2笔交易,则锁定60分钟。
    • 若过去24根K线内某交易对盈利低于1%且有4笔交易,则锁定2根K线。

这种组合方式能同时应对短期波动(冷却期)、中期回撤(最大回撤)、高频止损(止损卫士)和长期低效交易对(低盈利锁定),形成全面的风险控制网络。注意:顺序很重要,先触发的保护会立即生效,后续保护将不再评估。

trailing_stop 启用追踪止损功能,它基于 stoploss 值动态调整止损位,随着价格上涨而上移,但不会下移,以锁定利润。trailing_stop_positive 定义在盈利达到某一比例(如 0.01 即 1%)后,才开始启用追踪止损。trailing_stop_positive_offset 指定触发追踪止损的盈利偏移量(如 0.02 表示盈利达 2% 后才开始追踪)。trailing_only_offset_is_reached 若设为 true,则只有在达到偏移量后才会启动追踪,否则只要盈利为正即开始追踪。这些参数组合可实现灵活的利润保护策略。

stoploss 是静态止损比例(如 -0.1 表示亏损 10% 即卖出),trailing_stop 是启用动态追踪止损的开关。当 trailing_stop 为 true 时,机器人会在盈利达到 trailing_stop_positive_offset 后,根据 stoploss 值动态上移止损位,形成“追踪”效果。trailing_stop_positive 决定从何时开始追踪(如盈利达 1% 后),trailing_only_offset_is_reached 控制是否必须达到偏移量才启动追踪。二者配合,可在锁定利润的同时保留趋势延续空间。

stoploss 是一个配置参数,用于定义当交易亏损达到某个比例时自动卖出的阈值。例如,设置为 -0.10 表示当交易亏损超过 10% 时,系统会立即触发卖出操作。这个参数是可选的,但强烈建议设置以控制风险。stoploss 的计算包含交易费用,因此 -10% 的 stoploss 是相对于买入价精确向下 10% 的位置,而不是简单的价格跌幅。大多数策略文件已经预设了最优的 stoploss 值,用户可根据自身风险偏好进行调整。

Stoploss on exchange 指的是将止损订单直接放置在交易所服务器上,而不是由 Freqtrade 机器人本地监控和触发。当启用时,买入成交后,系统会立即在交易所创建一个止损限价单或市价单。这种方式的优势在于:即使机器人断网、崩溃或延迟,止损订单仍能被交易所执行,从而有效防止市场闪崩导致的巨额亏损。而 off exchange(离线止损)则是由机器人在本地监测价格,一旦触发条件就发送卖出指令,这种方式依赖机器人持续运行和网络稳定,存在延迟或失败的风险。

追踪止损在静态止损的基础上增加了动态调整功能。它以初始 stoploss 值为基准,但每当价格上升时,止损位会自动上移,始终维持在最高价格的固定比例之下。例如:买入价 100$,stoploss = -10%,初始止损为 90$。当价格上涨到 102$,止损自动上移至 91.8$(102 * 0.9);若价格再涨到 105$,止损变为 94.5$。即使价格随后回落到 101$,止损仍保持在 94.5$,从而锁定部分利润。相比之下,静态止损始终固定在 90$,无法保护上涨带来的收益。