阅读时间 … 分钟

在 TradingView 上回测 Pine Script 策略

使用 Claude 或 ChatGPT 编写 Pine Script 策略,将其放入 TradingView 图表,并在投入真实资金前运行内置的 Strategy Tester。Strategy Tester 是您成本最低、速度最快的筛选工具。

本指南介绍 AI 优先的工作流:编写策略、运行回测、客观评估 Performance Summary 和 List of Trades 标签页,并通过 TradingView Webhook 将验证通过的策略升级为实盘执行(发送至 TradingHost 托管的经纪商接收端)。

章节 01 · 协同工作方式

编写、测试、上线

包含三个环节。您编写策略,TradingView 进行回测,Webhook 将验证通过的策略发送至实盘执行。Strategy Tester 介于编写与执行之间,是一个低成本的筛选器;唯一比糟糕的回测更昂贵的,是完全不进行回测。

  • 您编写的内容

    Pine Script 策略

    声明入场、出场和仓位大小的 strategy() 脚本。Strategy Tester 仅运行 strategy() 脚本,无法对 indicator() 脚本进行回测。

  • 策略验证

    Strategy Tester

    TradingView 的内置面板,可在图表的可用历史数据上运行策略,并呈现 Performance Summary、List of Trades 和 Properties 标签页。

  • 如何上线

    Webhook 至实盘

    一旦回测通过,相同的策略就会向 TradingHost 托管的 Webhook URL 发送警报,进而调用经纪商 API 并执行真实订单。

从想法到经过测试的策略

  1. 用通俗的英语向 Claude 或 ChatGPT 描述您的策略,要求其生成 Pine Script v6 策略脚本。
  2. 将脚本粘贴到 TradingView 的 Pine Editor 中,将其添加到图表,然后打开 Strategy Tester 面板。
  3. 查看 Performance Summary 标签页;检查 List of Trades 标签页中的成交分布和频率;确认 Properties 标签页中的佣金和滑点假设符合实际情况。
  4. 与 AI 协同迭代修改脚本,直到该策略在样本外数据上通过客观的回测。
  5. 针对该策略创建 TradingView 警报,将 Webhook URL 指向 TradingHost 运行环境;将验证通过的脚本升级为实盘。

章节 02 · 一览

一览

工作流
使用 AI 编写 Pine Script 策略,在 TradingView 的 Strategy Tester 中进行验证,然后通过 Webhook 升级为实盘
语言
Pine Script v6(当前 TradingView 语言版本)
脚本声明
必须是 strategy(),不能是 indicator();只有 strategy 脚本能在 Strategy Tester 中运行
Strategy Tester
内置于每个 TradingView 账户中;在图表下方以面板形式打开
核心标签页
Performance Summary、List of Trades、Properties
性能指标
净利润、总利润、总亏损、盈利因子、最大回撤、胜率、单笔平均交易
K线数量限制
回测范围受限于图表已加载的 K 线数量;付费方案中的 Deep Backtesting 可将范围延伸至可见区域之外
AI 工具
Claude、ChatGPT、Gemini(任何基于 Pine Script v6 参考文档训练的模型)
编辑界面
TradingView Pine Editor;更深度的编辑可在 Cursor 中进行,并在提示词中附带 Pine v6 参考
实盘交易路径
TradingView 警报,其 Webhook URL 指向调用经纪商 API 的 TradingHost 运行环境
TradingHost 角色
策略上线后的 Webhook 接收端运行环境(回测阶段本身不使用)
隶属关系
TradingHost 是独立的,与 TradingView 无任何隶属关系

第 03 节 · 用 AI 编写策略

描述策略,获取 Pine Script 代码

打开 Claude 或 ChatGPT,用通俗的语言描述你希望策略执行的操作。明确交代三点:时间周期与交易品种、入场与出场规则、以及仓位大小。要求生成 Pine Script v6 strategy() 脚本(而非 indicator()),以便结果能在 Strategy Tester 中运行,并在后续配置警报时可以使用 strategy.* 占位符。

