乐于分享
好东西不私藏

网格交易策略功能说明

网格交易策略功能说明

## 一、功能说明

这是一套运行在 QMT 环境中的自适应网格交易程序。它的特点不是“固定价差、机械挂单”的传统网格,而是把趋势识别、波动自适应、仓位控制、订单校验、日终修复、融资约束和消息通知整合成一套可实盘执行的自动交易逻辑。交易标的可以是ETF,股票,债券等。作者只推荐交易ETF
策略先通过均线结构筛选更有价值的介入时机,再根据标的历史波动自动计算网格间距,完成开仓、补仓、止盈和利润回注。对于希望把 ETF 网格从“能回测”推进到“能实盘跑”的交易者,这个程序最大的价值在于它考虑了大量真实交易中的细节问题,例如部分成交、碎股、撤单重挂、可融资限制、尾盘修复和消息推送。 它不是一个公式,而是一套完整、可执行、可恢复、可跟踪的交易框架。
核心目标:
  1. 在满足特定技术条件时自动开新仓。
  2. 开仓后围绕持仓自动布置上下双向网格。
  3. 随着成交和持仓变化,动态重算下一档买价、卖价和目标利润。
  4. 在实盘环境中自动处理订单偏差、部分成交、碎股、融资账户限制和日结。
  5. 通过日志和消息推送,让交易过程可跟踪、可解释、可复盘。

## 二、交易策略亮点

1.不是死板网格,而是“先筛选,再网格”

策略不会对所有标的无脑开仓,而是先结合均线结构判断是否出现适合介入的时机,再进入网格管理阶段。

2.网格间距不是固定值,而是按波动率自适应

策略会用过去约一年的日线波动数据计算 `price_step`,也就是网格步长。波动大的品种网格更宽,波动小的品种网格更密,这比固定 1% 或固定 2% 的网格更贴近真实市场。

3.开仓、加仓、减仓是一体化设计

首次建仓不是一笔,而是按 `init_vol_times` 一次建立初始网格仓位;之后程序自动计算下一档买点和卖点,持续低吸高抛。

4.利润不是简单落袋,而是部分回注到网格结构

每次卖出成交后,程序会把一部分利润累积到 `target_profit`,从而抬升后续网格的收益目标;另一部分则用于让网格更贴近当前价格。这意味着系统会随着盈利不断“自我进化”。

5.不是只会下单,还会检查订单是否“挂对了”

程序会实时校验:
  • 当前挂单价格是否仍等于理论买卖价
  • 当前挂单数量是否正确
  • 没仓位时是否还残留挂单
  • 部分成交订单是否需要撤单和修复
这类细节,恰恰决定了一个策略能不能真的跑在实盘里。

6.适合多标的 ETF 轮动式运行

`config.py` 中可以配置一整组 ETF 或股票候选池,程序会按最大仓位数限制,只在满足条件时接管部分标的。

7.自动打新股/新债

`config.py` 中可以配置是否每天自动打新股及新债。

## 三、工作原理

### 1. 启动后先做环境准备

程序初始化时会完成这些事情:
  1. 读取账户、配置、授权信息。
  2. 读取本地 JSON 状态文件,恢复每个标的的历史网格参数。
  3. 检查账号是否连通、授权是否有效。
  4. 过滤掉不合法标的,或融资账户中不允许开仓的标的。
  5. 建立定时任务:
  • 早上更新分红除权影响
  • 更新持仓状态
  • 补挂网格买卖单
  • 根据设置自动申购新股/新债
  • 尾盘处理部分成交订单
  • 收盘后自动还融资
  • 盘后下载历史数据
  • 夜间再次检查和补挂订单
它不是单一的“下单程序”,而是一套完整的日内、日终运行框架。

### 2. 开新仓的逻辑:先看结构,再做交易

程序在新 K 线到来时,会先判断某个标的是否满足开仓信号。
开仓信号大致包含以下几个条件:
  1. 中期均线在长期均线下方,说明标的还没有进入过热状态。
  2. 短期均线上穿中期均线,说明价格结构开始转强。
  3. 最近一次低点比前一次低点更高。
  4. 最近一次高点比前一次高点更高。
可以把它理解成:
**在相对低位区域中,等待价格结构从弱转强,再用网格方式介入。**
这比“跌了就买”的纯均值回归更克制,也比“追涨突破”更强调安全边际。

### 3. 网格步长如何确定

程序不是手动写死每只 ETF 的网格间隔,而是通过ATR函数自动计算:
  1. 取最近约 365 天日线数据。
  2. 用连续两天的高低价波动估算“平均两日振幅”。
  3. 再乘以 `price_step_co` 得到实际网格间距。
  4. 同时限制最小值 `min_price_step` 和最大 10%。
这意味着:
  • 波动大的 ETF,不会挂得太密,减少频繁无效成交。
  • 波动小的 ETF,不会挂得太宽,避免长期不成交。
