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

多时间框架输入问题求助:如何锁定ATR值至指定时间框架

锁定ATR到指定时间框架的解决方案

关键修改步骤:

  • 添加时间框架输入控件,让用户自定义ATR计算的目标时间框架
  • 重构均线函数,将平滑类型作为参数传入,解决跨时间框架调用的作用域问题
  • 使用request.security()在指定时间框架上计算ATR值,确保数值不随当前图表时间框架切换而变化
  • 补充缺失的ATR显示开关输入项

修改后的完整代码

//@version=5
indicator("锁定时间框架的ATR", overlay=true)

// ATR相关输入项
atr_ma = input.string(group="ATR - Average True Range", title="平滑方式:", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"])
atr_lenght = input.int(group="ATR - Average True Range", title="周期:", defval=14, minval=1)
atr_multiply = input.int(group="ATR - Average True Range", title="乘数:", defval=2, minval=1)
atr_timeframe = input.timeframe(group="ATR - Average True Range", title="锁定时间框架", defval="D", tooltip="选择ATR计算的目标时间框架,不受当前图表时间框架影响")
show_atr = input.string(group="ATR - Average True Range", title="显示ATR表格", defval="On", options=["On", "Off"])

// 颜色定义
color_atrText = color.silver
color_atrLow = color.teal
color_atrHigh = color.red

// 重构均线函数:将平滑类型作为参数传入
ma_function(source, length, ma_type) =>
    switch ma_type
        "RMA" => ta.rma(source, length)
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "WMA" => ta.wma(source, length)

// 在指定时间框架计算ATR值
atrValue = request.security(syminfo.tickerid, atr_timeframe, ma_function(ta.tr(true), atr_lenght, atr_ma)) * atr_multiply
// 结合当前K线的高低点计算上下轨
atrValueHigh = high + atrValue
atrValueLow = low - atrValue

// ATR表格绘制
var table AtrTable = table.new(position.bottom_center, 3, 1, border_width = 3)   
f_fillCell(_table, _column, _row, _value, _prefix) =>
    _cellText = _prefix + str.tostring(_value, "#.#")
    table.cell(_table, _column, _row, _cellText, text_color = color_atrText)
    table.cell_set_text_color(AtrTable, 1, 0, color.new(color_atrLow, transp = 0))
    table.cell_set_text_color(AtrTable, 2, 0, color.new(color_atrHigh, transp = 0))
    
if barstate.islast and show_atr == "On"
    f_fillCell(AtrTable, 0, 0, atrValue, "ATR: ")
    f_fillCell(AtrTable, 1, 0, atrValueLow, "L: " )
    f_fillCell(AtrTable, 2, 0, atrValueHigh, "H: ")

核心逻辑说明:

  1. 时间框架输入:通过input.timeframe()创建下拉选择框,用户可以选择如日(D)、4小时(4H)等固定时间框架,ATR将始终基于该框架计算。
  2. 均线函数重构:原函数依赖外部的atr_ma变量,跨时间框架调用时会出现作用域问题,修改后将平滑类型作为参数传入,确保request.security()能正确执行计算。
  3. 跨时间框架数据获取:request.security(syminfo.tickerid, atr_timeframe, ...)会在指定时间框架上执行ATR计算,将结果同步到当前图表的每个K线中,保证数值稳定不随当前时间框架切换变化。
  4. 上下轨计算:用当前图表K线的high和low结合固定时间框架的ATR值,生成适配当前K线的上下轨。

内容的提问来源于stack exchange,提问作者Shade

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:05:27