如何修改Pine Script时间框架?RSI背离脚本适配特定周期问询
问题解答:用request.security()转换RSI背离脚本的时间框架
可行性说明
完全可以通过request.security()函数将src_fast和src_slow指定为特定时间框架(比如1D)的收盘价,以此在当前时间框架上展示更高时间维度的RSI背离曲线。
修改后的完整代码(Pine Script v4)
study(title="RSI Divergence (Custom TF)", shorttitle="RSI Divergence TF") // 添加目标时间框架输入,默认设置为1D target_tf = input.timeframe("D", title="Target Timeframe") // 使用request.security获取目标时间框架的收盘价作为数据源 src_fast = request.security(syminfo.tickerid, target_tf, close) len_fast = input(5, minval=1, title="Length Fast RSI") src_slow = request.security(syminfo.tickerid, target_tf, close) len_slow = input(14, minval=1, title="Length Slow RSI") up_fast = rma(max(change(src_fast), 0), len_fast) down_fast = rma(-min(change(src_fast), 0), len_fast) rsi_fast = down_fast == 0 ? 100 : up_fast == 0 ? 0 : 100 - (100 / (1 + up_fast / down_fast)) up_slow = rma(max(change(src_slow), 0), len_slow) down_slow = rma(-min(change(src_slow), 0), len_slow) rsi_slow = down_slow == 0 ? 100 : up_slow == 0 ? 0 : 100 - (100 / (1 + up_slow / down_slow)) divergence = rsi_fast - rsi_slow plotdiv = plot(divergence, color = divergence > 0 ? lime : red, linewidth = 2) band = hline(0)
关键修改点说明
- 新增
target_tf输入框,可自由选择目标时间框架(比如4H、D、W等),无需硬编码。 - 用
request.security(syminfo.tickerid, target_tf, close)替代原代码的close,该函数会从指定时间框架的K线中提取收盘价数据,同步到当前时间框架的图表上。 - 原RSI计算逻辑完全保留,仅替换数据源的时间维度。
注意事项
- 时间框架兼容性:如果当前时间框架比目标时间框架更精细(比如当前是1H,目标是1D),
request.security()会自动将目标时间框架的收盘价数据填充到当前所有K线上;如果当前时间框架更粗,数据会以最新的目标时间框架数据为准。 - 避免重绘风险:Pine Script v4中
request.security()默认启用前瞻合并,若要规避未来函数风险,可显式添加参数:src_fast = request.security(syminfo.tickerid, target_tf, close, gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_off) - 代码简化:如果
src_fast和src_slow都使用同一目标时间框架的收盘价,可只调用一次request.security(),将结果赋值给同一个变量复用。
替代方案
- 直接切换时间框架运行脚本:如果不需要在当前时间框架叠加展示,最简单的方式就是直接切换到目标时间框架(比如1D),运行原脚本即可,无需修改代码。
- 封装RSI计算函数:将RSI计算逻辑封装成自定义函数,再通过
request.security()调用整个RSI计算结果,减少重复代码:study(title="RSI Divergence (Custom TF)", shorttitle="RSI Divergence TF") target_tf = input.timeframe("D", title="Target Timeframe") // 封装RSI计算函数 calculateRSI(src, len) => up = rma(max(change(src), 0), len) down = rma(-min(change(src), 0), len) down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down)) // 在目标时间框架上计算RSI rsi_fast = request.security(syminfo.tickerid, target_tf, calculateRSI(close, 5)) rsi_slow = request.security(syminfo.tickerid, target_tf, calculateRSI(close, 14)) divergence = rsi_fast - rsi_slow plotdiv = plot(divergence, color = divergence > 0 ? lime : red, linewidth = 2) band = hline(0)
内容的提问来源于stack exchange,提问作者metokitt
相关产品推荐
相关产品推荐