仔细阅读每一行代码。Pine Script 的 strategy() 函数包含一些会悄然改变回测行为的参数(如 initial_capital、default_qty_type、commission_type、process_orders_on_close),而 AI 并不总是会选择符合你预期的数值。让模型解释它设置的每个参数,并根据你实际的交易方式进行调整。

值得注意的三个 Pine Script 细节。第一,重绘(repainting):默认情况下,Pine 会绘制在每个 tick 上重新计算的 K 线内数值,因此一个“通过”实盘测试的策略可能依赖了在 K 线收盘时实际并不存在的值。重绘指标在回测中显示一个信号,而在实盘 K 线收盘时显示另一个信号;在日内时间周期上,这种偏差足以让一个盈利的回测变成亏损的实盘策略。在策略逻辑中使用 barstate.isconfirmed 进行限制,在将策略上线时将警报设置为“Once per bar close”(每次K线收盘时)触发,并优先选择明确不重绘的指标。第二,未来函数偏差(lookahead bias):如果脚本引用了未来的数值,很容易在无意中引入该偏差;要求模型确认历史引用中没有使用泄露未来数据的信息。第三,订单成交假设:默认情况下,Pine 会在下一根 K 线的开盘价成交市价单,而不是信号 K 线的收盘价。如果你的回测在信号触发的同一根 K 线入场,请设置 process_orders_on_close = true,并接受这比实盘执行所能达到的条件更为严苛。

如果你更喜欢使用 IDE 而不是 TradingView Pine Editor,可以在 Cursor 中结合 Claude 或 GPT 编写相同的脚本,准备就绪后再粘贴到 TradingView 中。Cursor 工作流页面涵盖了 IDE 方面的操作。

第 04 节 · 运行 Strategy Tester

将策略添加到图表并打开 Strategy Tester

打开针对你策略目标品种和时间周期的 TradingView 图表。将策略粘贴到图表底部的 Pine Editor 中,然后点击“添加到图表”。如果脚本声明了 strategy(),TradingView 会自动在 Pine Editor 下方打开 Strategy Tester 面板。

Strategy Tester 会针对图表当前加载的 K 线运行策略。如果你需要更长的回测窗口,请在重新运行前向左滚动以加载更多历史数据。在 TradingView 付费方案中,Deep Backtesting 选项可将测试范围延伸至图表可见 K 线范围之外;免费版则受限于图表中已加载的数据。

在查看结果之前,先调整策略设置(脚本名称旁边的齿轮图标)。初始资金、订单大小、加仓(pyramiding)、手续费和滑点是会实质性改变报告的关键项;默认值很少符合你的实际需求。请将手续费和滑点设置为你打算执行交易的经纪商实际收取的标准。

第 05 节 · 阅读报告

至关重要的三个标签页

Strategy Tester 呈现了 Performance Summary、List of Trades 和 Properties 标签页。请仔细阅读这三个页面。Performance Summary 告诉你策略在模拟中是否盈利。List of Trades 告诉你策略是否触发了你实际想要的交易。Properties 标签页则告诉你这些交易背后的假设是否切合实际。

一个在 Performance Summary 上显示出漂亮净利润,但在不切实际的手续费和滑点设置下,一年只触发四次交易的策略,算不上真正的策略。它只是图表上的拟合产物。这三个标签页结合在一起,才是你的安全保障。

值得关注的指标

净利润
所有模拟交易的总盈亏,以账户货币及占初始资金的百分比表示。
盈利因子
总盈利除以总亏损。大于 1 意味着策略在模拟中实现了盈利;真实的实盘策略通常介于 1.2 到 2 之间。
最大回撤
测试期间资金曲线从最高点到最低点的最大跌幅。这是最关键的单一风险指标。
胜率(盈利交易百分比)
盈利平仓交易的比例。高胜率往往隐藏着尾部风险;需结合平均盈利与平均亏损进行评估。
单笔交易平均盈亏
每笔交易的平均盈亏。如果该值小于你对现实世界手续费加滑点的估算,那么该策略在实际操作中是无法盈利的。
夏普比率 / 索提诺比率
风险调整后收益指标。启用后会在 Performance Summary 标签页下显示。
List of Trades
包含每次模拟交易的入场、出场、仓位大小、盈亏以及最大浮盈/最大浮亏。阅读此项以确认策略的触发方式符合你的预期。
Properties
运行所使用的设置:初始资金、订单大小、手续费、滑点、加仓。在根据结果采取行动之前,确认你所测试的具体配置。

