量化交易 XtradingTime

Pine Script 入门:三行出一条均线,四条执行规则决定你写的对不对

Pine Script 入门:三行出一条均线,四条执行规则决定你写的对不对
本文目录(6 节)

「写一个指标要多少行」这个问题的答案是三行。但三行能跑通,不代表你写的是对的。Pine Script 和普通编程语言最大的差别在执行模型上:它不是从上到下跑一遍,是在每一根 K 线上都跑一遍,而所有变量拿到的都是一整条历史序列。不理解这一点,写出来的指标会在回测里赚钱,在实盘上骗你。这篇先给三段可以直接粘贴的完整代码,再讲四条决定对错的执行规则。

一、三行代码,一条均线

打开 TradingView 图表下方的 Pine 编辑器,新建一个指标,把编辑器里的内容全部删掉,粘贴下面三行,点编译并添加到图表:

//@version=6
indicator("我的第一条均线", overlay = true)
plot(ta.sma(close, 20))

图上会出现一条 20 周期简单均线。三行里每一行都不能少:

第一行是版本声明。它必须是文件的第一行,写的是这段代码按哪个版本的语法解释。Pine Script 当前的主版本是 v6,于 2024 年 11 月发布,此后的所有功能更新只针对 v6(2026 年 9 月 12 日核实,版本迭代以 TradingView 官方的 Pine 版本说明页为准)。网上大量教程还是 v4 和 v5 的写法,直接粘贴会报语法错误,遇到报错先看开头这一行是几。

第二行声明这是一个指标,overlay = true 表示画在主图上(叠在 K 线上);改成 false 就画在下方的副图窗口里。均线要叠在 K 线上才有意义,RSI 那种要单独开一个窗口。

第三行 plot 把一条序列画出来,ta.sma(close, 20) 是收盘价的 20 周期简单均线。

把参数变成可调的,加两行:

//@version=6
indicator("我的第一条均线", overlay = true)

length = input.int(20, "均线周期", minval = 1)
plot(ta.sma(close, length), color = color.orange, linewidth = 2)

input.int 会在指标的设置面板里生成一个输入框,改参数不用再改代码。任何你想调的数字都应该写成 input, 这是写第二个指标之前就该养成的习惯,否则每试一组参数就要改一次源码,试完你也不记得试过哪些。

Pine Script 三行最小指标的结构拆解图,把三行代码竖排在左侧,每一行用引线指向右侧的说明块:第一行版本声明指向「必须是第一行,决定语法怎么解释」,第二行 indicator 指向「overlay 决定画主图还是副图」,第三行 plot 指向「把一条序列画到图上」,右下角另画一个设置面板缩略图,标出 input.int 生成的参数输入框

二、四条执行规则,决定你写的对不对

规则一,脚本在每一根 K 线上都完整执行一遍。

图上有 5000 根 K 线,你这段代码就被执行 5000 次,从最左边那根开始,一根一根往右走。这不是循环语句写出来的,是 Pine 的运行方式本身。理解这一点,你才会明白为什么 Pine 里几乎用不到 for 循环。

规则二,每个变量都是一整条序列,不是一个数。

close 不是「当前收盘价」,是「从第一根 K 线到现在的所有收盘价」这条序列。在第 N 根 K 线上执行时,close 取到第 N 根的值,close[1] 取到第 N−1 根的值,close[5] 取到五根之前的值。方括号里的数字是往回数几根。

这套写法叫序列思维,是 Pine 和普通脚本语言的根本差别。「今天成交量是昨天的两倍以上」写出来就是 volume > volume[1] * 2,不需要任何循环或者索引管理。

规则三,未收盘的那根 K 线会被反复重算。

最右边那根正在走的 K 线,价格每跳一次,脚本就在这根 K 线上重算一次。也就是说你看到的信号,在这根 K 线收盘之前可能出现又消失。这就是重绘。

要让信号只在收盘确认后出现,用 barstate.isconfirmed 把它挡住:

signal = ta.crossover(ta.sma(close, 5), ta.sma(close, 20)) and barstate.isconfirmed

用不用这一条,取决于你的交易决策是看收盘还是看盘中。 两边口径必须一致,这和设置警报是同一个道理,TradingView 警报设置的六个关键选项里讲过不一致会带来什么。

规则四,脚本跑在 TradingView 的服务器上。

你的代码不在本地执行,也访问不了你电脑上的任何东西。这决定了后面第五节里那些做不到的事。

三、加条件:放量金叉信号

下面这段是完整可运行的,直接整段替换编辑器内容即可:

//@version=6
indicator("放量金叉提示", overlay = true)

fast    = input.int(5,    "快线周期", minval = 1)
slow    = input.int(20,   "慢线周期", minval = 1)
volMult = input.float(2.0, "放量倍数", minval = 1.0, step = 0.1)

maFast = ta.sma(close, fast)
maSlow = ta.sma(close, slow)
volAvg = ta.sma(volume, 20)

crossUp   = ta.crossover(maFast, maSlow)
bigVolume = volume > volAvg * volMult
signal    = crossUp and bigVolume and barstate.isconfirmed

plot(maFast, "快线", color = color.orange)
plot(maSlow, "慢线", color = color.blue)

plotshape(signal, title = "信号",
          style    = shape.triangleup,
          location = location.belowbar,
          color    = color.red,
          size     = size.small)

alertcondition(signal, title = "放量金叉", message = "快线上穿慢线且成交量放大")

三个地方值得说明。

ta.crossover(a, b) 判定的是 a 从下方穿到 b 上方这一根 K 线,只在穿越发生的那一根上为真,下一根就变回假。用 maFast > maSlow 是「在上方」,是个持续状态,两者完全不同,这是新手最常混淆的一对。

放量倍数默认写 2.0,也就是当根成交量超过 20 周期均量的两倍。这个数字不是标准答案,它的作用是把「放量」这个模糊词变成可执行的门槛。不同市场和品种的合适倍数不一样,量价关系的判定方法见量价关系六种形态

alertcondition 会在警报设置面板里多出一个可选条件,让你能对这个信号挂警报。它本身不发通知,只是把信号暴露出去。

四、从指标到策略:可回测的骨架

指标只画图,策略才能算收益。把 indicator 换成 strategy,加上进出场语句:

//@version=6
strategy("均线交叉策略",
         overlay           = true,
         initial_capital   = 100000,
         default_qty_type  = strategy.percent_of_equity,
         default_qty_value = 100,
         commission_type   = strategy.commission.percent,
         commission_value  = 0.05)

fast = input.int(5,  "快线周期", minval = 1)
slow = input.int(20, "慢线周期", minval = 1)

maFast = ta.sma(close, fast)
maSlow = ta.sma(close, slow)

if ta.crossover(maFast, maSlow)
    strategy.entry("多头", strategy.long)

if ta.crossunder(maFast, maSlow)
    strategy.close("多头")

plot(maFast, "快线", color = color.orange)
plot(maSlow, "慢线", color = color.blue)

commission_value = 0.05 这一项必须填,而且必须填真实值。默认是零手续费,跑出来的收益曲线一定好看。A 股一次买入加卖出的往返成本按 0.102% 估(印花税 0.05% 单边加双边佣金和过户费),换算成单边约 0.05%,所以上面填的是 0.05。你做的是别的品种,就换成你自己账户的真实费率。

if 语句下面那一行必须缩进,Pine 用缩进划分代码块,缩进错了会报错或者行为不对。

策略跑完之后,图表下方的策略测试面板会给出总收益、最大回撤、胜率、盈亏比等等。这些数字怎么看才不骗人,见回测常见的坑;多少笔样本才够得出结论,见回测样本量要多少

Pine 指标与策略的对照结构图,左右两栏:左栏 indicator,往下只有 plot 和 plotshape 两条输出,终点标注「只画图,不产生成交记录」;右栏 strategy,往下有 strategy.entry 和 strategy.close 两条,终点接到一个策略测试面板缩略图,面板上标出总收益、最大回撤、胜率、交易笔数四个数字,并用红框圈出 commission 参数,旁边写「不填这一项,收益曲线一定好看」

五、Pine 做不到的五件事

这五条是它的能力边界,撞上任何一条都说明该换工具了。

第一,不能访问外部数据。 你的 Excel、你的数据库、任何第三方接口,Pine 都读不到。它只能用 TradingView 自己有的行情和内置数据。需要接自己的数据源,就得把数据搬到本地处理,见怎么用 Python 获取 A 股历史数据

第二,不能直接下单。 策略脚本里的「成交」是模拟的。真要下单,只能通过警报加 Webhook 把信号推给外部程序,而 Webhook 是付费档才有的功能。

第三,跨周期取数有严格限制。 在小周期图上取大周期数据要用专门的函数,写法不对会取到未来数据,回测结果会好得离谱。这类错误在回测里最难自己发现,判断方法见回测的真正用途

第四,脚本数量、运行时长、数组长度都有上限。 逻辑写得太复杂会直接超时报错,而不是跑得慢一点。

