Skip to content

数据接口 API ​

用户端 HTTP 接口说明:使用请求头 x-api-key 鉴权,覆盖基金行情与自动交易相关端点;

属性说明
适用范围本地开发ETF策略,对接第三方平台等,仅限VIP会员用户使用
典型场景ETF,LOF基金行情拉取、获取策略信息、获取策略最新交易信号
文档版本V1.0

1. 概述 ​

本文档包含 19 个 HTTP 接口,分为「基金行情」「自动化交易」「策略回测」「策略管理」四类。

2. 环境与基础 URL ​

基础URL: https://www.cifangquant.com/api

请求约定

  • 传输编码:UTF-8
  • 日期 Query:YYYY-MM-DD
  • JSON Body:Content-Type: application/json

3. 认证 ​

3.1 API Key ​

项规范
请求头x-api-key: <平台发放的 API Key>(必填)

3.2 获取 API Key ​

  1. 登录 次方量化(接口仅限 VIP 会员使用,开通与升级见 会员定价)。
  2. 打开 API Key 管理页,点击创建,生成并复制你的 API Key。
  3. 之后每次请求在请求头中携带 x-api-key: <你的 API Key>。

注意

  • API Key 等同于账号凭证,请妥善保管,不要提交到代码仓库、公开分享或写进前端代码。
  • Key 泄露或失效(接口返回 401)时,回到上述页面重新生成,并替换调用方的旧 Key。

3.3 认证失败 ​

HTTP 状态码说明
401 UnauthorizedKey 无效或未提供

示例(401)

http
HTTP/1.1 401 Unauthorized
WWW-Authenticate: ApiKey
Content-Type: application/json

{"detail":"无效的API Key或Secret"}

4. 统一响应体 ​

字段类型说明
codeinteger业务码;0 表示成功
messagestring人类可读提示
dataobject | array | null业务载荷;失败时可为 null

成功示例

json
{
  "code": 0,
  "message": "ok",
  "data": {}
}

5. 接口索引 ​

序号方法路径摘要
1GET/api/fund/list基金列表
2GET/api/fund/hist_em基金历史日线行情(多代码、复权)
3GET/api/fund/hist_min基金历史分钟线行情(仅 SVIP)
4GET/api/fund/hist_intraday基金每日固定时点累计行情(仅 SVIP)
5GET/api/fund/spot基金实时行情快照(含买卖五档)
6GET/api/fund/exchange_rank场内基金收益排行
7GET/api/trading/list自动交易策略列表
8GET/api/trading/get_strategy_signal指定策略当日信号
9POST/api/fund/momentum计算 ETF 动量值
10POST/api/back-test/momentum提交动量轮动策略回测
11GET/api/back-test/status/{task_id}查询回测任务状态与结果
12POST/api/back-test/publish发布为实盘模拟策略
13GET/api/strategy/my-running我发布的运行中策略
14GET/api/strategy/list/rank公开策略区间收益排行
15GET/api/strategy/preview/{strategy_id}预览策略参数与绩效
16POST/api/strategy/copy复制公开策略
17POST/api/strategy/notify订阅策略调仓通知
18POST/api/strategy/{strategy_id}/visibility切换策略公开/私有
19POST/api/strategy/{strategy_id}/stop停止实盘模拟策略

6. 基金行情 API ​

模块路径前缀:/api/fund

6.1 获取基金列表 ​

获取基金清单;可选关键词过滤

属性值
方法 / 路径GET /api/fund/list
鉴权x-api-key

Query 参数

名称类型必填说明
key_wordstring否基金代码或名称;省略时由返回全量

响应

  • data:object[],基金信息列表, 每项为一只基金的基础信息;字段结构如下。

data[] 单条记录字段

字段类型说明
fund_codestring基金代码
fund_namestring基金名称
fund_typestring基金类型(如指数型-股票)
fund_marketstring上市市场代码(如 SH、SZ)
establish_datestring成立日期,YYYY-MM-DD
float_sharesnumber流通份额,单位:份(如 1.5e9 表示 15 亿份);无数据时为 0 或 null

data 示例

json
[
  {
    "fund_code": "159107",
    "fund_name": "创业板软件ETF富国",
    "fund_type": "指数型-股票",
    "fund_market": "SZ",
    "establish_date": "2025-09-09",
    "float_shares": 1500000000
  }
]

请求示例

bash
curl -sS -H "x-api-key: YOUR_API_KEY" \
  "https://<host>/api/fund/list?key_word=510300"

6.2 获取基金历史日线行情 ​

批量查询基金历史日线(日 K)行情数据,每行为一个交易日的开高低收,支持复权选项。如需分钟级数据,请使用 6.3 历史分钟线。

