Pine语言中基于带X轴位移的序列使用ta.crossunder()函数的交叉判断问题
解决Pine Script中带位移序列的ta.crossunder判断问题
嘿,作为Pine Script新手碰到这种位移相关的序列比较确实容易懵,我来给你理清楚~
首先得明确一个核心点:plot()里的offset参数只是视觉上的位移,不会改变序列本身的数值和逻辑索引位置。所以直接用原始的close和leadLine1去调用ta.crossunder()肯定不对,因为这会比较同一周期的两个值,和你视觉上看到的位移对齐后的点完全不匹配。
必须重构序列才能准确判断
没有捷径绕开重构序列这一步,因为你需要把两个序列调整到逻辑上对齐视觉位置的状态,再进行下穿判断。我们结合你给出的代码一步步来:
- 先定义位移相关的变量:
displacement = input.int(26, minval=1, title="Displacement") k = displacement - 1 # 提取你用到的偏移量核心值
分析视觉位移对应的逻辑序列:
- 你的
Lagging Span用了offset=-k,意思是把当前周期的close左移k个周期绘制。反过来讲:视觉上当前K线位置显示的Lagging Span值,其实是未来k个周期的close(因为未来k个周期的close会被左移k个周期到当前位置),对应Pine里的写法是close[-k](方括号负数表示取未来n个周期的值)。 - 你的
Leading Span A用了offset=k,意思是把当前周期的leadLine1右移k个周期绘制。反过来讲:视觉上当前K线位置显示的Leading Span A值,其实是过去k个周期的leadLine1(因为过去k个周期的leadLine1会被右移k个周期到当前位置),对应Pine里的写法是leadLine1[k](方括号正数表示取过去n个周期的值)。
- 你的
构造对齐后的序列并判断下穿:
# 构造视觉对齐后的两个序列 aligned_lagging = close[-k] aligned_lead1 = leadLine1[k] # 判断下穿条件 is_crossunder = ta.crossunder(aligned_lagging, aligned_lead1)
额外提示
- 因为
close[-k]是未来值,在实时行情的最新k个K线中会显示na,但ta.crossunder()会自动忽略na值,不影响历史数据的判断;如果需要实时信号,你得接受信号会延迟k个周期(毕竟未来值要等走完才会确定)。 - 如果你想让下穿信号的视觉位置和两个Span对齐,可以给信号的
plotshape()也加上对应offset,比如:
plotshape(is_crossunder, offset=k, style=shape.triangledown, color=color.red, size=size.small, title="Lagging Crossunder Lead1")
内容的提问来源于stack exchange,提问作者Derrekito
相关产品推荐
相关产品推荐