第五,做不了多品种的资金共享。 一个策略脚本只挂在一个品种上,多品种组合共用一笔资金的逻辑,Pine 表达不了。有这个需求就必须换成本地回测框架。

写在最后

Pine 入门的门槛比多数人想的低得多,三行就能出图。真正的门槛在第二节那四条执行规则上:不理解「每根 K 线执行一遍」和「变量是序列」,你写出来的代码大概率能编译、能画线,但在未收盘的 K 线上给你假信号。

给一个建议的练习顺序:先把第一节的均线跑通,再把参数改成 input,然后照着第三节加一个条件,最后才换成 strategy 去看回测数字。每一步都只加一件事,出错了才知道是哪一行的问题。

3秒免费测一下你的”管不住手指数”:journal.xtradingtime.com(记住 3316,就能找到我们)

本文内容仅供教育和参考用途,不构成任何投资建议。交易有风险,入市须谨慎。

微信搜一搜 Tom讲交易

在微信里搜「Tom讲交易」即可关注,每周更新交易教学

推荐课程

合约陪跑实战训练营

不只教方法,更带你实盘执行。从仓位管理到止损止盈,手把手纠正你的交易习惯,建立可复制的盈利系统。

相关文章

量化交易

回测要用多长时间的数据:先算笔数不算年数,日线策略一年只有 25 笔

「回测一年还是五年」这个问题问错了对象。真正决定回测有没有说服力的是两个数:样本笔数和覆盖的市场状态数。日线策略一年约 250 根 K 线,若平均每 10 根出一个信号,一年只有 25 笔,离 208 笔的显著性门槛差 8.3 年。这篇给出信号密度与所需年数的换算表、五档周期的年信号数对照、市场状态覆盖的三条硬要求,以及数据不够时的三条替代路径。

量化交易

不写代码能不能做回测:四条路径的能力边界,加六个选型维度

新手不写代码也能做回测,四条路径各有各的天花板:手工翻图样本上不去、表格法卡在盘中触发顺序、平台内置测试器要写几行脚本、无代码平台上手最快但黑盒最大。这篇给出四条路径的能力对照、六个选型维度(数据与复权、成本设置、出场表达力、能不能导出逐笔明细、样本外支持、可复现性),以及一条和写不写代码无关的硬边界。

量化交易

用 Excel 做最简回测:十二列公式跑通一套系统,以及它做不到的三件事

Excel 能做回测,前提是你接受它的边界。这篇给出一个十二列的完整框架,信号、持仓状态、入场价、出场价、R 倍数、累计 R 全部用公式自动算,可以直接粘贴,没有循环引用也不需要宏。同时说清楚 Excel 回测做不到的三件事:盘中触发顺序、滑点与流动性建模、多品种共享资金,以及出现哪四个信号时必须换工具。

量化交易

AI量化是不是骗局:六个骗局特征,四个自己就能做的验证

打着AI和大模型旗号的量化产品这两年特别多,其中真做量化的和纯粹套壳收钱的混在一起,光看宣传页分不出来。这篇不评价任何具体产品,只给判据:六个骗局产品身上高频出现的特征,每个都配一个你自己能核对的动作;再给四个动手验证的方法,包括逐笔记录抽查、小额实测、主体资质查询和资金权限检查。另附真做量化的团队通常长什么样。

量化交易

回测的 7 个致命陷阱:为什么回测好的策略实盘亏钱

回测是量化交易最重要的环节,也是最容易被自己骗的环节。90% 的散户量化策略“回测亮眼实盘亏损”,原因都在这 7 个回测陷阱里:过拟合、生存偏差、前视偏差、数据窥探、不真实的执行、忽略成本、样本不足。本文逐一拆透每个陷阱的本质 + 散户能用的检测方法。读完你会成为“会看回测”的少数人。

量化交易

量化交易入门:散户也能用的 4 大策略框架

量化交易听起来高大上,但 90% 的散户对它的理解还停留在“用程序自动下单”。真正的量化是用数学模型寻找市场规律,把“凭感觉”变成“凭数据”。本文从 0 到 1 拆透量化交易:4 大核心策略框架(趋势跟随/均值回归/统计套利/事件驱动)、散户能用的 5 个量化工具、以及量化 vs 主观交易的本质差异。读完你会知道:量化不是机构专利,散户也能上手。

觉得有用?关注公众号

扫码或在微信里搜「Tom讲交易」,每周更新交易教学文章

扫码关注 Tom讲交易,或微信搜一搜 Tom讲交易

配套免费工具

随机漫步模拟

打开