这是这套程序非常有吸引力的一点,因为它让网格参数具备了“随品种而变”的能力。

### 4. 首次建仓不是一格,而是先搭好初始框架

当出现开仓信号后,程序会先计算单格的基础买入量 `init_vol`,再乘以 `init_vol_times` 做首次建仓。
也就是说:
  • init_vol 是后续每次网格买卖的标准单位。
  • init_vol_times 决定首次开仓时先铺几格仓位。
这样做的好处是:
  1. 一开仓就有可卖出的基础筹码。
  2. 后面可以立即进入“下跌补、上涨卖”的自动网格循环。
  3. 不需要等第一次补仓后才形成完整结构。

### 5. 持仓后的核心:自动计算下一买、下一卖

程序会根据当前:
  • 持仓数量
  • 成本价
  • 网格步长
  • 当前累计目标利润
动态推导出:
  • next_buy_price
  • next_sell_price
也就是说,系统不是简单记住“上一次价格”,而是根据整个持仓状态实时重建当前网格的位置。
这使得它具有几个优点:
  1. 即使程序重启,也能从 JSON 和持仓恢复状态。
  2. 即使部分成交、尾盘补单、碎股处理后,网格还能重新对齐。
  3. 理论买卖价和实际挂单价不一致时,可以自动识别并撤单重挂。

### 6. 利润如何处理:不是卖完就结束

每次卖出成交后,程序会把利润的一部分按 `profit_allocate` 比例计入 `target_profit`。
这在策略层面的含义是:
  1. 网格系统会随着盈利逐步提高收益要求。
  2. 已实现利润会部分转化为未来网格的“抬升基础”。
  3. 长期运行时,网格不是静止的,而是会随累计收益发生结构性变化,也就是说随着时间的增加,最终平仓(每一个交易标的的最后一次卖出)价格是在不断下降的。
可以对外把这个特点概括为:
**这套策略不是只会做差价,而是会把差价“沉淀”进后续网格。**

### 7. 风控和实盘细节处理

这部分是程序非常“像实盘系统”的地方:

1.最大持仓数限制

避免同时开太多标的,导致账户过度分散。

2.资金保留比例

当可用资金低于一定阈值后,不再继续开新仓。

3.融资账户适配

可限制只交易可融资标的,并区分普通买入与融资买入逻辑。

4.涨跌停价格检查

若理论买卖价超出可交易范围,不下单。

5.订单校验与撤单

如果挂单价格、数量偏离理论值,自动撤单,防止“错网格”继续存在。

6.部分成交处理

尾盘会专项处理部分成交订单,尽量把仓位恢复到网格所需的整倍数结构。

7.碎股归入底仓

不让零碎持仓破坏标准网格数量结构。

8.ETF 清盘风险提示

程序对 ETF 做了基于总份额和 IOPV 的简化清盘风险预警。

9.自动还融资

对融资账户支持收盘后自动还款。

10.消息通知

可通过飞书、微信Server酱等方式推送开仓、异常、风控和收盘信息。

## 四、config.py 配置项详细说明

`config.py`位于QMT安装目录下的python文件夹下,下面按配置项逐个说明。

###stock_list

交易候选标的列表。
作用:
  • 定义程序允许监控和交易的标的池。
  • 支持 ETF,也包含部分个股。
  • 程序启动时会去重,并结合账户类型、可融资状态等进一步过滤。
影响:
  • 列表越大,可选机会越多。
  • 但如果max_pos 较小,最终真正进入交易的标的数量仍受限制。
适用建议:
  • 用于放入长期观察、流动性较好、适合网格和波段结构的 ETF。
  • 如果加入个股,最好确认其波动特征、涨跌停限制和融资规则都与你的账户匹配。

###stop_open_list

禁止开新仓列表。
作用:
  • 这些标的即使仍在stock_list 里,也不会再开新仓。
  • 但已有持仓仍会继续按网格逻辑管理。
典型用途:
  • 临时停用某些波动异常的标的。
  • 对某些不想继续新开仓、但又不想手动接管旧仓的标的做软隔离。

###period

开仓信号使用的 K 线周期,当前是 `”30m”`。
作用:
– 决定均线信号和开仓判断所使用的时间框架。
可选值:
– 代码注释里支持 `1m, 3m, 5m, 10m, 15m, 30m, 60m, 2h, 3h, 4h, 1d` 等。
影响:
  • 周期越短,信号越快,交易更频繁。
  • 周期越长,信号更稳,但开仓次数会减少。
当前值 `”30m”` 的特点:
  • 比 5 分钟更稳,比日线更灵敏,适合 ETF 网格前置筛选。

###max_pos

最大同时持仓标的数。
作用:
– 限制同时进入网格交易的标的数量。
影响:
  • 越小越保守,单个标的可分配资金更集中,但整体机会更少。
  • 越大越分散,策略覆盖面更广,但也更考验资金规模和管理能力。
