> ## Documentation Index
> Fetch the complete documentation index at: https://docs.reportify.cn/llms.txt
> Use this file to discover all available pages before exploring further.

# 量化分析介绍

> 量化分析 API - 技术指标、因子选股、行情数据和策略回测

## 概述

量化分析 API 提供专业的量化投资工具，支持技术指标计算、因子选股、行情数据查询和策略回测。

<CardGroup cols={2}>
  <Card title="因子系统" icon="filter" href="/apis/quant/factors_list">
    获取因子定义，计算因子值（含技术指标 RSI/MACD/KDJ/BOLL 与基本面因子 PE/ROE 等），基于公式筛选股票
  </Card>

  <Card title="行情数据" icon="chart-candlestick" href="/apis/quant/quotes_ohlcv">
    获取 OHLCV 日线、K 线（1M/5M/15M/30M/60M/1D/1W/1MO）及分钟数据
  </Card>

  <Card title="策略回测" icon="flask" href="/apis/quant/backtest">
    运行策略回测并获取绩效分析
  </Card>
</CardGroup>

## 接口列表

| 接口                                 | 方法   | 描述                                       |
| ---------------------------------- | ---- | ---------------------------------------- |
| `/v1/quant/factors`                | GET  | 获取可用因子列表（含变量、函数、技术指标、基本面因子）              |
| `/v1/quant/factors/compute`        | POST | 计算因子数据（技术指标与基本面因子统一走此接口）                 |
| `/v1/quant/factors/compute/upload` | POST | 上传 Excel 文件计算技术指标因子（支持分钟 K 线）            |
| `/v1/quant/factors/screen`         | POST | 因子选股筛选                                   |
| `/v1/quant/quotes/ohlcv`           | GET  | 获取单只股票 OHLCV 日线数据                        |
| `/v1/quant/quotes/ohlcv/batch`     | POST | 批量获取 OHLCV 数据                            |
| `/v1/quant/quotes/kline`           | GET  | 获取 K 线数据（支持 1M/5M/15M/30M/60M/1D/1W/1MO） |
| `/v1/quant/quotes/kline/batch`     | POST | 批量获取 K 线数据                               |
| `/v1/quant/quotes/minute`          | GET  | 获取单只股票分钟数据                               |
| `/v1/quant/quotes/minute/batch`    | POST | 批量获取分钟数据                                 |
| `/v1/quant/quotes/calendar`        | GET  | 获取交易日历（区间内交易日列表，市场 cn/hk/us）             |
| `/v1/quant/quotes/calendar/check`  | GET  | 判断某日是否交易日 + 上一/下一交易日（市场 cn/hk/us）        |
| `/v1/quant/backtest`               | POST | 策略回测                                     |

<Note>
  技术指标（RSI/MACD/KDJ/BOLL 等）与基本面因子（PE/ROE/EPS 等）现已统一通过 `factors` 系列接口访问，不再有独立的 `indicators` 接口。
</Note>

## 公式语法

量化 API 使用类似通达信/同花顺的 Mai 语言公式语法。

### 支持的变量

| 变量             | 别名         | 描述                                 |
| -------------- | ---------- | ---------------------------------- |
| `CLOSE`        | `C`        | 收盘价                                |
| `OPEN`         | `O`        | 开盘价                                |
| `HIGH`         | `H`        | 最高价                                |
| `LOW`          | `L`        | 最低价                                |
| `VOLUME`       | `V`, `VOL` | 成交量                                |
| `AMOUNT`       | -          | 成交额                                |
| `LISTING_DATE` | -          | 上市日期（`YYYY-MM-DD` 字符串，可直接与日期字符串比较） |
| `ISSUE_PRICE`  | -          | IPO 发行价                            |

### 股票属性函数

| 函数                   | 描述              |
| -------------------- | --------------- |
| `IS_ST()`            | 是否为 ST 股票       |
| `IS_LIMIT_UP()`      | 是否一字涨停          |
| `IS_LIMIT_DOWN()`    | 是否一字跌停          |
| `IS_CHAIN_MAIN()`    | 是否主板（60/000 开头） |
| `IS_CHAIN_STAR()`    | 是否科创板（68 开头）    |
| `IS_CHAIN_CHINEXT()` | 是否创业板（30 开头）    |

