4.1 KiB
4.1 KiB
网格策略参数优化器设计方案
目标
构建一个独立的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:
"""
返回: 总收益率、最大回撤、交易次数、收益回撤比
"""
交易逻辑(仅做多):
- 初始化N条网格线,均匀或渐进分布在上下沿之间
- 每条网格线对应一个"格子",有独立的持仓状态
- 买入:价格从上向下穿过某网格线 → 该格子买入
- 卖出:价格从下向上穿过某网格线 → 卖出该格子下方相邻格子的持仓(赚取格差利润)
- 触及止损 → 全部平仓退出;触及止盈 → 全部平仓锁定利润
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生成:
- 参数热力图:网格数量 vs 上下沿范围 → 收益回撤比
- 收益分布直方图:最优参数组合的收益分布
- 示例交易图:价格走势 + 网格线 + 买卖点标记
输出结果
- 控制台输出:Top 10 参数组合及其指标
- 图表文件:
heatmap.png- 参数热力图distribution.png- 收益分布example_trade.png- 示例交易
验证方法
- 运行
python grid_optimizer.py - 检查输出的Top 10参数组合是否合理
- 查看生成的可视化图表
实现步骤
- 创建
grid_optimizer/目录 - 实现
grid_optimizer.py主文件 - 运行测试验证结果