多时间框架输入问题求助:如何锁定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: ")
核心逻辑说明:
- 时间框架输入:通过
input.timeframe()创建下拉选择框,用户可以选择如日(D)、4小时(4H)等固定时间框架,ATR将始终基于该框架计算。 - 均线函数重构:原函数依赖外部的
atr_ma变量,跨时间框架调用时会出现作用域问题,修改后将平滑类型作为参数传入,确保request.security()能正确执行计算。 - 跨时间框架数据获取:
request.security(syminfo.tickerid, atr_timeframe, ...)会在指定时间框架上执行ATR计算,将结果同步到当前图表的每个K线中,保证数值稳定不随当前时间框架切换变化。 - 上下轨计算:用当前图表K线的
high和low结合固定时间框架的ATR值,生成适配当前K线的上下轨。
内容的提问来源于stack exchange,提问作者Shade
相关产品推荐
相关产品推荐

