AI股票小助手05-用 Flask 把 MiniQMT 变成 REST API

by 雪隐 from juejin.cn/user/143341...

欢迎分享与聚合,全文转载就不必了,尊重版权,圈子就这么大,若急用可联系授权。

给量化交易加个"外挂"------用 Flask 把 MiniQMT 变成 REST API

前言:一切为了给 OpenClaw 当"小弟"

先交代一下背景:我后面会跟大家介绍一个叫 OpenClaw 的东西,功能贼强,强到我想给它单独搞一个隔离环境(怕它造反)。为了让 OpenClaw 能优雅地指挥我的股票账户,我需要一个 HTTP API 当翻译官------OpenClaw 发个 GET 请求,我的 MiniQMT 就乖乖去干活。

所以就有了这个项目:基于 Flask 把 xtquant 的行情+交易接口包装成 RESTful API。

⚠️ 重要警告(敲黑板)

这个接口可以直接操作你的股票账户------下单、撤单、查持仓、转钱(如果开放的话)。

千万不要把它暴露到公网! 老老实实在自己家内网玩。

万一被黑客盯上,他不仅能偷走你的钱,还可能顺手帮你全仓买入"退市概念股"......那画面太美我不敢看。


一、这玩意儿能干啥?

一句话:让你的其他程序(前端、脚本、手机 App,甚至家里的小爱同学)都能通过 HTTP 请求调取股票数据、甚至下单交易。

核心功能清单

行情类(不用登录也能用)
接口 方法 说明
/api/quote GET 查单只股票实时行情
/api/quotes POST 批量查(最多50只,多了怕你网卡)
/api/history GET 历史K线(日线/分钟线都行)
交易类(需要先登录QMT客户端)
接口 方法 说明
/api/order POST 下单(代码里默认禁用了,怕你手滑)
/api/cancel POST 撤单(同上,保险起见先关着)
/api/orders GET 查当日订单(看看自己冲动了几次)
/api/positions GET 查持仓(绿油油的持仓就不展示了)
/api/account GET 查账户资产(看一次心痛一次)
其他(彩蛋)
接口 方法 说明
/api/financial GET 查财务指标(帮你避雷)
/api/health GET 健康检查(类似"还活着吗?")

二、代码里的几个"心机"设计

1. 交易接口的延迟初始化(懒汉模式)

python 复制代码
def _get_trader_and_account():
    global _trader, _account_info
    if _trader is None:
        with _trader_lock:
            if _trader is None:
                from xtquant import xttrader
                path = r'<miniqmt软件安装位置>'
                _trader = xttrader.XtQuantTrader(path, int(time.time()))
                _trader.start()
                # ... 连接和订阅逻辑

为什么这么写?

因为很多人(包括我)启动 Flask 服务的时候,QMT 客户端还没登录。如果一上来就初始化交易接口,它会报错然后闹脾气。

所以我们搞了个 "你什么时候叫我,我什么时候连" 的懒加载模式,还加了双重锁,防止多线程下重复初始化------这叫 线程安全的单身狗模式

2. 股票代码自动补全(妈妈再也不用担心我写 .SH 还是 .SZ)

python 复制代码
def _code_with_market(code):
    code = str(code).strip()
    if '.' in code:
        return code
    if code.startswith('6'):
        return f"{code}.SH"
    return f"{code}.SZ"

逻辑很简单:

  • 6 开头 → 上海(.SH)
  • 0 或 3 开头 → 深圳(.SZ)
  • 你非要在代码里写 600519.SZ?那我也认,直接返回原样。

示例:

输入 600519 → 输出 600519.SH(茅台,永远的神)

输入 000001 → 输出 000001.SZ(平安银行,老牌蓝筹)

3. 实时行情接口(一次性把家底都给你)

python 复制代码
@app.route('/api/quote', methods=['GET'])
def get_quote():
    ticks = xtdata.get_full_tick([full_code])
    t = ticks[full_code]
    # 返回 price, change_pct, volume, amount, high, low, open, close, pe, pb 等