需要指出一个 Pine 特有的风险:默认情况下,Strategy Tester 对 K 线内(intra-bar)的假设过于宽松。如果你的策略在回测中于同一根 K线内入场和出场,实盘警报需要使用“Once per bar close”(每次K线收盘时)频率,否则无法重现相同的 K 线内反转。在上线实盘前,务必使警报频率与回测假设保持一致。

第 06 节 · 晋升至实盘交易

当回测站得住脚,即可部署策略

完美的回测只是一张入场券,而不是盈利保证。当策略在包含现实手续费和滑点的样本外数据上通过了公正的测试,下一步就是配置带有 Webhook URL 的 TradingView 警报。

你测试过的 Pine Script 就是你直接部署的脚本,无需为实盘交易重新编写。你只需针对该策略创建警报,将 TradingHost 运行环境的 Webhook URL 粘贴到警报中,并使用 strategy.* 占位符将交易方向和仓位大小编码为 JSON 格式的警报消息。TradingHost 容器会解析该载荷并调用经纪商的 REST API。

无需 MetaTrader,无需 Windows VPS,也无需 PineConnector 授权。运行你回测的同一个 Pine Script 即可直接触发你的实盘订单。

第 08 部分 · 常见问题

常见问题解答

所有 TradingView 账户都可以使用 Strategy Tester。Deep Backtesting 和更长的历史 K 线范围需要 Plus 及以上方案才能解锁。而通过 Webhook URL 发送信号(即后续向经纪商发送实盘警报所需的方法)则需要 Plus、Premium 或 Ultimate 方案;Essential 和免费版不支持 Webhook 警报。

只有声明了 strategy() 的 Pine Script 脚本才能参与 Strategy Tester 回测,并提供后续实盘警报所需的 strategy.* 占位符。indicator() 脚本无法进行回测。

推荐使用 Pine Script v6。TradingView 已明确表示,未来的语言更新将仅应用于 v6,因此现在使用 v5 编写任何新脚本,迟早都面临着迁移的工作。

在重新运行测试器之前,向后滚动图表以加载更多历史数据;或者,如果您的 TradingView 方案支持,可以使用 Deep Backtesting。Deep Backtesting 可以在超出图表可见 K 线范围的数据上运行测试。

这取决于时间周期。在扣除真实的佣金和滑点后,日线和波段策略(4 小时及以上 K 线)在真实回测中的获利因子通常在 1.3 到 2.5 之间。日内策略(1 小时以下)由于交易频次更高,通常在 1.5 到 3 之间。对于日内数据,任何超过 3 的获利因子都值得怀疑,除非您能在样本外数据上复现该结果;超过 4 的数值几乎总是意味着存在未来函数、重绘或不切实际的成交价。

是的,可以在策略属性中进行设置。请将 commission_type 和滑点(slippage)设置为与您实际使用的经纪商收费一致。默认值通常会低估实际交易成本,从而导致回测结果虚高。

可以。Backtrader 和 VectorBT 是基于 Python 的回测框架,相比 Pine,它们能处理更复杂的投资组合、仓位管理和统计分析。代价是您将失去 TradingView 的直观图表环境。

仔细检查每一次对过去或未来 K 线的引用。Pine 的历史引用操作符 [n] 是向后看的,但如果意外使用了仅在 K 线收盘时才存在的值(或易导致重绘的计算),就会使回测结果虚高。在实盘运行前,建议配合一段时间的模拟交易进行验证。

在策略上创建 TradingView 警报,将 Webhook URL 指向 TradingHost 运行环境,并将警报消息写为包含 strategy.* 占位符(用于指定方向和仓位大小)的 JSON 格式。有关实盘执行闭环的详细信息,请参阅 Webhook 工作流页面。

相信工作流,而不是输出结果。AI 负责加速编写,回测是您的安全防线,而实盘警报是您的执行机制。在加大资金规模之前,请务必通读每一行代码,进行真实客观的回测,并进行模拟交易。