ARTICLE · 1084170
AI量化交易|30 网格交易:70% 的时间在震荡,网格帮你把差价收成租
海龟教我们在趋势市赚钱,缠论教我们识别转折点。但你想过没有:市场大部分时间在做什么?
答案是震荡。大约 70% 的时间,价格在一个区间内来回波动,既没有明确上涨,也没有明确下跌。这时候:
• 海龟的突破策略会频繁假突破,反复止损亏钱; • 缠论的三买信号很少出现,大部分时间空仓。
网格策略,就是专门为震荡市设计的收租模型。
一、网格是什么:把区间切成格子,撞一格收一格
先看三种策略的世界观差异:
网格策略一句话:把价格区间切成 N 个格子,每跌一格买一份,每涨一格卖一份,不预测涨跌,只要价格在区间内波动就赚差价。

二、网格的四要素
搭一个网格策略,要回答四个问题:
1. 网格区间:在什么价格范围内做网格?上限和下限怎么定? 2. 格子数量:切几格?格子越多,交易越频繁,每次赚得越少。 3. 每格仓位:每穿越一格买/卖多少? 4. 出界处理:价格跌破下界(满仓被套)或涨破上界(踏空)怎么办?
举个最简例子:区间 [100, 110],5 格,每格间距 = (110 - 100) ÷ 5 = 2 元,格子线是 [100, 102, 104, 106, 108, 110]。规则是:价格每下穿一格,买入一份;每上穿一格,卖出一份。
比如价格从 106 跌到 102,就在 104 买入、在 102 买入;价格从 102 涨到 108,就在 104 卖出(赚 2 元)、在 106 卖出(赚 2 元)。
三、网格交易引擎
核心逻辑封装成一个 GridEngine 类:
class GridEngine: def __init__(self, upper, lower, num_grids, total_capital): self.grid_size = (upper - lower) / num_grids self.levels = [lower + i * self.grid_size for i in range(num_grids + 1)] self.position_at = [0] * (num_grids + 1) # 每格持仓状态 self.prev_cell = None # 上一根K线所在的格子 def update(self, price): curr_cell = self.get_cell(price) # 当前价格在哪一格 if self.prev_cell is None: # 首次,只记录不做交易 self.prev_cell = curr_cell return [] prev_cell = self.prev_cell self.prev_cell = curr_cell if curr_cell < prev_cell: # 价格下跌,穿越格子 → 买入 for cell in range(prev_cell - 1, curr_cell - 1, -1): if self.position_at[cell] == 0: # 该格还没买过 self.buy(cell) # 买入信号 elif curr_cell > prev_cell: # 价格上涨,穿越格子 → 卖出 for cell in range(prev_cell, curr_cell): if self.position_at[cell] > 0: # 该格有持仓 self.sell(cell) # 卖出信号(赚一格差价)这里的关键是用 position_at 数组标记每一格有没有持仓:下跌时,只在还没买过的格子买入,避免重复买;上涨时,只在有持仓的格子卖出,锁定一格差价。

四、经典网格策略:震荡市的神,趋势市的鸡肋
我们跑一个固定网格回测,参数设为:网格区间取过去 60 日最高/最低价(加 2% 缓冲)、8 格、每格仓位 90%÷8 ≈ 11.25%、出界时不操作只等待。
多标的回测(2024-2025):
茅台是网格的高光时刻:买入持有亏 12%,网格赚 18.46%。因为茅台 2024-2025 是震荡市,价格在 1370 到 1650 之间反复,网格反复做差价,累计赚了 18%。而纳指 ETF 是单边上涨,网格只赚到区间内的小波动,大趋势利润全部踏空。
关键发现有三条:
• 网格胜率极高(65% 到 88%),但盈亏比低(每次赚固定一格); • 震荡市网格稳定赚差价,优于买入持有;趋势市容易踏空,差于买入持有; • 最大风险是价格单边下跌时持续加仓,满仓被套。

