回测系统 backtest

回测系统是一个量化金融工具,用于在历史数据上测试交易策略的有效性,通过滚动预测分析和蒙特卡洛模拟来评估策略性能和风险。关键词:量化交易、策略验证、历史数据、蒙特卡洛模拟、风险评估。

回测系统 0 次安装 0 次浏览 更新于 3/5/2026

回测 - 完整API参考

使用历史数据、滚动预测分析和蒙特卡洛模拟来验证交易策略。


聊天命令

运行回测

/backtest momentum --from 2024-01-01 --to 2024-12-31
/backtest mean-reversion --market "Trump 2028" --days 90
/backtest my-strategy --capital 10000

快速统计

/backtest stats momentum           显示策略指标
/backtest compare momentum arb     比较两种策略
/backtest monte-carlo momentum     运行蒙特卡洛模拟

结果

/backtest results                  显示最近结果
/backtest stats                    结果的别名
/backtest results <id> --detailed  详细分解
/backtest export                   将上次结果导出为CSV

TypeScript API参考

创建回测引擎

import { createBacktestEngine } from 'clodds/backtest';

const backtest = createBacktestEngine({
  // 数据源
  dataSource: 'polymarket',  // 或自定义数据提供者

  // 资本
  initialCapital: 10000,

  // 费用(Polymarket: 大多数市场0%;Kalshi: 平均约1.2%)
  fees: {
    maker: 0,       // 0% maker费(Polymarket大多数市场)
    taker: 0,       // 0% taker费(Polymarket大多数市场)
    // 对于15分钟加密市场或Kalshi,使用:taker: 0.012
  },

  // 滑点模型
  slippageModel: 'realistic',  // 'none' | 'fixed' | 'realistic'
  slippageBps: 10,
});

运行基本回测

const result = await backtest.run({
  strategy: 'momentum',
  startDate: '2024-01-01',
  endDate: '2024-12-31',
  parameters: {
    lookbackPeriod: 14,
    entryThreshold: 0.02,
    exitThreshold: 0.01,
  },
});

console.log(`总回报率: ${result.totalReturn}%`);
console.log(`夏普比率: ${result.sharpeRatio}`);
console.log(`最大回撤: ${result.maxDrawdown}%`);
console.log(`胜率: ${result.winRate}%`);
console.log(`利润因子: ${result.profitFactor}`);

滚动预测分析

// 样本外验证
const wf = await backtest.walkForward({
  strategy: 'momentum',
  startDate: '2023-01-01',
  endDate: '2024-12-31',

  // 训练/测试分割
  trainPeriod: '6M',
  testPeriod: '1M',
  step: '1M',

  // 优化
  optimize: ['lookbackPeriod', 'entryThreshold'],
  optimizationMetric: 'sharpe',
});

console.log(`样本内夏普比率: ${wf.inSampleSharpe}`);
console.log(`样本外夏普比率: ${wf.outOfSampleSharpe}`);
console.log(`过拟合比率: ${wf.overfitRatio}`);

蒙特卡洛模拟

// 随机化的压力测试
const mc = await backtest.monteCarlo({
  strategy: 'momentum',
  trades: historicalTrades,

  // 模拟设置
  simulations: 10000,
  confidenceLevel: 0.95,

  // 随机化
  shuffleTrades: true,
  randomizeReturns: true,
});

console.log(`预期回报率: ${mc.expectedReturn}%`);
console.log(`95% VaR: ${mc.valueAtRisk}%`);
console.log(`最坏情况: ${mc.worstCase}%`);
console.log(`最好情况: ${mc.bestCase}%`);
console.log(`盈利概率: ${mc.probProfit}%`);

性能指标

const metrics = await backtest.getMetrics(result);

console.log('=== 性能 ===');
console.log(`总回报率: ${metrics.totalReturn}%`);
console.log(`CAGR: ${metrics.cagr}%`);
console.log(`波动率: ${metrics.volatility}%`);

console.log('=== 风险 ===');
console.log(`夏普比率: ${metrics.sharpeRatio}`);
console.log(`索提诺比率: ${metrics.sortinoRatio}`);
console.log(`最大回撤: ${metrics.maxDrawdown}%`);
console.log(`最大回撤持续时间: ${metrics.maxDrawdownDuration} 天`);

console.log('=== 交易 ===');
console.log(`总交易次数: ${metrics.totalTrades}`);
console.log(`胜率: ${metrics.winRate}%`);
console.log(`利润因子: ${metrics.profitFactor}`);
console.log(`平均盈利: ${metrics.avgWin}%`);
console.log(`平均亏损: ${metrics.avgLoss}%`);
console.log(`期望值: ${metrics.expectancy}%`);

自定义策略

// 定义自定义策略
const myStrategy = {
  name: 'my-strategy',

  onData: async (data, context) => {
    const price = data.price;
    const sma = data.indicators.sma(20);

    if (price < sma * 0.95 && !context.hasPosition) {
      return { action: 'buy', size: context.availableCapital * 0.1 };
    }

    if (price > sma * 1.05 && context.hasPosition) {
      return { action: 'sell', size: 'all' };
    }

    return { action: 'hold' };
  },
};

const result = await backtest.run({
  strategy: myStrategy,
  startDate: '2024-01-01',
  endDate: '2024-12-31',
});

内置策略

策略 描述
momentum 跟随价格趋势
mean-reversion 逢低买入,逢高卖出
arbitrage 跨平台价格差异
breakout 在范围突破时进入
pairs 相关市场对

指标解释

指标 好值 描述
夏普比率 > 1.0 风险调整后的回报
索提诺比率 > 1.5 下行风险调整后的回报
最大回撤 < 20% 最糟糕的峰谷比
胜率 > 50% 成功交易的百分比
利润因子 > 1.5 毛利润/毛亏损
期望值 > 0 每笔交易预期的收益

最佳实践

  1. 使用滚动预测 — 避免过拟合
  2. 包含费用 — 现实成本建模
  3. 测试多个周期 — 不要挑选日期
  4. 蒙特卡洛 — 了解变异性
  5. 样本外 — 总是验证在未见过的数据上