Task 002: 动态网格计算
概述
增强现有的 calculate_grid_levels() 方法,添加基于 ATR(Average True Range)的自适应网格间距计算逻辑。实现智能网格调整,使网格间距能够根据市场波动率动态调整,提高策略在不同市场环境下的适应性。
需求描述
功能需求
-
ATR 自适应网格间距
- 基于 ATR 指标计算动态网格间距
- 高波动时增大网格间距,低波动时缩小间距
- 设置最小/最大间距限制
-
布林带边界确定
- 使用布林带上下轨作为网格边界
- 动态调整网格总范围
- 防止网格过度扩张
-
网格层级优化
- 保持 20 层固定网格结构
- 智能分布网格点位
- 考虑价格精度和最小交易量
-
历史数据验证
- 基于历史波动率验证网格设置
- 避免过于激进的参数调整
- 平滑过渡机制
技术要求
- 复用现有的 TA-Lib 技术指标
- 保持与原网格计算的兼容性
- 优化计算性能,避免重复计算
验收标准
功能验收
技术验收
业务验收
实现方案
核心算法
- 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 动态网格
- 验证不同市场状态下的表现
-
性能压力测试
-
参数敏感性测试
- ATR 倍数敏感性分析
- 边界扩展影响测试
- 平滑因子效果验证
场景测试
-
震荡行情
-
趋势行情
-
极端行情
风险评估
技术风险
算法风险
- 中等风险:动态调整可能过于激进
- 缓解措施:
- 设置调整幅度限制
- 实施平滑过渡机制
- 保留静态网格回退选项
性能风险
完成定义
代码完成标准
测试完成标准
文档完成标准
时间估算
- 需求分析: 1小时
- 算法设计: 2小时
- 核心编码: 3小时
- 测试编写: 1.5小时
- 集成调试: 0.5小时
总计: 8小时
依赖关系
前置依赖
- Task 001: EnhancedGridStrategy 基础框架
后续影响
性能目标
计算性能
- 网格重新计算时间: < 200ms
- 指标计算复用率: > 80%
- 内存增量控制: < 100MB
业务性能
- 网格调整频率: 每小时最多 1 次
- 参数变化幅度: 单次调整 < 20%
- 回测收益提升: > 15% vs 固定网格
备注
- 算法设计考虑了计算效率和准确性的平衡
- 所有参数都可通过配置文件调整
- 保留了与原有网格计算的兼容接口
- 实现了渐进式增强,可分阶段验证效果
Task 002: 动态网格计算
概述
增强现有的
calculate_grid_levels()方法,添加基于 ATR(Average True Range)的自适应网格间距计算逻辑。实现智能网格调整,使网格间距能够根据市场波动率动态调整,提高策略在不同市场环境下的适应性。需求描述
功能需求
ATR 自适应网格间距
布林带边界确定
网格层级优化
历史数据验证
技术要求
验收标准
功能验收
技术验收
业务验收
实现方案
核心算法
参数配置
测试计划
单元测试
集成测试
历史数据回测
性能压力测试
参数敏感性测试
场景测试
震荡行情
趋势行情
极端行情
风险评估
技术风险
算法风险
性能风险
完成定义
代码完成标准
calculate_grid_levels_enhanced()方法实现测试完成标准
文档完成标准
时间估算
总计: 8小时
依赖关系
前置依赖
后续影响
性能目标
计算性能
业务性能
备注