☰
量化策略本地回测:如何用 PineTS 3 步跑出夏普比率、CAGR 与最大回撤报告
2026/10/24 3:53:55 网站建设 项目流程

【免费下载链接】PineTS

Run Pine Script® anywhere. PineTS is LuxAlgo's open-source Pine Script® runtime for Node.js and the browser.

项目地址:https://gitcode.com/gh_mirrors/pin/PineTS
点击查看免费下载

想在本地完成量化策略本地回测?PineTS 可以帮你做到。PineTS 是 LuxAlgo 开源的 Pine Script® 运行时,专为 Node.js 和浏览器设计,内置完整的strategy命名空间——你在 TradingView 上写好的策略,可以直接跑在自己的数据源上,跑完后自动产出夏普比率(Sharpe)、CAGR、最大回撤、买入持有基准等回测报告字段,无需再依赖图表平台的 Strategy Tester。

为什么选择 PineTS 做策略回测

传统做法是在 TradingView 网页里用 Strategy Tester 回测,但数据量、频率和二次开发都受平台限制。PineTS 把整套运行时搬到了你的进程里:

  • 1:1 语法兼容:直接运行原生 Pine Script v5/v6 源码,不用改写;
  • 数据自由:内置 Binance、FMP、Alpaca 数据源,也接受任意 OHLCV 数组;
  • 报告字段齐全:context.strategy上暴露sharpe_ratio、sortino_ratio、cagr、max_drawdown、buy_and_hold_pnl等字段,与 TradingView 的统计口径一致;
  • 可编程读取:回测结果就是普通 JavaScript 数据,方便接入自己的分析、存储或 ML 管道。

完整策略 API 参考见 docs/strategy.md,运行方式详见 docs/initialization-and-usage.md。

准备工作:安装 PineTS 并载入回测数据

第一步只需一行 npm 命令:

npm install pinets

然后构造一个PineTS实例,指定数据源、交易对、周期和数据量。以 Binance 的 BTCUSDT 日线、取最近 365 根 K 线为例:

import { PineTS, Provider } from 'pinets'; const pine = new PineTS(Provider.Binance, 'BTCUSDT', 'D', 365);

常用参数速查:

参数说明
Provider.Binance/FMP/Alpaca内置数据源,也支持Mock和自定义 OHLCV 数组
第 2 个参数交易对,如'BTCUSDT'
第 3 个参数周期:'1h'、'4h'、'D'等
第 4 个参数K 线数量上限 5000,或用sDate/eDate指定日期区间

数据源配置细节请参考 docs/data-providers.md。

编写回测策略:strategy 命名空间

第二步,把 Pine 策略源码直接传给run()。下面是一个金叉买入、死叉卖出的双均线策略:

const code = ` //@version=5 strategy("EMA Cross", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=10) fast = ta.ema(close, 9) slow = ta.ema(close, 21) if ta.crossover(fast, slow) strategy.entry("long", strategy.long) if ta.crossunder(fast, slow) strategy.close("long") `; const ctx = await pine.run(code);

strategy()声明支持initial_capital、commission_type、slippage、pyramiding、risk_free_rate等全部标准参数;订单侧提供strategy.entry()、strategy.exit()(止盈/止损/移动止损,OCO 语义)、strategy.close()等原语,订单生命周期与 TradingView 完全一致——包括次根 K 线开盘成交、滑点与手续费。

如果你想在策略里加入风控,strategy.risk命名空间还提供了max_drawdown、max_intraday_loss等 6 种交易前过滤规则,触发硬停止后引擎会自动拦截后续入场。

提取回测报告:夏普比率、CAGR、最大回撤

第三步,也是最有价值的一步:run()结束后,报告字段直接挂在ctx.strategy上,一次回测、全部指标到手:

const s = ctx.strategy; console.log('夏普比率: ', s.sharpe_ratio); console.log('索提诺比率:', s.sortino_ratio); console.log('CAGR: ', s.cagr, '%'); console.log('最大回撤: ', s.max_drawdown); console.log('最大回撤%: ', s.max_drawdown_percent); console.log('净盈利: ', s.netprofit); console.log('胜率: ', s.wintrades / s.closedtrades.length);
报告字段含义
sharpe_ratio/sortino_ratio风险调整收益,按月度权益曲线计算,口径对齐 TradingView
cagr回测窗口内的年化收益率(%),窗口不足一天时为NaN
max_drawdown/max_drawdown_percent权益曲线峰值到谷值的绝对/百分比回撤
netprofit/netprofit_percent已实现净利润及其百分比
buy_and_hold_pnl/strategy_outperformance买入持有基准收益,以及策略相对基准的超额
closedtrades逐笔交易明细(入场/出场价、时间、盈亏、佣金)

需要强调的是:夏普、索提诺、CAGR 属于报告字段——TradingView 也不在脚本内暴露它们,只出现在 Strategy Tester 报告里,PineTS 同样只在回测结束时统一计算一次,实现位于 src/namespaces/strategy/utils.ts 的finalizeStrategyRun。

报告怎么算的?方法论与 TradingView 一致

  • 夏普/索提诺:在每个月最后一根 K 线采样权益值,计算月度简单收益率(以initial_capital为锚点),再套用Sharpe = (mean(r) − RFR) / SD、Sortino = (mean(r) − RFR) / DD,无年化;无风险利率由risk_free_rate参数(默认 2%)换算为月度值。
  • CAGR:100 × ((initial_capital + netprofit) / initial_capital)^(1/years) − 1,其中years由首末 K 线时间差折算。
  • 买入持有基准:模拟用全部初始资金按首笔成交的成交价(含滑点)买入并持有到最后。

官方文档 docs/strategy.md 中有完整的公式与边界情况说明;计算公式的单测分别位于 tests/namespaces/strategy/cagr.test.ts 和 tests/namespaces/strategy/risk-adjusted.test.ts,可直接对照验证。

常见问题

Q:回测结果和 TradingView 完全一致吗?netprofit、max_drawdown等核心字段与 TradingView 对齐度很高;夏普/索提诺这类衍生指标依赖逐 K 线权益路径,多数数据集上可精确到小数点后约两位,官方文档的 "Known divergences" 一节列出了已知差异项。

Q:最多能回测多少根 K 线?单次加载上限 5000 根,跨 1000 根以上的日期区间会自动分页;更长的历史可以分段运行后自行合并。

Q:能接入实时行情吗?可以。stream()方法提供事件式接口,处理完历史数据后继续轮询实时 K 线,'data'、'alert'事件随时可监听。

小结

PineTS 让量化策略本地回测变得非常直接:装包 → 载入数据 → 运行 Pine 策略,三个步骤之后,夏普比率、CAGR、最大回撤、超额收益等报告指标就在context.strategy上等你读取。策略源码、数据、结果全部掌握在自己手里,这正是它相比在线回测最大的价值。

更多字段语义参见 docs/strategy.md,策略类型定义见 src/namespaces/strategy/types.ts,API 覆盖清单见 docs/api-coverage/strategy.md。

【免费下载链接】PineTS

Run Pine Script® anywhere. PineTS is LuxAlgo's open-source Pine Script® runtime for Node.js and the browser.

项目地址:https://gitcode.com/gh_mirrors/pin/PineTS
点击查看免费下载

相关推荐

上一篇:ARIS Manual Review MCP 服务器实战指南:零 API 成本的人工中转跨模型评审
下一篇:替换一个 ddraw.dll:DDrawCompat 完整指南,DirectX 1-7 游戏跑上 Win11

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询