DEV Community

Henry Lin
Henry Lin

Posted on

第 14 课:Freqtrade风险管理与资金管理

第 14 课:风险管理与资金管理

⏱ 课时:2 小时
🎯 学习目标:掌握风险控制方法
📚 难度:⭐⭐⭐ 策略优化


📖 课程概览

再好的策略,如果没有良好的风险管理,也可能导致巨额亏损。本课将教你建立完整的风险管理体系,包括仓位管理、止损策略、资金分配和风险控制机制。


14.1 仓位管理

仓位管理决定了每笔交易投入多少资金,是风险控制的第一道防线。

1. 固定金额法(推荐新手)

原理:每笔交易固定投入相同金额。

配置

{
  "stake_amount": 100,  // 每笔固定 100 USDT
  "max_open_trades": 3   // 最多同时 3 
}
Enter fullscreen mode Exit fullscreen mode

示例

账户总资金:$1,000
每笔固定:$100
最大持仓:3 笔

最大风险敞口:$300(30%)
Enter fullscreen mode Exit fullscreen mode

优点

  • ✅ 简单直接
  • ✅ 风险可控
  • ✅ 适合新手

缺点

  • ⚠️ 未考虑波动率
  • ⚠️ 资金利用率固定
  • ⚠️ 不会随资金增长调整

适用场景

  • 新手初期
  • 小资金账户(< $5,000)
  • 策略测试阶段

2. 固定百分比法

原理:每笔交易投入总资金的固定百分比。

配置

{
  "stake_amount": "unlimited",
  "tradable_balance_ratio": 1.0,  // 使用100%可用资金
  "stake_percentage": 20,  // 每笔使用20%
  "max_open_trades": 3
}
Enter fullscreen mode Exit fullscreen mode

示例

账户总资金:$1,000
每笔比例:20%
最大持仓:3 笔

第1笔:$1,000 × 20% = $200
第2笔:$800 × 20% = $160
第3笔:$640 × 20% = $128

总投入:$488(48.8%)
Enter fullscreen mode Exit fullscreen mode

优点

  • ✅ 随资金增长自动调整
  • ✅ 复利效应
  • ✅ 更灵活

缺点

  • ⚠️ 计算复杂
  • ⚠️ 连续亏损时仓位下降快
  • ⚠️ 需要仔细监控

适用场景

  • 有经验的交易者
  • 资金 > $5,000
  • 追求复利增长

3. 波动率调整法

原理:根据市场波动率动态调整仓位,高波动 = 小仓位。

计算方法

# 基础仓位
base_position = 1000  # $1,000

# 计算 ATR(平均真实波动幅度)
atr = dataframe['atr'].iloc[-1]
avg_atr = dataframe['atr'].rolling(20).mean().iloc[-1]

# 调整系数
volatility_ratio = avg_atr / atr

# 调整后仓位
adjusted_position = base_position * min(volatility_ratio, 1.5)
Enter fullscreen mode Exit fullscreen mode

示例

基础仓位:$1,000
当前 ATR:$50(波动大)
平均 ATR:$30

调整系数 = 30 / 50 = 0.6
调整后仓位 = $1,000 × 0.6 = $600
Enter fullscreen mode Exit fullscreen mode

优点

  • ✅ 自动适应市场波动
  • ✅ 高波动时保护资金
  • ✅ 低波动时充分利用资金

缺点

  • ❌ 实施复杂
  • ❌ 需要自定义代码
  • ❌ 不适合新手

4. Kelly 公式法(高级)

原理:根据策略胜率和盈亏比计算最优仓位。

Kelly 公式

Kelly % = (胜率 × 盈亏比 - 亏损率) / 盈亏比

其中:
  胜率 = 盈利交易数 / 总交易数
  盈亏比 = 平均盈利 / |平均亏损|
  亏损率 = 1 - 胜率
Enter fullscreen mode Exit fullscreen mode

计算示例

胜率:60%(0.6)
平均盈利:+$150
平均亏损:-$100
盈亏比:1.5

Kelly % = (0.6 × 1.5 - 0.4) / 1.5
        = (0.9 - 0.4) / 1.5
        = 0.5 / 1.5
        = 0.333
        = 33.3%
Enter fullscreen mode Exit fullscreen mode

实际应用

Full Kelly(激进):33.3%
Half Kelly(推荐):16.7%
Quarter Kelly(保守):8.3%

账户:$10,000
Half Kelly 仓位:$10,000 × 16.7% = $1,670
Enter fullscreen mode Exit fullscreen mode