当前值:
– `10`
适用理解:
– 这是账户级风控,而不是单票风控。

###pos_vol_co

开仓仓位系数。
作用:
  • 用于计算单票标准仓位大小。
  • 程序中单格买入量init_vol 大致来自:总资产 / pos_vol_co / 当前价格,再按 100 股取整。
影响:
  • 数值越大,单票单格仓位越小,更保守。
  • 数值越小,单票仓位越大,收益弹性更高,但风险也更高。
当前值:
– `130`
可以理解为:
– “账户总资产大约按 1/130 的量级分配给每只标的的一个基础网格单位”。

###init_vol_times

首次开仓倍数。
作用:
– 首次不是买一格,而是买 `init_vol_times * init_vol`。
影响:
  • 值越大,初始建仓更重,后续更容易立即进入网格卖出阶段。
  • 值越小,试仓更轻,但网格结构形成更慢。
当前值:
– `3`
这意味着:
– 初次建仓会直接买入 3 个标准单位。

###reserve

保留资金比例。
作用:
– 当可用资金低于总资产的一定比例后,停止开新仓。
当前值:
– `0.2`
含义:
– 当账户可用资金只剩大约 20% 时,不再继续新开仓。
作用价值:
  • 防止在连续开仓后把流动资金用得过满。
  • 给后续补仓、突发风险和费用留出缓冲。

###price_step_co

网格步长系数。
作用:
– ATR、波动率结果会乘以这个系数,得到实际网格间距 `price_step`。
影响:
  • 越大,网格越宽,交易频率下降,但单次利润空间变大。
  • 越小,网格越密,交易频率上升,但更容易受到噪音波动干扰。
当前值:
– `0.66666667`
适用理解:
– 这是网格“性格”的核心调参项之一。

###min_price_step

最小网格间距。
作用:
– 给自适应波动率计算设置下限。
– 防止某些低波动标的把网格算得过密。
当前值:
– `0.01`
含义:
– 最小网格步长为 1%。

###min_vol

最小标准交易股数。
作用:
– 限制 `init_vol` 的最小值。
当前值:
– `200`
影响:
– 就算账户规模较小,程序也不会把单格买入量算得过小。
注释中给出的建议:
– 如果账户资金低于 20 万,可考虑设成 `100`。

###fin_enable_only

融资账户是否仅允许开仓可融资标的。
作用:
– 当账户类型为融资账户时,若该项为 `True`,程序只对可融资标的开新仓。
当前值:
– `True`
价值:
– 避免资金和交易规则不匹配的标的进入实盘。

###log_level

日志级别。
作用:
– 控制控制台和日志文件输出详细程度。
当前值:
– `10`,即 `logging.DEBUG`
常见取值:
  • 10 = DEBUG
  • 20 = INFO
建议:
  • 调试阶段用DEBUG
  • 长期稳定运行可考虑改成INFO

###auto_loan_repayment

是否收盘后自动归还融资负债。
作用:
– 若为 `True`,程序会在设定时间检查融资负债,并尝试用可用资金自动还款。
当前值:
– `True`
适用场景:
– 融资账户自动化管理。

###ipo_stock

是否自动申购新股。
作用:
– 开启后,程序会在设定时间尝试执行新股申购。
当前值:
– `True`

###ipo_bond

是否自动申购新债。
作用:
– 开启后,程序会在设定时间尝试执行新债申购。
当前值:
– `True`

###expired_date

授权截止日期。
作用:
– 用于授权校验。
– 程序启动时会和授权码一起验证,若失效则停止运行。
当前值:
– `”2099-12-31″`
说明:
– 这是程序许可机制的一部分,不属于交易参数。

###license

授权码。
作用:
– 配合账号和到期时间生成校验。
– 若不匹配,程序会直接退出。
说明:
– 这项是程序授权控制,需要联系作者(微信:danielliulihua)购买。

###night_order_start_time

夜间定时任务启动时间。
作用:
– 用于安排夜间的 `update_G` 和 `place_bi_orders` 等任务调度起点。
当前值:
– 当天 `22:00:00`
说明:
– 从代码看,这主要用于盘后或夜间预处理,而不是夜盘交易本身。

###send_key

Server酱推送密钥。
作用:
– 配置后,程序可向微信渠道推送消息。具体配置方法可参考公众号: danielliulihua
– 配置微信消息推送: https://sct.ftqq.com/after。

###feishu_url

飞书机器人 Webhook 地址。
作用:
– 配置后,程序可将开仓、异常、账户状态、风控提示等消息推送到飞书群。
当前状态:
– 已配置。具体配置方法可参考公众号: danielliulihua

###feishu_secret

飞书机器人签名密钥。
作用:
– 如果飞书机器人开启签名校验,需要配置此项用于生成签名。
当前状态:
– 已配置
【以上绝大部份内容是根据本人实盘运行的程序由AI自动生成的】