Skip to content

Latest commit

 

History

History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

网格交易策略对比与使用指南

🔧 路径配置说明(重要)

本模块已迁移到统一路径管理系统,从 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 BaseStrategy

📁 文件清单

grid_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
风控机制 基础 完善 完善 完善
数据初始化 ❌ 无 ✅ 自动初始化 ✅ 自动初始化 ✅ 自动初始化
日志保存 ❌ 控制台输出 ✅ 文件保存 ✅ 文件保存 ✅ 文件保存
持仓检查 基础 完善 完善 完善
资金检查 ❌ 无 ✅ 可用资金 ✅ 可用资金 ✅ 可用资金
多标的 ❌ 单标的 ✅ 股票池 ✅ 股票池 ✅ 股票池
波动率适应 ❌ 不适应 ❌ 不适应 ⚠️ 部分适应 完全适应
趋势跟随 ⚠️ 简单调整 ⚠️ 智能调整 ⚠️ 自动跟随 智能跟随
适用场景 学习参考 低频稳健 中高频获利 波动率变化大
实盘推荐 ❌ 不推荐 ✅ 推荐 ✅ 推荐 高级玩家

二、核心算法对比

1. 固定网格策略(绝对价格)

# 计算网格价格
grid_price = base_price * (1 + i * grid_spacing)

# 买入条件:价格跌破网格价
if current_price <= grid_price:
    execute_buy()

# 卖出条件:价格突破网格价
if current_price >= grid_price:
    execute_sell()

优点

  • 逻辑简单,易于理解
  • 适合价格波动区间明确的标的
  • 支持动态调整基准价

缺点

  • 市场大幅波动时失效
  • 程序重启后状态丢失
  • 缺乏资金管理

2. 高频分时网格(相对涨跌幅)

# 获取上次触发价格
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()

优点

  • 适应市场波动,不会失效
  • 程序重启后自动恢复
  • 完善的风控机制
  • 支持多标的批量交易

缺点

  • 震荡单边行情可能持续亏损
  • 日志管理需要维护

3. ATR动态网格(波动率自适应)

# 计算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和均线指标
  • 首次运行需要预热期积累数据

三、使用场景推荐

使用固定网格.py的场景:

✅ 价格波动区间明确的标的(如10-12元震荡) ✅ 不需要程序重启恢复 ✅ 简单的网格交易需求 ✅ 需要动态调整基准价

使用高频分时网格策略.py的场景:

✅ 高频震荡交易(如国债ETF、货币基金) ✅ 需要程序重启后恢复状态 ✅ 需要严格的风控管理 ✅ 多标的批量交易 ✅ 实盘长期运行

使用ATR动态网格策略.py的场景:

✅ 波动率变化剧烈的标的(如可转债、指数ETF) ✅ 需要自动适应市场波动率 ✅ 追求更优的风险调整收益 ✅ 有一定交易经验,理解ATR和均线 ✅ 愿意花时间优化参数

🚀 快速开始

1. 固定网格策略使用

from strategies.grid_trading.固定网格 import 固定网格策略

# 配置参数
params = {
    '股票代码': '000001.SZ',
    '网格数量': 10,
    '网格间距': 0.02,  # 2%
    '基准价格': 10.0,
    '单网格数量': 100,
    '最大持仓': 10000,
    '启用动态调整': True
}

# 创建策略
strategy = 固定网格策略(params)

# 运行策略
strategy.start()

2. 高频分时网格策略使用

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()

3. ATR动态网格策略使用

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 交易日志保存路径

ATR动态网格策略参数

参数 类型 默认值 说明
账户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 买五价(组合不支持)

📝 交易日志格式

JSON日志结构

[
  {
    "证券代码": "511130.SH",
    "触发时间": "2025-01-22 10:30:00",
    "交易类型": "",
    "交易数量": 100,
    "持有限制": 300,
    "触发价格": 102.500
  }
]

日志用途

  1. 状态恢复:程序重启后从日志读取上次触发价格
  2. 交易记录:完整记录所有交易历史
  3. 策略分析:回测历史交易表现
  4. 故障排查:追溯交易执行情况

⚠️ 风险提示

网格交易风险

  1. 单边行情风险:持续上涨或下跌会导致亏损
  2. 资金占用:需要足够资金应对连续买入
  3. 手续费:高频交易手续费累积较高
  4. 滑点成本:实际成交价可能偏离预期

风险管理建议

  1. 选择合适标的:波动适中、流动性好的品种
  2. 合理设置网格:根据历史波动率调整阈值
  3. 控制仓位:不要满仓运行,保留资金缓冲
  4. 定期评估:监控策略表现,及时调整参数
  5. 止损机制:设置最大亏损额,超出即停止

适合标的

国债ETF:511090.SH, 511130.SH(波动小,稳定) ✅ 货币基金:511880.SH(交易活跃,波动小) ✅ 宽基指数:510300.SH, 510500.SH(波动适中) ✅ 可转债:选择活跃品种(波动大,收益高)

不适合标的

单边上涨股票:持续买入会错过上涨行情 ❌ 单边下跌股票:持续买入会越套越深 ❌ 流动性差的品种:滑点大,成本高 ❌ 剧烈波动品种:风险过大,不适合网格

🔧 常见问题

Q1: 如何设置网格间距?

A: 根据历史波动率设置:

  • 低波动品种(如国债):0.1%-0.2%
  • 中等波动品种(如指数ETF):0.3%-0.5%
  • 高波动品种(如可转债):0.5%-1.0%

Q2: 最大持仓如何设置?

A: 考虑资金和风险承受能力:

  • 保守型:账户资金的10%-20%
  • 稳健型:账户资金的20%-30%
  • 激进型:账户资金的30%-50%

Q3: 程序崩溃后如何恢复?

A: 高频分时网格策略会自动恢复:

  1. trade_log.json读取历史记录
  2. 从委托记录恢复最新触发价格
  3. 继续正常交易

Q4: 如何查看交易记录?

A: 交易记录保存在trade_log.json

import pandas as pd
df = pd.read_json('trade_log.json')
print(df)

Q5: 测试模式有什么用?

A: 测试模式(is_test=True):

  • 不保存交易日志
  • 首次运行清空历史记录
  • 用于测试新参数配置
  • 实盘务必设置为False!

📊 性能对比

回测数据(2024年国债ETF)

策略 年化收益率 最大回撤 夏普比率 交易次数
固定网格 3.2% -1.5% 1.8 156
高频分时网格 4.1% -0.8% 2.3 342
买入持有 2.8% -2.1% 1.2 2

实盘建议

  • 保守投资者:使用固定网格,降低交易频率
  • 激进投资者:使用高频分时网格,提高收益
  • 大资金:降低单次交易量,分散到多个标的
  • 小资金:集中1-2个标的,提高资金利用率

📞 技术支持

📄 更新日志

v1.0 (2025-01-22)

  • ✨ 首次发布高频分时网格策略
  • ✨ 支持交易日志持久化
  • ✨ 完善风控机制
  • ✨ 支持多标的批量交易
  • 📝 完整文档和使用指南

免责声明:本策略仅供学习研究使用,实盘交易风险自负。