属性值
方法 / 路径GET /api/fund/hist_em
鉴权x-api-key

Query 参数

名称类型必填说明
symbolstring是基金代码;多个以英文逗号 , 分隔,最多支持同时查询50支基金
start_datedate是开始日期 YYYY-MM-DD;可回溯年限按会员等级限制:VIP 最早 2018-01-01,SVIP 最早 2015-01-01,早于下限返回 400
end_datedate是结束日期 YYYY-MM-DD
adjuststring否,默认 none复权:none | qfq | hfq

响应

  • data:对象;键为请求参数 symbol 按逗号拆分后的基金代码,值为该标的在 start_date~end_date 区间内的日线行情(按交易日升序)。

行数据格式(data[基金代码][i] 为长度 9 的数组)

下标类型字段含义
0string交易日期,YYYY-MM-DD
1number开盘价
2number收盘价
3number最高价
4number最低价
5number涨跌幅(百分比数值,如 7.02 表示约 7.02%)
6number成交量
7number成交额(元)
8number | nullIOPV(基金净值估算,与价格同一复权口径),无数据时为 null

data 示例(节选两只标的、各两个交易日)

json
{
  "161226": [
    ["2026-04-01", 2.798, 2.929, 2.978, 2.76, 7.02, 4064275, 11532680, 2.921],
    ["2026-04-02", 2.771, 2.796, 2.838, 2.724, -4.54, 3790675, 10493220, 2.803]
  ],
  "518880": [
    ["2026-04-01", 9.95, 10.024, 10.028, 9.912, 3.35, 8356708, 83250310, 10.011],
    ["2026-04-02", 10, 9.738, 10, 9.641, -2.85, 13026467, 128300750, null]
  ]
}

请求示例

bash
curl -sS -H "x-api-key: YOUR_API_KEY" \
  "https://<host>/api/fund/hist_em?symbol=510300,510500&start_date=2024-01-01&end_date=2024-12-31&adjust=qfq"

6.3 获取基金历史分钟线行情 ​

批量查询基金历史 1 分钟 K 线,参数和响应与 6.2 基本一致,区别是时间区间精确到时分秒,每行为一根分钟线。

仅限 SVIP 会员:非 SVIP 账号调用会返回 403。开通或升级 SVIP:https://www.cifangquant.com/pricing

属性值
方法 / 路径GET /api/fund/hist_min
鉴权x-api-key,且仅限 SVIP 会员

Query 参数

名称类型必填说明
symbolstring是基金代码;多个以英文逗号 , 分隔,最多 10 支
start_timedatetime是开始时间 YYYY-MM-DD HH:MM:SS(含);SVIP 可回溯最早 2015-01-01,早于下限返回 400
end_timedatetime是结束时间 YYYY-MM-DD HH:MM:SS(含);不得早于 start_time,与 start_time 的日期跨度最多 31 天(含首尾)
adjuststring否,默认 none复权:none | qfq | hfq

说明

  • 分钟线的时间戳为该分钟的起始时刻,例如 09:30:00 表示 09:30~09:31 这一分钟;start_time、end_time 按此时间戳比较,两端均包含。
  • 价格默认不复权;hfq 为后复权价,qfq 为前复权价(以该基金最新价为基准),复权因子与 6.2 同源。开高低收都会复权,成交量不变。
  • 涨跌幅为该分钟收盘价相对前一交易日收盘价的涨跌幅(百分比),不随复权参数变化。
  • 区间内没有行情的日期(非交易日、停牌)没有数据;无数据的代码对应空数组。

响应

  • data:对象;键为请求参数 symbol 按逗号拆分后的基金代码,值为该标的在区间内的分钟线(按时间升序)。

行数据格式(data[基金代码][i] 为长度 9 的数组)

下标类型字段含义
0string分钟起始时间,YYYY-MM-DD HH:MM:SS
1number开盘价
2number收盘价
3number最高价
4number最低价
5number涨跌幅(百分比数值,如 1.25 表示约 1.25%)
6number该分钟成交量
7number该分钟成交额(元)
8number | null该分钟 IOPV(基金净值估算,与价格同一复权口径),无数据时为 null

data 示例(节选两根分钟线)

json
{
  "510300": [
    ["2026-04-01 09:30:00", 4.012, 4.015, 4.018, 4.01, 0.07, 1523400, 6115820, 4.0132],
    ["2026-04-01 09:31:00", 4.015, 4.02, 4.021, 4.014, 0.2, 986200, 3964410, null]
  ]
}

错误

状态码场景
403当前账号不是 SVIP 会员(含 VIP 未升级、会员已过期),响应 detail 中附有开通链接
400start_time 晚于 end_time、日期跨度超过 31 天、symbol 为空或超过 10 支
422缺少必填参数、时间格式无效或 adjust 取值不合法

