Scalping The Bull
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © TheSocialCryptoClub

//@version=5
indicator('Scalping The Bull', shorttitle='Scalping The Bull', overlay=true)




// -----------------------------------------------------------------------------
// Dichiarazione input
// -----------------------------------------------------------------------------
input_medie = input.string(defval='Crypto', options=['Crypto'], group='Mercato', title='EMA per mercato')

len1 = 5
len2 = 10
len3 = 60
len4 = 223

ema20 = input(false, 'Visualizza EMA aggiuntiva a ',group='Mercato',inline="ema20")
len5 =  input(20, title="",group='Mercato',inline="ema20")

if input_medie == 'Crypto'
    len1 := 5
    len2 := 10
    len3 := 60
    len4 := 223


sfondo = input(false, 'Sfondo', group="Elementi del Grafico", tooltip="Visualizza lo sfondo verde se la EMA 60 > 223 oppure Rosso se la EMA 223 > 60")
sessione = input(true, 'Separatore Sessione', group="Elementi del Grafico")

attiva_max_min_oggi = input(true, 'Trigger di Oggi: ',group= "Punti Trigger",inline= "max oggi")

color_apertura_oggi=input.color(color.green,"Apertura",group= "Punti Trigger",inline= "max oggi")
color_max_oggi=input.color(color.purple,", Massimo",group= "Punti Trigger",inline= "max oggi")
color_min_oggi=input.color(#C90016,", Minimo",group= "Punti Trigger",inline= "max oggi")


attiva_max_min_ieri = input(true, 'Trigeger di Ieri: ',group= "Punti Trigger",inline= "max ieri")

color_max_ieri=input.color(color.yellow,"Massimo ",group= "Punti Trigger",inline= "max ieri")
color_min_ieri=input.color(#E8000D,", Minimo",group= "Punti Trigger",inline= "max ieri")
// -----------------------------------------------------------------------------


// -----------------------------------------------------------------------------
// Calcoli per le medie
// -----------------------------------------------------------------------------

ma1 = ta.ema(close, len1)
ma2 = ta.ema(close, len2)
ma3 = ta.ema(close, len3)
ma4 = ta.ema(close, len4)
ma5 = ta.ema(close, len5)

plot(ma1, title='EMA 5', color=color.new(color.red, 0))
plot(ma2, title='EMA 10', color=color.new(color.yellow, 0), linewidth=2)
plot(ma3, title='EMA 60', color=color.new(color.aqua, 0), linewidth=2)
plot(ma4, title='EMA 223', color=color.new(color.purple, 0), linewidth=2)
plot(ema20 ? ma5 : na, title='EMA 20', color=color.new(color.orange, 0), linewidth=2)

cond_bg = sfondo and ma4 > ma3
cond_bg2 = sfondo and ma4 < ma3
bgcolor(cond_bg ? color.new(color.red, transp=90) : na, title='Sfondo')
bgcolor(cond_bg2 ? color.new(color.green, transp=90) : na,title='Sfondo')

close_daily = request.security(syminfo.tickerid, 'D', close)
open_daily = request.security(syminfo.tickerid, 'D', open)
high_daily = request.security(syminfo.tickerid, 'D', high)
low_daily = request.security(syminfo.tickerid, 'D', low)
// -----------------------------------------------------------------------------


// -----------------------------------------------------------------------------
// Punti trigger di oggi
// -----------------------------------------------------------------------------
apertura = time(timeframe.period, '0000-0001:1234567')
prezzo_apertura = ta.valuewhen(time == apertura, open, 0)
stesso_giorno = prezzo_apertura == prezzo_apertura[1]


F_Line(_line, _y) =>
    line.set_xy1(_line, apertura, _y)
    line.set_xy2(_line, time + 1, _y)



bgcolor(sessione and apertura and timeframe.isintraday?color.new(color.blue,70):na)

var barre = 0
if time == apertura
    barre := 1

var massimo_oggi = 0.0
var minimo_oggi = 0.0
var n_barre = 0

// reset delle variabili da inizio di ogi giornata
if hour == 00 and minute == 1 or hour == 00 and minute == 5 or hour == 00 and minute == 15 or hour == 00 and minute == 30 or hour == 01 and minute == 0 or hour == 02 and minute == 0 or hour == 04 and minute == 0
    massimo_oggi := high
    minimo_oggi := low
    n_barre := 0

barre += 1

if high >= massimo_oggi
    massimo_oggi := high
    
massimo_oggi:= ta.highest(high,barre)
    
if low < minimo_oggi
    minimo_oggi := low
    minimo_oggi

if time == apertura
    barre :=0
    

var line myLineH = line.new(na, na, na, na, xloc=xloc.bar_time, extend=extend.right, color=color_max_oggi, style=line.style_solid, width=2)
var line myLineO = line.new(na, na, na, na, xloc=xloc.bar_time, extend=extend.right, color=color_apertura_oggi, style=line.style_solid, width=2)
var line myLineL = line.new(na, na, na, na, xloc=xloc.bar_time, extend=extend.right, color=color_min_oggi, style=line.style_solid, width=2)


if timeframe.isintraday
    F_Line(myLineH, attiva_max_min_oggi ? massimo_oggi : na)
    F_Line(myLineO, attiva_max_min_oggi ? open_daily : na)
    F_Line(myLineL, attiva_max_min_oggi ? low_daily : na)


cond_max_today = ta.crossover(high,massimo_oggi[1]* (100 - 0) / 100) and attiva_max_min_oggi or high>massimo_oggi[1] and attiva_max_min_oggi
cond_min_today = ta.crossunder(low, minimo_oggi[1]) and attiva_max_min_oggi 
// -----------------------------------------------------------------------------


// -----------------------------------------------------------------------------
// Punti trigger di ieri
// -----------------------------------------------------------------------------
highd = ta.valuewhen(time == apertura, high_daily, 0)
closed = ta.valuewhen(time == apertura, close_daily, 0)
lowd = ta.valuewhen(time == apertura, low_daily, 0)


x_ieri = not ta.crossover(close, highd * (100 - 0) / 100)
cond_label_ieri = x_ieri[2] and x_ieri[3] and x_ieri[4] and x_ieri[5] and x_ieri[6] and x_ieri[7] and x_ieri[8] and x_ieri[9] and x_ieri[10] and x_ieri[11] and x_ieri[12] and x_ieri[13] and x_ieri[14] and x_ieri[15] and x_ieri[16] and x_ieri[17] and x_ieri[18] and x_ieri[19] and x_ieri[20]
cond_massimo_ieri = ta.crossover(close, highd * (100 - 0) / 100) and cond_label_ieri and attiva_max_min_ieri
cond_minimo_ieri = ta.crossunder(close, lowd)


var line highd1_line = line.new(apertura?bar_index:na, na, bar_index, na, xloc=xloc.bar_time, color=color_max_ieri, style=line.style_dotted, width=2)
var line lowd1_line = line.new(ta.barssince(apertura), lowd, bar_index, lowd, xloc=xloc.bar_time, color=color_min_ieri, style=line.style_dotted, width=2)

if timeframe.isintraday
    F_Line(highd1_line, attiva_max_min_ieri ? highd : na)
    F_Line(lowd1_line, attiva_max_min_ieri ? lowd : na)
// -----------------------------------------------------------------------------

