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 了------不可替代,但可以归零。

谢谢大家 🙏

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

相关推荐
code_pgf3 分钟前
mllm训练过程中有效地利用辅助监督信号来减少幻觉的方法
人工智能·深度学习·计算机视觉
风华圆舞5 分钟前
鸿蒙 + Flutter 下 AI 助手为什么要支持流式输出
人工智能·flutter·harmonyos
爱勇宝5 分钟前
如何评价 Claude Fable 5 全球暂停访问?
人工智能·程序员
装不满的克莱因瓶6 分钟前
自然语言处理常见任务——从文本理解到生成式AI的完整任务体系
人工智能·pytorch·python·深度学习·ai·自然语言处理
朱大喜9 分钟前
AI 数据分析实战:大模型驱动的自动化报表生成,从数据到洞察的工程化链路
人工智能
终将老去的穷苦程序员17 分钟前
基于SpringBoot的餐饮管理系统
java·spring boot·后端
wb0430720120 分钟前
阿明的二次创业——从阿明用 AI 开第二家店,看 AI 原生创业的四阶段方法论
大数据·人工智能·架构
Godspeed Zhao20 分钟前
Level 4自动驾驶系统设计0——功能与场景0
人工智能·机器学习·自动驾驶
张忠琳20 分钟前
【Go 1.26.4】Golang Map 深度解析
开发语言·后端·golang
Dola_Zou23 分钟前
边缘智能的“黑暗森林”:工业 AI 模型下沉的资产防护与变现密码
人工智能·安全·自动化·软件工程·软件加密