请求示例

bash
curl -sS -H "x-api-key: YOUR_API_KEY" -G "https://<host>/api/fund/hist_min" \
  --data-urlencode "symbol=510300,510500" \
  --data-urlencode "start_time=2026-04-01 09:30:00" \
  --data-urlencode "end_time=2026-04-01 15:00:00" \
  --data-urlencode "adjust=none"

6.4 获取基金每日固定时点累计行情 ​

对 start_date~end_date 范围内每一个交易日,从开盘到time时间点的累计日 K 行情,返回逐日序列。适合横向对比「每天某个固定时点」的价位,例如每天 14:00 的价位。

仅限 SVIP 会员:非 SVIP 账号调用会返回 403。开通或升级 SVIP:https://www.cifangquant.com/pricing

属性值
方法 / 路径GET /api/fund/hist_intraday
鉴权x-api-key,且仅限 SVIP 会员

Query 参数

名称类型必填说明
symbolstring是基金代码;多个以英文逗号 , 分隔,最多 50 支
start_datedate是开始日期 YYYY-MM-DD;SVIP 可回溯最早 2015-01-01,早于下限返回 400
end_datedate是结束日期 YYYY-MM-DD,不得早于 start_date;与 start_date 的区间最多 366 天(含首尾)
adjuststring否,默认 none复权:none | qfq | hfq
timestring是截止时间点 HH:MM,如 14:00 表示开盘截止到14:00 时刻行情

响应

  • data:对象;键为请求参数 symbol 按逗号拆分后的基金代码,值为按交易日升序的累计日线;无数据的代码对应空数组。

行数据格式(data[基金代码][i] 为长度 8 的数组,前 7 列与 6.2 一致,第 8 列为 IOPV,不含成交额)

下标类型字段含义
0string交易日期,YYYY-MM-DD
1number开盘价
2number收盘价(time时刻的价格)
3number最高价(截止到time时刻)
4number最低价(截止到time时刻)
5number涨跌幅(百分比数值,如 1.25 表示约 1.25%)
6number累计成交量(截止到time时刻)
7number | nullIOPV(基金净值估算,与价格同一复权口径),无数据时为 null

data 示例(time=14:00,节选两个交易日)

json
{
  "510300": [
    ["2026-04-01", 4.012, 4.056, 4.061, 4.008, 1.02, 18234500, 4.0552],
    ["2026-04-02", 4.05, 4.031, 4.066, 4.024, -0.62, 15120300, null]
  ]
}

错误

状态码场景
403当前账号不是 SVIP 会员(含 VIP 未升级、会员已过期),响应 detail 中附有开通链接
400time 格式不是 HH:MM(带秒会报错)、start_date 晚于 end_date、区间超过 366 天、symbol 为空或超过 50 支
422缺少必填参数、日期格式无效或 adjust 取值不合法

请求示例

bash
curl -sS -H "x-api-key: YOUR_API_KEY" \
  "https://<host>/api/fund/hist_intraday?symbol=510300,510500&start_date=2026-04-01&end_date=2026-04-30&time=14:00&adjust=qfq"

6.5 获取基金实时行情 ​

获取场内基金实时行情快照,包含最新价、开高低收、涨跌停价、IOPV 和买卖五档。盘中为实时价,盘后为最近一次收盘价。

属性值
方法 / 路径GET /api/fund/spot
鉴权x-api-key

Query 参数

名称类型必填说明
symbolstring是基金代码;多个以英文逗号 , 分隔,最多 50 支;不支持不传返回全量

响应

  • data:对象;键为基金代码,值为该基金的实时行情快照。
  • 没有行情数据的代码不会出现在 data 中,请以返回的键判断哪些代码有数据。

data[基金代码] 字段说明

字段类型说明
codestring基金代码
trade_timestring最新行情对应的交易时间
updated_atstring数据更新时间
trading_phase_codestring交易阶段代码
pre_closenumber昨收价
lastnumber最新价
opennumber开盘价
highnumber最高价
lownumber最低价
closenumber收盘价
volumenumber成交量
amountnumber成交额
num_tradesnumber成交笔数
high_limitednumber涨停价
low_limitednumber跌停价
iopvnumber | nullIOPV(ETF 净值估算),无数据时为 null
bid_price1 ~ bid_price5number | null买一到买五价格,无数据时为 null
bid_volume1 ~ bid_volume5number | null买一到买五数量,无数据时为 null
ask_price1 ~ ask_price5number | null卖一到卖五价格,无数据时为 null
ask_volume1 ~ ask_volume5number | null卖一到卖五数量,无数据时为 null

快照不直接提供涨跌幅,可用 (last - pre_close) / pre_close 自行计算。