五、中枢网格:让区间由市场结构自己说了算
固定网格的区间用「过去 60 日高低点」来定,问题在于这是人为拍脑袋:为什么是 60 日不是 30 日或 120 日?最高/最低价真的是合理的区间吗?
缠论给了一个更好的答案:中枢的 ZG/ZD 就是市场自己「选出来」的震荡区间。 中枢是至少 3 笔价格重叠的区域,价格在此反复震荡,正是网格理想的执行环境。
中枢网格引擎继承 GridEngine,加了几个能力:
class ChanGridEngine(GridEngine): """以缠论中枢的 ZG/ZD 作为网格边界""" def __init__(self, zg, zd, num_grids=6, total_capital=0): super().__init__(upper=zg, lower=zd, ...) self.zg, self.zd = zg, zd def switch_zhongshu(self, new_zg, new_zd): """切换到新中枢,重建网格""" self.zg, self.zd = new_zg, new_zd self.levels = [new_zd + i * gs for i in range(num_grids + 1)] self.position_at = [0] * (num_grids + 1) def deactivate(self): """价格突破中枢时停用网格""" self.active = False策略逻辑也很清晰:
class ChanGridStrategy(bt.Strategy): def next(self): zg = self.data.chan_zg[0] # 当前中枢上沿 zd = self.data.chan_zd[0] # 当前中枢下沿 price = self.data.close[0] if zg != self.current_zg or zd != self.current_zd: self.grid.switch_zhongshu(zg, zd) # 中枢切换→重建网格 if zd <= price <= zg: signals = self.grid.update(price) # 中枢内→网格交易 for sig in signals: self.execute(sig) if price > zg * 1.005 or price < zd * 0.995: self.close(); self.grid.deactivate() # 突破中枢→停止网格, 清仓茅台(2023-2025)实测,chan.py 识别出 3 个中枢:
三个中枢宽度从 3.7% 扩到 11.9%,意味着多空分歧越来越大。窄中枢每格间距小、交易频繁但赚得少;宽中枢每格间距大、交易少但赚得多。
三策略对比(茅台 2023-2025):
中枢网格只赚 1.62%,远不如固定网格的 13.16%,它有什么优势?看最大回撤:中枢网格仅 1.61%,固定网格 18.42%。
中枢网格的核心价值是风险控制:只在中枢内交易,区间有结构支撑;出中枢即停止,不在趋势中逆势加仓。代价是收益较低,大部分时间在等待。而固定网格的问题正是价格单边下跌时持续加仓,可能满仓被套。
多标的横向对比也印证了规律:
规律很清楚:中枢越多(震荡越多),网格机会越多;中枢越少(趋势越强),网格越不适用。 纳指 ETF 只有 1 个中枢,中枢网格收益 0%;平安银行 4 个中枢,震荡较多,网格有 +1.27% 正收益。中芯国际虽然也有 3 个中枢,但 2024-2025 年它走出一波强势上涨(买入持有 +195.69%),中枢网格只在区间内小幅做差价,收益反而为负。

六、中枢网格 + 趋势联动:想两边都赚?
中枢网格出中枢后就停止交易等待,这浪费了趋势行情。能不能两边都赚?于是有了自适应策略的进化版,用缠论中枢判断趋势/震荡,切换网格/趋势跟踪:
核心代码:
class ChanHybridStrategy(bt.Strategy): def next(self): if self.mode == 'GRID': if price > zg * 1.005: # 向上突破 self.close() # 清网格仓位 self.buy(size=...) # 趋势入场 self.trail_stop = price - 2.5 * ATR self.mode = 'TREND_UP' elif price < zd * 0.995: # 向下跌破 self.close() # 清仓防守 self.mode = 'WAIT' else: self.grid.update(price) # 正常网格 elif self.mode == 'TREND_UP': self.trail_stop = max(self.trail_stop, highest - 2.5 * ATR) if price < self.trail_stop: self.close(); self.mode = 'WAIT'模式切换由缠论结构驱动,不是人为判断。茅台上的实测,混合策略反而在趋势跟踪部分亏了钱(总收益 -7.78%)。这说明不是每个增强都一定有效:趋势跟踪的效果取决于出中枢后趋势是否延续(很多时候是假突破)、ATR 参数是否合适、标的有没有强趋势特征。
结论很朴素:趋势明确的标的(纳指 ETF)上,趋势跟踪能捕捉大行情;震荡为主的标的(茅台)上,纯中枢网格更稳健。策略选择矩阵是:
• 高震荡、低趋势 → 纯中枢网格(中枢多,机会多); • 有趋势、有震荡 → 混合策略(两种行情都能赚); • 强趋势 → 海龟/缠论三买(网格在趋势市没优势)。
七、网格能做到什么,做不到什么
能做到:震荡市稳定收租、胜率极高(70% 到 90%)、不预测方向纪律执行、中枢网格让边界由市场结构决定、出中枢即停避免趋势市逆势加仓。
做不到:单边行情赚大钱(趋势利润必然踏空)、避免满仓被套(价格持续跌破下界持仓会越来越重)、适合所有标的(纳指 ETF 不适合)、保证绝对收益(赚的是差价这种相对收益,不是方向收益)。
说到底,网格策略的效果高度依赖标的选择:震荡股(茅台)表现好,趋势股(纳指 ETF)几乎无用。那能不能用科学的方法,从全市场选出适合做网格的标的?
这,就是下一篇要解决的:多因子选股。
关注 + 在看,别掉队。