get_full_tick 这个函数很实在,一次返回几十个字段:现价、涨跌幅、成交量、成交额、最高、最低、开盘、昨收、市盈率、市净率......

就差告诉你"这家公司老板今天吃啥了"。


三、试试看:调用示例

启动服务后(默认端口 8080),你可以用浏览器或 curl 测试。

获取贵州茅台实时行情:

bash 复制代码
curl "http://localhost:8080/api/quote?code=600519"

返回(大概长这样):

json 复制代码
{
  "code": "600519.SH",
  "price": 1685.00,
  "change_pct": 0.82,
  "volume": 123456,
  "amount": 2.08e8,
  "pe": 28.5,
  "pb": 9.2
}

获取历史K线(日线,从今年元旦到今天):

bash 复制代码
curl "http://localhost:8080/api/history?code=600519&period=1d&start=20240101&end=20240601"

返回是一堆 [时间, 开, 高, 低, 收, 成交量] 的数组,适合直接画 K 线图。


四、技术栈 & 启动方式

  • Web 框架:Flask(轻量级,启动快,适合这种小服务)
  • 数据源:xtquant(MiniQMT 的 Python API,券商提供的正规军)
  • 默认端口8080(你可以在代码里改成别的,只要不跟别的服务打架)

启动命令

bash 复制代码
python app.py

启动后你会看到类似输出:

csharp 复制代码
 * Serving Flask app 'app'
 * Running on http://0.0.0.0:8080

注意:行情接口不需要 QMT 客户端登录就能用,但交易相关接口(查询持仓、下单等)需要你先打开 QMT 客户端并登录,否则会报"未连接"。


五、完整代码

代码已经传到 Gitee,结构清晰,注释详细,下载即用(当然你得先装好 xtquant 和 Flask)。

👉 本章代码传送门


写在最后

如果你觉得这篇文章帮你省了(或者赚了)几顿饭钱,请点赞、评论、转发------你的支持是我继续写"OpenClaw 调教指南"的动力。

最后再唠叨一遍:

不要把这个接口暴露到公网! 内网用用就挺好。

万一哪天你的智能音箱被黑,黑客对着它喊一声"全仓买入某股票",那你家的资产瞬间就变成 NFT 了------不可替代,但可以归零。

谢谢大家 🙏

祝你们写的代码一次跑通,买的股票天天涨停。

相关推荐
Seoyoneh4 分钟前
2026年呼叫中心选型技术指南:架构、API与高可用维度的评估清单
人工智能·信息与通信·通信
xierui1231239 分钟前
AI 视频横版改竖版:先保住操作动作,再调整裁切中心
人工智能
高级程序源14 分钟前
django校企合作实习基地管理系统82506-计算机课程设计、毕业设计
vue.js·后端·python·mysql·django·课程设计·pygame
东方芷兰15 分钟前
Agent 技术摘要 02 —— 区块链、比特币、挖矿、ETF、比特币疯涨事件、以太坊、以太币、显卡荒事件
人工智能·笔记·python
万物智能信息科技17 分钟前
GPIO控制状态灯—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
人工智能·华为·开源·harmonyos·鸿蒙
像豆芽一样优秀19 分钟前
用 Codex + 阿里云 DataWorks MCP 实现数仓自动化
大数据·人工智能
FII工业富联科技服务23 分钟前
从台积电微通道散热看 AI 热管理:热量究竟如何从芯片走向机房?
人工智能·ai
AIGCmagic社区32 分钟前
Show-Harness拆读,语义动作单元让VLM直接控机械臂,零样本跨任务89%
人工智能·aigc·具身智能·ai多模态
ZYJCSZKJ32 分钟前
GEO 服务技术能力评估模型:交付体系、内容架构与持续运维的工程对比
人工智能
尘世中一位迷途小书童32 分钟前
我为什么在 Windows 上做了一个翻译软件:SnapLingo
前端·人工智能·机器学习