data 示例(买卖五档已节选)

json
{
  "510300": {
    "code": "510300",
    "trade_time": "2026-04-23T13:32:33",
    "updated_at": "2026-04-23T13:32:34",
    "trading_phase_code": "T",
    "pre_close": 4.012,
    "last": 4.056,
    "open": 4.02,
    "high": 4.061,
    "low": 4.008,
    "close": 4.056,
    "volume": 18234500,
    "amount": 73985000.5,
    "num_trades": 5210,
    "high_limited": 4.413,
    "low_limited": 3.611,
    "iopv": 4.0552,
    "bid_price1": 4.055,
    "bid_volume1": 120000,
    "ask_price1": 4.056,
    "ask_volume1": 98000
  }
}

请求示例

bash
curl -sS -H "x-api-key: YOUR_API_KEY" \
  "https://<host>/api/fund/spot?symbol=510300,159915"

6.6 获取场内基金排行 ​

获取场内基金收益率排行榜,支持按不同区间收益字段排序。

属性值
方法 / 路径GET /api/fund/exchange_rank
鉴权x-api-key

Query 参数

名称类型必填默认值说明
sort_bystring否1yzf排序字段:zzf(近1周)、1yzf(近1月)、3yzf(近3月)、6yzf(近6月)、1nzf(近1年)、2nzf(近2年)、3nzf(近3年)、jnzf(今年来)、lnzf(成立以来)
sort_orderstring否desc排序方向:desc(降序)或 asc(升序)
limitinteger否30000返回数量上限

响应

  • data:object[],排行结果列表。

data[] 单条记录字段

字段类型说明
rankinteger排名
fund_codestring基金代码
fund_namestring基金名称
fund_typestring基金类型
datestring净值日期,YYYY-MM-DD
unit_navnumber单位净值
accumulated_navnumber累计净值
week_1number近1周收益率
month_1number近1月收益率
month_3number近3月收益率
month_6number近6月收益率
year_1number近1年收益率
year_2number近2年收益率
year_3number近3年收益率
ytdnumber今年来收益率
since_inceptionnumber成立以来收益率
inception_datestring成立日期,YYYY-MM-DD

data 示例

json
[
  {
    "rank": 1,
    "fund_code": "515880",
    "fund_name": "通信ETF国泰",
    "fund_type": "指数型-股票",
    "date": "2026-04-22",
    "unit_nav": 1.4105,
    "accumulated_nav": 4.2315,
    "week_1": 15.52,
    "month_1": 30.87,
    "month_3": 33.43,
    "month_6": 58.25,
    "year_1": 270.6,
    "year_2": 282.98,
    "year_3": 279.1,
    "ytd": 37.28,
    "since_inception": 323.19,
    "inception_date": "2019-08-16"
  }
]

请求示例

bash
curl -sS -H "x-api-key: YOUR_API_KEY" \
  "https://<host>/api/fund/exchange_rank?sort_by=1yzf&sort_order=desc&limit=100"

6.7 计算 ETF 动量值 ​

对一组 ETF 计算指定算法与周期的动量值,用于比较标的强弱。动量值越大越强。

属性值
方法 / 路径POST /api/fund/momentum
鉴权x-api-key

Body 参数(application/json)

名称类型必填说明
momentum_calculation_typestring是动量算法,取值见下表
etf_poolstring[]是ETF 代码列表,最多 50 个
momentum_periodinteger否动量周期(天数),默认 20
timestring否分时版动量的取价时间点 HH:MM:SS,默认 15:00:00;收盘价版算法忽略
end_datedate否计算基准日期 YYYY-MM-DD,默认今天
end_timestring否end_date 当天自己取价的时刻,不传则沿用 time

momentum_calculation_type 取值

值说明
simple简单动量(分时版)
slope线性回归斜率(分时版)
weighted_slope加权斜率(分时版)
weighted_slope_v2加权斜率 V2(分时版)
simple_close简单动量(收盘价版)
slope_close线性回归斜率(收盘价版)
weighted_slope_close加权斜率(收盘价版)
weighted_slope_close_v2加权斜率 V2(收盘价版)
rsrsRSRS 动量

响应

  • data:object[],每项为一只 ETF 的动量结果;在基准日期无行情的代码不会出现。
字段类型说明
etf_codestringETF 代码
etf_namestringETF 名称
momentum_valuenumber | null动量值;该日期无数据时为 null
calculation_seriesobject | null动量计算实际用到的日期价格序列,便于复核

请求示例

bash
curl -sS -H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -X POST "https://<host>/api/fund/momentum" \
  -d '{"momentum_calculation_type":"simple_close","momentum_period":20,"etf_pool":["510300","159915"]}'

7. 策略 API ​

