如何在不使用plot的offset参数时向左时移EMA变量?
不依赖plot offset参数实现EMA变量的时间偏移
先讲清楚关键问题:plot()里的offset=-3只是把当前K线的EMA值往左画到3根之前的位置,这只是视觉上的偏移,不是变量本身的数值发生了变化。要是你需要一个能用于策略逻辑的变量,得分两种情况说:
第一种情况:要和plot偏移视觉效果一致的变量(含未来数据,不建议策略用)
要是你想让变量在第t根K线的数值,等于原EMA在t+3根K线的数值(对应plot offset=-3的视觉效果),那这里有个核心问题——t+3的收盘价还没出来呢,这属于未来函数,只能在回测复盘的时候用,实时行情里根本拿不到提前的数据。
Pine Script里不能直接用负索引(比如emaShort[-3])去拿未来数据,但可以等K线走完后回溯实现,示例代码:
// 设置输入参数 emaShortLength = input.int(8, title="短期EMA周期") // 计算EMA emaShort = ta.ema(close, emaShortLength) // 模拟向左偏移3根的变量(仅回测有效,实时属于未来数据) emaShort_shifted = na if bar_index >= 3 emaShort_shifted := emaShort[bar_index - (bar_index - 3)] // 本质是在t-3的位置取t的EMA值 // 绘图对比效果 plot(emaShort, color=color.blue, title="原EMA") plot(emaShort, color=color.green, title="原EMA(offset=-3)", offset=-3) plot(emaShort_shifted, color=color.white, title="偏移后的EMA变量")
第二种情况:用历史EMA值(无未来数据,适合策略)
要是你其实是想在当前K线用3根之前的EMA值(视觉上是往右偏移,但策略里常用这种滞后信号),直接用历史引用运算符就行,简单又安全:
// 设置输入参数 emaShortLength = input.int(8, title="短期EMA周期") // 计算EMA emaShort = ta.ema(close, emaShortLength) // 获取3根K线之前的EMA值(无未来数据,可直接用于策略逻辑) emaShort_lagged = emaShort[3] // 绘图对比效果 plot(emaShort, color=color.blue, title="原EMA") plot(emaShort_lagged, color=color.green, title="滞后3根的EMA变量")
修正你现有代码里的错误
你的代码里有几个未定义的变量(zlemaShort、lagShort),给你改了个示例,假设你想尝试用预测的方式提前EMA(只是示例,不是精确偏移):
// 设置输入参数 emaShortLength = input.int(8, title="短期EMA周期") // 计算EMA emaShort = ta.ema(close, emaShortLength) // 简单模拟预测未来3根的EMA(假设未来收盘价等于当前价,实际可根据趋势调整) predicted_close = close for i = 1 to 3 predicted_close := ta.ema(predicted_close, emaShortLength) leadingema = predicted_close // 绘图展示 plot(emaShort, color=color.blue, title="Short EMA") plot(emaShort, color=color.green, title="Short EMA(offset=-3)", offset=-3) plot(leadingema, color=color.white, title="预测提前的EMA")
内容的提问来源于stack exchange,提问作者user21866272
相关产品推荐
相关产品推荐

