如何移除Plot()绘制EMA时产生的偏移周期图形?
如何移除Plot()中EMA的偏移绘制部分
你需要移除EMA图表里通过offset=7生成的超前偏移绘制区域,但用not barstate.islast的逻辑没起作用,当前代码如下:
close_ema = ta.ema(close, length) plot(close_ema ? close : na, color=color.new(#ffffff, 0), title='Median', offset=7)
问题分析
你当前的代码存在两个问题:
- 逻辑判断错误:
close_ema ? close : na实际绘制的是收盘价而非EMA,属于笔误; offset是让整个序列向前偏移,单纯用barstate.islast无法精准控制偏移部分的显示。
解决方案
要隐藏超出当前K线范围的偏移部分,核心是让偏移后超出有效范围的Bar返回na,通过Bar索引判断即可实现,修正后的代码如下:
// 可调整的参数 length = input.int(20, title="EMA周期") offset_val = input.int(7, title="偏移量") // 计算EMA close_ema = ta.ema(close, length) // 仅绘制未超出偏移范围的EMA部分 plot(bar_index >= bar_index[offset_val] ? close_ema : na, color=color.new(#ffffff, 0), title='Median', offset=offset_val)
或者更直观的写法:
length = input.int(20, title="EMA周期") offset_val = input.int(7, title="偏移量") close_ema = ta.ema(close, length) // 记录当前最新Bar的索引,作为基准 var int last_valid_bar = bar_index // 只绘制基准索引往前offset_val范围内的EMA plot(bar_index >= last_valid_bar - offset_val ? close_ema : na, color=color.new(#ffffff, 0), title='Median', offset=offset_val)
代码说明
- 通过
bar_index的范围判断,让超出偏移量的部分返回na,Plot函数会自动隐藏这些na值对应的绘制区域; - 修正了原代码中绘制收盘价的错误,改为绘制计算好的EMA值;
- 用
input.int定义参数,方便后续调整周期和偏移量。
内容的提问来源于stack exchange,提问作者ByteSore
相关产品推荐
相关产品推荐