模块路径前缀:/api/trading

7.1 获取自动化交易策略列表 ​

自动化交易策略需要在平台个人中心-> 自动化交易页面中创建,(必须先开通自动化交易服务)

1776570157_7n3z4aqoib1776570156800.png

属性值
方法 / 路径GET /api/trading/list
鉴权x-api-key

Query 参数

名称类型必填说明
accountstring否按资金账号筛选

响应

  • ResponseSchema
  • data:StrategyInfoForAutoTrading[]

StrategyInfoForAutoTrading 字段说明

字段类型说明
idintegerID
strategy_namestring策略名称
strategy_descriptionstring策略描述
execute_timestring执行时间,格式 HH:mm:ss
trading_relation_idinteger关联的策略ID
holding_etfsHoldingETF[]当前持仓ETF列表

HoldingETF 字段说明

字段类型说明
codeintegerETF代码
amountinteger持仓数量

data 示例

json
[
  {
    "id": 11040,
    "strategy_name": "策略名称",
    "strategy_description": "策略描述",
    "execute_time": "10:30:00",
    "trading_relation_id": 11039,
    "holding_etfs": [
      {
        "code": 510300,
        "amount": 1000,
      }
    ]
  }
]

7.2 获取指定自动化交易当日信号 ​

获取单个策略的当日信号

属性值
方法 / 路径GET /api/trading/get_strategy_signal
鉴权x-api-key

Query 参数

名称类型必填说明
strategy_idinteger是自动化交易 ID,即/api/trading/list接口中返回的数据项的id

响应

  • ResponseSchema
  • data:单个 TradingSignalResponse

TradingSignalResponse 字段说明

字段类型必填说明
strategy_idinteger是自动化交易 ID。
buy_stocksSignalStock[]是需要买入的股票列表;无买入信号时为空数组 []。
sell_stocksSignalStock[]是需要卖出的股票列表;无卖出信号时为空数组 []。
signal_datestring | null否信号产生时间,未生成时可能为 null。
execution_datestring | null否执行时间,未生成时可能为 null。

SignalStock 字段说明

字段类型必填说明
etf_codestring | null否ETF 代码
etf_namestring | null否ETF 名称
pricenumber | string | null否交易价格
quantityinteger | null否交易数量
actionstring | null否交易方向

data 示例

json
{
  "strategy_id": 11040,
  "buy_stocks": [],
  "sell_stocks": [],
  "signal_date": "2026-04-19 10:30:00",
  "execution_date": "2026-04-19 10:30:00"
}

行为说明

  • 策略未运行、关联策略异常或当日信号尚未生成时,可能返回空买卖列表。
  • 只有在交易日的执行时间点之后,才能获取到当日的交易信号,且交易信号生成有延迟,所以该接口需要在执行时间点之后进行轮训查询直到获取到信号。
  • 信号未生成且未超过服务端重试次数时,message 为「今日信号未生成」

8. 策略回测 API ​

模块路径前缀:/api/back-test

回测与发布接口目前仅支持动量轮动策略;资产配置、定投、网格等其他策略类型请前往平台网页操作。回测与实盘模拟均为模拟盘,不涉及真实资金。

8.1 提交动量轮动策略回测 ​

异步任务:提交后返回 task_id,再通过 8.2 轮询结果。

属性值
方法 / 路径POST /api/back-test/momentum
鉴权x-api-key

Body 参数(application/json,均可选;不传取默认值)

名称类型默认值说明
start_datedate2024-01-01回测开始日期
end_datedate今天回测结束日期
initial_capitalnumber100000初始资金(元)
etf_poolstring[]平台默认ETF 代码列表,最多 50 个
momentum_calculation_typestringsimple动量算法,取值同 6.7
momentum_config_groupsobject[]null多组动量参数(每组含算法/周期/上下阈值);不传则用上面的单一动量参数
momentum_periodinteger20动量周期(天数)
momentum_thresholdnumber0.01动量下限阈值,低于此值空仓
momentum_upper_thresholdnumber0动量上限阈值,0 表示不限
top_ninteger1每期持有动量排名前 N 的 ETF
exclude_todaybooleanfalsetrue 时动量计算不纳入当日实时价格,仅用收盘价
fallback_etfstringnull无信号时买入的备选 ETF,null 则空仓
min_hold_daysinteger8最小持有天数
days_count_typestringcalendar_dayscalendar_days(自然日)| trading_days(交易日)
execute_timestring14:30:00每日执行时间:09:30:00 | 10:30:00 | 14:30:00 | 14:50:00 | 15:00:00
reserve_cash_hold_maxbooleanfalsetrue:买入时按最大持仓分配资金;false:按当日实际买入分配
commissionnumber0手续费率,如 0.0001 = 万一。接口默认 0,建议显式传值
slippagenumber0滑点率,如 0.0005 = 0.05%。接口默认 0,建议显式传值
take_profit_enabledbooleanfalse是否启用收益率止盈
take_profit_thresholdnumber—止盈阈值(启用时必填,如 0.18 = 18%)
take_profit_cooldown_daysinteger—止盈 / sell_conditions 触发卖出后的共用冷却天数,二者任一启用时必填
sell_conditionsobject[]null卖出条件列表(OR 关系),见下方说明
stop_loss_enabledbooleanfalse是否启用止损
stop_loss_thresholdnumber0.08止损阈值(如 0.08 = 下跌 8%)
stop_loss_methodsstring[]["percentage"]止损方式(可多选):percentage(跌幅)| drawdown(高点回撤)
drawdown_stop_thresholdnumber0.05高点回撤止损阈值
stop_loss_freeze_daysinteger0止损后冷却天数
market_timing_codestringnull大盘择时 ETF 代码(如 510300),不满足条件时空仓
extreme_filter_conditionsstring[]null极端行情过滤,目前支持 one_day_limit_down(跌停过滤)
condition_filter_configobject[]null动量条件过滤(AND 关系),每项含 type(close_above_ma | ma_golden_cross)及对应均线周期参数

