myTestFreqAI/.qoder/specs/grid-strategy-optimizer.md
zhangkun9038@dingtalk.com 98f81a3b66 还是三元表达式
2026-02-06 12:45:08 +08:00

4.1 KiB
Raw Blame History

网格策略参数优化器设计方案

目标

构建一个独立的Python模拟框架通过蒙特卡洛模拟寻找网格交易策略的最优参数组合。

核心设计决策

决策项 选择 理由
交易方向 仅做多 现货市场最常见场景
评价指标 收益/最大回撤比 用户指定
资金利用率 80% 常量保留20%缓冲
搜索方式 网格搜索 结果全面,便于可视化热力图
模拟次数 500次/参数组合 平衡速度与统计稳健性
价格模型 混合场景震荡70% + 趋势30% 用户指定

文件结构

/Users/zhangkun/myTestFreqAI/grid_optimizer/
├── grid_optimizer.py      # 主文件,包含所有模块

单文件设计,简洁直接。

模块设计

1. 价格模拟器 (PriceSimulator)

class PriceSimulator:
    """生成混合场景价格序列"""
    
    def generate(self, 
                 initial_price: float = 100,
                 num_steps: int = 1000,
                 volatility: float = 0.02) -> np.ndarray:
        """
        70%概率生成震荡市(均值回归)
        30%概率生成趋势市(带漂移的随机游走)
        """

价格模型

  • 震荡市Ornstein-Uhlenbeck过程均值回归
  • 趋势市:几何布朗运动(带方向漂移)

2. 网格策略引擎 (GridStrategy)

@dataclass
class GridParams:
    num_grids: int          # 网格数量 [5, 30]
    upper_price: float      # 上沿价格(相对初始价格比例)[1.05, 1.30]
    lower_price: float      # 下沿价格(相对初始价格比例)[0.70, 0.95]
    spacing_mode: str       # 'uniform' | 'progressive'
    bet_mode: str           # 'fixed' | 'martingale'
    bet_multiplier: float   # 马丁格尔倍数 [1.0, 2.0]
    stop_loss: float        # 止损位(相对下沿)[0.90, 1.0]
    take_profit: float      # 止盈位(相对上沿)[1.0, 1.10]

class GridStrategy:
    """执行网格交易逻辑"""
    
    def run(self, prices: np.ndarray, params: GridParams) -> TradeResult:
        """
        返回: 总收益率、最大回撤、交易次数、收益回撤比
        """

交易逻辑(仅做多):

  1. 初始化N条网格线均匀或渐进分布在上下沿之间
  2. 每条网格线对应一个"格子",有独立的持仓状态
  3. 买入:价格从上向下穿过某网格线 → 该格子买入
  4. 卖出:价格从下向上穿过某网格线 → 卖出该格子下方相邻格子的持仓(赚取格差利润)
  5. 触及止损 → 全部平仓退出;触及止盈 → 全部平仓锁定利润

3. 参数优化器 (GridSearchOptimizer)

class GridSearchOptimizer:
    """网格搜索最优参数"""
    
    def __init__(self, 
                 num_simulations: int = 500,
                 capital_utilization: float = 0.80):
        ...
    
    def optimize(self) -> pd.DataFrame:
        """
        遍历参数空间每组参数运行num_simulations次模拟
        返回按收益回撤比排序的结果表
        """

搜索空间

参数 范围 步长
num_grids 5-25 5
upper_ratio 1.10-1.25 0.05
lower_ratio 0.75-0.90 0.05
spacing_mode uniform, progressive -
bet_mode fixed, martingale -
bet_multiplier 1.2, 1.5 -

4. 可视化模块

使用matplotlib生成

  1. 参数热力图:网格数量 vs 上下沿范围 → 收益回撤比
  2. 收益分布直方图:最优参数组合的收益分布
  3. 示例交易图:价格走势 + 网格线 + 买卖点标记

输出结果

  1. 控制台输出Top 10 参数组合及其指标
  2. 图表文件
    • heatmap.png - 参数热力图
    • distribution.png - 收益分布
    • example_trade.png - 示例交易

验证方法

  1. 运行 python grid_optimizer.py
  2. 检查输出的Top 10参数组合是否合理
  3. 查看生成的可视化图表

实现步骤

  1. 创建 grid_optimizer/ 目录
  2. 实现 grid_optimizer.py 主文件
  3. 运行测试验证结果