Skip to main content

Quant Module

quant 模块提供量化分析工具,包括技术指标计算、因子分析、OHLCV 行情数据和策略回测。 公式语法基于 Mai-language,兼容通达信/同花顺。

快速开始

import { Reportify } from 'reportify-sdk';

const client = new Reportify({ apiKey: 'your-api-key' });

// 计算 RSI 指标
const data = await client.quant.computeIndicators({
  symbols: ['000001'],
  formula: 'RSI(14)'
});

// 因子选股
const stocks = await client.quant.screen({
  formula: 'RSI(14) < 30'
});

// 获取 OHLCV 数据
const ohlcv = await client.quant.ohlcv({ symbol: '000001' });

// 策略回测
const result = await client.quant.backtest({
  symbol: '000001',
  formula: 'CROSS(MA(5), MA(20))',
  startDate: '2023-01-01',
  endDate: '2024-01-01'
});

指标 (Indicators)

listIndicators()

获取可用技术指标列表。
const indicators = await client.quant.listIndicators();

indicators.forEach(ind => {
  console.log(`${ind.name}: ${ind.description}`);
  console.log(`  输出字段: ${ind.fields.join(', ')}`);
});
返回类型:
interface IndicatorMeta {
  name: string;        // 指标名称(如 MACD, RSI, KDJ)
  description: string; // 指标描述
  fields: string[];    // 输出字段
}

computeIndicators()

计算技术指标值。
const data = await client.quant.computeIndicators({
  symbols: ['000001', '600519'],
  formula: 'RSI(14)',
  market: 'cn',           // 可选,默认 "cn"
  startDate: '2024-01-01',  // 可选
  endDate: '2024-06-01'     // 可选
});
参数:
参数类型必填说明
symbolsstring[]股票代码列表
formulastring指标公式
marketstring市场(cn/hk/us),默认 cn
startDatestring开始日期,默认 3 个月前
endDatestring结束日期,默认今天
公式示例:
// RSI 指标
const rsi = await client.quant.computeIndicators({
  symbols: ['000001'],
  formula: 'RSI(14)'
});

// MACD 指标(默认参数)
const macd = await client.quant.computeIndicators({
  symbols: ['000001'],
  formula: 'MACD()'
});

// KDJ 指标
const kdj = await client.quant.computeIndicators({
  symbols: ['000001'],
  formula: 'KDJ(9, 3, 3)'
});

// 布林带
const boll = await client.quant.computeIndicators({
  symbols: ['000001'],
  formula: 'BOLL(20, 2)'
});

因子 (Factors)

listFactors()

获取可用因子列表(变量和函数)。
const factors = await client.quant.listFactors();

factors.forEach(f => {
  console.log(`${f.name} (${f.type}, level ${f.level}): ${f.description}`);
});
因子分级:
  • Level 0 变量: CLOSE, OPEN, HIGH, LOW, VOLUME 及别名
  • Level 0 函数: MA, EMA, REF, HHV, LLV, STD 等核心函数
  • Level 1 函数: CROSS, COUNT, EVERY 等应用函数
  • Level 2 函数: MACD, KDJ, RSI, BOLL 等技术指标

computeFactors()

计算因子值,使用 Mai-language 语法。
const data = await client.quant.computeFactors({
  symbols: ['000001'],
  formula: 'RSI(14)',
  market: 'cn',
  startDate: '2024-01-01',
  endDate: '2024-06-01'
});
公式示例:
// 简单指标
const rsi = await client.quant.computeFactors({
  symbols: ['000001'],
  formula: 'RSI(14)'
});

// 获取 MACD 的 DIF 线
const dif = await client.quant.computeFactors({
  symbols: ['000001'],
  formula: 'MACD().dif'
});

// 收盘价是否高于 20 日均线(布尔值)
const aboveMA = await client.quant.computeFactors({
  symbols: ['000001'],
  formula: 'CLOSE > MA(20)'
});

// MA20 偏离度(百分比)
const deviation = await client.quant.computeFactors({
  symbols: ['000001'],
  formula: '(CLOSE - MA(20)) / MA(20) * 100'
});
支持的运算符:
类型运算符说明
比较>, <, >=, <=, ==, !=比较运算
逻辑与&注意:不是 AND
逻辑或|注意:不是 OR
算术+, -, *, /四则运算

screen()

因子选股,筛选满足条件的股票。
const stocks = await client.quant.screen({
  formula: 'RSI(14) < 30',
  market: 'cn',             // 可选
  checkDate: '2024-06-01',  // 可选,默认最新交易日
  symbols: undefined        // 可选,undefined 表示全市场
});
参数:
参数类型必填说明
formulastring选股公式
marketstring市场,默认 cn
checkDatestring检查日期,默认最新交易日
symbolsstring[]股票池,undefined 表示全市场
选股示例:
// RSI 超卖
const oversold = await client.quant.screen({
  formula: 'RSI(14) < 30'
});

