如何解决跨时间框架Ichimoku云填充不完整问题?
修复跨时间框架Ichimoku云填充不完整问题
当在1小时图表上选择4小时作为指标计算时间框架时,Ichimoku的Kumo云只会在4小时K线对应的位置填充,中间的1小时K线区域是空的;取消timeframe_gaps勾选后,显示效果会变得极差,出现大量缺口。
解决方案
核心是对跨时间框架计算出的Leading Span A和B做向前填充,让主时间框架的每一根K线都继承上一个有效的更高时间框架值,确保fill()函数能连续覆盖整个云区域。
修改后的完整代码
//@version=5 indicator(title="Ichimoku Cloud", shorttitle="Ichimoku", overlay=true, timeframe='', timeframe_gaps=true) conversionPeriods = input.int(9, minval=1, title="Conversion Line Length") basePeriods = input.int(26, minval=1, title="Base Line Length") laggingSpan2Periods = input.int(52, minval=1, title="Leading Span B Length") displacement = input.int(26, minval=1, title="Lagging Span") donchian(len) => math.avg(ta.lowest(len), ta.highest(len)) conversionLine = donchian(conversionPeriods) baseLine = donchian(basePeriods) leadLine1 = math.avg(conversionLine, baseLine) leadLine2 = donchian(laggingSpan2Periods) // 对跨时间框架的信号线做向前填充,保证主时间框架每根K线都有连续值 var float ff_leadLine1 = na ff_leadLine1 := na(leadLine1) ? ff_leadLine1 : leadLine1 var float ff_leadLine2 = na ff_leadLine2 := na(leadLine2) ? ff_leadLine2 : leadLine2 plot(conversionLine, color=#2962FF, title="Conversion Line") plot(baseLine, color=#B71C1C, title="Base Line") plot(close, offset = -displacement + 1, color=#43A047, title="Lagging Span") // 用填充后的信号线绘制云的上下边界 p1 = plot(ff_leadLine1, offset = displacement - 1, color=#A5D6A7,title="Leading Span A") p2 = plot(ff_leadLine2, offset = displacement - 1, color=#EF9A9A,title="Leading Span B") // 根据填充后的线填充云区域 fill(p1, p2, color = ff_leadLine1 > ff_leadLine2 ? color.rgb(67, 160, 71, 90) : color.rgb(244, 67, 54, 90))
修改说明
- 新增
ff_leadLine1和ff_leadLine2变量,用var初始化确保只创建一次,避免重复赋值 - 当当前主时间框架下的leadLine1/2为
na(非更高时间框架的K线节点)时,保留上一个有效值,实现连续填充 - 所有涉及云绘制的部分都改用填充后的变量,确保每根主时间框架K线都有对应的云边界值
- 移除了原代码中多余的隐藏plot,简化逻辑
修改后,不管主时间框架是1小时还是更小,只要选择了更高的计算时间框架,Kumo云都会完整填充所有K线区域,不会出现缺口,保留timeframe_gaps=true即可正常使用。
内容的提问来源于stack exchange,提问作者Bruce Ecurb
相关产品推荐
相关产品推荐

