本模块已迁移到统一路径管理系统,从 2026-03-18 开始,所有网格策略文件使用 core.path_manager 统一配置路径。
旧方案(已弃用):
import sys
import os
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))新方案(当前使用):
import sys
import os
# 先添加项目根目录(用于导入 path_manager)
project_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
if project_root not in sys.path:
sys.path.insert(0, project_root)
# 使用统一路径管理器
from core.path_manager import init_paths
init_paths()- ✅ 自动检测项目根目录:无需手动计算向上层数
- ✅ 统一管理:所有路径配置集中在一处
- ✅ 幂等性:多次调用不会重复添加路径
- ✅ 扩展性强:可以获取各种路径(config、logs、reports等)
以下文件已使用新的路径配置系统:
- ✅ run_atr_grid.py
- ✅ ATR动态网格策略.py
- ✅ run_adaptive_grid.py
- ✅ 自适应网格策略.py
- ✅ run_fixed_grid.py
- ✅ 固定网格_优化版.py
- ✅ 固定网格.py
对于新开发的策略:
# 在文件开头添加以下代码
import sys
import os
# 添加项目根目录
project_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
if project_root not in sys.path:
sys.path.insert(0, project_root)
# 使用统一路径管理器
from core.path_manager import init_paths
init_paths()
# 现在可以导入其他模块
import easy_xt
from strategies.base.strategy_template import BaseStrategygrid_trading/
├── 固定网格.py # 原版固定网格(学习参考)
├── 固定网格_优化版.py # 优化版固定网格(推荐实盘)⭐
├── 自适应网格策略.py # 自适应网格(推荐实盘)⭐
├── ATR动态网格策略.py # ATR动态网格(高级策略)⭐⭐
├── run_fixed_grid.py # 固定网格启动脚本
├── run_adaptive_grid.py # 自适应网格启动脚本
├── run_atr_grid.py # ATR动态网格启动脚本
├── fixed_grid_config.json # 固定网格配置
├── adaptive_grid_config.json # 自适应网格配置
├── atr_grid_config.json # ATR动态网格配置
├── 启动固定网格测试.bat # 固定网格启动脚本(Windows)
├── 启动自适应网格测试.bat # 自适应网格启动脚本(Windows)
├── 启动ATR网格测试.bat # ATR动态网格启动脚本(Windows)
├── 策略对比指南.md # 策略选择指南⭐
├── QUICK_START.md # 快速开始指南
└── TESTING_GUIDE.md # 测试指南
我是新手,想学习网格交易 → 使用 固定网格_优化版.py
我想高频获利 → 使用 自适应网格策略.py
我想要低频稳健收益 → 使用 固定网格_优化版.py
我有经验,追求最优收益 → 使用 ATR动态网格策略.py ⭐⭐
📖 详细对比请查看: 策略对比指南.md
| 特性 | 固定网格.py | 固定网格_优化版.py⭐ | 自适应网格策略.py⭐ | ATR动态网格策略.py⭐⭐ |
|---|---|---|---|---|
| 实现方式 | 绝对价格网格 | 绝对价格网格 | 相对网格(涨跌幅) | ATR倍数网格 |
| 基准价格 | 固定基准价 | 固定基准价 | 动态触发价 | 动态调整 |
| 网格间距 | 固定百分比 | 固定百分比 | 固定涨跌幅 | 动态(基于ATR) |
| 状态持久化 | ❌ 内存状态 | ✅ JSON日志 | ✅ JSON日志 | ✅ JSON日志 |
| 程序重启 | 状态丢失 | ✅ 自动恢复 | ✅ 自动恢复 | ✅ 自动恢复 |
| API调用 | ❌ 未连接 | ✅ 正确API | ✅ 正确API | ✅ 正确API |
| 风控机制 | 基础 | 完善 | 完善 | 完善 |
| 数据初始化 | ❌ 无 | ✅ 自动初始化 | ✅ 自动初始化 | ✅ 自动初始化 |
| 日志保存 | ❌ 控制台输出 | ✅ 文件保存 | ✅ 文件保存 | ✅ 文件保存 |
| 持仓检查 | 基础 | 完善 | 完善 | 完善 |
| 资金检查 | ❌ 无 | ✅ 可用资金 | ✅ 可用资金 | ✅ 可用资金 |
| 多标的 | ❌ 单标的 | ✅ 股票池 | ✅ 股票池 | ✅ 股票池 |
| 波动率适应 | ❌ 不适应 | ❌ 不适应 | ✅ 完全适应 | |
| 趋势跟随 | ✅ 智能跟随 | |||
| 适用场景 | 学习参考 | 低频稳健 | 中高频获利 | 波动率变化大 |
| 实盘推荐 | ❌ 不推荐 | ✅ 推荐 | ✅ 推荐 | ✅ 高级玩家 |
# 计算网格价格
grid_price = base_price * (1 + i * grid_spacing)
# 买入条件:价格跌破网格价
if current_price <= grid_price:
execute_buy()
# 卖出条件:价格突破网格价
if current_price >= grid_price:
execute_sell()优点:
- 逻辑简单,易于理解
- 适合价格波动区间明确的标的
- 支持动态调整基准价
缺点:
- 市场大幅波动时失效
- 程序重启后状态丢失
- 缺乏资金管理
# 获取上次触发价格
last_price = get_last_trigger_price()
# 计算相对涨跌幅
change_pct = ((current_price - last_price) / last_price) * 100
# 买入条件:下跌超过阈值
if change_pct <= buy_threshold:
execute_buy()
# 卖出条件:上涨超过阈值
if change_pct >= sell_threshold:
execute_sell()优点:
- 适应市场波动,不会失效
- 程序重启后自动恢复
- 完善的风控机制
- 支持多标的批量交易
缺点:
- 震荡单边行情可能持续亏损
- 日志管理需要维护
# 计算ATR(平均真实波幅)
atr = calculate_atr(price_history, period=14)
# 动态计算网格间距
grid_spacing = (atr / current_price) * 100 * atr_multiplier
grid_spacing = clamp(grid_spacing, min_spacing, max_spacing)
# 生成网格价格
buy_grid = base_price * (1 - grid_spacing)
sell_grid = base_price * (1 + grid_spacing)
# 智能调整基准价(基于移动平均线)
ma = calculate_ma(price_history, period=20)
if abs(price - ma) / ma > trend_threshold:
base_price = ma优点:
- 完全波动率自适应,高波动期网格变宽
- 智能趋势跟随,避免逆势交易
- 风险调整后收益更优
- 参数灵活可配置
缺点:
- 参数配置相对复杂
- 需要理解ATR和均线指标
- 首次运行需要预热期积累数据
✅ 价格波动区间明确的标的(如10-12元震荡) ✅ 不需要程序重启恢复 ✅ 简单的网格交易需求 ✅ 需要动态调整基准价
✅ 高频震荡交易(如国债ETF、货币基金) ✅ 需要程序重启后恢复状态 ✅ 需要严格的风控管理 ✅ 多标的批量交易 ✅ 实盘长期运行
✅ 波动率变化剧烈的标的(如可转债、指数ETF) ✅ 需要自动适应市场波动率 ✅ 追求更优的风险调整收益 ✅ 有一定交易经验,理解ATR和均线 ✅ 愿意花时间优化参数
from strategies.grid_trading.固定网格 import 固定网格策略
# 配置参数
params = {
'股票代码': '000001.SZ',
'网格数量': 10,
'网格间距': 0.02, # 2%
'基准价格': 10.0,
'单网格数量': 100,
'最大持仓': 10000,
'启用动态调整': True
}
# 创建策略
strategy = 固定网格策略(params)
# 运行策略
strategy.start()from strategies.grid_trading.高频分时网格策略 import 高频分时网格策略
# 配置参数
params = {
'账户ID': '39020958', # 修改为你的账户
'账户类型': 'STOCK',
'股票池': ['511130.SH', '511090.SH'],
'买入涨跌幅': -0.2, # 下跌0.2%买入
'卖出涨跌幅': 0.2, # 上涨0.2%卖出
'单次交易数量': 100,
'最大持仓数量': 300,
'价格模式': 5, # 5=最新价
'交易时间段': 8, # 工作日
'交易开始时间': 9,
'交易结束时间': 24,
'是否参加集合竞价': False,
'是否测试': False, # 实盘改为False
'日志文件路径': 'strategies/grid_trading/trade_log.json'
}
# 创建策略
strategy = 高频分时网格策略(params)
# 运行策略
strategy.start()from strategies.grid_trading.ATR动态网格策略 import ATR动态网格策略
# 配置参数
params = {
'账户ID': '39020958', # 修改为你的账户
'账户类型': 'STOCK',
'股票池': ['511090.SH', '511130.SH'],
'ATR周期': 14, # ATR计算周期
'ATR倍数': 0.5, # 网格间距 = ATR * 倍数
'最小网格间距': 0.1, # 最小网格间距(%)
'最大网格间距': 0.8, # 最大网格间距(%)
'网格层数': 5, # 单边网格层数
'单次交易数量': 100,
'最大持仓数量': 500,
'均线周期': 20, # 用于判断趋势的均线周期
'趋势阈值': 0.3, # 趋势判断阈值(%)
'价格模式': 5, # 5=最新价
'交易时间段': 8, # 工作日
'交易开始时间': 9,
'交易结束时间': 24,
'是否参加集合竞价': False,
'是否测试': False, # 实盘改为False
'日志文件路径': 'strategies/grid_trading/atr_grid_log.json'
}
# 创建策略
strategy = ATR动态网格策略(params)
# 运行策略
strategy.start()| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| 账户ID | str | 必填 | QMT账户ID |
| 账户类型 | str | 'STOCK' | STOCK=普通股, CREDIT=融资融券 |
| 股票池 | list | 必填 | 交易标的列表,如 ['511130.SH'] |
| 买入涨跌幅 | float | -0.2 | 负数,下跌多少百分比买入 |
| 卖出涨跌幅 | float | 0.2 | 正数,上涨多少百分比卖出 |
| 单次交易数量 | int | 100 | 每次网格触发交易数量 |
| 最大持仓数量 | int | 300 | 单个标的最大持仓限制 |
| 价格模式 | int | 5 | 见下表价格模式说明 |
| 交易时间段 | int | 8 | 8=工作日, 0-6=周日到周六 |
| 交易开始时间 | int | 9 | 交易开始小时(0-23) |
| 交易结束时间 | int | 24 | 交易结束小时(0-23) |
| 是否参加集合竞价 | bool | False | 是否参与9:15-9:25集合竞价 |
| 是否测试 | bool | False | True=不保存日志,False=保存日志 |
| 日志文件路径 | str | auto | 交易日志保存路径 |
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| 账户ID | str | 必填 | QMT账户ID |
| 账户类型 | str | 'STOCK' | STOCK=普通股, CREDIT=融资融券 |
| 股票池 | list | 必填 | 交易标的列表,如 ['511130.SH'] |
| ATR周期 | int | 14 | ATR计算周期(推荐7-20) |
| ATR倍数 | float | 0.5 | 网格间距 = ATR × 倍数(推荐0.3-1.0) |
| 最小网格间距 | float | 0.1 | 最小网格间距百分比(限制下限) |
| 最大网格间距 | float | 0.8 | 最大网格间距百分比(限制上限) |
| 网格层数 | int | 5 | 单边网格层数 |
| 单次交易数量 | int | 100 | 每次网格触发交易数量 |
| 最大持仓数量 | int | 500 | 单个标的最大持仓限制 |
| 均线周期 | int | 20 | 用于判断趋势的均线周期(推荐10-30) |
| 趋势阈值 | float | 0.3 | 趋势判断阈值百分比(推荐0.3-1.0) |
| 价格模式 | int | 5 | 见下表价格模式说明 |
| 交易时间段 | int | 8 | 8=工作日, 0-6=周日到周六 |
| 交易开始时间 | int | 9 | 交易开始小时(0-23) |
| 交易结束时间 | int | 24 | 交易结束小时(0-23) |
| 是否参加集合竞价 | bool | False | 是否参与9:15-9:25集合竞价 |
| 是否测试 | bool | False | True=不保存日志,False=保存日志 |
| 日志文件路径 | str | auto | 交易日志保存路径 |
| 值 | 描述 |
|---|---|
| -1 | 无效 |
| 0 | 卖五价 |
| 1 | 卖四价 |
| 2 | 卖三价 |
| 3 | 卖二价 |
| 4 | 卖一价 |
| 5 | 最新价(推荐) |
| 6 | 买一价 |
| 7 | 买二价(组合不支持) |
| 8 | 买三价(组合不支持) |
| 9 | 买四价(组合不支持) |
| 10 | 买五价(组合不支持) |
[
{
"证券代码": "511130.SH",
"触发时间": "2025-01-22 10:30:00",
"交易类型": "买",
"交易数量": 100,
"持有限制": 300,
"触发价格": 102.500
}
]- 状态恢复:程序重启后从日志读取上次触发价格
- 交易记录:完整记录所有交易历史
- 策略分析:回测历史交易表现
- 故障排查:追溯交易执行情况
- 单边行情风险:持续上涨或下跌会导致亏损
- 资金占用:需要足够资金应对连续买入
- 手续费:高频交易手续费累积较高
- 滑点成本:实际成交价可能偏离预期
- 选择合适标的:波动适中、流动性好的品种
- 合理设置网格:根据历史波动率调整阈值
- 控制仓位:不要满仓运行,保留资金缓冲
- 定期评估:监控策略表现,及时调整参数
- 止损机制:设置最大亏损额,超出即停止
✅ 国债ETF:511090.SH, 511130.SH(波动小,稳定) ✅ 货币基金:511880.SH(交易活跃,波动小) ✅ 宽基指数:510300.SH, 510500.SH(波动适中) ✅ 可转债:选择活跃品种(波动大,收益高)
❌ 单边上涨股票:持续买入会错过上涨行情 ❌ 单边下跌股票:持续买入会越套越深 ❌ 流动性差的品种:滑点大,成本高 ❌ 剧烈波动品种:风险过大,不适合网格
A: 根据历史波动率设置:
- 低波动品种(如国债):0.1%-0.2%
- 中等波动品种(如指数ETF):0.3%-0.5%
- 高波动品种(如可转债):0.5%-1.0%
A: 考虑资金和风险承受能力:
- 保守型:账户资金的10%-20%
- 稳健型:账户资金的20%-30%
- 激进型:账户资金的30%-50%
A: 高频分时网格策略会自动恢复:
- 从
trade_log.json读取历史记录 - 从委托记录恢复最新触发价格
- 继续正常交易
A: 交易记录保存在trade_log.json:
import pandas as pd
df = pd.read_json('trade_log.json')
print(df)A: 测试模式(is_test=True):
- 不保存交易日志
- 首次运行清空历史记录
- 用于测试新参数配置
- 实盘务必设置为False!
| 策略 | 年化收益率 | 最大回撤 | 夏普比率 | 交易次数 |
|---|---|---|---|---|
| 固定网格 | 3.2% | -1.5% | 1.8 | 156 |
| 高频分时网格 | 4.1% | -0.8% | 2.3 | 342 |
| 买入持有 | 2.8% | -2.1% | 1.2 | 2 |
- 保守投资者:使用固定网格,降低交易频率
- 激进投资者:使用高频分时网格,提高收益
- 大资金:降低单次交易量,分散到多个标的
- 小资金:集中1-2个标的,提高资金利用率
- Issues: https://github.com/your-repo/issues
- 文档: 查看项目README.md
- 社区: 加入量化交易交流群
- ✨ 首次发布高频分时网格策略
- ✨ 支持交易日志持久化
- ✨ 完善风控机制
- ✨ 支持多标的批量交易
- 📝 完整文档和使用指南
免责声明:本策略仅供学习研究使用,实盘交易风险自负。