### 支持的运算符

| 类型  | 运算符                              | 示例                                              |
| --- | -------------------------------- | ----------------------------------------------- |
| 比较  | `>`, `<`, `>=`, `<=`, `==`, `!=` | `CLOSE > MA(CLOSE, 20)`                         |
| 逻辑与 | `&`                              | `(RSI(14) < 30) & (CLOSE > MA(CLOSE, 20))`      |
| 逻辑或 | `\|`                             | `(RSI(14) < 30) \| (RSI(14) > 70)`              |
| 算术  | `+`, `-`, `*`, `/`               | `(CLOSE - MA(CLOSE, 20)) / MA(CLOSE, 20) * 100` |

### 支持的函数

<AccordionGroup>
  <Accordion title="Level 0 - 基础函数 (TongDaXin 风格: col 在前, n 在后)">
    | 函数             | 描述        | 示例                       |
    | -------------- | --------- | ------------------------ |
    | `MA(X, N)`     | N 日简单移动平均 | `MA(CLOSE, 20)`          |
    | `EMA(X, N)`    | N 日指数移动平均 | `EMA(CLOSE, 12)`         |
    | `SMA(X, N, M)` | 平滑移动平均    | `SMA(CLOSE, 9, 1)`       |
    | `REF(X, N)`    | 引用 N 天前的值 | `REF(CLOSE, 1)`          |
    | `HHV(X, N)`    | N 周期最高值   | `HHV(HIGH, 20)`          |
    | `LLV(X, N)`    | N 周期最低值   | `LLV(LOW, 20)`           |
    | `STD(X, N)`    | N 周期标准差   | `STD(CLOSE, 20)`         |
    | `SUM(X, N)`    | N 周期求和    | `SUM(VOLUME, 5)`         |
    | `ABS(X)`       | 绝对值       | `ABS(CLOSE - OPEN)`      |
    | `MAX(X, Y)`    | 取最大值      | `MAX(CLOSE, OPEN)`       |
    | `MIN(X, Y)`    | 取最小值      | `MIN(CLOSE, OPEN)`       |
    | `IF(C, A, B)`  | 条件选择      | `IF(CLOSE > OPEN, 1, 0)` |
  </Accordion>

  <Accordion title="Level 1 - 应用函数">
    | 函数                | 描述                                                | 示例                                                                         |
    | ----------------- | ------------------------------------------------- | -------------------------------------------------------------------------- |
    | `CROSS(A, B)`     | A 上穿 B                                            | `CROSS(MA(CLOSE, 5), MA(CLOSE, 10))`                                       |
    | `CROSSDOWN(A, B)` | A 下穿 B                                            | `CROSSDOWN(MA(CLOSE, 5), MA(CLOSE, 10))`                                   |
    | `COUNT(X, N)`     | N 周期内满足条件的天数                                      | `COUNT(CLOSE > OPEN, 10)`                                                  |
    | `EVERY(X, N)`     | N 周期内全部满足条件                                       | `EVERY(CLOSE > MA(CLOSE, 20), 5)`                                          |
    | `EXIST(X, N)`     | N 周期内存在满足条件                                       | `EXIST(CLOSE > HHV(HIGH, 60), 5)`                                          |
    | `BARSLAST(X)`     | 上次满足条件到现在的周期数                                     | `BARSLAST(CROSS(MA(CLOSE, 5), MA(CLOSE, 10)))`                             |
    | `FIN_REF(expr)`   | 财务历史数据链式引用，支持 `.where(cond).shift(n).alias(name)` | `FIN_REF(INCOME.net_profit).where(INCOME.fiscal_quarter == "FY").shift(1)` |
  </Accordion>

  <Accordion title="Level 2 - 技术指标">
    | 函数               | 描述       | 返回字段                        |
    | ---------------- | -------- | --------------------------- |
    | `RSI(N)`         | 相对强弱指数   | `rsi`                       |
    | `MACD(S, L, M)`  | MACD 指标  | `dif`, `dea`, `macd`        |
    | `KDJ(N, M1, M2)` | KDJ 随机指标 | `k`, `d`, `j`               |
    | `BOLL(N, P)`     | 布林带      | `upper`, `mid`, `lower`     |
    | `WR(N)`          | 威廉指标     | `wr`                        |
    | `ATR(N)`         | 平均真实波幅   | `atr`                       |
    | `CCI(N)`         | 商品通道指数   | `cci`                       |
    | `BIAS(N)`        | 乖离率      | `bias`                      |
    | `PSY(N)`         | 心理线      | `psy`                       |
    | `DMI(N, M)`      | 趋向指标     | `pdi`, `mdi`, `adx`, `adxr` |
    | `OBV()`          | 能量潮      | `obv`                       |
  </Accordion>

  <Accordion title="Level 2 - 基本面因子">
    **财务报表**（通过 `.` 访问字段）：

    | 报表             | 描述    | 示例                            |
    | -------------- | ----- | ----------------------------- |
    | `INCOME`       | 利润表   | `INCOME.net_profit`           |
    | `BALANCESHEET` | 资产负债表 | `BALANCESHEET.total_assets`   |
    | `CASHFLOW`     | 现金流量表 | `CASHFLOW.operating_cashflow` |

    **估值因子**：

    | 因子                 | 描述     |
    | ------------------ | ------ |
    | `PE()`, `PE_TTM()` | 市盈率    |
    | `PB()`             | 市净率    |
    | `PS()`             | 市销率    |
    | `PEG()`            | PEG 比率 |

    **盈利能力**：

    | 因子      | 描述     |
    | ------- | ------ |
    | `ROE()` | 净资产收益率 |
    | `ROA()` | 总资产收益率 |
    | `GPM()` | 毛利率    |
    | `NPM()` | 净利率    |

    **成长能力**：

    | 因子                         | 描述      |
    | -------------------------- | ------- |
    | `REVENUE_GROWTH_RATE()`    | 营收增长率   |
    | `NET_PROFIT_GROWTH_RATE()` | 净利润增长率  |
    | `EPS_GROWTH_RATE()`        | EPS 增长率 |

    **每股指标**：

    | 因子      | 描述    |
    | ------- | ----- |
    | `EPS()` | 每股收益  |
    | `BPS()` | 每股净资产 |
  </Accordion>
