修复 Tradingview 指标 - 与当前价格进行比较

问题描述

我正在尝试在下方的 Tradingview 指标中识别出 2 个时刻(条件 1 和 2)时收到警报。

条件 1 - 显示红点和绿点之后的时间段,尤其是当点在当前蜡烛或 [1] 之前被识别时。我尝试了以下命令但没有成功:HHcondition = plotH[1] LLcondition = plotL[1]

条件 2- 当前蜡烛图(当前价格)高于或低于之前的点,分别为绿色或红色。它应该将“接近”值与最近的点进行比较。绿色代表高,红色代表低。我尝试使用以下命令没有成功:HH= close > plotH LL= plotL>关闭

我在两种情况下都使用相同的警报。

这里是指标:

//@version=4
study("(Pivot Points High Low)",shorttitle="Pivots HL",overlay=true)
lenH = input(title="Length High",type=input.integer,defval=6,minval=1)
lenL = input(title="Length Low",minval=1)

fun(src,len,isHigh) =>
    p = nz(src[len])
    isFound = true
    for i = 0 to len - 1
        if isHigh and src[i] > p
            isFound := false
        if not isHigh and src[i] < p
            isFound := false
    for i = len + 1 to 2 * len
        if isHigh and src[i] >= p
            isFound := false
        if not isHigh and src[i] <= p
            isFound := false
    if isFound
        p

plotH = fun(high,lenH,true)
plotL = fun(low,lenL,false)

// Get highest body and lowest body for the current candle
highestBody = open > close ? open : close
lowestBody = open > close ? close : open

// Conditions
HHCondition1= plotH[1]
LLCondition1 = plotL[1]
HHCondition2= close > plotH
LLCondition2= plotL>close

BuyCondition=LLCondition1 or LLCondition2
SellCondition=HHCondition1 or HHCondition1

//plotshape(BuyCondition,title="buy",style=shape.triangleup,location=location.belowbar,color=color.orange,transp=0,size=size.small)
//plotshape(SellCondition,title="sell",style=shape.triangledown,location=location.abovebar,color=color.green,size=size.small)

plot(plotH,color=color.lime,linewidth=3,style=plot.style_circles,offset=-lenH)
plot(plotL,color=color.red,offset=-lenL)

alertcondition(BuyCondition,message="buy") 
alertcondition(SellCondition,message="sell") 

解决方法

您需要在找到最高价或最低价时返回价格值。然后您可以使用 var 声明的变量存储价格值,该变量仅在 isFound 发生时进行修改。您需要在条件 2 中使用它来比较接近它的电流。

fun(src,len,isHigh) =>
    p = nz(src[len])
    isFound = true
    for i = 0 to len - 1
        if isHigh and src[i] > p
            isFound := false
        if not isHigh and src[i] < p
            isFound := false
    for i = len + 1 to 2 * len
        if isHigh and src[i] >= p
            isFound := false
        if not isHigh and src[i] <= p
            isFound := false
    if isFound
        [p,isFound]

[plotH,foundH] = fun(high,lenH,true)
[plotL,foundL] = fun(low,lenL,false)

var float pivH = na
var float pivL = na

if foundH
    pivH := plotH
if foundL
    pivL := plotL
    
plot(pivH,color = color.green)
plot(pivL,color = color.red)

HHCondition1 = foundH
HHCondition2 = close > pivH