Pine Script多时间框架RSI值异常:切换图表周期数值变动
问题原因
你遇到的问题根源在于RSI的计算时机错误:你先把不同时间框架的收盘价拉到当前图表的每个bar中,再在当前时间框架下计算RSI。由于request.security会将目标时间框架的单条数据,重复填充到当前时间框架的所有对应bar里(比如日收盘价在小时图中会重复24次),用这些重复值计算出的RSI,和目标时间框架(日/小时图)上的真实RSI完全不符,且切换当前时间框架时,重复数据的数量变化,导致RSI值跟着改变。
解决方案
直接在request.security内部计算目标时间框架的RSI,这样获取到的就是对应时间框架下的真实RSI值,不会随当前图表时间框架变化。
修改后的代码
//@version=5 indicator("跨时间框架RSI", overlay=true) // 直接在目标时间框架内计算RSI daily_rsi = request.security(syminfo.tickerid, "D", ta.rsi(close, 14)) hourly_rsi = request.security(syminfo.tickerid, "60", ta.rsi(close, 14)) // 创建表格并显示数据 var myTable = table.new(position.bottom_right, 2, 5) if barstate.islast table.cell(myTable, 0, 0, "RSI Daily", text_color=color.white) table.cell(myTable, 1, 0, str.tostring(daily_rsi, "#.##"), text_color=color.white) table.cell(myTable, 0, 1, "RSI Hourly", text_color=color.white) table.cell(myTable, 1, 1, str.tostring(hourly_rsi, "#.##"), text_color=color.white)
关键说明
request.security(syminfo.tickerid, "D", ta.rsi(close, 14)):这段代码会切换到日时间框架,计算该框架下的14周期RSI,然后将最新的RSI值返回到当前图表中,不会携带重复数据。var关键字:确保表格只在脚本初始化时创建一次,避免每次bar都重复创建表格。barstate.islast:仅在最后一个bar更新表格内容,减少资源消耗。
内容的提问来源于stack exchange,提问作者Prosenjit
相关产品推荐
相关产品推荐