</AccordionGroup>

## 股票代码格式

| 市场  | market 参数 | 股票代码示例                       |
| --- | --------- | ---------------------------- |
| A 股 | `cn`      | `000001`, `600519`, `688001` |
| 港股  | `hk`      | `00700`, `09988`             |
| 美股  | `us`      | `AAPL`, `TSLA`, `NVDA`       |

<Note>
  市场参数默认为 `cn`（A 股市场）。股票代码不需要带市场前缀，通过 `market` 参数指定市场。
</Note>

## 公式示例

### 技术面公式

```python theme={null}
# RSI 超卖
"RSI(14) < 30"

# 金叉
"CROSS(MA(CLOSE, 5), MA(CLOSE, 10))"

# MACD DIF 线
"MACD().dif"

# 收盘价偏离 20 日均线的百分比
"(CLOSE - MA(CLOSE, 20)) / MA(CLOSE, 20) * 100"

# RSI 超卖且价格在 20 日均线上方
"(RSI(14) < 30) & (CLOSE > MA(CLOSE, 20))"

# 价格突破布林带上轨
"CLOSE > BOLL(20, 2).upper"

# 多头排列：5日线 > 10日线 > 20日线
"(MA(CLOSE, 5) > MA(CLOSE, 10)) & (MA(CLOSE, 10) > MA(CLOSE, 20))"
```

### 基本面公式

