Pine Script中plotcandle数值异常及排序赋值问题求解
Pine Script plotcandle 数值异常修复方案
核心解决思路
因为plotcandle的参数要求为series[float]类型,无法直接传入数组转换后的单个float值,所以需要逐K线处理四个目标数值,分别计算出每根K线对应的真实开盘、最高、最低、收盘价后再传入函数。
具体实现方案
场景1:仅ssro.l与ssro.h数值反向
如果确认只是ssro.l和ssro.h的数值搞反,直接交换两者即可,是最简便的处理方式:
// 交换ssro的高低值,结合原开收盘价绘制蜡烛图 plotcandle(open, ssro.l, ssro.h, close, title="Fixed Candle", color=color.new(color.blue, 0))
场景2:需要对四个数值统一排序筛选
如果四个数值(ssro.l、ssro.h、open、close)都存在错位问题,需要从四个值中提取正确的高低开收:
// 获取当前K线的四个目标数值 val1 = ssro.l val2 = ssro.h val3 = open val4 = close // 计算当前K线的真实最高价和最低价 trueHigh = math.max(math.max(val1, val2), math.max(val3, val4)) trueLow = math.min(math.min(val1, val2), math.min(val3, val4)) // 临时数组存储四个值并排序,提取中间两个值作为开收候选 tempArr = array.new_float(4) array.set(tempArr, 0, val1) array.set(tempArr, 1, val2) array.set(tempArr, 2, val3) array.set(tempArr, 3, val4) array.sort(tempArr) midVal1 = array.get(tempArr, 1) midVal2 = array.get(tempArr, 2) // 保留原K线涨跌趋势,确定正确的开盘/收盘价 trueOpen := open > close ? math.max(midVal1, midVal2) : math.min(midVal1, midVal2) trueClose := open > close ? math.min(midVal1, midVal2) : math.max(midVal1, midVal2) // 绘制修复后的蜡烛图 plotcandle(trueOpen, trueHigh, trueLow, trueClose, title="Fixed Candle", color=color.new(color.blue, 0))
关键注意事项
plotcandle的四个参数必须为逐K线的序列值,不能直接传入数组转换后的单个float,所以所有计算都要基于当前K线的数值完成。- 筛选开收值时,务必保留原K线的涨跌趋势(open与close的相对大小),避免蜡烛图的阴阳方向错误。
内容的提问来源于stack exchange,提问作者Tomasz Nadwor
相关产品推荐
相关产品推荐

