API · 使用说明

天元之弈 · 量化脚本与自动化调用|适用于竞价排行等只读数据

一、适用场景

开放 API 面向量化脚本、定时任务、内部分析服务等机器调用场景。 与官网浏览器访问不同,脚本需使用 API Key 鉴权,无需 MySQL 直连或爬取网页。

当前开放接口覆盖竞价排行、选股池,以及策略展示跟单: 每日主板分析 / 创业板分析 对应竞价排行 daily/maindaily/chinext,同包返回上证当日开盘仓位档位 indexOpenPosition; 主板选股池 /v1/open/pool/main-board/daily 面向 09:05 拉池,同包返回上证昨收仓位档位 indexClosePosition,供次日竞价建仓门禁使用; 策略展示跟单 /v1/open/showcase/strategies/{code}/today 只回答当天买什么(数据来自展示看板已落库成交,不另算选股)。

📌 使用前准备

  1. 在官网注册并登录;
  2. 进入 控制台 → 右上角用户菜单 → API 密钥
  3. 创建 Key 并立即复制保存(完整 Key 仅显示一次);
  4. 在脚本或终端中配置 Key 与请求地址(见下文)。

二、终端 / 脚本要填什么

调用方不需要在后台登记「终端名称」;系统会根据 IP 与 User-Agent 自动统计活跃来源。

配置项 是否必填 说明与示例
API Key 必填 控制台创建的完整字符串,形如 ak_live_xxxxxxxx_xxxxxxxx。建议写入环境变量 OPEN_API_KEY,勿提交 Git。
请求地址 必填 公网 Base:https://www.playwithgod.fun/api
竞价主板:/v1/open/market/auction-ranking/daily/main
竞价创业板:/v1/open/market/auction-ranking/daily/chinext
主板选股池:/v1/open/pool/main-board/daily
策略展示跟单:/v1/open/showcase/strategies/{code}/today
请求头 必填 X-API-Key: <你的 Key>
不需要 JWT 登录 Token,也不要使用内网 Internal Token。
trade_date 强烈建议 查询参数,格式 YYYY-MM-DD。不带则默认「今天」;非交易日返回 40401;竞价池未就绪 40402;大盘仓位档位未就绪 40403(见第六节)。

三、调用示例

1. curl · 主板 daily/main

curl -s \
  -H "X-API-Key: ak_live_你的完整Key" \
  "https://www.playwithgod.fun/api/v1/open/market/auction-ranking/daily/main?trade_date=2026-03-17"

2. curl · 创业板 daily/chinext

权限 scope 与主板相同(auction_ranking:daily),响应结构一致,boardchinext

curl -s \
  -H "X-API-Key: ak_live_你的完整Key" \
  "https://www.playwithgod.fun/api/v1/open/market/auction-ranking/daily/chinext?trade_date=2026-03-17"

3. 环境变量 + 项目脚本

export OPEN_API_KEY='ak_live_你的完整Key'
export OPEN_API_BASE='https://www.playwithgod.fun/api'

python3 quant-platform/scripts/jq_sync/fetch_daily_main.py --trade-date 2026-03-17
python3 quant-platform/scripts/jq_sync/fetch_daily_chinext.py --trade-date 2026-03-17

4. Python

import os
import requests

API_KEY = os.environ["OPEN_API_KEY"]
url = "https://www.playwithgod.fun/api/v1/open/market/auction-ranking/daily/main"
resp = requests.get(
    url,
    headers={"X-API-Key": API_KEY},
    params={"trade_date": "2026-03-17"},
    timeout=30,
)
resp.raise_for_status()
body = resp.json()
data = body["data"]      # 业务数据
meta = body.get("meta")  # 缓存、配额等

四、响应格式

成功时返回统一包络结构,业务数据在 data 字段中:

{
  "code": 0,
  "message": "ok",
  "request_id": "req_...",
  "data": {
    "tradeDate": "2026-03-17",
    "board": "main_board",
    "poolCount": 3,
    "items": [ /* Top3:竞价涨幅、收盘涨幅、RSI/MACD、目标价等 */ ],
    "indexOpenPosition": {
      "positionCapPct": 99,
      "openVsMa3Pct": 0.859,
      "openVsMa5Pct": 0.912,
      "cap99Streak": 1,
      "cap20Streak": 0,
      "entryGateAllow": 1,
      "entryGateMode": "ma_dev_band",
      "entryGateReason": "ok_cap99_day1_ma5",
      "regimeLabel": "多头排列·开盘双上",
      "positionRegime": "strong_bull",
      "ruleVersion": "v2"
    }
  },
  "meta": {
    "trade_date": "2026-03-17",
    "board": "main_board",
    "cache_hit": true,
    "used_today": 12,
    "limit_per_day": 2000
  }
}

daily/chinext 响应相同,仅 data.boardchinextitems 为创业板 Top3;indexOpenPosition 仍为上证大盘档位,建仓脚本需读取 data.indexOpenPosition.positionCapPct(20~99)。cap99Streak / cap20Streak 为连续处于该档附近的交易日数(含当日)。建仓门禁用库字段 entryGateAllow(1 可开 / 0 禁止)、entryGateModeentryGateReason,由写入端计算后透出;客户端读 entryGateAllow,缺字段时再回退本地计算。缺 cap20Streak 时请勿把强空档当成 streak=1。

排障时可记录 request_id,便于在后台审计日志中定位。

失败时 HTTP 状态码非 200,响应体通常含业务错误码 code,例如:

{
  "code": 40402,
  "message": "竞价数据未就绪",
  "retry_after_sec": 5
}

五、配额与限制

账号类型 分钟限流 日配额 历史数据
普通用户 60 次 / Key / 分钟 2000 次 / Key / 天 库内全部已有交易日(不限制)
会员用户 120 次 / Key / 分钟 10000 次 / Key / 天 库内全部已有交易日(不限制)
  • 限流与配额按 API Key 计算;多人共用一把 Key 会共用额度。
  • 每个账号最多 5 把有效 Key,建议每人自建、专 Key 专用。
  • 9:25–9:35 竞价高峰时段缓存 TTL 较短,脚本请避免高频无意义轮询。

六、常见错误

除 HTTP 状态码外,请优先解析响应 JSON 中的 code 字段,勿用字符串包含判断(例如 40401 含子串 401 会误判 Key 失效)。

