You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在TradingView中跨时间周期计算SMIsignal与emasignal指标

跨周期计算SMI指标的Pine Script修改方案

嘿,要实现跨周期计算SMIsignal和emasignal其实很简单,核心就是用Pine Script里的request.security()函数调取目标时间周期的行情数据,再基于这些数据重新计算指标就行。我给你整理了修改后的完整代码,还有关键细节的说明:

完整修改代码

//@version=4
study("Cross-Timeframe SMI", overlay=false) // 建议关闭叠加,单独显示指标面板更清晰

// 1. 定义目标时间周期:这里设为7分钟,可自行修改
targetTF = "7" // 周期格式说明:"M"=月, "D"=日, "H1"=1小时, "15"=15分钟, "7"=7分钟等

// 原参数保持不变
a = 20
b = 2
ob = 40
os = -40

// 2. 用request.security()获取目标周期的行情数据
targetLow = request.security(syminfo.tickerid, targetTF, low)
targetHigh = request.security(syminfo.tickerid, targetTF, high)
targetClose = request.security(syminfo.tickerid, targetTF, close)

// 3. 基于目标周期数据计算SMI相关指标
ll = lowest(targetLow, a)
hh = highest(targetHigh, a)
diff = hh - ll
rdiff = targetClose - (hh+ll)/2
avgrel = ema(ema(rdiff,b),b)
avgdiff = ema(ema(diff,b),b)
SMI = avgdiff != 0 ? (avgrel/(avgdiff/2)*100) : 0

// 4. 计算跨周期的信号线
SMIsignal = ema(SMI,b)
emasignal = ema(SMI, 10)

// 可选:画出指标线,方便观察
plot(SMI, color=color.blue, title="SMI")
plot(SMIsignal, color=color.red, title="SMI Signal")
plot(emasignal, color=color.green, title="EMA Signal")
hline(ob, color=color.orange, title="Overbought")
hline(os, color=color.orange, title="Oversold")

关键修改点说明

  • 目标周期定义targetTF变量用来指定你想要的计算周期,比如改成"20"就是20分钟,"D"是日线,按照TradingView的周期格式写就行。
  • 跨周期数据获取request.security()是核心函数,它的三个参数分别是当前交易标的ID、目标周期、要获取的行情字段(比如low/high/close),这样就能拿到目标周期下的完整行情数据了。
  • 指标计算迁移:把原来基于当前周期的low/high/close全部替换成目标周期的targetLow/targetHigh/targetClose,这样整个SMI的计算逻辑就完全跑在目标周期上,最后得到的信号线自然也是目标周期的结果。
  • 显示优化:我把overlay改成了false,指标会显示在单独面板里,避免和当前周期K线混淆;要是你一定要叠加到K线图上,改回true就行。

小提醒

如果当前周期比目标周期短(比如当前是5分钟,目标是7分钟),在7分钟K线还没走完的时候,request.security()会返回上一根已完成的7分钟K线数据,这是正常的跨周期数据延迟,属于TradingView的机制哦。

内容的提问来源于stack exchange,提问作者gr68

火山引擎 最新活动