优点

  • ✅ 数学最优
  • ✅ 最大化长期收益

缺点

  • ❌ 假设参数稳定(实际会变化)
  • ❌ Full Kelly 风险极高
  • ❌ 需要大量历史数据

建议

  • ⚠️ 只使用 Half Kelly 或 Quarter Kelly
  • ⚠️ 定期重新计算
  • ⚠️ 设置最大仓位上限(如 25%)

仓位管理对比

方法 复杂度 风险 收益潜力 适合人群
固定金额 新手
固定百分比 ⭐⭐ 中高 进阶
波动率调整 ⭐⭐⭐⭐ 高级
Kelly 公式 ⭐⭐⭐⭐⭐ 最高 专业

推荐配置

新手:固定金额 $100,最多 3 笔
进阶:固定比例 15-20%,最多 5 笔
高级:Half Kelly,最多 10 笔
Enter fullscreen mode Exit fullscreen mode

14.2 止损策略

止损是保护资金的最后一道防线。

1. 固定百分比止损

原理:价格跌破买入价一定比例就平仓。

配置

stoploss = -0.05  # 5% 止损
Enter fullscreen mode Exit fullscreen mode

适用

低波动币(BTC/ETH):-3% ~ -5%
中波动币:-5% ~ -8%
高波动币:-8% ~ -12%
Enter fullscreen mode Exit fullscreen mode

优点

  • ✅ 简单明了
  • ✅ 风险确定

缺点

  • ❌ 不考虑市场波动
  • ❌ 容易被正常波动止损

2. 跟踪止损(Trailing Stop)

原理:价格上涨时止损线也上移,锁定利润。

配置

stoploss = -0.10  # 初始止损 10%

# 跟踪止损配置
trailing_stop = True
trailing_stop_positive = 0.01  # 盈利 1% 后启用
trailing_stop_positive_offset = 0.03  # 止损距当前价 3%
trailing_only_offset_is_reached = True
Enter fullscreen mode Exit fullscreen mode

工作流程

买入价:$100

情况 1:价格跌到 $90 → 触发初始止损(-10%)

情况 2:价格涨到 $101(+1%)→ 启用跟踪止损
  - 止损线设在 $101 - 3% = $97.97

价格继续涨到 $110 → 止损线上移到 $106.70
价格回落到 $106.69 → 触发止损,锁定 +6.69% 利润 ✅
Enter fullscreen mode Exit fullscreen mode

优点

  • ✅ 自动锁定利润
  • ✅ 让利润奔跑
  • ✅ 减少利润回吐

缺点

  • ⚠️ 可能过早退出
  • ⚠️ 需要合理设置参数

参数调整建议

激进型(捕捉更多利润):
  trailing_stop_positive = 0.005  # 0.5% 启用
  trailing_stop_positive_offset = 0.02  # 2% 距离

保守型(快速锁定利润):
  trailing_stop_positive = 0.02  # 2% 启用
  trailing_stop_positive_offset = 0.05  # 5% 距离
Enter fullscreen mode Exit fullscreen mode

3. ATR 动态止损

原理:根据市场波动率动态调整止损。

计算方法

def custom_stoploss(self, pair, trade, current_time, current_rate, current_profit, **kwargs):
    dataframe, _ = self.dp.get_analyzed_dataframe(pair, self.timeframe)
    last_candle = dataframe.iloc[-1]

    # 获取 ATR
    atr = last_candle['atr']
    entry_price = trade.open_rate

    # 动态止损:entry_price - 2× ATR
    stop_price = entry_price - (2 * atr)
    stop_loss = (stop_price - entry_price) / entry_price

    return stop_loss
Enter fullscreen mode Exit fullscreen mode

示例

买入价:$100
ATR:$3

止损价 = $100 - (2 × $3) = $94
止损比例 = -6%

如果 ATR 增大到 $5:
止损价 = $100 - (2 × $5) = $90
止损比例 = -10%(自动放宽)
Enter fullscreen mode Exit fullscreen mode

优点

  • ✅ 自适应市场波动
  • ✅ 避免被正常波动止损
  • ✅ 高波动时自动放宽

缺点

  • ❌ 需要编码实现
  • ❌ 不适合新手

4. 时间止损

原理:持仓超过一定时间未盈利就平仓。

实现

def custom_exit(self, pair, trade, current_time, current_rate, current_profit, **kwargs):
    # 持仓超过 24 小时且未盈利,强制退出
    if (current_time - trade.open_date_utc).total_seconds() > 86400:
        if current_profit < 0.02:  # 盈利 < 2%
            return 'holding_too_long'