HTTP 业务 code 含义 处理建议
401 40101 Key 缺失、无效或已吊销 检查 X-API-Key 是否完整;在控制台确认 Key 状态
403 40301 scope 不足 确认 Key 已开通对应权限(如 auction_ranking:daily
404 40401 非法交易日,或该历史日期在库中无记录 确认 trade_date 为有效 A 股交易日;不要对历史空日反复重试
404 40402 竞价数据未就绪(今天是交易日,但 poolCount=0,通常出现在 9:25–9:28) retry_after_sec(默认 5 秒)间隔重试;主板池一般约 9:27:30 后可用。脚本可固定在 9:29 拉取,或 9:29:30 二次重试
404 40403 大盘仓位档位未就绪(竞价池已有数据,但 indexOpenPosition.positionCapPct 尚未写入,常见于 9:27 前后) retry_after_sec 重试;档位一般于 9:30 前后可用。主板与创业板 daily 接口均会校验
429 42901 分钟限流(请求过于频繁)。响应 detail.code=42901,含 retry_after_sec(约 90 秒)与 Retry-After 先读 detail / Retry-After,冷却后再拉;勿短间隔连打
429 42902 日配额用尽。响应含 used_todaylimit_per_dayreset_atretry_after_sec 停止重试至次日(或换 Key / 升级会员);冷却秒数按 retry_after_sec

早盘 9:25–9:35 服务端会对当日请求做短重试;若仍返回 40402,说明竞价入库尚未完成,客户端继续等待重试即可,不是 API Key 问题

七、主板选股池(09:05)

路径 GET /v1/open/pool/main-board/daily,与竞价 daily/main 共用 scope auction_ranking:daily放在 /market/* 下。返回约 500 只主板池标的(含日线门禁字段),并同包返回上证昨收仓位档位 indexClosePosition

查询参数 trade_date 表示选股池日 T+1(例如 2026-08-21)。 服务端用上一交易日 T(例如 2026-08-20)去读收盘 CAP;data.tradeDate 仍是池日, data.indexClosePosition.tradeDate 才是昨收日,二者不相等。

indexOpenPosition 与 indexClosePosition

indexOpenPositionindexClosePosition
数据日 当日竞价开盘 上一交易日收盘
主接口 竞价 daily/main(及 chinext) main-board/daily
用途 展示、同日口径 次日竞价建仓门禁

客户端次日集合竞价是否建仓,读池接口的 indexClosePosition.entryGateAllow / positionCapPct; 不要用竞价接口的 indexOpenPosition 代替。不单独提供 /index-regime 接口。

indexClosePosition 字段

camelCase;结构对齐 indexOpenPosition,仅将 open* 换成 close*。标的固定上证 SHSE.000001

字段说明
tradeDate昨收日 T(≠ 请求的池日)
symbolSHSE.000001
closePrice / preClose / ma3Price / ma5Price价格
closeVsMa3Pct / closeVsMa5Pct / ma3VsMa5SpreadPct偏离 MA
closeAboveMa3 / closeAboveMa5 / ma3AboveMa5bool
positionRegime / positionCapPct / regimeLabel档位
cap99Streak / cap20Streak连续档位数
entryGateAllow / entryGateMode / entryGateReason次日竞价是否允许建仓(1 可开 / 0 禁止)
l1RatioMaxAllow / l1NearSweetAllowL1 门禁
ruleVersion / source / fetchOk元数据

meta.data_ready 现表示池 + 昨收 CAP 均就绪(池有行且 indexClosePosition 非空)。 仅池未灌数仍返回 40402;池已有但昨收档位未写入时 HTTP 200,indexClosePositionnullmeta.data_ready=false,客户端应短间隔重试。

时间方法路径说明
09:05+ GET /v1/open/pool/main-board/daily 主板选股池(~500),含日线门禁字段,同包返回昨收 CAP indexClosePosition;未灌数 40402;池有数据但昨收档位未写入则 meta.data_ready=false
09:05+ GET /v1/open/auction-prev/daily 池内标的昨竞价量额(数据源 stock_auction,非 Top3 榜);传当日 T,服务端算 prevTradeDate
09:24 POST /v1/open/client/tick-top3/report 客户端 tick Top3 快照上报(camelCase);不要上传 tickBySymupdatedAt 必填

items 中的 dailyRsidailyTrend 等为日线门禁字段;库内列为空时服务端会按 stock_daily 在 API 层补算(截至上一交易日收盘)。

1. curl · 主板池

curl -s \
  -H "X-API-Key: ak_live_你的完整Key" \
  "https://www.playwithgod.fun/api/v1/open/pool/main-board/daily?trade_date=2026-08-21"
{
  "code": 0,
  "data": {
    "tradeDate": "2026-08-21",
    "poolCount": 500,
    "items": [],
    "indexClosePosition": {
      "tradeDate": "2026-08-20",
      "symbol": "SHSE.000001",
      "closePrice": 3894.422,
      "positionCapPct": 31,
      "entryGateAllow": 1,
      "entryGateMode": "ma_dev_band",
      "entryGateReason": "ok_cap",
      "l1RatioMaxAllow": 1,
      "l1NearSweetAllow": 1
    }
  },
  "meta": { "data_ready": true, "trade_date": "2026-08-21" }
}

早盘配套:昨竞价与 tick Top3

以下接口与主板池同一条早盘链路,共用 scope auction_ranking:daily

2. curl · 昨竞价

curl -s \
  -H "X-API-Key: ak_live_你的完整Key" \
  "https://www.playwithgod.fun/api/v1/open/auction-prev/daily?trade_date=2026-08-22"

3. curl · tick Top3 上报

curl -s -X POST \
  -H "X-API-Key: ak_live_你的完整Key" \
  -H "Content-Type: application/json" \
  -H "X-Client-Id: jq-terminal-01" \
  -d '{
    "tradeDate": "2026-08-22",
    "selectionSource": "main_board_tick",
    "poolCount": 63,
    "eligibleCount": 18,
    "scoringVersion": "tick_scoring@1.0.0",
    "updatedAt": "2026-08-22 09:24:52",
    "top3": [{
      "symbol": "SHSE.600000",
      "stockName": "浦发银行",
      "preClose": 12.34,
      "openPrice": 12.56,
      "openChangePct": 1.78,
      "volume": 10303.0,
      "turnover": 12945678.0,
      "auctionTurnoverRatio": 2.3,
      "volumeRatio": 1.8,
      "bidV1": 500.0,
      "auctionScore": 72.0,
      "auctionGrade": "A"
    }]
  }' \
  "https://www.playwithgod.fun/api/v1/open/client/tick-top3/report"

八、策略展示跟单(当天买什么)

只回答四件事:今天开不开仓、买什么、什么价格、什么时候。 鉴权 X-API-Key,scope showcase:copy(新建 Key 默认带上;旧 Key 请重签或新建)。 不另算选股、不代下单、不返回卖出(隔夜默认次日竞价卖,跟单端自行处理)。

工作日看板 09:28 / 09:30 / 09:35 重建。客户端 09:28 起每 30s 轮询到 ready=true 或 09:36,按 orderTime 赶集合竞价。

何时可调

接口全天都能请求(需 X-API-Key)。变的是当天指令何时齐:看 data.ready,不要看 HTTP 是否 200。

时间(上海)调用结果
交易日 09:28 之前 可以调,但 ready=falseopenPosition / 标的 / 价格为空。当天单尚未重建。
09:28 ~ 09:36 主刷 09:28,补刷 09:30、09:35。每 30 秒拉一次,直到 ready=true(或等到 09:36)。挂单时刻为 orderTime=09:30
09:35 之后(交易日) 当天指令应已稳定,随时可取。
周六日 / 节假日 接口可调,没有新开仓;openPosition 一般为 false
补拉历史 随时可调,加查询参数 trade_date=YYYY-MM-DD

旧 Key 若没有 scope showcase:copy,会 403;请在控制台重签或新建 Key。

方法路径说明
GET /v1/open/showcase/strategies 可跟单策略:code / name
GET /v1/open/showcase/strategies/{code}/today 当天指令;可选 trade_date=YYYY-MM-DD(默认上海当日)

codemain_ratio_top1_overnight 激进组;main_ratio_stable_h3_5 稳健组。

today 的 data

字段含义
ready当日展示结果是否已重建;未就绪则其余交易字段为空
openPosition今天是否开仓:true / false;未就绪 null
symbol / stockName买什么;不开仓时为 null
buyPrice什么价格:昨收 × (1 + (竞价涨幅% + 2%) / 100);不开仓时为 null
tradeDate / orderTime哪一天、何时挂单(09:30 集合竞价)
code策略代码

buyPrice 与展示看板含滑点成交价不同;实盘以撮合为准;不构成投资建议。不返回净值曲线、卖单、滑点、仓位档、跳过原因。

1. curl · 当天买入

curl -s \
  -H "X-API-Key: ak_live_你的完整Key" \
  "https://www.playwithgod.fun/api/v1/open/showcase/strategies/main_ratio_top1_overnight/today"
{
  "code": 0,
  "message": "ok",
  "data": {
    "ready": true,
    "tradeDate": "2026-09-11",
    "orderTime": "09:30",
    "code": "main_ratio_top1_overnight",
    "openPosition": true,
    "symbol": "SZSE.002212",
    "stockName": "天融信",
    "buyPrice": 6.79104
  },
  "meta": { "rebuildAt": "09:28" }
}

2. 示例脚本

python quant-platform/scripts/jq_sync/fetch_showcase_today.py --code main_ratio_stable_h3_5

九、安全建议

  • API Key 等同于密码:不要写入代码仓库、截图或群聊。
  • 泄露后立即在控制台吊销并新建 Key。
  • 生产环境使用专用账号创建 Key,避免长期使用管理员 Key。
  • 可在控制台「终端详情」查看活跃 IP,发现异常来源及时吊销。

十、与官网其他接口的区别

方式 是否需要 Key 适用对象
官网页面 / /api/auction-ranking/* 浏览器访问排行榜(公开,无需 Key)
开放 API /api/v1/open/... 量化脚本、自动化任务(推荐)
MySQL 直连 数据库账号 旧方案,逐步停用,不推荐新脚本使用

文档随产品迭代更新。当前已开放主板/创业板 daily、09:05 主板池与昨竞价、09:24 tick Top3 上报、行业 Top20 levels、绩效对账;dates、全量 list 等将在后续版本开放; Key 管理、终端统计请见 控制台 → API 密钥