sell_conditions 说明:满足任一条即卖出(OR 关系),需先满足 min_hold_days 才会被检查(止损不受此限制);触发后的冷却天数复用 take_profit_cooldown_days。每项 type 取值:

type附加字段说明
madays:均线天数,默认 5当前价格跌破 days 日均线(含当天价格)时卖出
valuefilter_index:动量组下标(从 0 起);op:gt | lt;value:阈值持仓的动量值大于 / 小于阈值时卖出,如 0.3 = 30%

响应

字段类型说明
task_idstring回测任务 ID
statusstring初始为 PENDING
messagestring提示信息

请求示例

bash
curl -sS -H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -X POST "https://<host>/api/back-test/momentum" \
  -d '{
    "start_date": "2020-01-01",
    "end_date": "2024-12-31",
    "initial_capital": 100000,
    "momentum_calculation_type": "weighted_slope_close",
    "momentum_period": 20,
    "momentum_threshold": 0.01,
    "top_n": 1,
    "etf_pool": ["510300", "159915", "512880", "515880", "518880"],
    "commission": 0.0001,
    "slippage": 0.0005
  }'

8.2 查询回测任务状态与结果 ​

属性值
方法 / 路径GET /api/back-test/status/{task_id}
鉴权x-api-key

Path 参数

名称类型必填说明
task_idstring是8.1 返回的任务 ID

响应

建议每 3~5 秒轮询一次。status 流转:PENDING → STARTED → RUNNING(附带 progress,0–100)→ SUCCESS / FAILURE。SUCCESS 时读取 result:

字段类型说明
performance.total_returnstring区间总收益率
performance.annualized_returnstring年化收益率
performance.volatilitystring波动率
performance.sharpe_ratiostring夏普比率
performance.calmar_ratiostring卡玛比率(年化收益 / 最大回撤)
performance.max_drawdownstring最大回撤(负值)
performance.win_ratestring胜率
performance.profit_loss_ratiostring盈亏比
performance.total_tradesinteger交易次数
performance.max_drawdown_detailobject最大回撤区间:start / end / recovery
chart[]object[]每日累计收益率序列:date、value(百分比,0.52 = +0.52%)
trades[]object[]逐笔交易:date、action(buy | sell)、etf_code、etf_name、price、quantity、amount、remaining_cash

data 示例(SUCCESS,节选)

json
{
  "status": "SUCCESS",
  "result": {
    "performance": {
      "total_return": "158.32%",
      "annualized_return": "23.45%",
      "sharpe_ratio": "1.28",
      "max_drawdown": "-12.03%",
      "win_rate": "62.50%",
      "total_trades": 48
    },
    "chart": [{ "date": "2024-01-02", "value": 0.0 }],
    "trades": [
      { "date": "2024-01-15", "action": "buy", "etf_code": "510300", "etf_name": "沪深300ETF",
        "price": 3.85, "quantity": 10000, "amount": 38500.0, "remaining_cash": 61500.0 }
    ]
  }
}

请求示例

bash
curl -sS -H "x-api-key: YOUR_API_KEY" \
  "https://<host>/api/back-test/status/abc123"

8.3 发布为实盘模拟策略 ​

把一套回测参数保存为策略并启动实盘模拟。会同步完成「保存策略 → 从回测开始日到今日的全量回测 → 写入交易记录与每日收益 → 更新绩效」,耗时约 5~30 秒,请勿重复提交。受账户实盘模拟策略数量上限限制。

