You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 06:27:27