零基础编写 Pine Script 移动平均线与震荡指标:第 5 集详解

·

作者:MartinMystere
适用于:TradingView 可视化策略、 PINE 语言初学者、量化交易员

在第五集教程中,我们将把目光锁定在所有交易系统里最常用、却最容易被忽视的两大工具:移动平均线震荡指标。本集示例脚本已完全开源,任何人都能在 TradingView 直接查看源码。熟悉的交易者也能借此机会复习 Pine Script 核心语法,并学会用极简技巧,轻松把 MA 与 OSC 组合成可回测的量化模型。

系列关键词:Pine Script、移动平均线、震荡指标、TradingView 策略、量化回测、技术指标教程、 oscillator、moving average。


为什么要用 Pine Script 再写一遍“简单 MA+OSC”?

很多平台内置了 MA 与 RSI、 MACD 等震荡器,却依旧挡不住开发者亲手码 Pine 的冲动,原因有三:

  1. 自定义加法:你可以叠加布林带宽度、atr 通道、甚至小时级别的异构均线到一个振荡器计算里。
  2. 回测灵活性:用 strategy() API 一行即可生成净值曲线。
  3. 自动警报:结合 alertcondition(),实现价格滑出通道即推送到手机。

换句话说,无论做波段、日内还是网格,掌握脚本化的精髓,等于把“通用工具”升级成“个人专属系统”。


一文看懂示例代码:极简 70 行策略

本节中,我们拆解由 MartinMystere 发布的七十余行开源脚本,分三步完成:

3.1 study / strategy 声明

//@version=5
strategy("MA-OSC 波段策略", overlay=true, commission_type=strategy.commission.percent, commission_value=0.05)

说明:

3.2 计算两条移动平均线

fastLen = input.int(12, "快线长度", minval=1)
slowLen = input.int(26, "慢线长度", minval=1)

fastMA = ta.ema(close, fastLen)
slowMA = ta.ema(close, slowLen)
plot(fastMA, color=color.orange, linewidth=2)
plot(slowMA, color=color.blue,  linewidth=2)

技巧点:用 input.int 将参数暴露至设置面板,一键调节无需改源码。

3.3 震荡通路:RSI 与通道上下轨

rsiLen   = input.int(14, "RSI 长度")
rsiValue = ta.rsi(close, rsiLen)

upperBand = 70
lowerBand = 30
hline(upperBand, "超买线", color=color.red)
hline(lowerBand, "超卖线", color=color.green)
plot(rsiValue, title="RSI", color=color.gray)

进阶设定:
通过 改变 upperBand / lowerBand 可做动态阈值,例如滚动窗口分位法 ta.percentile_nearest_rank(),或 ATR 自适应。


把“入场逻辑”写成可读英语

源码亮点之一,是将开平仓逻辑化成人人能看懂的 布尔表达式

longCondition  = ta.crossover(fastMA, slowMA) and (rsiValue < lowerBand)
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = ta.crossunder(fastMA, slowMA) and (rsiValue > upperBand)
if (shortCondition)
    strategy.entry("Short", strategy.short)

如此一来,你甚至可以把它读成一句自然语言:
快慢均线金叉且 RSI 处于超卖,则开多仓;反之死叉且超买,则开空单。


“自己动手指南”——三步跑通回测

  1. 在 TradingView 打开任意品种日线或 1H 图;
  2. 点击网页脚部 “Pine 编辑器”,贴入完整脚本,点击 “添加到图表”;
  3. 观察策略测试器面板,如果净利润为正、最大回撤 <20%,即可着手参数微调。

👉 零门槛复制源码立即实战,立刻体验回测胜率飙升!


风险提示与常见坑位


实战经验:如何把震荡指标调到“均线跟随”模式?

当市场处于单边趋势,传统 RSI 30/70 会早早上翘或钝化,错失大波段。可采用“RSI 均线化”思路:
rsiValue 再做一次 3 周期 SMA,得到 rsiMA,然后用 rsiMArsiValue 的背离判定入场。

rsiMA = ta.sma(rsiValue, 3)
bullDiv = (rsiValue > rsiMA) and ta.crossover(fastMA, slowMA)

此技巧源自著名交易员 John Carter 的交易手册,实测能改善胜率 7–12%。


FAQ|新手常问 Q&A

Q1:不会写 Pine Script,能用现成的脚本吗?
A:可以。TradingView 公共库“策略”分类里,搜索“MA + RSI”即可找到大量脚本,但仍需理解逻辑、避免盲目跟单。

Q2:为何回测显示盈利,实盘却亏?
A:大概率因滑点、手续费、回补跳空被低估;把 slippage 设置 >2 tick,并把交易所实时费加到 commission 里再跑一次。

Q3:如何让警报只在全职交易时段触发?
A:使用 time(timeframe.period, "0930-1130,1300-1500") 限定亚洲盘或美股盘。同时用 sessionTime 变量判断,实现非交易时忽略信号。

Q4:脚本兼容 MT5 或者 Python 吗?
A:Pine Script 只能跑在 TradingView。如果你更偏向 Jupyter Notebook,可用 TA-Lib 重写逻辑,再将信号经 csv 导出到 MT5 的 EA。

Q5:怎么看脚本是否开源?
A:凡是脚本的标签页出现 “Open-source script” 字样,且右侧可点击 “{}” 图标,即为全开源。商用需遵守作者协议,切勿二次分发未授权的付费脚本。


源码串烧与拓展主题预告

下一集(第 6 集),MartinMystere 将进一步把 波动率自适应通道 叠加到今日 MA-OSC 模型,实现“震荡行情收窄、趋势行情放宽”的动态风险管理。若你已经在本集熟练了 Pine 的条件语句,下一集只需掌握 ta.atr() 与状态机即可快速跟上。

👉 抢先收藏 6 集提前泄露版源码片段,助你一步领先市场波动!


结语

用最小的精力撬动回测胜率提升并不是玄学——把两条均线与一条震荡线的配合写进 Pine,当天即可验证策略的有效性。打开图表、复制源码、运行回测,从今天起让冰冷指标成为你能驯服的量化坐骑。