Skip to main content
On this page

TradingView Scripts 教程:EMA 指标、策略与回测边界

· 5 min read
Pineify Team
Pine Script and AI trading workflow research team

Pine Script 用于在 TradingView 上编写指标、策略和可复用库。指标输出图形或信号;策略还可以向平台的经纪商模拟器提交订单并产生回测记录。策略代码不会直接向 Trading Panel 中连接的实盘账户下单。

TradingView Scripts 教程:全面入门到进阶实战指南

创建并保存脚本​

打开 Pine Editor,选择新建指标或策略,保存副本后添加到图表。保留编译诊断,先解决第一条明确错误,再检查运行时错误。官方入门文档说明编辑、保存和运行的基本流程。

当前语言版本是 v6。下面保留两个 v5 教学示例,以便解释已有代码;v5 并不等于最新版本。迁移时应阅读版本指南,不能只替换版本数字。

一个完整的 EMA 指标​

//@version=5
indicator("My EMA Demo", overlay=true)
emaFast = ta.ema(close, 12)
emaSlow = ta.ema(close, 26)
plot(emaFast, color=color.orange)
plot(emaSlow, color=color.blue)

overlay=true 把输出放在主图。两条线分别使用当前图表的 12 和 26 根收盘价计算 EMA;在小时图上它们不是 12 日和 26 日均线。线的位置反映平滑后的价格关系,不保证下一根价格方向。

这段示例把周期直接写在源码中,没有 input.int() 控件。因此不能在 Inputs 面板直接把 12 改成 9;需要修改源码,或另行设计输入参数。

改为可回测的多头策略​

//@version=5
strategy("EMA Cross Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
emaFast = ta.ema(close, 12)
emaSlow = ta.ema(close, 26)
longCond = ta.crossover(emaFast, emaSlow)
shortCond = ta.crossunder(emaFast, emaSlow)
if longCond
strategy.entry("Long", strategy.long)
if shortCond
strategy.close("Long")
plot(emaFast, color=color.orange)
plot(emaSlow, color=color.blue)

快线上穿时提交多头入场,下穿时关闭 Long。变量名 shortCond 在这里表示多头退出条件,不会开空仓。default_qty_value=100 配合 strategy.percent_of_equity 表示使用权益比例确定订单规模,不表示把最大亏损限制为某个百分比。

该示例没有止损、手续费或滑点设置。默认策略计算和成交时点也可能使订单在下一可用价格更新才成交。先阅读策略模拟规则,再解释结果。

没有可复查的交易记录支持任何特定 BTCUSD 收益、回撤或参数优化胜率;这里不报告这些数字。示例的用途是学习结构。

如何核对回测​

记录交易所与代码、图表类型、周期、样本日期、初始资金、仓位、手续费和滑点。逐笔核对信号与成交时间,观察是否使用了未收盘值。保留未参与调参的数据,再比较不同市场阶段;只挑净利润最高的参数容易过拟合。

胜率不能单独衡量策略。还应检查平均盈亏、交易次数、回撤、持仓暴露、成本,以及少数大额交易是否主导结果。非标准图表的合成价格尤其需要谨慎解释。

变量、调试与外部数据​

var 控制变量只初始化一次并跨 bar 保留状态。它不是普遍加速开关:如果本应逐 bar 更新的计算被错误地固定,结果会改变。用图形、Pine Logs 和小范围输入核对逻辑,再考虑优化。

if 可以接受合适的 series bool 条件;不能用补上 := 或 var 的办法修复所有类型错误。赋值、重赋值、作用域和类型应分别检查。

Pine 没有通用本地文件或任意 HTTP 读取接口,也不存在 request.ohlc()。支持的数据请求见官方 request 文档。上传 CSV 并不会自动把它变成可供任意脚本读取的公开交易品种。

发布与自动化​

开源、受保护和邀请制是不同的访问方式。受保护隐藏源码,但不等于仅付费订阅者可用;发布及商业分发要遵循平台规则。

若需要外部自动化,警报和 webhook 只是消息链路的一部分。接收端还必须处理鉴权、重复消息、订单状态和失败恢复。先在模拟环境验证,不能把图上标记等同于实际成交。

Pineify Website