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

谢谢大家 🙏

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

相关推荐
2601_95631988几秒前
最新量化软件怎么选,先按能力短板匹配工具类型
人工智能·python
前端开发江鸟1 分钟前
从 messages 看懂 Agent 的工具调用循环:Runtime 如何衔接模型与工具
人工智能
天天代码码天天3 分钟前
PP-OCR Linux 部署不再折腾:OpenCV、ONNX Runtime、OpenVINO 三版本开箱即用
人工智能
皓悦编程记4 分钟前
【免费数据集009期】Urban Issues Dataset:10类城市公共场景异常目标检测数据集
人工智能·计算机视觉·目标跟踪
卷无止境4 分钟前
Apache Ossie:打破数据孤岛的语义互操作标准
后端·数据分析
飘尘8 分钟前
让AI能够预演现实的世界模型,到底是什么?
前端·人工智能
晓杰在写后端8 分钟前
从0到1实现Balatro游戏后端(11):商店商品池与运行时商品实例生成
后端·游戏开发
小帽子_12310 分钟前
双碳背景下 PCS 技术迭代与储能产业发展机遇
人工智能·物联网
Tbisnic14 分钟前
26.AI大模型:RNN、LSTM、GRU
人工智能·python·rnn·gru·大模型·llm·lstm
BizObserver22 分钟前
传统制造企业官网升级:2026数字化品牌阵地建设与服务商能力评估
大数据·人工智能·制造