Enter fullscreen mode Exit fullscreen mode

适用场景

  • 避免资金长时间占用
  • 防止横盘震荡
  • 提高资金周转率

14.3 止盈策略

1. ROI 梯度止盈

原理:根据持仓时间设置不同的止盈目标。

配置

minimal_roi = {
    "0": 0.10,    # 立即达到 10% 就退出
    "60": 0.05,   # 60 分钟后,5% 退出
    "120": 0.03,  # 120 分钟后,3% 退出
    "240": 0.01   # 240 分钟后,1% 退出
}
Enter fullscreen mode Exit fullscreen mode

逻辑

买入后 30 分钟,涨到 11% → 立即退出(触发 0 分钟的 10%)
买入后 90 分钟,涨到 6% → 立即退出(触发 60 分钟的 5%)
买入后 150 分钟,涨到 3.5% → 立即退出(触发 120 分钟的 3%)
买入后 300 分钟,涨到 1.2% → 立即退出(触发 240 分钟的 1%)
Enter fullscreen mode Exit fullscreen mode

调整建议

激进型(短线):
minimal_roi = {
    "0": 0.05,
    "30": 0.03,
    "60": 0.02,
    "120": 0.01
}

保守型(波段):
minimal_roi = {
    "0": 0.20,
    "240": 0.10,
    "720": 0.05,
    "1440": 0.02
}
Enter fullscreen mode Exit fullscreen mode

2. 分批止盈

原理:达到不同目标分批卖出,平衡收益和风险。

策略

买入 100 个单位:

第 1 批(30%):+5% 时卖出 30 个
第 2 批(30%):+10% 时卖出 30 个
第 3 批(40%):跟踪止损或最终目标
Enter fullscreen mode Exit fullscreen mode

效果

情况 1:涨到 +5% 后回落
  - 卖出 30%,锁定部分利润
  - 剩余 70% 继续持有

情况 2:涨到 +15%
  - 第 1 批:+5% 卖出 30%
  - 第 2 批:+10% 卖出 30%
  - 第 3 批:+15% 卖出 40%
  - 平均卖出价:(5×0.3 + 10×0.3 + 15×0.4) = 10.5%
Enter fullscreen mode Exit fullscreen mode

注意

  • ⚠️ Freqtrade 默认不支持分批止盈
  • ⚠️ 需要通过自定义代码实现

14.4 最大持仓数控制

持仓数量对风险的影响

最大持仓数 单笔仓位 总风险敞口 风险分散 推荐场景
1 100% 100% 测试阶段
3 33% 100% 新手
5 20% 100% 进阶
10 10% 100% 高级
20 5% 100% 很高 专业

配置建议

{
  "max_open_trades": 3,  // 最多 3 笔同时持仓

  // 单个交易对最多持仓数
  "max_entry_position_adjustment": 0  // 0 = 不加仓
}
Enter fullscreen mode Exit fullscreen mode

场景分析

场景 1:资金 $1,000,最多 3 笔

每笔:$333
总风险(5% 止损):$1,000 × 5% × 3 = $150(15%)
Enter fullscreen mode Exit fullscreen mode

场景 2:资金 $1,000,最多 10 笔

每笔:$100
总风险(5% 止损):$1,000 × 5% × 10 = $500(50%)⚠️ 过高!
Enter fullscreen mode Exit fullscreen mode

结论

  • ✅ 持仓数越多,分散越好
  • ❌ 但总风险敞口不能超过 30%
  • 💡 需要平衡持仓数和单笔仓位

14.5 资金分配方法

1. 等权重分配

原理:所有策略/交易对分配相同资金。

配置

总资金:$10,000
策略数:3 个
每个策略:$3,333
Enter fullscreen mode Exit fullscreen mode

优点

  • ✅ 简单直接
  • ✅ 风险均匀

缺点

  • ❌ 未考虑策略表现差异

2. 按评分分配

原理:根据策略评分分配资金,高分策略获得更多资金。

计算方法

策略 A 评分:9.0
策略 B 评分:8.0
策略 C 评分:7.0
总分:24.0

策略 A 分配:$10,000 × (9.0 / 24.0) = $3,750
策略 B 分配:$10,000 × (8.0 / 24.0) = $3,333
策略 C 分配:$10,000 × (7.0 / 24.0) = $2,917
Enter fullscreen mode Exit fullscreen mode

优点

  • ✅ 表现好的策略获得更多资金
  • ✅ 合理优化收益

