如何在Pine Script中比较数组元素?摆动指标的价时单元对比需求
Pine Script:摆动价格/时间单元的数组比较实现
前提说明
你已经创建了存储摆动价格单元的Swing_PriceUnits数组和时间单元的Swing_TimeUnits数组,接下来需要实现指定的三个摆动单元比较逻辑:
- 价格单元判断:第三个摆动的价格单元 > 第二个摆动的价格单元,且第二个摆动的价格单元 > 第一个摆动的价格单元
- 时间单元判断:第二个摆动的时间单元 > 第一个摆动的时间单元,且第一个摆动的时间单元 > 第三个摆动的时间单元
完整实现代码
//@version=5 indicator("Swing Unit Comparator", overlay=true) // 替换为你实际的SwingPresent、ML_Swing_PUs、ML_Swing_TUs定义逻辑 var bool SwingPresent = ta.barstate.islast var float ML_Swing_PUs = close - open var int ML_Swing_TUs = bar_index - ta.barssince(SwingPresent[1]) // 初始化数组 var Swing_PriceUnits = array.new_float(na) var Swing_TimeUnits = array.new_int(na) // 维护数组始终保留最新3个摆动单元 if SwingPresent // 元素数量达3个时,先移除最早的记录 if array.size(Swing_PriceUnits) >= 3 array.shift(Swing_PriceUnits) array.shift(Swing_TimeUnits) // 添加新的摆动单元数据 array.push(Swing_PriceUnits, ML_Swing_PUs) array.push(Swing_TimeUnits, ML_Swing_TUs) // 数组元素比较逻辑 var bool priceCondition = false var bool timeCondition = false // 仅当两个数组都至少有3个元素时执行比较 if array.size(Swing_PriceUnits) >= 3 and array.size(Swing_TimeUnits) >= 3 // 获取三个摆动单元的值(索引0=摆动1,索引1=摆动2,索引2=摆动3) swing1_pu = array.get(Swing_PriceUnits, 0) swing2_pu = array.get(Swing_PriceUnits, 1) swing3_pu = array.get(Swing_PriceUnits, 2) swing1_tu = array.get(Swing_TimeUnits, 0) swing2_tu = array.get(Swing_TimeUnits, 1) swing3_tu = array.get(Swing_TimeUnits, 2) // 价格单元条件判断 priceCondition = swing3_pu > swing2_pu and swing2_pu > swing1_pu // 时间单元条件判断 timeCondition = swing2_tu > swing1_tu and swing1_tu > swing3_tu // 示例:双条件满足时绘制标记 plotshape(priceCondition and timeCondition, title="Valid Swing", location=location.belowbar, color=color.green, style=shape.labelup, text="Valid") // 调试用:最后一根K线显示数组内容与条件结果 if ta.barstate.islast label.new(bar_index, high, str.format("Price Units: %s\nTime Units: %s\nPrice Cond: %s\nTime Cond: %s", str.tostring(Swing_PriceUnits), str.tostring(Swing_TimeUnits), str.tostring(priceCondition), str.tostring(timeCondition)), color=color.gray, textcolor=color.white)
代码说明
- 数组维护优化:调整原逻辑,确保数组始终存储最新3个摆动单元,避免元素数量在3-4之间波动。
- 元素比较实现:通过
array.get()提取对应索引的摆动单元值,严格按照需求完成价格、时间单元的条件判断。 - 结果复用:
priceCondition和timeCondition的布尔值可直接用于信号标记、交易条件触发等后续逻辑。
内容的提问来源于stack exchange,提问作者Imran Shaikh
相关产品推荐
相关产品推荐

