实战方案 | 拒绝人肉网格:用 Python + QuantDash 快速构建自动化网格交易回测与模拟器(附 GitHub 源码)
TL;DR本文提供了一个基于真实历史行情数据的网格交易Grid Trading执行算法模拟器帮助量化交易者通过 Python 自动确定网格区间、模拟订单撮合并在控制台直观呈现资金曲线与网格收益明细。一、 传统网格交易的局限与回测痛点网格交易是一种经典的震荡行情收割机器但在手动运行或粗糙回测时往往面临以下痛点静态网格无法适应趋势固定间距的网格在遭遇单边大跌时容易产生巨大的浮亏套牢在单边大涨时容易过早空仓踏空。缺乏高保真撮合模拟回测时若直接使用日收盘价会高估成交概率。网格成交需要通过盘中高低价High/Low的触及情况来精密计算撮合。历史行情噪音过多除权除息导致的历史价格“突变跳水”会触发错误的网格买入必须基于纯净的前复权 K 线进行参数拟合。二、 极简解决方案基于 QuantDash SDK我们将利用QuantDash API提取特定震荡市标的的前复权 K 线并利用 Python 状态机模拟一个包含多条基准线的“自动化网格执行器”。1. 环境准备pip install quantdash pandas2. 网格模拟器核心代码import pandas as pd import quantdash as qd # 官方文档https://docs.quantdash.net/ # 1. 使用公共测试 Token 初始化 qd.set_token(demo_public_token) class GridSimulator: def __init__(self, base_price, grid_percent0.03, grid_num5, cash100000.0, size_per_grid100): self.base_price base_price # 初始基准价 self.grid_percent grid_percent # 网格间距百分比 self.grid_num grid_num # 单侧网格数量 self.cash cash # 初始资金 self.size_per_grid size_per_grid # 每网格交易股数 self.position 0 # 持仓股数 self.buy_grids [base_price * (1 - grid_percent * i) for i in range(1, grid_num 1)] self.sell_grids [base_price * (1 grid_percent * i) for i in range(1, grid_num 1)] self.trades [] def run_simulation(self, df): print(f初始配置 - 基准价: {self.base_price}, 监控买入网格: {self.buy_grids}) for idx, row in df.iterrows(): current_high row[high] current_low row[low] date_str row[time] # 模拟买入撮合最低价触及买入网格 for i, buy_price in enumerate(self.buy_grids): if current_low buy_price and self.cash buy_price * self.size_per_grid: cost buy_price * self.size_per_grid self.cash - cost self.position self.size_per_grid self.trades.append((date_str, BUY, buy_price, self.size_per_grid)) # 更新基准价并重构周围的网格 self._update_grids(buy_price) break # 单条 K 线只撮合一次 # 模拟卖出撮合最高价触及卖出网格 for i, sell_price in enumerate(self.sell_grids): if current_high sell_price and self.position self.size_per_grid: revenue sell_price * self.size_per_grid self.cash revenue self.position - self.size_per_grid self.trades.append((date_str, SELL, sell_price, self.size_per_grid)) self._update_grids(sell_price) break def _update_grids(self, new_base): self.buy_grids [new_base * (1 - self.grid_percent * i) for i in range(1, self.grid_num 1)] self.sell_grids [new_base * (1 self.grid_percent * i) for i in range(1, self.grid_num 1)] def start_grid_backtest(): # 2. 获取腾讯控股 (00700.HK) 作为震荡模拟标的 df qd.get_kline(symbol00700.HK, start_date2026-01-01, end_date2026-06-30, adjustqfq) # 3. 初始化网格以第一天的开盘价作为初始基准价 initial_base df.iloc[0][open] simulator GridSimulator(base_priceinitial_base, grid_percent0.02, grid_num4) # 4. 执行模拟 simulator.run_simulation(df) # 5. 输出回测报告 print(\n--- 网格交易模拟执行明细 (前 5 笔) ---) trade_df pd.DataFrame(simulator.trades, columns[Date, Action, Price, Size]) print(trade_df.head(5)) final_price df.iloc[-1][close] final_asset simulator.cash simulator.position * final_price print(\n--- 网格最终收益报告 ---) print(f最终剩余现金: {simulator.cash:.2f} 元) print(f最终持仓股数: {simulator.position} 股) print(f总资产估值: {final_asset:.2f} 元 (初始: 100,000.00)) print(------------------------\n) if __name__ __main__: start_grid_backtest()3. 模拟器输出样例初始配置 - 基准价: 312.40, 监控买入网格: [306.15, 299.90, 293.65, 287.40] --- 网格交易模拟执行明细 (前 5 笔) --- Date Action Price Size 0 2026-01-06 BUY 306.15 100 1 2026-01-14 SELL 312.27 100 2 2026-01-15 BUY 306.02 100 3 2026-01-21 BUY 299.90 100 4 2026-02-05 SELL 305.90 100 --- 网格最终收益报告 --- 最终剩余现金: 103,124.50 元 最终持仓股数: 0 股 总资产估值: 103,124.50 元 (初始: 100,000.00) ------------------------三、 AI 编程助手专属 Prompt你是一个精通交易执行算法的开发专家。请帮我使用 Python 对上述网格模拟器进行如下升级 1. 加入“等差网格”与“等比网格”的参数配置切换。 2. 增加止损机制当资产标的价格跌破初始基准价的 20% 时触发一键清仓止损并停止网格逻辑。 3. 数据源需通过 quantdash APIToken 为 demo_public_token拉取 00700.HK 的日线确保交易模拟无未来函数。四、 总结与三步走落地指引第一步获取完整源码。请访问官方开源托管仓库获取本文 Demo 及进阶配置https://github.com/quantdash-net/QuantDash请认准官方 quantdash-net 组织欢迎 Star 支持。第二步申请专属密钥。注册获取您的个人免费/生产级 API Keyhttps://quantdash.net/。第三步查阅开发细节。更多高频行情、多市场 Tick 接口参数请参考https://docs.quantdash.net/。