属性值
方法 / 路径POST /api/back-test/publish
鉴权x-api-key

Body 参数(application/json)

除下列字段外,其余字段与 8.1 完全一致,应原样带上回测时提交的参数。

名称类型必填说明
strategy_namestring是策略名称
strategy_descriptionstring否策略描述
is_publicboolean否是否公开,默认 false(仅自己可见);公开策略会出现在排行榜中,其他用户可预览与复制
republish_strategy_idinteger否原地重新发布一个已停止的自有策略(保留同一 strategy_id,旧交易记录被覆盖);该策略必须属于自己且当前不是 RUNNING,否则返回 400。不传则创建新策略

响应

字段类型说明
strategy_idinteger策略 ID
strategy_namestring策略名称
initial_capitalstring初始资金

策略详情页:https://www.cifangquant.com/strategy/{strategy_id}。

请求示例

bash
curl -sS -H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -X POST "https://<host>/api/back-test/publish" \
  -d '{
    "start_date": "2020-01-01",
    "end_date": "2024-12-31",
    "initial_capital": 100000,
    "momentum_calculation_type": "weighted_slope_close",
    "momentum_period": 20,
    "top_n": 1,
    "etf_pool": ["510300", "159915", "512880"],
    "strategy_name": "我的动量策略",
    "is_public": false
  }'

9. 策略管理 API ​

模块路径前缀:/api/strategy

9.1 查询我发布的运行中策略 ​

属性值
方法 / 路径GET /api/strategy/my-running
鉴权x-api-key

无请求参数。返回当前用户名下 status 为 RUNNING 的策略(通过 /back-test/publish 或 /strategy/copy 发布的都会出现)。

响应

  • data:object[],每项包含 strategy_id、策略名称、参数摘要(strategy_setting)、最新绩效(performance)与当前持仓 holding_etfs(code + amount)。字段含义与 9.3 一致。

请求示例

bash
curl -sS -H "x-api-key: YOUR_API_KEY" "https://<host>/api/strategy/my-running"

9.2 按日期区间查询公开策略收益排行 ​

仅统计公开且 RUNNING 的策略,按区间收益率(区间内最后一个交易日组合市值相对第一个交易日的涨跌幅)降序返回。区间内没有交易数据的策略(刚发布)不会出现。

属性值
方法 / 路径GET /api/strategy/list/rank
鉴权x-api-key

Query 参数

名称类型必填说明
start_datedate是统计区间开始日期 YYYY-MM-DD
end_datedate否统计区间结束日期,默认今天
top_ninteger否返回前 N 名,默认 10,最大 50

data[] 单条记录字段

字段类型说明
strategy_idinteger策略 ID
strategy_name / strategy_descriptionstring策略名称 / 描述
start_datestring策略回测开始日期
simulation_start_datestring | null模拟盘发布日期,尚未发布为模拟盘则为 null
return_ratenumber统计区间收益率(%),即排序依据
period_start_date / period_end_datestring区间内实际有数据的第一 / 最后一个交易日
strategy_settingobject策略核心参数,结构同 9.3
performanceobject历史绩效摘要,结构同 9.3

本接口不返回持仓(holding_etfs):非本人发布的策略不允许查看持仓。

请求示例

bash
curl -sS -H "x-api-key: YOUR_API_KEY" \
  "https://<host>/api/strategy/list/rank?start_date=2026-08-01&end_date=2026-09-01&top_n=5"

9.3 预览策略参数与绩效 ​

可预览公开策略或自己创建的策略;预览他人的私有策略返回 403。

属性值
方法 / 路径GET /api/strategy/preview/{strategy_id}
鉴权x-api-key

Path 参数

名称类型必填说明
strategy_idinteger是策略 ID

响应字段

字段类型说明
strategy_idinteger策略 ID
strategy_name / strategy_descriptionstring策略名称 / 描述
authorstring | null作者昵称,查自己的策略时为 null
start_datestring策略回测开始日期
simulation_start_datestring | null模拟盘开始日期,尚未发布为模拟盘则为 null
strategy_settingobject策略核心参数(ETF 池、动量算法、周期、止盈止损等)
performanceobject历史绩效摘要(总收益、年化收益、夏普比率、最大回撤、胜率、交易次数)
holding_etfsobject[] | null当前持仓(code + amount),空数组表示空仓;仅查询自己的策略时返回,他人公开策略为 null
adjustable_fieldsstring[]复制时可覆盖的字段,固定为 ["strategy_name", "initial_capital", "execute_time"]

请求示例

bash
curl -sS -H "x-api-key: YOUR_API_KEY" "https://<host>/api/strategy/preview/123"

9.4 复制公开策略 ​

