TradingView Pine Script多时间框架RSI开发问题求助
解决TradingView多时间框架RSI显示错误的问题
我来帮你搞定这个多时间框架RSI的问题~你遇到的核心问题其实是security函数的默认行为导致的数据对齐和计算逻辑错误,下面一步步给你拆解和解决:
问题根源分析
你之前的两种写法都没处理好security函数的数据合并规则和未来函数风险:
- 第一种写法
security(tickerid, "5", rsi(src, 14)):默认情况下security会启用"提前看盘"(lookahead),导致在大时间框架下会用到还没走完的小时间框架数据,相当于引入了未来函数,数值自然不准。 - 第二种写法
rsi(security(tickerid, "5", src), 14):虽然拿到了小时间框架的收盘价序列,但在大时间框架下,这个序列会被压缩对齐,RSI计算时用的是"对齐后"的不完整小周期数据,结果当然不对。
正确实现代码(Pine Script v5)
//@version=5 indicator("Multi Time Frame RSI", "MTF RSI", overlay=false) // 可配置参数 src = input.source(close, title="Source") rsi_length = input.int(14, title="RSI Length") target_tf = input.timeframe("5", title="Target Time Frame") // 核心:在security内部完成RSI计算,同时关闭未来函数、开启缺口显示 mtf_rsi = request.security( syminfo.tickerid, target_tf, ta.rsi(src, rsi_length), gaps=barmerge.gaps_on, // 显示数据缺口,避免错误填充 lookahead=barmerge.lookahead_off // 关闭未来函数,保证数据实时准确 ) plot(mtf_rsi, title="MTF RSI", color=color.purple, linewidth=1)
关键参数解释
lookahead=barmerge.lookahead_off:彻底关闭提前看盘功能,确保你看到的RSI值都是当前时刻已经确定的小时间框架数据,没有未来偏移。gaps=barmerge.gaps_on:当小时间框架在当前大时间框架K线内有数据缺失时(比如休市),会显示缺口,而不是用错误的数据自动填充,保证数值真实性。- 在
request.security内部计算RSI:确保RSI是基于完整的小时间框架序列(14个5分钟K线)计算的,而不是被大时间框架压缩后的残缺序列。
兼容Pine Script v4的写法
如果你还在使用v4,只需要把request.security换成security即可:
//@version=4 study("Multi Time Frame RSI", "MTF RSI", overlay=false) src = input(title="Source", type=input.source, defval=close) rsi_length = input(title="RSI Length", defval=14) target_tf = input(title="Target Time Frame", defval="5") mtf_rsi = security( syminfo.tickerid, target_tf, rsi(src, rsi_length), gaps=barmerge.gaps_on, lookahead=barmerge.lookahead_off ) plot(mtf_rsi, title="5min_RSI", color=color.purple, linewidth=1)
现在不管你切换到1小时、4小时还是日线图,都能准确显示5分钟周期计算出的RSI值了~
内容的提问来源于stack exchange,提问作者LeanMan




