Plotting line at wrong end

I want to plot a line on the high of the pivot low and not on the low of the pivot low. How can i do that?

//@version=5
indicator("Pivot crosses", "", true)

int activeLevelsInput = input(10)
int pivotLegsInput = input(5)

// When a pivot occurs, create a line and save it.
float pLo = ta.pivotlow(pivotLegsInput, pivotLegsInput)

var pivotLines = array.new<line>(activeLevelsInput)

if not na(pLo)
    line newPivotLine = line.new(bar_index - pivotLegsInput, pLo, bar_index, pLo)
    array.push(pivotLines, newPivotLine)

    // Delete the oldest line.
    line.delete(array.shift(pivotLines))

// Extend the lines.
if barstate.islast and barstate.isnew
    for pivotLine in pivotLines
        line.set_x2(pivotLine, bar_index)

// Check for crosses.
bool cross = false

for pivotLine in pivotLines
    float linePrice = line.get_y1(pivotLine)
    bool newCrossUp = close[1] < linePrice and close > linePrice
    bool newCrossDn = close[1] > linePrice and close < linePrice
    cross := cross or newCrossUp or newCrossDn

// Alert.

if cross
    alert("A cross has occurred")

plotchar(cross, "Cross", "X")

>Solution :

You are using pLo to set the y-axis of your line. pLo is assigned by ta.pivotlow() which will return the low price.

What you need to do is, figure out the bar index where there is a pivot low and get its high price.

You can easily do that with the history reference operator with using pivotLegsInput as your offset.

high_price = high[pivotLegsInput]
line newPivotLine = line.new(bar_index - pivotLegsInput, high_price, bar_index, high_price)

Leave a Reply