读取来源策略配置 → 全量回测 → 写入交易记录与每日收益 → 更新绩效,生成一条属于自己的新策略。同步阻塞,约 5~30 秒,请勿重复提交;只能复制公开策略,受账户 VIP 策略数量上限限制。

属性值
方法 / 路径POST /api/strategy/copy
鉴权x-api-key

Body 参数(application/json)

名称类型必填说明
source_strategy_idinteger是来源策略 ID
strategy_namestring否新策略名称,不传沿用原名称
initial_capitalnumber否初始资金(元),不传沿用原值
execute_timestring否每日执行时间(09:30:00 | 10:30:00 | 14:30:00 | 14:50:00 | 15:00:00),不传沿用原值

响应:返回新策略的 strategy_id(同 8.3)。

请求示例

bash
curl -sS -H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -X POST "https://<host>/api/strategy/copy" \
  -d '{"source_strategy_id":123,"strategy_name":"我的动量策略","initial_capital":100000,"execute_time":"14:30:00"}'

9.5 订阅策略调仓通知 ​

通知通过微信公众号推送,需先在「次方量化」公众号中完成账号绑定(菜单 → 个人中心 → 绑定账号),并关闭该公众号的「消息免打扰」,配置教程见 微信推送设置。重复订阅返回 400。

属性值
方法 / 路径POST /api/strategy/notify
鉴权x-api-key

Body 参数(application/json)

名称类型必填说明
strategy_idinteger是策略 ID
notify_typestring否signal(默认):有调仓信号时推送;daily:每日运行后推送

请求示例

bash
curl -sS -H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -X POST "https://<host>/api/strategy/notify" \
  -d '{"strategy_id":999,"notify_type":"signal"}'

9.6 切换策略公开 / 私有 ​

仅能操作自己创建的策略,操作他人策略返回 404。直接按目标状态传参即可,无需先查询当前状态。

属性值
方法 / 路径POST /api/strategy/{strategy_id}/visibility
鉴权x-api-key

Body 参数(application/json)

名称类型必填说明
is_publicboolean是true:设为公开(出现在排行榜,他人可预览 / 复制);false:设为私有(仅自己可见)

请求示例

bash
curl -sS -H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -X POST "https://<host>/api/strategy/999/visibility" \
  -d '{"is_public": true}'

9.7 停止实盘模拟策略 ​

仅能操作自己创建的策略,操作他人策略返回 404。

  • 停止后状态变为 STOPPED,不再产生新的调仓信号与每日收益;历史交易记录和绩效数据保留,仍可通过 9.3 查看。
  • 对已停止的策略再次调用返回 400。
  • 没有「原样恢复运行」的接口;如需调参后重新运行,先用 8.1 重新回测,再调用 8.3 并带上 republish_strategy_id。
属性值
方法 / 路径POST /api/strategy/{strategy_id}/stop
鉴权x-api-key

无请求体。

请求示例

bash
curl -sS -H "x-api-key: YOUR_API_KEY" -X POST "https://<host>/api/strategy/999/stop"

10. 调用频次与限流 ​

次方量化服务器对开放接口做了限流,超出频次的请求会被直接拒绝,不会进入业务处理,响应为 HTTP 429 Too Many Requests。

接口统计维度限制允许突发
POST /api/back-test/momentum同一 API Key20 次 / 分钟(约每 3 秒 1 次)5 次
GET /api/back-test/status/{task_id}同一 IP180 次 / 分钟(回测需反复轮询,单独放宽;不同 task_id 共用同一额度)30 次
其余接口同一 IP + 同一接口60 次 / 分钟(约 1 次 / 秒)10 次

说明

  • 「允许突发」指在额度之外短时间内可以多发的请求数,超出后立即返回 429,不会排队等待;长期平均频次仍受上表限制。
  • 「同一接口」按路由归一后统计:/api/strategy/preview/1 与 /api/strategy/preview/2 算同一个接口,不能通过更换路径参数绕过限制。
  • 不同接口之间的额度相互独立,例如调用 /api/fund/spot 不会占用 /api/fund/hist_em 的额度。
  • 限流只看请求频次,与请求是否成功无关;失败重试同样计入。
  • 本文档中的全部接口均受网关限流约束。

使用建议

  • 批量拉取行情请使用多代码参数(symbol=510300,510500,...),不要对每只基金单独发请求。
  • 回测任务建议每 3~5 秒轮询一次 status,不要高频死循环。
  • 收到 429 后请退避重试(如等待 1~5 秒后重试,连续失败时逐步拉长间隔),不要立即重发。
  • /api/fund/spot 盘中数据更新有间隔,高于 1 次 / 秒的轮询不会获得更新的数据,请合理控制频率。

蜀ICP备20013273号-1 | 返回主站