缺点

  • ⚠️ 评分可能过时
  • ⚠️ 需要定期重新评估

3. 核心-卫星配置

原理:将资金分为核心资产(稳健)和卫星资产(激进)。

配置

总资金:$10,000

核心资产(70%):$7,000
  - 高评分策略 A:$4,000
  - 高评分策略 B:$3,000

卫星资产(30%):$3,000
  - 测试策略 C:$1,500
  - 测试策略 D:$1,500
Enter fullscreen mode Exit fullscreen mode

优点

  • ✅ 平衡收益和风险
  • ✅ 允许尝试新策略
  • ✅ 核心资产保护本金

14.6 保护机制

1. 冷却期(Cooldown Period)

原理:止损后休息一段时间,避免报复性交易。

配置

@property
def protections(self):
    return [
        {
            "method": "CooldownPeriod",
            "stop_duration_candles": 5  # 止损后休息 5 根 K 线
        }
    ]
Enter fullscreen mode Exit fullscreen mode

2. 最大回撤保护

原理:回撤超过阈值时暂停交易。

配置

{
    "method": "MaxDrawdown",
    "lookback_period_candles": 48,  # 48 小时内
    "trade_limit": 10,  # 至少 10 笔交易
    "stop_duration_candles": 24,  # 暂停 24 小时
    "max_allowed_drawdown": 0.10  # 最大回撤 10%
}
Enter fullscreen mode Exit fullscreen mode

3. 连续亏损保护

配置

{
    "method": "StoplossGuard",
    "lookback_period_candles": 12,  # 12 小时内
    "trade_limit": 3,  # 3 笔交易
    "stop_duration_candles": 6,  # 暂停 6 小时
    "required_profit": -0.05  # 总亏损 > 5%
}
Enter fullscreen mode Exit fullscreen mode

💡 实践任务

任务 1:设计仓位管理方案

根据你的资金量和风险承受能力,选择合适的仓位管理方法:

我的账户资金:$_______
风险承受能力:☐ 保守  ☐ 平衡  ☐ 激进

选择的方法:☐ 固定金额  ☐ 固定百分比  ☐ Kelly公式

具体配置:
  每笔投入:$_______
  最大持仓数:_______ 笔
  总风险敞口:_______%
Enter fullscreen mode Exit fullscreen mode

任务 2:测试不同止损策略

对比固定止损 vs 跟踪止损的效果:

# 策略 A:固定止损 5%
# 修改策略,设置 stoploss = -0.05
freqtrade backtesting -c config.json --strategy StrategyFixedStop

# 策略 B:跟踪止损
# 修改策略,设置跟踪止损参数
freqtrade backtesting -c config.json --strategy StrategyTrailingStop
Enter fullscreen mode Exit fullscreen mode

对比结果。

任务 3:制定完整风险管理计划

# 我的风险管理计划

## 1. 仓位管理
- 方法:_______
- 每笔投入:_______
- 最大持仓:_______

## 2. 止损设置
- 固定止损:_______%
- 跟踪止损:☐ 启用  ☐ 不启用
- 时间止损:_______ 小时

## 3. 止盈设置
- ROI配置:_______
- 目标收益:_______%

## 4. 保护机制
- 冷却期:_______ 根K线
- 最大回撤:_______%
- 每日亏损限制:_______%

## 5. 资金分配
- 策略A:_______%
- 策略B:_______%
- 预留资金:_______%
Enter fullscreen mode Exit fullscreen mode

📌 核心要点总结

  1. 仓位管理是风险控制的基础:新手用固定金额,进阶用固定百分比
  2. 止损是保护本金的最后防线:必须设置,不能心存侥幸
  3. 跟踪止损锁定利润:让利润奔跑,及时止损
  4. 总风险敞口不超过30%:同时持仓过多会放大风险
  5. 建立保护机制:冷却期、回撤保护避免连续亏损
  6. 风险管理 > 策略选择:好的风险管理能让平庸策略盈利

➡️ 下一课预告

第 15 课:策略组合与分散

在下一课中,我们将学习:

  • 如何构建多策略投资组合
  • 策略相关性分析
  • 资金在多策略间的分配
  • 动态再平衡方法

🎯 学习检验标准

  • ✅ 理解不同仓位管理方法
  • ✅ 会设置止损和止盈
  • ✅ 能制定完整的风险管理计划
  • ✅ 掌握保护机制的使用

完成这些任务后,你已经具备了完整的风险管理能力!准备进入最后一课!🛡️

Top comments (0)