如何在Pine Script中触发SMA交叉后启动回溯倒计时?
SMA交叉回溯倒计时实现思路(Pine Script)
核心逻辑
通过记录交叉触发的K线索引,计算当前K线与交叉K线的位置差,在指定的9根K线范围内显示倒计时数字(交叉点标记为9,往回依次递减到1)。
分步实现
记录交叉触发的K线位置
用var变量存储最近一次交叉的bar_index(每个K线的唯一递增索引),当交叉信号触发时更新这个变量:// 定义交叉信号 crossUp = ta.crossover(smaFast, smaSlow) crossDown = ta.crossunder(smaFast, smaSlow) // 存储最近一次交叉的K线索引 var int lastCrossBar = na if crossUp or crossDown lastCrossBar := bar_index判断倒计时显示范围
计算当前K线距离交叉K线的偏移量,筛选出交叉点及往回8根K线的范围(共9根):// 计算当前K线与交叉K线的索引差(交叉点为0,往回每根递增1) barsSinceCross = lastCrossBar - bar_index // 仅在9根K线范围内显示倒计时 showCount = not na(lastCrossBar) and barsSinceCross >= 0 and barsSinceCross <= 8计算并绘制倒计时数字
根据偏移量计算对应数字(交叉点为9,往回每根减1),用plotchar或label绘制到K线上:// 计算倒计时数值 countNumber = 9 - barsSinceCross // 绘制数字,可根据交叉方向设置颜色 plotchar(showCount, "Retro Count", tostring(countNumber), location.belowbar, size=size.small, color=crossUp ? color.green : color.red)
关键细节
var关键字确保交叉索引变量不会在每根K线重置,仅在新交叉触发时更新。- 新交叉触发时,旧的倒计时会自动失效,因为旧的交叉索引对应的范围不再满足当前K线的
showCount条件。 - 可根据需求调整绘制位置(
location.belowbar/location.abovebar)、大小及颜色,适配不同图表风格。
内容的提问来源于stack exchange,提问作者JDominguez2012
相关产品推荐
相关产品推荐

