在TradingView Pine Editor中创建EMA与SMMA均线交叉脚本的问题
EMA5 与 SMMA7 均线交叉策略(Pine Script 实现)
一、SMMA 核心逻辑与实现
SMMA(平滑移动平均线)的计算规则是:
- 首个周期值等于对应长度的 SMA(简单移动平均线)
- 后续每个周期值 =
(前一期 SMMA × (周期长度-1) + 当前收盘价) ÷ 周期长度
Pine Script 内置了 ta.smma() 函数可直接调用,也可以手动实现逻辑加深理解。
二、完整策略代码
//@version=5 strategy("EMA5 vs SMMA7 交叉策略", overlay=true, default_qty_type=strategy.cash, default_qty_value=10000, commission_type=strategy.commission.percent, commission_value=0.1) // 计算周期5的EMA ema5 = ta.ema(close, 5) // 计算周期7的SMMA(两种方式二选一即可) // 方式1:使用内置函数(推荐,简洁高效) smma7 = ta.smma(close, 7) // 方式2:手动实现SMMA逻辑 // smma7 = 0.0 // smma7 := bar_index >= 6 ? (smma7[1] * 6 + close) / 7 : ta.sma(close, 7) // 绘制均线到图表 plot(ema5, color=color.blue, title="EMA5", linewidth=2) plot(smma7, color=color.red, title="SMMA7", linewidth=2) // 定义交叉信号 long_signal = ta.crossover(ema5, smma7) // EMA5上穿SMMA7,做多 short_signal = ta.crossunder(ema5, smma7) // EMA5下穿SMMA7,做空 // 执行交易指令 if (long_signal) strategy.entry("做多", strategy.long) if (short_signal) strategy.entry("做空", strategy.short)
三、关键代码说明
- 均线计算:
ta.ema()和ta.smma()是Pine Script v5的内置指标函数,传入收盘价和周期长度即可完成计算。 - 手动SMMA实现:通过
bar_index判断是否达到初始化周期(第7根K线对应索引6),前6根用SMA初始化,后续按公式迭代更新。 - 信号触发:
ta.crossover()和ta.crossunder()是专门检测均线交叉的函数,直接输出布尔值信号。 - 策略配置:默认采用现金下单模式,佣金设置为0.1%,可根据实际需求调整参数。
内容的提问来源于stack exchange,提问作者Ranjith
相关产品推荐
相关产品推荐