// 金叉
const goldenCross = await client.quant.screen({
  formula: 'CROSS(MA(5), MA(10))'
});

// 上升趋势
const uptrend = await client.quant.screen({
  formula: '(CLOSE > MA(20)) & (MA(20) > MA(60))'
});

// 在指定股票池中筛选
const filtered = await client.quant.screen({
  formula: 'RSI(14) < 30',
  symbols: ['000001', '600519', '000002']
});

行情 (Quotes)

ohlcv()

获取单个股票的 OHLCV 日线数据。
const data = await client.quant.ohlcv({
  symbol: '000001',
  market: 'cn',
  startDate: '2024-01-01',
  endDate: '2024-06-01'
});

data.forEach(d => {
  console.log(`${d.date}: O=${d.open} H=${d.high} L=${d.low} C=${d.close} V=${d.volume}`);
});
返回类型:
interface OHLCVData {
  symbol: string;
  date: string;
  open: number;
  high: number;
  low: number;
  close: number;
  volume: number;
}

ohlcvBatch()

批量获取多个股票的 OHLCV 数据。
const data = await client.quant.ohlcvBatch({
  symbols: ['000001', '600519', '000002'],
  market: 'cn',
  startDate: '2024-01-01',
  endDate: '2024-06-01'
});
数据按日期(降序)、股票代码排序。

回测 (Backtest)

backtest()

执行策略回测。
const result = await client.quant.backtest({
  symbol: '000001',
  formula: 'CROSS(MA(5), MA(20))',  // 金叉买入信号
  startDate: '2023-01-01',
  endDate: '2024-01-01',
  market: 'cn',
  initialCash: 100000,  // 初始资金
  commission: 0.0003,   // 佣金费率
  stopLoss: 0.05,       // 止损 5%
  sizerPercent: 99,     // 仓位 99%
  autoClose: true       // 自动平仓
});
参数:
参数类型必填默认值说明
symbolstring-股票代码
formulastring-策略公式
startDatestring-回测开始日期
endDatestring-回测结束日期
marketstringcn市场
initialCashnumber100000初始资金
commissionnumber0佣金费率
stopLossnumber0止损比例(0 表示不设置)
sizerPercentnumber99仓位百分比
autoClosebooleantrue是否自动平仓
返回类型:
interface BacktestResult {
  success: boolean;
  initial_cash: number;
  final_cash: number;
  total_return: number;
  total_return_pct: number;
  max_drawdown: number;
  profit_factor: number;
  win_rate: number;
  total_trades: number;
  trades: Array<{
    date: string;
    action: 'buy' | 'sell';
    price: number;
    quantity: number;
    value: number;
    pnl?: number;
  }>;
}
使用示例:
const result = await client.quant.backtest({
  symbol: '000001',
  formula: 'CROSS(MA(5), MA(20))',
  startDate: '2023-01-01',
  endDate: '2024-01-01'
});

console.log(`总收益: ${result.total_return.toFixed(2)}`);
console.log(`收益率: ${(result.total_return_pct * 100).toFixed(2)}%`);
console.log(`最大回撤: ${(result.max_drawdown * 100).toFixed(2)}%`);
console.log(`胜率: ${(result.win_rate * 100).toFixed(2)}%`);
console.log(`盈亏比: ${result.profit_factor.toFixed(2)}`);
console.log(`交易次数: ${result.total_trades}`);

完整示例

技术分析工作流

import { Reportify } from 'reportify-sdk';

const client = new Reportify({ apiKey: 'your-api-key' });

async function technicalAnalysis() {
  // 1. 获取股票数据
  const ohlcv = await client.quant.ohlcv({
    symbol: '000001',
    startDate: '2024-01-01'
  });

  // 2. 计算多个指标
  const rsi = await client.quant.computeIndicators({
    symbols: ['000001'],
    formula: 'RSI(14)'
  });
  
  const macd = await client.quant.computeIndicators({
    symbols: ['000001'],
    formula: 'MACD()'
  });

  // 3. 分析最新数据
  const latestRSI = rsi[0]?.rsi;
  const latestMACD = macd[0]?.macd;
  
  console.log(`最新 RSI: ${latestRSI}`);
  console.log(`最新 MACD: ${latestMACD}`);
}

technicalAnalysis();

选股并回测

async function screenAndBacktest() {
  // 1. 选股:RSI 超卖
  const oversoldStocks = await client.quant.screen({
    formula: 'RSI(14) < 30'
  });
  
  console.log(`发现 ${oversoldStocks.length} 只超卖股票`);

  // 2. 对每只股票进行回测
  for (const stock of oversoldStocks.slice(0, 5)) {
    const result = await client.quant.backtest({
      symbol: stock.symbol,
      formula: 'CROSS(RSI(14), 30)',  // RSI 上穿 30 买入
      startDate: '2023-01-01',
      endDate: '2024-01-01'
    });
    
    console.log(`${stock.symbol}: 收益率 ${(result.total_return_pct * 100).toFixed(2)}%`);
  }
}

screenAndBacktest();