Sendtosheff
Pine Script Rookie
Pine Script Rookie
Posts: 1
Joined: January 24th, 2022

How to bind a horizontal line (level) to the bar, the event is clicking the Start checkmark.

And so that this line does not run away from the bar where it was drawn. So that the lines are rearranged only when the price crosses one of the levels opened by the start button. Because of the cyclicity, I can't do it in any way. tried 2 options:

1.Option: Using the functions barssince and valuewhen


//@version=4
study(title="Scalper bot", shorttitle="Scalper bot", overlay=true)
var start = input(true, title="Старт", group="Cетка ордеров")
retreat= input(0.25, title="Отступ от цены создания(%)",type=input.float,minval = 0.1,step=0.1,group="Cетка ордеров")
//******************************************************************************************************************
if start
since = barssince(start)
val = valuewhen(start, open, 0)
labell = label.new(bar_index, 0,"Array size: "+tostring(since)+", \open: "+tostring(val),yloc=yloc.abovebar, size = size.normal)
label.delete(labell[1])
//calculation of the position of the long line
ll1 = val/100*retreat+val
//calculation of the position of the short line
ls1 = val-val/100*retreat
ll_1 = line.new(bar_index,ll1,bar_index[1],ll1,xloc.bar_index,extend.both,color=color.green,style=line.style_solid)
line.delete(ll_1[1])
ls_1 = line.new(bar_index,ls1,bar_index[1],ls1,xloc.bar_index,extend.both,color=color.red,style=line.style_solid)
line.delete(ls_1[1])

2. Option C using an array:

//@version=4
study(title="987654", shorttitle="987654", overlay=true)
var start = input(true, title="Старт", group="Cетка ордеров")
retreat= input(0.25, title="Отступ от цены создания(%)",type=input.float,minval = 0.1,step=0.1,group="Cетка ордеров")
step = input(0.5, title="Шаг ордеров сетки(%)",type=input.float,minval = 0.1,step=0.1,group="Cетка ордеров")
//****************************************************************************************************************************************************************************
if start
prices = array.new_float(0,0)
array.push(prices, open)
labell = label.new(bar_index, 0,"Array size: "+tostring(array.size(prices))+", \open: "+tostring(array.get(prices, array.size(prices)-1)),yloc=yloc.abovebar, size = size.normal)
label.delete(labell[1])
//calculation of the position of the long line
ll1 = array.get(prices, array.size(prices)-1)/100*retreat+array.get(prices, 0)
//calculation of the position of the short line
ls1 = array.get(prices, array.size(prices)-1)-array.get(prices, array.size(prices)-1)/100*retreat
ll_1 = line.new(bar_index,ll1,bar_index[1],ll1,xloc.bar_index,extend.both,color=color.green,style=line.style_solid)
line.delete(ll_1[1])
ls_1 = line.new(bar_index,ls1,bar_index[1],ls1,xloc.bar_index,extend.both,color=color.red,style=line.style_solid)
line.delete(ls_1[1])

processingclouds
Pine Script Master
Pine Script Master
Posts: 115
Joined: January 30th, 2022

Re: How to bind a horizontal line (level) to the bar, the event is clicking the Start checkmark.

Hey

Just to clarify something :
ll1 = array.get(prices, array.size(prices)-1)/100*retreat+array.get(prices, 0)

Are you trying to divide open price by 100 than multiply by retreat value and than add back the open price from when you turned on start ? i.e.
ll1 = open / 100 * retreat + (open_price_when_start_enabled)

Return to “Pine Script Q&A”