```python theme={null}
# 低市盈率
"PE() < 15"

# 市盈率（TTM）低于 20
"PE_TTM() < 20"

# 高 ROE
"ROE() > 0.15"

# 价值 + 质量
"(PE() < 20) & (ROE() > 0.1)"

# 多因子价值筛选
"(PE_TTM() < 15) & (PB() < 2) & (ROE() > 0.12)"

# 营收增长率大于 20%
"REVENUE_GROWTH_RATE() > 0.2"
```

### 技术面 + 基本面组合

```python theme={null}
# 便宜 + 超卖
"(PE() < 20) & (RSI(14) < 40)"

# 质量 + 上涨趋势
"(ROE() > 0.12) & (CLOSE > MA(CLOSE, 20))"

# 价值 + 金叉
"(PB() < 1.5) & (CROSS(MA(CLOSE, 5), MA(CLOSE, 20)))"
```

### 股票属性筛选

```python theme={null}
# 2020年后上市的次新股
"LISTING_DATE >= '2020-01-01'"

# 科创板次新股（2019年后上市）
"(LISTING_DATE >= '2019-01-01') & IS_CHAIN_STAR()"

# 主板非ST股票
"IS_CHAIN_MAIN() & (IS_ST() == 0)"

# 主板老股 + 低估值
"IS_CHAIN_MAIN() & (LISTING_DATE <= '2015-01-01') & (PE() < 15)"

# 破发的次新股（现价低于 IPO 发行价）
"(LISTING_DATE >= '2024-01-01') & (CLOSE < ISSUE_PRICE)"
```

### 回测策略公式

回测接口支持 `entry_formula`（买入公式）和 `exit_formula`（卖出公式）：

```json theme={null}
{
  "start_date": "2024-01-01",
  "end_date": "2025-01-01",
  "symbols": ["000001"],
  "entry_formula": "CROSS(MA(CLOSE, 5), MA(CLOSE, 10))",
  "exit_formula": "CROSS(MA(CLOSE, 10), MA(CLOSE, 5))",
  "signal_factors": {
    "ma5": "MA(CLOSE, 5)",
    "ma10": "MA(CLOSE, 10)",
    "rsi": "RSI(14)"
  }
}
```

| 参数               | 描述                                        |
| ---------------- | ----------------------------------------- |
| `entry_formula`  | 买入/开仓公式，结果 > 0 时触发买入                      |
| `exit_formula`   | 卖出/平仓公式，结果 > 0 时触发卖出（可选）                  |
| `signal_factors` | 预计算因子字典，用于 `strategy_code` 模式访问或返回额外值（可选） |

<Tip>
  `signal_factors` 参数用于预计算因子并在 `strategy_code` 中调用：

  ```json theme={null}
  {
      "signal_factors": {
          "ma5": "MA(CLOSE, 5)",
          "ma10": "MA(CLOSE, 10)",
          "rsi": "RSI(14)"
      },
      "strategy_code": "def handle_data(context, datas):\n    for data in datas:\n        symbol = data.name\n        position = context.portfolio.get_position(symbol)\n        if not position:\n            if data.ma5 > data.ma10:\n                context.order_target_percent(symbol, 0.2)\n        elif data.rsi > 70:\n            context.order_target_percent(symbol, 0)"
  }
  ```
</Tip>

## 快速开始

<Steps>
  <Step title="获取因子列表">
    调用 `GET /v1/quant/factors` 获取所有可用的变量、函数、技术指标和基本面因子
  </Step>

  <Step title="计算因子数据">
    调用 `POST /v1/quant/factors/compute` 计算指定股票的因子或指标数据
  </Step>

  <Step title="因子选股">
    调用 `POST /v1/quant/factors/screen` 筛选符合条件的股票
  </Step>

  <Step title="策略回测">
    调用 `POST /v1/quant/backtest` 验证策略历史表现
  </Step>
</Steps>

## 错误码

| 状态码 | 描述      |
| --- | ------- |
| 200 | 成功      |
| 400 | 请求参数错误  |
| 401 | 认证失败    |
| 422 | 参数验证失败  |
| 429 | 请求频率超限  |
| 500 | 服务器内部错误 |
