作者:MartinMystere
适用于:TradingView 可视化策略、 PINE 语言初学者、量化交易员
在第五集教程中,我们将把目光锁定在所有交易系统里最常用、却最容易被忽视的两大工具:移动平均线与震荡指标。本集示例脚本已完全开源,任何人都能在 TradingView 直接查看源码。熟悉的交易者也能借此机会复习 Pine Script 核心语法,并学会用极简技巧,轻松把 MA 与 OSC 组合成可回测的量化模型。
系列关键词:Pine Script、移动平均线、震荡指标、TradingView 策略、量化回测、技术指标教程、 oscillator、moving average。
为什么要用 Pine Script 再写一遍“简单 MA+OSC”?
很多平台内置了 MA 与 RSI、 MACD 等震荡器,却依旧挡不住开发者亲手码 Pine 的冲动,原因有三:
- 自定义加法:你可以叠加布林带宽度、atr 通道、甚至小时级别的异构均线到一个振荡器计算里。
- 回测灵活性:用
strategy()API 一行即可生成净值曲线。 - 自动警报:结合
alertcondition(),实现价格滑出通道即推送到手机。
换句话说,无论做波段、日内还是网格,掌握脚本化的精髓,等于把“通用工具”升级成“个人专属系统”。
一文看懂示例代码:极简 70 行策略
本节中,我们拆解由 MartinMystere 发布的七十余行开源脚本,分三步完成:
3.1 study / strategy 声明
//@version=5
strategy("MA-OSC 波段策略", overlay=true, commission_type=strategy.commission.percent, commission_value=0.05)说明:
overlay=true让指标层叠加在蜡烛之上;commission_value提前模拟交易所千分之五手续费,增强回测真实性。
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 处于超卖,则开多仓;反之死叉且超买,则开空单。”
“自己动手指南”——三步跑通回测
- 在 TradingView 打开任意品种日线或 1H 图;
- 点击网页脚部 “Pine 编辑器”,贴入完整脚本,点击 “添加到图表”;
- 观察策略测试器面板,如果净利润为正、最大回撤 <20%,即可着手参数微调。
风险提示与常见坑位
- 过度优化:“神器”指标往往是参数过度拟合的结果。把 fastLen 从 12 改到 11 都能盈利?请保留截面样本进行前向测试。
- 滑点忽略:Pine 的策略引擎默认用收盘价成交,实际盘口中被滑点吞噬 2~4 tick 很常见,请用
slippage=选项再跑一次。 - 交易所品种差异:加密货币 7×24 无停盘,你看到连涨 300 根 K 线在 A 股可不存在,要分段测试。
实战经验:如何把震荡指标调到“均线跟随”模式?
当市场处于单边趋势,传统 RSI 30/70 会早早上翘或钝化,错失大波段。可采用“RSI 均线化”思路:
把 rsiValue 再做一次 3 周期 SMA,得到 rsiMA,然后用 rsiMA 与 rsiValue 的背离判定入场。
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,当天即可验证策略的有效性。打开图表、复制源码、运行回测,从今天起让冰冷指标成为你能驯服的量化坐骑。