-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
Task 002: 动态网格计算
概述
增强现有的 calculate_grid_levels() 方法,添加基于 ATR(Average True Range)的自适应网格间距计算逻辑。实现智能网格调整,使网格间距能够根据市场波动率动态调整,提高策略在不同市场环境下的适应性。
需求描述
功能需求
-
ATR 自适应网格间距
- 基于 ATR 指标计算动态网格间距
- 高波动时增大网格间距,低波动时缩小间距
- 设置最小/最大间距限制
-
布林带边界确定
- 使用布林带上下轨作为网格边界
- 动态调整网格总范围
- 防止网格过度扩张
-
网格层级优化
- 保持 20 层固定网格结构
- 智能分布网格点位
- 考虑价格精度和最小交易量
-
历史数据验证
- 基于历史波动率验证网格设置
- 避免过于激进的参数调整
- 平滑过渡机制
技术要求
- 复用现有的 TA-Lib 技术指标
- 保持与原网格计算的兼容性
- 优化计算性能,避免重复计算
验收标准
功能验收
- ATR 自适应间距计算准确
- 布林带边界设置合理
- 网格层级分布均匀
- 参数调整平滑过渡
技术验收
- 计算延迟 < 200ms
- 内存增量 < 100MB
- 指标计算复用率 > 80%
- 单元测试覆盖率 > 95%
业务验收
- 震荡市网格密度合理
- 趋势市网格适应性好
- 极端行情下不出现异常
- 回测结果优于固定网格
实现方案
核心算法
- ATR 自适应间距计算
def calculate_adaptive_grid_spacing(self, dataframe: DataFrame) -> float:
"""
基于 ATR 计算动态网格间距
公式:
base_spacing = ATR(14) * atr_multiplier
adjusted_spacing = max(min_spacing, min(base_spacing, max_spacing))
"""
atr = ta.ATR(dataframe, timeperiod=14)
current_atr = atr.iloc[-1]
# 基础间距 = ATR * 倍数
base_spacing = current_atr * self.atr_multiplier.value
# 应用边界限制
min_spacing = self.min_grid_spacing.value
max_spacing = self.max_grid_spacing.value
return max(min_spacing, min(base_spacing, max_spacing))- 布林带边界计算
def calculate_dynamic_boundaries(self, dataframe: DataFrame) -> tuple:
"""
基于布林带计算网格边界
返回: (lower_bound, upper_bound)
"""
bb_upper, bb_middle, bb_lower = ta.BBANDS(
dataframe['close'],
timeperiod=20,
nbdevup=2,
nbdevdn=2
)
# 边界扩展系数
expansion = self.boundary_expansion.value
current_price = dataframe['close'].iloc[-1]
lower_bound = bb_lower.iloc[-1] * (1 - expansion)
upper_bound = bb_upper.iloc[-1] * (1 + expansion)
return lower_bound, upper_bound- 增强的网格层级计算
def calculate_grid_levels_enhanced(self, dataframe: DataFrame) -> DataFrame:
"""
增强版网格层级计算
集成:
- ATR 自适应间距
- 布林带动态边界
- 智能层级分布
"""
# 获取动态参数
spacing = self.calculate_adaptive_grid_spacing(dataframe)
lower_bound, upper_bound = self.calculate_dynamic_boundaries(dataframe)
# 计算网格层级
grid_range = upper_bound - lower_bound
level_spacing = grid_range / (self.grid_levels - 1)
levels = []
for i in range(self.grid_levels):
level_price = lower_bound + (i * level_spacing)
levels.append({
'level': i,
'price': level_price,
'spacing': spacing,
'type': 'dynamic'
})
return pd.DataFrame(levels)参数配置
# ATR 相关参数
atr_period = IntParameter(10, 20, default=14, space="buy")
atr_multiplier = DecimalParameter(0.5, 3.0, default=1.5, space="buy")
# 网格间距限制
min_grid_spacing = DecimalParameter(0.001, 0.01, default=0.003, space="buy")
max_grid_spacing = DecimalParameter(0.02, 0.1, default=0.05, space="buy")
# 边界扩展参数
boundary_expansion = DecimalParameter(0.0, 0.2, default=0.05, space="buy")
# 平滑过渡参数
smoothing_factor = DecimalParameter(0.1, 0.5, default=0.2, space="buy")测试计划
单元测试
- ATR 计算测试
def test_atr_adaptive_spacing():
# 测试不同 ATR 值下的间距计算
# 验证边界限制
# 测试异常数据处理- 布林带边界测试
def test_dynamic_boundaries():
# 测试布林带计算准确性
# 验证边界扩展逻辑
# 测试极端价格情况- 网格层级测试
def test_grid_levels_enhanced():
# 测试层级分布均匀性
# 验证价格精度
# 测试边界情况集成测试
-
历史数据回测
- 使用 3 个月历史数据
- 对比固定网格 vs 动态网格
- 验证不同市场状态下的表现
-
性能压力测试
- 大量 K 线数据处理
- 并发计算测试
- 内存使用监控
-
参数敏感性测试
- ATR 倍数敏感性分析
- 边界扩展影响测试
- 平滑因子效果验证
场景测试
-
震荡行情
- 横盘整理期间
- 小幅波动场景
- 验证网格密度合理性
-
趋势行情
- 单边上涨/下跌
- 突破行情
- 验证网格适应性
-
极端行情
- 暴涨暴跌
- 闪崩场景
- 验证风险控制
风险评估
技术风险
- 中等风险:复杂的数值计算逻辑
- 缓解措施:
- 充分的边界测试
- 参数合理性验证
- 异常情况处理
算法风险
- 中等风险:动态调整可能过于激进
- 缓解措施:
- 设置调整幅度限制
- 实施平滑过渡机制
- 保留静态网格回退选项
性能风险
- 低风险:额外的指标计算开销
- 缓解措施:
- 复用现有指标计算
- 实施计算结果缓存
- 优化计算频率
完成定义
代码完成标准
-
calculate_grid_levels_enhanced()方法实现 - ATR 自适应间距算法完整
- 布林带边界计算准确
- 参数配置合理
测试完成标准
- 所有单元测试通过(覆盖率 > 95%)
- 集成测试验证通过
- 历史数据回测完成
- 性能测试达标
文档完成标准
- 算法原理文档
- 参数配置说明
- 使用示例代码
- 测试报告
时间估算
- 需求分析: 1小时
- 算法设计: 2小时
- 核心编码: 3小时
- 测试编写: 1.5小时
- 集成调试: 0.5小时
总计: 8小时
依赖关系
前置依赖
- Task 001: EnhancedGridStrategy 基础框架
- 需要基础类结构
- 需要参数定义接口
后续影响
- Task 003: 市场状态识别
- 提供网格计算基础
- 影响状态切换逻辑
性能目标
计算性能
- 网格重新计算时间: < 200ms
- 指标计算复用率: > 80%
- 内存增量控制: < 100MB
业务性能
- 网格调整频率: 每小时最多 1 次
- 参数变化幅度: 单次调整 < 20%
- 回测收益提升: > 15% vs 固定网格
备注
- 算法设计考虑了计算效率和准确性的平衡
- 所有参数都可通过配置文件调整
- 保留了与原有网格计算的兼容接口
- 实现了渐进式增强,可分阶段验证效果
Metadata
Metadata
Assignees
Labels
No labels