Pine脚本设置timeframe="D"后如何获取用户选择的图表时间框架?
解决Pine脚本中获取用户实际选择时间框架的问题
当你在indicator()中设置timeframe="D"后,脚本的运行环境会被强制切换到日线级别,所有依赖当前运行周期的API(比如timeframe.is*、timeframe.period)以及K线时间差计算,都会返回这个强制设置的日线周期,而非用户图表上实际选择的周期。
解决方案:保留脚本在用户周期运行,用request.security()获取目标周期数据
要同时满足"获取用户实际周期"和"处理日线数据"的需求,正确的做法是不强制脚本的运行周期,而是通过request.security()函数在脚本中单独拉取日线数据,这样脚本会在用户所选周期下运行,自然就能读取到用户的实际周期信息。
修改后的示例脚本:
//@version=5 indicator("获取用户实际时间框架", overlay=true) // 1. 读取用户当前图表的时间框架 var int user_tf_id = 0 user_tf_id := timeframe.isdaily ? 1 : timeframe.isweekly ? 2 : timeframe.ismonthly ? 3 : timeframe.isintraday ? 4 : 0 // 2. 用request.security()获取日线数据(替代原脚本的强制timeframe="D") daily_close = request.security(syminfo.tickerid, "D", close) // 3. 可视化输出用户周期标识和日线数据 plot(user_tf_id, title="用户周期标识", color=color.blue, linewidth=2) plot(daily_close, title="日线收盘价", color=color.red, linewidth=2) // 4. 显示用户周期的文本描述 var label tf_label = label.new(bar_index, high, "", style=label.style_label_down) label.set_text(tf_label, str.format("用户当前周期: %s", timeframe.period)) label.set_xy(tf_label, bar_index, high)
关键说明
- 移除
indicator()中的timeframe="D"参数,让脚本在用户当前图表周期运行,此时timeframe.is*、timeframe.period会正确返回用户所选周期(比如"1H"、"4H"、"W"等)。 - 使用
request.security()可以灵活拉取任意周期的数据,完全替代"强制脚本运行周期"的需求,同时不影响对用户周期的读取。 - 如果你的业务逻辑必须在日线周期内执行,可以将核心逻辑封装在基于拉取到的日线数据的处理模块中,同时保留脚本主环境在用户周期。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

