如何在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




