7.3 KiB
7.3 KiB
ATR策略实现文档
一、概述
基于ATR(平均真实波幅)的动态止损止盈策略,根据市场波动自动调整止损止盈距离,避免被正常波动触发止损,同时保持合理的盈亏比。
二、核心原理
2.1 ATR指标
ATR(Average True Range)是衡量市场波动性的技术指标,计算公式:
True Range (TR) = max(
High - Low,
|High - Previous Close|,
|Low - Previous Close|
)
ATR = Average(TR over N periods)
ATR值越大,市场波动越大;ATR值越小,市场波动越小。
2.2 ATR策略逻辑
止损计算:
- 止损距离 = ATR × ATR止损倍数(默认1.8倍)
- 止损价格 = 入场价 ± 止损距离(做多减,做空加)
止盈计算:
- 方法1(优先):止盈距离 = 止损距离 × 盈亏比(默认3.0)
- 方法2(备选):止盈距离 = ATR × ATR止盈倍数(默认3.0倍)
优势:
- 市场平静时,ATR小,止损紧,保护利润
- 市场波动大时,ATR大,止损宽,避免被正常波动触发
- 始终保持在"正常波动"之外
三、实现架构
3.1 核心模块
trading_system/atr_strategy.py
ATR策略核心类,提供以下功能:
calculate_stop_loss(): 计算基于ATR的止损价格calculate_take_profit(): 计算基于ATR的止盈价格calculate_atr_levels(): 计算完整的ATR止损止盈方案calculate_atr_from_klines(): 从K线数据计算ATR
trading_system/indicators.py
技术指标计算模块,增强功能:
calculate_atr(): 计算ATR绝对值calculate_atr_percent(): 计算ATR百分比(新增)
trading_system/risk_manager.py
风险管理模块,集成ATR策略:
- 在
get_stop_loss_price()中优先使用ATR止损 - 在
get_take_profit_price()中优先使用ATR止盈 - 支持止损距离传递,用于盈亏比计算
3.2 数据流
K线数据 → 计算ATR → ATR策略类 → 计算止损止盈 → RiskManager → 最终价格
四、配置参数
4.1 基础配置
| 参数 | 默认值 | 说明 |
|---|---|---|
USE_ATR_STOP_LOSS |
True |
是否启用ATR动态止损 |
ATR_STOP_LOSS_MULTIPLIER |
1.8 |
ATR止损倍数(1.5-2倍) |
ATR_TAKE_PROFIT_MULTIPLIER |
3.0 |
ATR止盈倍数(3倍ATR) |
RISK_REWARD_RATIO |
3.0 |
盈亏比(止损距离的倍数) |
ATR_PERIOD |
14 |
ATR计算周期 |
4.2 高级配置(可选)
| 参数 | 默认值 | 说明 |
|---|---|---|
USE_DYNAMIC_ATR_MULTIPLIER |
False |
是否根据波动率动态调整ATR倍数 |
ATR_MULTIPLIER_MIN |
1.5 |
动态ATR倍数最小值 |
ATR_MULTIPLIER_MAX |
2.5 |
动态ATR倍数最大值 |
4.3 配置建议
保守策略:
ATR_STOP_LOSS_MULTIPLIER: 1.5RISK_REWARD_RATIO: 2.5
平衡策略(推荐):
ATR_STOP_LOSS_MULTIPLIER: 1.8RISK_REWARD_RATIO: 3.0
激进策略:
ATR_STOP_LOSS_MULTIPLIER: 2.0RISK_REWARD_RATIO: 3.5
五、使用示例
5.1 基本使用
from trading_system.atr_strategy import ATRStrategy
# 初始化ATR策略
atr_strategy = ATRStrategy()
# 计算止损
stop_loss_price, stop_distance, details = atr_strategy.calculate_stop_loss(
entry_price=50000.0,
side='BUY',
atr=1500.0, # ATR绝对值
atr_percent=0.03 # 或ATR百分比(3%)
)
# 计算止盈(基于止损距离和盈亏比)
take_profit_price, take_profit_distance, tp_details = atr_strategy.calculate_take_profit(
entry_price=50000.0,
side='BUY',
stop_distance=stop_distance, # 使用止损距离
use_risk_reward_ratio=True
)
5.2 从K线计算ATR
from trading_system.atr_strategy import ATRStrategy
# 从K线数据计算ATR
atr, atr_percent, current_price = ATRStrategy.calculate_atr_from_klines(
klines=klines_data,
period=14
)
# 使用ATR计算止损止盈
result = atr_strategy.calculate_atr_levels(
entry_price=current_price,
side='BUY',
atr=atr,
atr_percent=atr_percent
)
5.3 在RiskManager中使用
# RiskManager会自动使用ATR策略(如果启用)
stop_loss_price = risk_manager.get_stop_loss_price(
entry_price=50000.0,
side='BUY',
quantity=0.1,
leverage=10,
atr=1500.0 # 传递ATR值
)
# 计算止盈时,传递止损距离用于盈亏比计算
take_profit_price = risk_manager.get_take_profit_price(
entry_price=50000.0,
side='BUY',
quantity=0.1,
leverage=10,
atr=1500.0,
stop_distance=2700.0 # 止损距离(用于盈亏比计算)
)
六、计算示例
6.1 示例场景
假设:
- 入场价:50000 USDT
- ATR:1500 USDT(3%)
- ATR止损倍数:1.8
- 盈亏比:3.0
止损计算:
止损距离 = 1500 × 1.8 = 2700 USDT
止损百分比 = 3% × 1.8 = 5.4%
止损价(做多)= 50000 - 2700 = 47300 USDT
止盈计算(基于盈亏比):
止盈距离 = 2700 × 3.0 = 8100 USDT
止盈百分比 = 5.4% × 3.0 = 16.2%
止盈价(做多)= 50000 + 8100 = 58100 USDT
6.2 不同市场波动情况
低波动市场(ATR = 1%):
- 止损距离:1.8%
- 止盈距离:5.4%
- 止损更紧,保护利润
高波动市场(ATR = 5%):
- 止损距离:9%
- 止盈距离:27%
- 止损更宽,避免被正常波动触发
七、策略优势
7.1 自适应市场波动
- 市场平静时,止损自动收紧
- 市场波动大时,止损自动放宽
- 始终保持在正常波动范围之外
7.2 保持合理盈亏比
- 基于止损距离计算止盈,确保盈亏比一致
- 默认3:1盈亏比,长期盈利概率高
7.3 减少假信号
- 避免被正常市场波动触发止损
- 提高交易胜率和盈利能力
八、回退机制
如果ATR不可用或计算失败,系统会自动回退到:
- 基于保证金的固定百分比止损
- 基于价格百分比的最小保护
- 技术分析止损(如果可用)
系统会从所有候选价格中选择最宽松的(做多取最大,做空取最小),确保止损不会过紧。
九、动态调整(可选)
如果启用USE_DYNAMIC_ATR_MULTIPLIER,系统会根据市场波动率动态调整ATR倍数:
- 波动率低(1-2%):使用最小倍数(1.5)
- 波动率中(3-5%):使用中等倍数(1.8-2.0)
- 波动率高(6-10%):使用最大倍数(2.5)
这样可以进一步优化止损距离,在低波动时更紧,高波动时更宽。
十、注意事项
- ATR计算需要足够的历史数据:至少需要
ATR_PERIOD + 1根K线 - ATR值会随市场变化:建议定期更新ATR值
- 不同周期ATR不同:建议使用与交易周期一致的K线数据计算ATR
- 极端市场情况:在极端波动时,ATR可能无法及时反映,需要结合其他指标
十一、相关文件
trading_system/atr_strategy.py: ATR策略核心实现trading_system/indicators.py: ATR计算函数trading_system/risk_manager.py: 风险管理集成trading_system/config.py: 配置参数backend/config_manager.py: 配置管理器ATR.md: ATR策略需求文档
十二、未来优化方向
- 多周期ATR:结合不同周期的ATR值
- ATR趋势:考虑ATR的变化趋势,预测未来波动
- ATR百分比分位数:使用ATR的历史分位数判断当前波动水平
- 自适应盈亏比:根据市场状态动态调整盈亏比