fix calc_buy_num floor -> round
This commit is contained in:
260
docs/xhs-miniqmt-bridge.md
Normal file
260
docs/xhs-miniqmt-bridge.md
Normal file
@@ -0,0 +1,260 @@
|
||||
# 小红书四页图文|MiniQMT 关停后怎么办(桥接 API 方案)
|
||||
|
||||
> 素材来源:本仓库 `api/qmt_rest_new.py`(REST 桥接服务端)、`docs/api.md`(接口契约)、`py-client/`(外部 Python 策略端)、`py-client/etc/_global.yaml`(配置)。
|
||||
> 说明:全文所有账号、密码、TOKEN 均为占位符,**发布前不要把真实凭据写进图里或正文**。
|
||||
|
||||
---
|
||||
|
||||
## 一、发布总览
|
||||
|
||||
| 项 | 内容 |
|
||||
| --- | --- |
|
||||
| 主题 | MiniQMT(极简模式/外接 xtquant)关停后,老策略怎么继续跑 |
|
||||
| 卖点 | 桥接 API:策略代码不搬家,大 QMT 只当"下单通道" |
|
||||
| 页数 | 4 页(图文轮播) |
|
||||
| 目标动作 | 评论区/私信"关停""桥接"→ 引导私聊 |
|
||||
| 语气 | 同行分享、干货向,不喊单、不承诺收益 |
|
||||
|
||||
---
|
||||
|
||||
## 二、四页文案(可直接做图)
|
||||
|
||||
### 第 1 页:MiniQMT 关停后的几大问题
|
||||
|
||||
**主标题(大字)**
|
||||
> MiniQMT 关停后,你的策略还能跑吗?
|
||||
|
||||
**副标题(小字)**
|
||||
> 4 个坑,90% 的人第一个就卡住
|
||||
|
||||
**正文(分条,每条一行,配极简图标)**
|
||||
|
||||
| 图标 | 痛点 | 一句话讲透 |
|
||||
| --- | --- | --- |
|
||||
| 🔌 | **外接 xtquant 通道没了** | `XtQuantTrader` / `xtdata` 那套"独立进程连客户端"的入口关闭;外挂式策略、跟单程序、历史数据下载脚本集体失联 |
|
||||
| 🐍 | **被迫搬进大 QMT 内置 Python** | 内置端是 Python 3.6 + GBK + 库受限:f-string、dataclasses、asyncio、第三方库可能全废,代码要重写 |
|
||||
| 🧵 | **单线程、禁止阻塞** | 内置端所有策略共用一个线程,一个 `time.sleep` 或死循环,能把全部策略一起卡死 |
|
||||
| ⚠️ | **下单没有返回值** | `passorder` 不回订单号,只能靠"投资备注 + 委托查询"对账;客户端查询还有几十毫秒到数秒延迟,照搬"下单即查"必然漏单、超单 |
|
||||
| 💻 | **必须围着电脑转** | 客户端要登录、策略要手动点运行、电脑不能睡、断网断电容错全靠自己 |
|
||||
|
||||
**页脚金句**
|
||||
> 关停的不是"量化",是"连接方式"。
|
||||
|
||||
**设计**:深色背景 + 红色警示色标题;每条配一个 emoji 大图标;右侧竖排页码 "01/04"。
|
||||
|
||||
---
|
||||
|
||||
### 第 2 页:桥接 API 的方式(拆解 `qmt_rest_new.py`)
|
||||
|
||||
**主标题**
|
||||
> 不用改策略:把大 QMT 变成一台"下单服务器"
|
||||
|
||||
**副标题**
|
||||
> 一个文件,14 个 HTTP 接口,老代码继续跑
|
||||
|
||||
**核心原理(三句话,配一张数据流图)**
|
||||
|
||||
```
|
||||
你的 Python 策略(独立进程、Python 3.14、随便装库)
|
||||
│ HTTP + X-Token
|
||||
▼
|
||||
大 QMT 内置策略进程:qmt_rest_new.py(Tornado @ 0.0.0.0:10086)
|
||||
│ 只做转发
|
||||
▼
|
||||
passorder / get_trade_detail_data / ContextInfo(QMT 原生能力)
|
||||
```
|
||||
|
||||
**这张图就是全部价值:策略留在外面,QMT 只当通道。**
|
||||
|
||||
**服务端怎么跑(4 步启动流程)**
|
||||
1. 校验账户与数据目录非空 → `set_account(账号)`
|
||||
2. 从远端拉股票池 + 合并当前持仓 → 去重
|
||||
3. `set_universe()` 设置标的池
|
||||
4. 启动 Tornado 监听 `0.0.0.0:10086`,等待外部调用
|
||||
|
||||
**接口清单(14 个,按用途分四组)**
|
||||
|
||||
| 分组 | 接口 | 用途 |
|
||||
| --- | --- | --- |
|
||||
| 上下文 | `GET /api/context/info` | 周期、资金、标的池等策略上下文 |
|
||||
| 数据 | `GET /api/get/{类型}` | 股票名、上市日、总股本、股息因子、ETF、合约详情、ST 历史等 11 类单票查询 |
|
||||
| 数据 | `POST /api/data/full_tick` | 实时 tick 行情 |
|
||||
| 账户 | `GET /api/portfolio` | 资产 + 持仓 + 委托一次拿全 |
|
||||
| 账户 | `GET /api/portfolio/assets`、`/positions`、`/order`、`/deal`、`/org/{类型}` | 资产、持仓、委托、成交、原始记录 |
|
||||
| 交易 | `POST /api/trade/passorder` | 下单 |
|
||||
| 交易 | `POST /api/trade/cancel_by_id` | 按柜台订单号撤单 |
|
||||
| 交易 | `POST /api/trade/ipo_data` | 新股/新债发行数据 |
|
||||
| 系统 | `GET /api/sys/python_version` | 看内置端 Python 版本 |
|
||||
|
||||
**怎么调(一行代码的体感)**
|
||||
|
||||
```python
|
||||
# 外部策略端:改 base_url 就能跑
|
||||
client = Client(base_url="http://127.0.0.1:10086", token="<你的TOKEN>")
|
||||
client.passorder(op_type=23, stock_code="600000.SH", volume=100, price=10.0)
|
||||
```
|
||||
|
||||
服务端下单请求体也是大白话 JSON:
|
||||
|
||||
```json
|
||||
{"opType":23,"orderType":1101,"stockCode":"600000.SH",
|
||||
"prType":11,"price":10.0,"volume":100,
|
||||
"quickTrade":2,"strategyName":"trend","orderId":"trend-BUY-001"}
|
||||
```
|
||||
|
||||
**这套方案的 3 个硬优势**
|
||||
- ✅ **策略代码零改动**:老策略、老库、老 Python 版本全部留在外部进程
|
||||
- ✅ **绕开 Python 3.6 / GBK**:内置端只跑一个转发文件,不跑你的业务逻辑
|
||||
- ✅ **一份服务,多端复用**:本机策略、远程脚本、手机查持仓,都走同一个 API
|
||||
|
||||
**必须知道的 4 个坑(专业感来源,也是引流钩子)**
|
||||
- ⚠️ **Token 是唯一门禁**:`X-Token` 不对一律拒绝;端口开在 `0.0.0.0`,别直接把 10086 暴露到公网,建议只绑内网或加白名单
|
||||
- ⚠️ **下单"成功"≠ 成交**:`status: success` 只代表底层没抛异常;查询查的是客户端本地缓存,不是柜台实查
|
||||
- ⚠️ **服务端不做幂等**:超时重发可能变成两单,`orderId` 去重要在自己策略里做
|
||||
- ⚠️ **首启依赖远端股票池**:远端超时或返回格式不对,服务直接起不来
|
||||
|
||||
**页脚金句**
|
||||
> 关停逼你换的不是策略,是"接口层"。
|
||||
|
||||
**设计**:白底科技蓝;上半部分放数据流图(三个方框 + 箭头);下半部分放接口表格,只保留"分组 + 代表接口";右下角放一行代码截图感的小卡片。
|
||||
|
||||
---
|
||||
|
||||
### 第 3 页:个人 PC 全自动运行(开机 → 登录 → 起服务 → 跑策略)
|
||||
|
||||
**主标题**
|
||||
> 人不在电脑前,策略照样跑
|
||||
> ——个人 PC 无人值守 5 步搞定
|
||||
|
||||
**副标题**
|
||||
> 断电重启后全自动恢复,早上打开手机就能看持仓
|
||||
|
||||
**Step 1|开机就启动客户端**
|
||||
- `Win + R` → 输入 `shell:startup` → 把 QMT 快捷方式复制进去(最简单,免管理员)
|
||||
- 更稳的做法:任务计划程序 → 勾选"不管用户是否登录都运行" + "使用最高权限" + 延迟 1–2 分钟启动(等网络和驱动就绪)
|
||||
- 🚫 **安装路径不要带中文**,例如 `D:\quant\qmt`,中文路径容易让内置 Python 直接崩
|
||||
|
||||
**Step 2|自动登录(关停后最容易翻车的一步)**
|
||||
- 客户端登录界面先勾"记住账号 + 记住密码",能覆盖大部分场景
|
||||
- 有验证码/弹窗时,记住密码不够用,需要**窗口自动化兜底**:
|
||||
- 交易时段每 10 分钟探活一次(用交易日历排除周末和节假日)
|
||||
- 没进程就拉起客户端 → 激活登录窗口 → 填密码 → 回车
|
||||
- 每步都带重试,失败写日志,便于第二天排查
|
||||
- 关键前提:**策略自身必须配成"客户端启动后自动运行"**,否则软件开了策略还是停的
|
||||
|
||||
**Step 3|客户端内把"自动"全勾上**
|
||||
- 模型交易 → 新建策略交易 → 选策略 + 资金账号 → 运行模式选实盘
|
||||
- 勾选 **"终端启动后自动运行"**,登录延迟设 10 秒左右
|
||||
- 交易设置里开启 **盘前自动重启**(如 8:30),刷新行情连接,避免隔夜卡顿
|
||||
- 多个策略就每条都建一条策略交易、都勾自动运行
|
||||
|
||||
**Step 4|外部策略进程也得活下去**
|
||||
- 用任务计划程序托管外部策略:开机启动 / 断线重启 / 最高权限
|
||||
- 进程内自检:定时 `GET /api/sys/python_version` 或 `/api/context/info` 做**心跳**,返回异常就重连并告警
|
||||
- 日志落盘(绝对路径),关键动作全部留痕:下单、撤单、心跳失败、重连次数
|
||||
|
||||
**Step 5|把"睡着"这件事彻底掐死**
|
||||
- 电源设置:屏幕和睡眠都设 **"从不"**;笔记本长期插电
|
||||
- 设备管理器 → 网卡 → 电源管理 → **取消勾选"允许计算机关闭此设备以节约电源"**
|
||||
- 高级电源设置:无线适配器改"最高性能",硬盘设为"从不关闭"
|
||||
- 台式机在 BIOS 里开 **"来电自动开机"**,停电恢复后能自己爬起来
|
||||
- 兜底:装远程桌面工具,人不在也能看一眼服务是否在跑
|
||||
|
||||
**页脚金句**
|
||||
> 自动化的本质不是"不用管",而是"坏了能自己回来"。
|
||||
|
||||
**设计**:浅色底 + 五个编号圆角卡片纵向排列,每张卡片左侧一个大数字(01–05),右侧 2–3 行短句;最后一行放一句金句。
|
||||
|
||||
---
|
||||
|
||||
### 第 4 页:有问题可以私我
|
||||
|
||||
**主标题**
|
||||
> 卡在哪一步了?
|
||||
|
||||
**副标题**
|
||||
> 关停不可怕,可怕的是自己瞎折腾一整天
|
||||
|
||||
**正文(我这边能帮你看)**
|
||||
- 🧩 **策略迁移评估**:你的老策略能不能桥接?哪些地方必须动?
|
||||
- 🔌 **桥接服务部署**:`qmt_rest_new.py` 怎么落地到你的 QMT,接口怎么调通
|
||||
- 🔁 **订单对账**:下单没返回值、漏单/超单/重复单,怎么用备注 + 委托查询兜住
|
||||
- 🖥️ **无人值守**:开机自启、自动登录、防休眠、断线重连、告警
|
||||
- 📩 评论区回 **"桥接"** 或直接私信,说明你的情况(券商 / 策略语言 / 卡在哪一步),我按顺序回
|
||||
|
||||
**页脚(合规与免责,必须留)**
|
||||
> 仅交流技术实现,不构成投资建议,不承诺收益。
|
||||
> 量化有风险,策略与运维问题请自行验证后再上实盘。
|
||||
|
||||
**设计**:与第 1 页呼应的深色底;中间放 4 个圆角标签;底部留大面积"私信我"引导区 + 小字免责声明。
|
||||
|
||||
---
|
||||
|
||||
## 三、小红书正文(复制即用)
|
||||
|
||||
```
|
||||
MiniQMT 关停,最先崩掉的不是策略,是"连接方式"。
|
||||
|
||||
很多人第一反应是:完了,策略要重写。
|
||||
其实先别急着改代码——
|
||||
|
||||
大 QMT 内置 Python 是 3.6 + GBK + 单线程,
|
||||
把几百行策略硬搬进去,f-string、第三方库、定时调度全得重来,
|
||||
还要担心一个 sleep 卡死全部策略。
|
||||
|
||||
更省事的思路是:让大 QMT 只当"下单通道"。
|
||||
|
||||
做法很简单:
|
||||
在 QMT 里挂一个桥接文件,开一个本地 HTTP 服务(默认 10086,带 Token 鉴权),
|
||||
把下单、撤单、持仓、资产、委托、成交、tick 行情全部包成接口。
|
||||
你的 Python 策略继续待在外面,用 http 调用,代码基本不用改。
|
||||
|
||||
再配上个人 PC 的无人值守五件套:
|
||||
开机自启 → 自动登录 → 客户端内"终端启动后自动运行" → 外部策略进程守护 → 防休眠防断网(含 BIOS 来电自启),
|
||||
断电重启也能自己恢复。
|
||||
|
||||
当然有几个坑要提前知道:
|
||||
· Token 是唯一门禁,端口别暴露公网
|
||||
· 下单"成功"不等于成交,查询查的是客户端缓存
|
||||
· 服务端不做幂等,超时重发小心变双单
|
||||
|
||||
完整拆解我做了 4 张图,从"关停后几大问题"到"接口清单"再到"无人值守步骤"都在图里 👉 左滑
|
||||
|
||||
(仅技术交流,不构成投资建议,不承诺收益)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、标题备选(挑一个,建议 A/B 两版)
|
||||
|
||||
| 序 | 标题 | 风格 |
|
||||
| --- | --- | --- |
|
||||
| 1 | MiniQMT 关停后怎么办?完整解决办法 | 结果导向,最推荐 |
|
||||
| 2 | MiniQMT 停了,但我的策略还在自动下单 | 悬念感 |
|
||||
| 3 | 关停不是终点:把大 QMT 变成下单服务器 | 技术向 |
|
||||
| 4 | MiniQMT 关停 + 电脑无人值守,4 张图讲透 | 干货合集 |
|
||||
| 5 | 别急着重写策略,先看这个桥接方案 | 反直觉钩子 |
|
||||
|
||||
## 五、话题标签
|
||||
|
||||
```
|
||||
#MiniQMT #QMT #量化交易 #Python量化 #程序化交易 #量化策略 #自动交易 #xtquant #量化新手 #程序员副业 #无人值守 #技术分享
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、发布要点(合规提醒)
|
||||
|
||||
1. **不要出现真实账号、密码、TOKEN、IP、端口映射截图**;图里的 Token 一律打码或用占位符。
|
||||
2. 不写"稳赚""躺赚""保收益";不展示具体收益截图诱导交易。
|
||||
3. 券商开户/软件权限类话题容易被判定为引流,建议只谈技术实现,把商务信息放私信。
|
||||
4. 提到"开户""低佣"等内容时务必谨慎,容易触发平台风控。
|
||||
5. 四页图建议统一比例(3:4,1080×1440),第 1 页负责停留,第 2 页负责专业度,第 3 页负责收藏,第 4 页负责转化。
|
||||
|
||||
## 七、资料来源
|
||||
|
||||
- 桥接服务端实现:`api/qmt_rest_new.py`(14 个路由、Token 鉴权、启动流程)
|
||||
- 接口契约细节:`docs/api.md`(字段、错误码、下单与撤单语义)
|
||||
- 外部策略端调用方式:`py-client/sdk/client.py`、`py-client/sdk/trade.py`
|
||||
- 部署与自启参考:[QMT 本地电脑全自动开机运行全教程](https://licai.cofool.com/user/guide_view_3452029.html)、[国金 QMT 自动登录(Python 版)](https://blog.csdn.net/oamayi/article/details/156651767)
|
||||
- 迁移差异参考:[MiniQMT 策略转大 QMT 内置 Python](https://github.com/Listolany/MiniQMT_2_BigQMT/blob/main/SKILL.md)
|
||||
Reference in New Issue
Block a user