// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
//@version=5
//@author=yashgode9

import yashgode9/signalLib/2 as signalLib
indicator('buysellsignal-yashgode9', 'buysellsignal-yashgode9', true, format.price, max_labels_count=200, max_lines_count=50)

//---------------------   Prerequisites of script    ---------------------//

Depth = input.int(150, 'Depth', minval=1, step=1, group="signalLib Config")
Deviation = input.int(120, 'Deviation', minval=1, step=1, group="signalLib Config")
Backstep = input.int(100, 'Backstep', minval=2, step=1, group="signalLib Config")
labels = input(0, "Labels Transparency", group="Labels")
buycolor = input(#03ff85, 'Buy-Color', group="Colors")
sellcolor = input(#fc0808, 'Sell-Color', group="Colors")
buycolor1 = (#000000)
sellcolor1 = (#000000)
lines = (0)
labelsize = switch input.int(3, "Label size", minval=1, maxval=5, group="Labels")
    1 => size.tiny
    2 => size.small
    3 => size.normal
    4 => size.large
    5 => size.huge
repaint = (true)
extend = (false)

//---------------------   Main Logic of Script    ---------------------//

[direction, zee1, zee2] = signalLib.signalLib(low, high, Depth, Deviation, Backstep)
string nowPoint = ""
var float lastPoint = zee1.price[1]
if bool(ta.change(direction))
    lastPoint := zee1.price[1]

line zeezee = na 
label point = na

if repaint
    nowPoint := direction<0? (zee2.price<lastPoint? "Buy-point" : "Buy-point") : (zee2.price>lastPoint? "Sell-point": "Sell-point")
    point := label.new(zee2, nowPoint, xloc.bar_time, yloc.price,
     color.new(direction<0?buycolor:sellcolor,labels),direction>0?label.style_label_down:label.style_label_up,color.new(direction>0?buycolor1:sellcolor1,labels),labelsize)
    if direction == direction[1]
        line.delete(zeezee[1])
        label.delete(point[1])
    else
        line.set_extend(zeezee[1], extend.none)
else
    if direction != direction[1]
        nowPoint := direction[1]<0? (zee2.price[1]<lastPoint[1]? "Buy-point":"Buy-point"):(zee2.price[1]>lastPoint[1]?"Sell-point":"Sell-point")
        point := label.new(zee2[1], nowPoint, xloc.bar_time, yloc.price, 
         color.new(direction[1]<0? buycolor: sellcolor, labels), direction[1]>0? label.style_label_down: label.style_label_up, color.new(direction[1]>0?buycolor1:sellcolor1, labels), labelsize)


//==========================================================================  The End Of Drama =========================================================================//