多时间框架Ehler瞬时趋势线计算异常的代码修正请求
问题:跨时间框架Ehler瞬时趋势线(EIT)数值重叠
在PineScript中实现3分钟(当前图表时间框架)和15分钟(跨框架)双EIT带时,两组线完全重叠,数值几乎一致,与15分钟时间框架的实际显示值不符。
问题根源
当前代码仅通过request.security获取15分钟的ohlc4数据,随后在3分钟时间框架上执行EIT计算。由于EIT函数使用var声明的持久化变量,在3分钟周期上计算拉伸后的15分钟数据,结果会与当前时间框架的EIT高度趋同,而非15分钟框架上原生计算的EIT值。
修正方案
将EIT的完整计算逻辑移入request.security内部,直接获取15分钟时间框架上计算完成的EIT值及触发线值,避免在当前框架重复计算。
修正后完整代码
//@version=5 indicator("Dual TF Ehlers Instantaneous Trend", overlay=true) // Ehlers Instantaneous Trendline function eit(src, alpha) => var float it = 0.0 it := (alpha - ((alpha * alpha) / 4.0)) * src + (0.5 * alpha * alpha) * src[1] - (alpha - 0.75 * alpha * alpha) * src[2] + 2 * (1 - alpha) * nz(it[1], ((src + 2 * src[1] + src[2]) / 4.0)) - (1 - alpha) * (1 - alpha) * nz(it[2], ((src + 2 * src[1] + src[2]) / 4.0)) it // Input parameters src = input(ohlc4, title="Source (3m TF)") alpha1 = input.float(0.01, title="Alpha (3m TF)", step=0.01) alpha2 = input.float(0.01, title="Alpha (15m TF)", step=0.01) // 3分钟TF EIT计算 eit_value1 = eit(src, alpha1) lag1 = 2.0 * eit_value1 - nz(eit_value1[2]) // 15分钟TF EIT计算(直接在目标框架内完成计算) [eit_value15, lag2] = request.security(syminfo.tickerid, "15", [eit(ohlc4, alpha2), 2.0 * eit(ohlc4, alpha2) - nz(eit(ohlc4, alpha2)[2])] ) // Zones setup - 3m TF show_zone1 = input.bool(true, title="Show 3m Zone-1 Color Fill?") transparency1 = input.int(65, title="3m Fill Transparency", minval=0, maxval=100) fill_color_1_dn = input(color.rgb(255, 0, 0, 30), title="3m Fill Color (Down)") fill_color_1_up = input(color.rgb(0, 255, 0, 30), title="3m Fill Color (Up)") // Zones setup - 15m TF show_zone15_1 = input.bool(false, title="Show 15m Zone-1 Color Fill?") transparency15_1 = input.int(20, title="15m Fill Transparency", minval=0, maxval=100) fill_color_151_dn = input(color.rgb(255, 0, 0, 30), title="15m Fill Color (Down)") fill_color_151_up = input(color.rgb(0, 255, 0, 30), title="15m Fill Color (Up)") // 绘制3m TF线条与填充 plot(eit_value1, color=color.blue, title="3m EIT Line") plot(lag1, color=color.red, title="3m Trigger Line") if show_zone1 fill(eit_value1, lag1, color=eit_value1 > lag1 ? fill_color_1_up : fill_color_1_dn, transp=transparency1) // 绘制15m TF线条与填充 plot(eit_value15, color=color.orange, title="15m EIT Line", linewidth=2) plot(lag2, color=color.purple, title="15m Trigger Line", linewidth=2) if show_zone15_1 fill(eit_value15, lag2, color=eit_value15 > lag2 ? fill_color_151_up : fill_color_151_dn, transp=transparency15_1)
关键修正点
- 跨框架计算逻辑迁移:将EIT和触发线的计算完全放在
request.security的闭包中,确保在15分钟时间框架内完成所有计算,再将结果传递回3分钟框架。 - 多值返回处理:使用数组从
request.security返回EIT值和触发线值,避免重复计算。 - 线条区分优化:为15分钟TF的线条设置更粗的线宽和不同颜色,便于视觉区分。
内容的提问来源于stack exchange,提问作者Neville N
相关产品推荐
相关产品推荐

