Bitcoin Scalping Strategy (Sampled with: PMARP+MADRID MA RIBBON)
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © CheatCode1

//@version=5
strategy("PMAR and Madrid MA Strategy Excecuted by @CheatCode1", overlay=false, margin_long=0, margin_short=0, default_qty_type = strategy.cash, initial_capital = 1000, pyramiding = 0, default_qty_value = 1000, max_bars_back = 100)
//


// THIS IS PMARP, AN INDiCATOR CREATED BY @THE_CARETAKER, I DO NOT TAKE CREDIT FOR ANY SCRIPT WRITTEN UNTIL THE START OF THE NEXT INDICATOR. PLEASE REFER TO @The_Caretaker FOR QUESTIONS REGARDING THE PMAR/PMARP INDICATOR. THANK YOU!
    //
// THIS IS PMARP, AN INDiCATOR CREATED BY @THE_CARETAKER, I DO NOT TAKE CREDIT FOR ANY SCRiPT WRITTEN UNTIL THE START OF THE NEXT INDICATOR. PLEASE REFER TO @The_Caretaker FOR QUESTIONS REGARDING THE PMAR/PMARP INDICATOR. THANK YOU!
    //
// THIS IS PMARP, AN INDiCATOR CREATED BY @THE_CARETAKER, I DO NOT TAKE CREDIT FOR ANY SCRIPT WRITTEN UNTIL THE START OF THE NEXT INDICATOR. PLEASE REFER TO @The_Caretaker FOR QUESTIONS REGARDING THE PMAR/PMARP INDICATOR. THANK YOU!

// @version=5
//
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// @author = The_Caretaker
// © The_Caretaker
//
// Much respect to Eric Crown for this idea.
// 
// Feel free to reuse or develop this script further, please drop me a note below if you find it useful.
//
///////////////////////////////////////////////////////////////////////////////
// Input default variable declarations

var string s_pmarp = 'Price Moving Average Ratio Percentile'
var string s_pmar  = 'Price Moving Average Ratio'
var string s_BGR   = 'Blue Green Red'
var string s_BR    = 'Blue Red'

var float pmarHigh = 0.0

///////////////////////////////////////////////////////////////////////////////
// Inputs

i_src_price         = input.source  ( close,        'Price source',                                                                         inline='1',     group='Main Properties')
i_p_type_line       = input.string  ( s_pmarp,      'Indicator....',            options=[ s_pmar, s_pmarp ],                                inline='2',     group='Main Properties')

i_ma_len            = input.int     ( 20,           'PMAR length',              minval=1,                                                   inline='3',     group='Main Properties')
i_ma_typ            = input.string  ( 'VWMA',       'MA type...',               options=[ 'SMA', 'EMA', 'HMA', 'RMA', 'VWMA' ],             inline='3',     group='Main Properties')

i_c_typ_line        = input.string  ( 'Spectrum',   'Color type',               options=[ 'Spectrum', 'Solid' ],                            inline='1',     group='Line plot settings')
i_c_typ_spctrm_line = input.string  ( s_BGR,        'Spectrum',                 options=[ s_BR, s_BGR ],                                    inline='1',     group='Line plot settings')
i_c_solid_line      = input.color   ( #FFFF00,      'Solid color',                                                                          inline='1',     group='Line plot settings')
i_p_width_line      = input.int     ( 1,            'Line width',               minval=1, maxval=4,                                         inline='2',     group='Line plot settings')
i_pmarp_lookback    = input.int     ( 350,          'Lookback',                 minval=1, maxval=1900,                                      inline='2',     group='Line plot settings')

i_show_signal_ma    = input.bool    ( true,         'Signal MA',                                                                            inline='0',     group='Signal MA Settings')
i_signal_ma_Len     = input.int     ( 20,           'MA length',                minval=1,                                                   inline='1',     group='Signal MA Settings')
i_signal_ma_typ     = input.string  ( 'SMA',        'MA type',                  options=[ 'SMA', 'EMA', 'HMA', 'RMA', 'VWMA' ],             inline='1',     group='Signal MA Settings')

i_c_typ_sig         = input.string  ( 'Solid',      'Color type',               options=[ 'Spectrum', 'Solid' ],                            inline='2',     group='Signal MA Settings')
i_c_typ_spctrm_sig  = input.string  ( s_BGR,        'Spectrum',                 options=[ s_BR, s_BGR ],                                    inline='2',     group='Signal MA Settings')
i_c_solid_sig       = input.color   ( color.white,  'Solid color',                                                                          inline='2',     group='Signal MA Settings')
i_p_width_sig       = input.int     ( 1,            'Line width',               minval=1, maxval=4,                                         inline='3',     group='Signal MA Settings')

i_hi_alert_pmarp    = input.float   ( 99,           'Hi PMARP alert level',     minval=0.1, maxval=100, step=0.01,                          inline='6',     group='Visual Alert Level Settings')
i_lo_alert_pmarp    = input.float   ( 1,            'Lo PMARP alert level',     minval=0.1, maxval=100, step=0.01,                          inline='6',     group='Visual Alert Level Settings')

i_hi_alert_pmar     = input.float   ( 2.7,          'Hi PMAR alert level.',     minval=0.1, maxval=100, step=0.01,                          inline='7',     group='Visual Alert Level Settings')
i_lo_alert_pmar     = input.float   ( 0.7,          'Lo PMAR alert level.',     minval=0.1, maxval=100, step=0.01,                          inline='7',     group='Visual Alert Level Settings')

i_hi_alert_line_on  = input.bool    ( true,         'Hi alert line.',                                                                       inline='8',     group='Visual Alert Level Settings')
i_lo_alert_line_on  = input.bool    ( true,         'Lo alert line.',                                                                       inline='8',     group='Visual Alert Level Settings')
i_bg_hi_signal_on   = input.bool    ( true,         'Hi signal bars',                                                                       inline='9',     group='Visual Alert Level Settings')
i_bg_lo_signal_on   = input.bool    ( true,         'Lo signal bars',                                                                       inline='9',     group='Visual Alert Level Settings')

///////////////////////////////////////////////////////////////////////////////
// variable declarations

var c_prcntSpctrm1 = array.new_color ( na )
if barstate.isfirst
    array.push ( c_prcntSpctrm1, #0000FF ),
    array.push ( c_prcntSpctrm1, #000AFF ), array.push ( c_prcntSpctrm1, #0014FF ), array.push ( c_prcntSpctrm1, #001FFF ), array.push ( c_prcntSpctrm1, #0029FF ), array.push ( c_prcntSpctrm1, #0033FF ),
    array.push ( c_prcntSpctrm1, #003DFF ), array.push ( c_prcntSpctrm1, #0047FF ), array.push ( c_prcntSpctrm1, #0052FF ), array.push ( c_prcntSpctrm1, #005CFF ), array.push ( c_prcntSpctrm1, #0066FF ),
    array.push ( c_prcntSpctrm1, #0070FF ), array.push ( c_prcntSpctrm1, #007AFF ), array.push ( c_prcntSpctrm1, #0085FF ), array.push ( c_prcntSpctrm1, #008FFF ), array.push ( c_prcntSpctrm1, #0099FF ), 
    array.push ( c_prcntSpctrm1, #00A3FF ), array.push ( c_prcntSpctrm1, #00ADFF ), array.push ( c_prcntSpctrm1, #00B8FF ), array.push ( c_prcntSpctrm1, #00C2FF ), array.push ( c_prcntSpctrm1, #00CCFF ), 
    array.push ( c_prcntSpctrm1, #00D6FF ), array.push ( c_prcntSpctrm1, #00E0FF ), array.push ( c_prcntSpctrm1, #00EBFF ), array.push ( c_prcntSpctrm1, #00F5FF ), array.push ( c_prcntSpctrm1, #00FFFF ), 
    array.push ( c_prcntSpctrm1, #00FFF5 ), array.push ( c_prcntSpctrm1, #00FFEB ), array.push ( c_prcntSpctrm1, #00FFE0 ), array.push ( c_prcntSpctrm1, #00FFD6 ), array.push ( c_prcntSpctrm1, #00FFCC ), 
    array.push ( c_prcntSpctrm1, #00FFC2 ), array.push ( c_prcntSpctrm1, #00FFB8 ), array.push ( c_prcntSpctrm1, #00FFAD ), array.push ( c_prcntSpctrm1, #00FFA3 ), array.push ( c_prcntSpctrm1, #00FF99 ), 
    array.push ( c_prcntSpctrm1, #00FF8F ), array.push ( c_prcntSpctrm1, #00FF85 ), array.push ( c_prcntSpctrm1, #00FF7A ), array.push ( c_prcntSpctrm1, #00FF70 ), array.push ( c_prcntSpctrm1, #00FF66 ), 
    array.push ( c_prcntSpctrm1, #00FF5C ), array.push ( c_prcntSpctrm1, #00FF52 ), array.push ( c_prcntSpctrm1, #00FF47 ), array.push ( c_prcntSpctrm1, #00FF3D ), array.push ( c_prcntSpctrm1, #00FF33 ), 
    array.push ( c_prcntSpctrm1, #00FF29 ), array.push ( c_prcntSpctrm1, #00FF1F ), array.push ( c_prcntSpctrm1, #00FF14 ), array.push ( c_prcntSpctrm1, #00FF0A ), array.push ( c_prcntSpctrm1, #00FF00 ), 
    array.push ( c_prcntSpctrm1, #0AFF00 ), array.push ( c_prcntSpctrm1, #14FF00 ), array.push ( c_prcntSpctrm1, #1FFF00 ), array.push ( c_prcntSpctrm1, #29FF00 ), array.push ( c_prcntSpctrm1, #33FF00 ), 
    array.push ( c_prcntSpctrm1, #3DFF00 ), array.push ( c_prcntSpctrm1, #47FF00 ), array.push ( c_prcntSpctrm1, #52FF00 ), array.push ( c_prcntSpctrm1, #5CFF00 ), array.push ( c_prcntSpctrm1, #66FF00 ), 
    array.push ( c_prcntSpctrm1, #70FF00 ), array.push ( c_prcntSpctrm1, #7AFF00 ), array.push ( c_prcntSpctrm1, #85FF00 ), array.push ( c_prcntSpctrm1, #8FFF00 ), array.push ( c_prcntSpctrm1, #99FF00 ), 
    array.push ( c_prcntSpctrm1, #A3FF00 ), array.push ( c_prcntSpctrm1, #ADFF00 ), array.push ( c_prcntSpctrm1, #B8FF00 ), array.push ( c_prcntSpctrm1, #C2FF00 ), array.push ( c_prcntSpctrm1, #CCFF00 ), 
    array.push ( c_prcntSpctrm1, #D6FF00 ), array.push ( c_prcntSpctrm1, #E0FF00 ), array.push ( c_prcntSpctrm1, #EBFF00 ), array.push ( c_prcntSpctrm1, #F5FF00 ), array.push ( c_prcntSpctrm1, #FFFF00 ), 
    array.push ( c_prcntSpctrm1, #FFF500 ), array.push ( c_prcntSpctrm1, #FFEB00 ), array.push ( c_prcntSpctrm1, #FFE000 ), array.push ( c_prcntSpctrm1, #FFD600 ), array.push ( c_prcntSpctrm1, #FFCC00 ), 
    array.push ( c_prcntSpctrm1, #FFC200 ), array.push ( c_prcntSpctrm1, #FFB800 ), array.push ( c_prcntSpctrm1, #FFAD00 ), array.push ( c_prcntSpctrm1, #FFA300 ), array.push ( c_prcntSpctrm1, #FF9900 ), 
    array.push ( c_prcntSpctrm1, #FF8F00 ), array.push ( c_prcntSpctrm1, #FF8500 ), array.push ( c_prcntSpctrm1, #FF7A00 ), array.push ( c_prcntSpctrm1, #FF7000 ), array.push ( c_prcntSpctrm1, #FF6600 ), 
    array.push ( c_prcntSpctrm1, #FF5C00 ), array.push ( c_prcntSpctrm1, #FF5200 ), array.push ( c_prcntSpctrm1, #FF4700 ), array.push ( c_prcntSpctrm1, #FF3D00 ), array.push ( c_prcntSpctrm1, #FF3300 ), 
    array.push ( c_prcntSpctrm1, #FF2900 ), array.push ( c_prcntSpctrm1, #FF1F00 ), array.push ( c_prcntSpctrm1, #FF1400 ), array.push ( c_prcntSpctrm1, #FF0000 ), array.push ( c_prcntSpctrm1, #FF0000 )

var c_prcntSpctrm2 = array.new_color ( na )
if barstate.isfirst
    array.push ( c_prcntSpctrm2, #0000FF ),
    array.push ( c_prcntSpctrm2, #0200FC ), array.push ( c_prcntSpctrm2, #0500F9 ), array.push ( c_prcntSpctrm2, #0700F7 ), array.push ( c_prcntSpctrm2, #0A00F4 ), array.push ( c_prcntSpctrm2, #0C00F2 ), 
    array.push ( c_prcntSpctrm2, #0F00EF ), array.push ( c_prcntSpctrm2, #1100ED ), array.push ( c_prcntSpctrm2, #1400EA ), array.push ( c_prcntSpctrm2, #1600E8 ), array.push ( c_prcntSpctrm2, #1900E5 ), 
    array.push ( c_prcntSpctrm2, #1C00E2 ), array.push ( c_prcntSpctrm2, #1E00E0 ), array.push ( c_prcntSpctrm2, #2100DD ), array.push ( c_prcntSpctrm2, #2300DB ), array.push ( c_prcntSpctrm2, #2600D8 ),
    array.push ( c_prcntSpctrm2, #2800D6 ), array.push ( c_prcntSpctrm2, #2B00D3 ), array.push ( c_prcntSpctrm2, #2D00D1 ), array.push ( c_prcntSpctrm2, #3000CE ), array.push ( c_prcntSpctrm2, #3300CC ),
    array.push ( c_prcntSpctrm2, #3500C9 ), array.push ( c_prcntSpctrm2, #3800C6 ), array.push ( c_prcntSpctrm2, #3A00C4 ), array.push ( c_prcntSpctrm2, #3D00C1 ), array.push ( c_prcntSpctrm2, #3F00BF ), 
    array.push ( c_prcntSpctrm2, #4200BC ), array.push ( c_prcntSpctrm2, #4400BA ), array.push ( c_prcntSpctrm2, #4700B7 ), array.push ( c_prcntSpctrm2, #4900B5 ), array.push ( c_prcntSpctrm2, #4C00B2 ),
    array.push ( c_prcntSpctrm2, #4F00AF ), array.push ( c_prcntSpctrm2, #5100AD ), array.push ( c_prcntSpctrm2, #5400AA ), array.push ( c_prcntSpctrm2, #5600A8 ), array.push ( c_prcntSpctrm2, #5900A5 ), 
    array.push ( c_prcntSpctrm2, #5B00A3 ), array.push ( c_prcntSpctrm2, #5E00A0 ), array.push ( c_prcntSpctrm2, #60009E ), array.push ( c_prcntSpctrm2, #63009B ), array.push ( c_prcntSpctrm2, #660099 ),
    array.push ( c_prcntSpctrm2, #680096 ), array.push ( c_prcntSpctrm2, #6B0093 ), array.push ( c_prcntSpctrm2, #6D0091 ), array.push ( c_prcntSpctrm2, #70008E ), array.push ( c_prcntSpctrm2, #72008C ), 
    array.push ( c_prcntSpctrm2, #750089 ), array.push ( c_prcntSpctrm2, #770087 ), array.push ( c_prcntSpctrm2, #7A0084 ), array.push ( c_prcntSpctrm2, #7C0082 ), array.push ( c_prcntSpctrm2, #7F007F ),
    array.push ( c_prcntSpctrm2, #82007C ), array.push ( c_prcntSpctrm2, #84007A ), array.push ( c_prcntSpctrm2, #870077 ), array.push ( c_prcntSpctrm2, #890075 ), array.push ( c_prcntSpctrm2, #8C0072 ), 
    array.push ( c_prcntSpctrm2, #8E0070 ), array.push ( c_prcntSpctrm2, #91006D ), array.push ( c_prcntSpctrm2, #93006B ), array.push ( c_prcntSpctrm2, #960068 ), array.push ( c_prcntSpctrm2, #990066 ),
    array.push ( c_prcntSpctrm2, #9B0063 ), array.push ( c_prcntSpctrm2, #9E0060 ), array.push ( c_prcntSpctrm2, #A0005E ), array.push ( c_prcntSpctrm2, #A3005B ), array.push ( c_prcntSpctrm2, #A50059 ), 
    array.push ( c_prcntSpctrm2, #A80056 ), array.push ( c_prcntSpctrm2, #AA0054 ), array.push ( c_prcntSpctrm2, #AD0051 ), array.push ( c_prcntSpctrm2, #AF004F ), array.push ( c_prcntSpctrm2, #B2004C ), 
    array.push ( c_prcntSpctrm2, #B50049 ), array.push ( c_prcntSpctrm2, #B70047 ), array.push ( c_prcntSpctrm2, #BA0044 ), array.push ( c_prcntSpctrm2, #BC0042 ), array.push ( c_prcntSpctrm2, #BF003F ), 
    array.push ( c_prcntSpctrm2, #C1003D ), array.push ( c_prcntSpctrm2, #C4003A ), array.push ( c_prcntSpctrm2, #C60038 ), array.push ( c_prcntSpctrm2, #C90035 ), array.push ( c_prcntSpctrm2, #CC0033 ),
    array.push ( c_prcntSpctrm2, #CE0030 ), array.push ( c_prcntSpctrm2, #D1002D ), array.push ( c_prcntSpctrm2, #D3002B ), array.push ( c_prcntSpctrm2, #D60028 ), array.push ( c_prcntSpctrm2, #D80026 ), 
    array.push ( c_prcntSpctrm2, #DB0023 ), array.push ( c_prcntSpctrm2, #DD0021 ), array.push ( c_prcntSpctrm2, #E0001E ), array.push ( c_prcntSpctrm2, #E2001C ), array.push ( c_prcntSpctrm2, #E50019 ),
    array.push ( c_prcntSpctrm2, #E80016 ), array.push ( c_prcntSpctrm2, #EA0014 ), array.push ( c_prcntSpctrm2, #ED0011 ), array.push ( c_prcntSpctrm2, #EF000F ), array.push ( c_prcntSpctrm2, #F2000C ), 
    array.push ( c_prcntSpctrm2, #F4000A ), array.push ( c_prcntSpctrm2, #F70007 ), array.push ( c_prcntSpctrm2, #F90005 ), array.push ( c_prcntSpctrm2, #FC0002 ), array.push ( c_prcntSpctrm2, #FF0000 )

///////////////////////////////////////////////////////////////////////////////
// Function Declarations

f_prior_sum ( _P, _X ) =>
    math.sum ( _P[1], _X - 1 )

f_ma_val ( _P, _typ, _len ) =>
    _typ == 'SMA' ? ta.sma ( _P, _len ) : _typ == 'EMA' ? ta.ema ( _P, _len ) : _typ == 'RMA' ? ta.rma ( _P, _len ) : _typ == 'HMA' ? ta.hma ( _P, _len ) : ta.vwma ( _P, _len )

f_pmarp ( _price, _pmarLen, _pmarpLen, _type ) =>
    _pmar = math.abs ( _price / f_ma_val ( _price, _type, _pmarLen ))
    _pmarpSum = 0
    _len = bar_index < _pmarpLen ? bar_index : _pmarpLen
    for i = 1 to _len by 1
        _pmarpSum += ( _pmar[i] > _pmar ? 0 : 1 )
        _pmarpSum
    _return = bar_index >= _pmarLen ? _pmarpSum / _len * 100 : na

f_clrSlct ( _percent, _select, _type, _solid, _array1, _array2 ) =>
    _select == 'Solid' ? _solid : array.get ( _type == 'Blue Green Red' ? _array1 : _array2, math.round ( _percent ))

/////////////////////////////////////////////////////////////////////////////// 
// calculations

pmarpOn     = i_p_type_line == 'Price Moving Average Ratio Percentile'

ma          = f_ma_val ( i_src_price, i_ma_typ, i_ma_len )
pmar        = i_src_price / ma
pmarp       = f_pmarp ( i_src_price, i_ma_len, i_pmarp_lookback, i_ma_typ )

pmarHigh := pmar > pmarHigh ? pmar : pmarHigh

c_pmar      = ( pmar / pmarHigh )*100

plotline    = pmarpOn ? pmarp : pmar
c_plotline  = f_clrSlct ( pmarpOn ? plotline : c_pmar,  i_c_typ_line,    i_c_typ_spctrm_line, i_c_solid_line, c_prcntSpctrm1, c_prcntSpctrm2 )

signal_ma   = f_ma_val  ( plotline,  i_signal_ma_typ, i_signal_ma_Len )
c_plotsig   = f_clrSlct ( signal_ma, i_c_typ_sig,     i_c_typ_spctrm_sig,  i_c_solid_sig,  c_prcntSpctrm1, c_prcntSpctrm2 )

hi_alert    = pmarpOn ? i_hi_alert_pmarp : i_hi_alert_pmar
lo_alert    = pmarpOn ? i_lo_alert_pmarp : i_lo_alert_pmar

hi_alertc   = pmarpOn ? i_hi_alert_pmarp : i_hi_alert_pmar > pmarHigh ? 100 : ( i_hi_alert_pmar / pmarHigh ) * 100

c_hi_alert  = f_clrSlct ( hi_alertc, i_c_typ_line, i_c_typ_spctrm_sig,  i_c_solid_sig,  c_prcntSpctrm1, c_prcntSpctrm2 )
c_lo_alert  = f_clrSlct ( lo_alert, i_c_typ_line, i_c_typ_spctrm_sig,  i_c_solid_sig,  c_prcntSpctrm1, c_prcntSpctrm2 )
c_bg        = color.new ( f_clrSlct ( pmarp,    i_c_typ_line, i_c_typ_spctrm_line, i_c_solid_line, c_prcntSpctrm1, c_prcntSpctrm2 ), 50 )

p_hi_alert  = plotline > hi_alert
p_lo_alert  = plotline < lo_alert

///////////////////////////////////////////////////////////////////////////////
// Line Plot

p_scaleHi   = plot ( pmarpOn ? 100 : na, 'Scale high', #ff0000, style = plot.style_line )
p_midLine   = plot ( pmarpOn ? 50  : na, 'Midline',   #555555, style = plot.style_line )
p_scaleLo   = plot ( pmarpOn ? 0   : na, 'Scale low',  #0000ff, style = plot.style_line )

plot ( plotline, 'Plot line', c_plotline, i_p_width_line, editable=false )

plot ( pmarpOn ? na : pmarHigh, 'Historical PMAR high', f_clrSlct ( 100, i_c_typ_line, i_c_typ_spctrm_line, i_c_solid_line, c_prcntSpctrm1, c_prcntSpctrm2 ), i_p_width_line, editable=false )

plot ( i_show_signal_ma ? signal_ma : na, 'Signal line', c_plotsig, i_p_width_sig, editable=false )

plot ( i_hi_alert_line_on and pmarpOn ? i_hi_alert_pmarp : i_hi_alert_pmar, 'High alert level', c_hi_alert, style = plot.style_line )
plot ( i_lo_alert_line_on and pmarpOn ? i_lo_alert_pmarp : i_lo_alert_pmar, 'Low alert level', c_lo_alert, style = plot.style_line )

bgcolor ( p_hi_alert and i_hi_alert_line_on and i_bg_hi_signal_on ? c_bg : na )
bgcolor ( p_lo_alert and i_lo_alert_line_on and i_bg_lo_signal_on ? c_bg : na )

///////////////////////////////////////////////////////////////////////////////
// End

// THIS IS PMARP, AN INDiCATOR CREATED BY @THE_CARETAKER, I DO NOT TAKE CREDIT FOR ANY CODE WRITTEN ABOVE HERE. PLEASE REFER TO @The_Caretaker FOR QUESTIONS REGARDING THE PMAR/PMARP INDICATOR. THANK YOU!

// THIS IS PMARP, AN INDiCATOR CREATED BY @THE_CARETAKER, I DO NOT TAKE CREDIT FOR ANY CODE WRITTEN ABOVE HERE. PLEASE REFER TO @The_Caretaker FOR QUESTIONS REGARDING THE PMAR/PMARP INDICATOR. THANK YOU!

//

    //
    //
    
// THIS IS MADRID MOVING AVERAGE RIBBON, AN INDICATOR CREATED BY @Madrid. I DO NOT TAKE ANY CREDIT FOR THE SCRIPT BELOW UNTIL THE END OF THE INDICATOR IS STATED. FOR ANY QUESTIONS PLEASE REFER TO @Madrid REGARDING THE MADRID MOVING AVERAGE RIBBON INDICATOR, THANK YOU!
    //
// THIS IS MADRID MOVING AVERAGE RIBBON, AN INDICATOR CREATED BY @Madrid. I DO NOT TAKE ANY CREDIT FOR THE SCRIPT BELOW UNTIL THE END OF THE INDICATOR IS STATED. FOR ANY QUESTIONS PLEASE REFER TO @Madrid REGARDING THE MADRID MOVING AVERAGE RIBBON INDICATOR, THANK YOU!
    //
// THIS IS MADRID MOVING AVERAGE RIBBON, AN INDICATOR CREATED BY @Madrid. I DO NOT TAKE ANY CREDIT FOR THE SCRIPT BELOW UNTIL THE END OF THE INDICATOR IS STATED. FOR ANY QUESTIONS PLEASE REFER TO @Madrid REGARDING THE MADRID MOVING AVERAGE RIBBON INDICATOR, THANK YOU!

// ╔══════════════════════════════════════════════════════════════════════════════╗
// ║                                                                              ║
// ║ © Madrid : 141017TH2251                                                      ║
// ║                                                                              
// ║ Rev. 210306SA1836 : Upgrade to Pinescript 4                                  ║
// ║                                                                              ║
// ║ Madrid Moving Average Ribbon                                                 ║
// ║                                                                              ║
// ║ This plots a moving average ribbon, either exponential or standard.          ║
// ║ This study is best viewed with a dark background.  It provides an easy       ║
// ║ and fast way to determine the trend direction and possible reversals.        ║
// ║                                                                              ║
// ║ Lime : Uptrend. Long trading                                                 ║
// ║ Green : Reentry (buy the dip) or downtrend reversal warning                  ║
// ║ Red : Downtrend. Short trading                                               ║
// ║ Maroon : Short Reentry (sell the peak) or uptrend reversal warning           ║
// ║                                                                              ║
// ║ To best determine if this is a reentry point or a trend reversal             ║
// ║ the MMARB (Madrid Moving Average Ribbon Bar) study is used.                  ║
// ║ This is the bar located at the bottom.  This bar signals when a              ║
// ║ current trend reentry is found (partially filled with opposite dark color)   ║
// ║ or when a trend reversal is ahead (filled with the opposite color.           ║
// ║                                                                              ║
// ║ This source code is subject to the terms of the Mozilla Public License 2.0   ║
// ║ at https://mozilla.org/MPL/2.0/                                              ║
// ║                                                                              ║
// ╚══════════════════════════════════════════════════════════════════════════════╝

// ╔══════════════════════════════════════╗
// ║                                      ║
// ║            CONSTANTS                 ║
// ║                                      ║
// ╚══════════════════════════════════════╝

PHI = (1 + math.sqrt(5)) / 2
PI = 104348 / 33215

BULL = 1
BEAR = -1
NONE = 0

// ╔══════════════════════════════════════╗
// ║                                      ║
// ║            Colors                    ║
// ║                                      ║
// ╚══════════════════════════════════════╝


// v3 Style Gradient
GRN01 = #7CFC00
GRN02 = #32CD32
GRN03 = #228B22
GRN04 = #006400
GRN05 = #008000
GRN06 = #093507
RED01 = #FF4500
RED02 = #FF0000
RED03 = #B22222
RED04 = #8B0000
RED05 = #800000
RED06 = #330d06



// ──────────[ v3 Style Colors ]
AQUA = #00FFFF
BLACK = #000000
BLUE = #0000FF
FUCHSIA = #FF00FF
GRAY = #808080
GREEN = #008000
LIME = #00FF00
MAROON = #800000
NAVY = #000080
OLIVE = #808000
ORANGE = #FF7F00
PURPLE = #800080
RUBI = #FF0000
SILVER = #C0C0C0
TEAL = #008080
YELLOW = #FFFF00
WHITE = #FFFFFF



// ╔══════════════════════════════════════╗
// ║                                      ║
// ║            functions ()              ║
// ║                                      ║
// ╚══════════════════════════════════════╝


// ──────────[ Moving Average Color ]
//  
maColor(_ma, _maRef) =>
    diffMA = ta.change(_ma)
    macol = diffMA >= 0 and _ma > _maRef ? LIME : diffMA < 0 and _ma > _maRef ? MAROON : diffMA <= 0 and _ma < _maRef ? RUBI : diffMA >= 0 and _ma < _maRef ? GREEN : GRAY
    macol



// ╔══════════════════════════════════════════════════════════════════════════════╗
// ║                                                                              ║
// ║                                main ( )                                      ║
// ║                                                                              ║
// ╚══════════════════════════════════════════════════════════════════════════════╝


// ────────────────────[ Input Parameters ]


i_exp = input(true, title='Expnential MA')




// ────────────────────[ Processing ]

src = close

ma05 = i_exp ? ta.ema(src, 05) : ta.sma(src, 05)
ma10 = i_exp ? ta.ema(src, 10) : ta.sma(src, 10)
ma15 = i_exp ? ta.ema(src, 15) : ta.sma(src, 15)
ma20 = i_exp ? ta.ema(src, 20) : ta.sma(src, 20)
ma25 = i_exp ? ta.ema(src, 25) : ta.sma(src, 25)
ma30 = i_exp ? ta.ema(src, 30) : ta.sma(src, 30)
ma35 = i_exp ? ta.ema(src, 35) : ta.sma(src, 35)
ma40 = i_exp ? ta.ema(src, 40) : ta.sma(src, 40)
ma45 = i_exp ? ta.ema(src, 45) : ta.sma(src, 45)
ma50 = i_exp ? ta.ema(src, 50) : ta.sma(src, 50)
ma55 = i_exp ? ta.ema(src, 55) : ta.sma(src, 55)
ma60 = i_exp ? ta.ema(src, 60) : ta.sma(src, 60)
ma65 = i_exp ? ta.ema(src, 65) : ta.sma(src, 65)
ma70 = i_exp ? ta.ema(src, 70) : ta.sma(src, 70)
ma75 = i_exp ? ta.ema(src, 75) : ta.sma(src, 75)
ma80 = i_exp ? ta.ema(src, 80) : ta.sma(src, 80)
ma85 = i_exp ? ta.ema(src, 85) : ta.sma(src, 85)
ma90 = i_exp ? ta.ema(src, 90) : ta.sma(src, 90)
ma100 = i_exp ? ta.ema(src, 100) : ta.sma(src, 100)

// ╔══════════════════════════════════════════════════════════════════════════════╗
// ║                                                                              ║
// ║                That's all Folks !                                            ║
// ║                                                                              ║
// ╚══════════════════════════════════════════════════════════════════════════════╝
// THIS IS MADRID MOVING AVERAGE RIBBON, AN INDICATOR CREATED BY @Madrid. I DO NOT TAKE ANY CREDIT FOR THE SCRIPT ABOVE. FOR ANY QUESTIONS PLEASE REFER TO @Madrid REGARDING THE MADRID MOVING AVERAGE RIBBON INDICATOR, THANK YOU!
    //
// THIS IS MADRID MOVING AVERAGE RIBBON, AN INDICATOR CREATED BY @Madrid. I DO NOT TAKE ANY CREDIT FOR THE SCRIPT ABOVE. FOR ANY QUESTIONS PLEASE REFER TO @Madrid REGARDING THE MADRID MOVING AVERAGE RIBBON INDICATOR, THANK YOU!
    //
// THIS IS MADRID MOVING AVERAGE RIBBON, AN INDICATOR CREATED BY @Madrid. I DO NOT TAKE ANY CREDIT FOR THE SCRIPT ABOVE. FOR ANY QUESTIONS PLEASE REFER TO @Madrid REGARDING THE MADRID MOVING AVERAGE RIBBON INDICATOR, THANK YOU!


//THE SCRIPT BELOW WAS COMPLETED BY @CHEATCODE1 (Myself) LET ME KNOW IF YOU GUYS WANT MORE COLLAB STRATEGIES AND SUBSCRIBE!! THANKS :)
    //
//THE SCRIPT BELOW WAS COMPLETED BY @CHEATCODE1 (Myself) LET ME KNOW IF YOU GUYS WANT MORE COLLAB STRATEGIES AND SUBSCRIBE!! THANKS :)
    //
//THE SCRIPT BELOW WAS COMPLETED BY @CHEATCODE1 (Myself) LET ME KNOW IF YOU GUYS WANT MORE COLLAB STRATEGIES AND SUBSCRIBE!! THANKS :)


//Lime color conditions when true
greenMA_1 = ma05 > ma100
greenMA_2 = ma10 > ma100
greenMA_3 = ma15 > ma100
greenMA_4 = ma20 > ma100 
greenMA_5 = ma25 > ma100
greenMA_6 = ma30 > ma100
greenMA_7 = ma35 > ma100
greenMA_8 = ma40 > ma100
greenMA_9 = ma45 > ma100
greenMA_10 = ma50 > ma100
greenMA_11 = ma55 > ma100
greenMA_12 = ma60 > ma100
greenMA_13 = ma65 > ma100
greenMA_14 = ma70 > ma100
greenMA_15 = ma75 > ma100
greenMA_16 = ma80 > ma100
greenMA_17 = ma85 > ma100
greenMA_18 = ma90 > ma100

//Red color 
redMA_1 = ma05 < ma100
redMA_2 = ma10 < ma100
redMA_3 = ma15 < ma100
redMA_4 = ma20 < ma100 
redMA_5 = ma25 < ma100
redMA_6 = ma30 < ma100
redMA_7 = ma35 < ma100
redMA_8 = ma40 < ma100
redMA_9 = ma45 < ma100
redMA_10 = ma50 < ma100
redMA_11 = ma55 < ma100
redMA_12 = ma60 < ma100
redMA_13 = ma65 < ma100
redMA_14 = ma70 < ma100
redMA_15 = ma75 < ma100
redMA_16 = ma80 < ma100
redMA_17 = ma85 < ma100
redMA_18 = ma90 < ma100

// Difference of color 
Diffma1 = ta.change(ma05)
Diffma2 = ta.change(ma10)
Diffma3 = ta.change(ma15)
Diffma4 = ta.change(ma20)
Diffma5 = ta.change(ma25)
Diffma6 = ta.change(ma30)
Diffma7 = ta.change(ma35)
Diffma8 = ta.change(ma40)
Diffma9 = ta.change(ma45)
Diffma10 = ta.change(ma50)
Diffma11 = ta.change(ma55)
Diffma12 = ta.change(ma60)
Diffma13 = ta.change(ma65)
Diffma14 = ta.change(ma70)
Diffma15 = ta.change(ma75)
Diffma16 = ta.change(ma80)
Diffma17 = ta.change(ma85)
Diffma18 = ta.change(ma90)

//Positive difference values
Diffma1P = ta.change(ma05) >= 0
Diffma2P = ta.change(ma10) >= 0
Diffma3P = ta.change(ma15) >= 0
Diffma4P = ta.change(ma20) >= 0
Diffma5P = ta.change(ma25) >= 0
Diffma6P = ta.change(ma30) >= 0
Diffma7P = ta.change(ma35) >= 0
Diffma8P = ta.change(ma40) >= 0
Diffma9P = ta.change(ma45) >= 0
Diffma10P = ta.change(ma50) >= 0
Diffma11P = ta.change(ma55) >= 0
Diffma12P = ta.change(ma60) >= 0
Diffma13P = ta.change(ma65) >= 0
Diffma14P = ta.change(ma70) >= 0
Diffma15P = ta.change(ma75) >= 0
Diffma16P = ta.change(ma80) >= 0
Diffma17P = ta.change(ma85) >= 0
Diffma18P = ta.change(ma90) >= 0

//Negative difference values
Diffma1N = ta.change(ma05) < 0
Diffma2N = ta.change(ma10) < 0
Diffma3N = ta.change(ma15) < 0
Diffma4N = ta.change(ma20) < 0
Diffma5N = ta.change(ma25) < 0
Diffma6N = ta.change(ma30) < 0
Diffma7N = ta.change(ma35) < 0
Diffma8N = ta.change(ma40) < 0
Diffma9N = ta.change(ma45) < 0
Diffma10N = ta.change(ma50) < 0
Diffma11N = ta.change(ma55) < 0
Diffma12N = ta.change(ma60) < 0
Diffma13N = ta.change(ma65) < 0
Diffma14N = ta.change(ma70) < 0
Diffma15N = ta.change(ma75) < 0
Diffma16N = ta.change(ma80) < 0
Diffma17N = ta.change(ma85) < 0 
Diffma18N = ta.change(ma90) < 0

// Reverse enginnered color boolean's
Lime1 = Diffma1P and greenMA_1
Red1 = Diffma1N and redMA_1
Maroon1 = Diffma1N and greenMA_1
Green1 = Diffma1P and redMA_1

Lime2 = Diffma2P and greenMA_2
Red2 = Diffma2N and redMA_2
Maroon2 = Diffma2N and greenMA_2
Green2 = Diffma2P and redMA_2

Lime3 = Diffma3P and greenMA_3
Red3 = Diffma3N and redMA_3
Maroon3 = Diffma3N and greenMA_3
Green3 = Diffma3P and redMA_3

Lime4 = Diffma4P and greenMA_4
Red4 = Diffma4N and redMA_4
Maroon4 = Diffma4N and greenMA_4
Green4 = Diffma4P and redMA_4

Lime5 = Diffma5P and greenMA_5
Red5 = Diffma5N and redMA_5
Maroon5 = Diffma5N and greenMA_5
Green5 = Diffma5P and redMA_5

Lime6 = Diffma6P and greenMA_6
Red6 = Diffma6N and redMA_6
Maroon6 = Diffma6N and greenMA_6
Green6 = Diffma6P and redMA_6

Lime7 = Diffma7P and greenMA_7
Red7 = Diffma7N and redMA_7
Maroon7 = Diffma7N and greenMA_7
Green7 = Diffma7P and redMA_7

Lime8 = Diffma8P and greenMA_8
Red8 = Diffma8N and redMA_8
Maroon8 = Diffma8N and greenMA_8
Green8 = Diffma8P and redMA_8

Lime9 = Diffma9P and greenMA_9
Red9 = Diffma9N and redMA_9
Maroon9 = Diffma9N and greenMA_9
Green9 = Diffma9P and redMA_9

Lime10 = Diffma10P and greenMA_10
Red10 = Diffma10N and redMA_10
Maroon10 = Diffma10N and greenMA_10
Green10 = Diffma10P and redMA_10

Lime11 = Diffma11P and greenMA_11
Red11 = Diffma11N and redMA_11
Maroon11 = Diffma11N and greenMA_11
Green11 = Diffma11P and redMA_11

Lime12 = Diffma12P and greenMA_12
Red12 = Diffma12N and redMA_12
Maroon12 = Diffma12N and greenMA_12
Green12 = Diffma12P and redMA_12

Lime13 = Diffma13P and greenMA_13
Red13 = Diffma13N and redMA_13
Maroon13 = Diffma13N and greenMA_13
Green13 = Diffma13P and redMA_13

Lime14 = Diffma14P and greenMA_14
Red14 = Diffma14N and redMA_14
Maroon14 = Diffma14N and greenMA_14
Green14 = Diffma14P and redMA_14

Lime15 = Diffma15P and greenMA_15
Red15 = Diffma15N and redMA_15
Maroon15 = Diffma15N and greenMA_15
Green15 = Diffma15P and redMA_15

Lime16 = Diffma16P and greenMA_16
Red16 = Diffma16N and redMA_16
Maroon16 = Diffma16N and greenMA_16
Green16 = Diffma16P and redMA_16

Lime17 = Diffma17P and greenMA_17
Red17 = Diffma17N and redMA_17
Maroon17 = Diffma17N and greenMA_17
Green17 = Diffma17P and redMA_17

Lime18 = Diffma18P and greenMA_18
Red18 = Diffma18N and redMA_18
Maroon18 = Diffma18N and greenMA_18
Green18 = Diffma18P and redMA_18

//combination of Lime/Red conditions when true
lime_Long = Lime1 and Lime2 and Lime3 and Lime4 and Lime5 and Lime6 and Lime7 and Lime8 and Lime9 and Lime10 and Lime11 and Lime12 and Lime13 and Lime14 and Lime15 and Lime16 and Lime17 and Lime18
red_Short = Red1 and Red2 and Red3 and Red4 and Red5 and Red6 and Red7 and Red8 and Red9 and Red10 and Red12 and Red12 and Red13 and Red14 and Red15 and Red16 and Red17 and Red18
maroon_Short = Maroon1 and Maroon2 and Maroon3 and Maroon4 and Maroon5 and Maroon6 and Maroon7 and Maroon8 and Maroon9 and Maroon10 and Maroon11 and Maroon12 and Maroon13 and Maroon14 and Maroon15 and Maroon16 and Maroon17 and Maroon18
green_Long = Green1 and Green2 and Green3 and Green4 and Green5 and Green6 and Green7 and Green8 and Green9 and Green10 and Green11 and Green12 and Green13 and Green14 and Green15 and Green16 and Green17 and Green18
//rsistoch values /
r= ta.rsi(close, 14)
s = ta.stoch(close, 14,1,3)
rP = r <= 55
rM = r >= 75
noREL = strategy.opentrades == 0 and strategy.position_size > 0
noRES = strategy.opentrades == 0 and strategy.position_size < 0
noENGL = close[1] > open[1] 

//Entry executions

if (lime_Long) and not (noREL) and not (noENGL) and not (rP)
    strategy.entry("Long", strategy.long)

if (red_Short) and not (noRES)
    strategy.entry("Short", strategy.short)

//Stop Loss/ Take Profit Variables
entry_index() =>
    strategy.opentrades > 0 ? (bar_index - strategy.opentrades.entry_bar_index(strategy.closedtrades + 1)) : na
    
StopLoss() =>    
    if entry_index() != 0 and strategy.position_size > 0 
        low[1]
    else if entry_index() != 0 and strategy.position_size < 0
        high[1] 
    else
        na
//Exit excecutions

if strategy.position_size > 0 and pmarp >= 99 and red_Short == true
    strategy.close("Long")

if strategy.position_size < 0 and pmarp <= 01
    strategy.close("Short")
    
// if strategy.position_size > 0 
//     strategy.exit("Stop Loss", stop = StopLoss())
// if strategy.position_size < 0
//     strategy.exit("Stop Loss", stop = StopLoss())
// Fixed percentiles for profit taking

takeP = input.float(1, title='Take Profit', group = 'Take Profit and Stop Loss') / 100
stopL = input.float(27.75, title = 'Stop Loss', group = 'Take Profit and Stop Loss')/100
// Pre Directionality

Stop_L = strategy.position_avg_price * (1 - stopL)

Stop_S = strategy.position_avg_price * (1 + stopL)

Take_S= strategy.position_avg_price * (1 - takeP)

Take_L = strategy.position_avg_price * (1 + takeP)
     
     
//Post Excecution
if strategy.position_size > 0
    strategy.exit("Close Long", limit=Take_L, stop = Stop_L)

if strategy.position_size < 0
    strategy.exit("Close Short", limit=Take_S, stop = Stop_S)
    
//Custom HLine Request

H1 = input.int( 75, 'Top Line', 51, 100, group = 'Top and Bottom Lines', inline = '1' )
H2 = input.int( 20, 'Bottom Line', 0, 49, group = 'Top and Bottom Lines', inline = '1' )
H3A = input.int(05, ' Transparancy of FIll', 1, 99, group = 'Top and Bottom Lines', inline = '1')

H3B = 100 - H3A

H1P = hline(H1, 'Top Line', #5BE14D, hline.style_dotted, 2, true )
H2P = hline(H2, 'Bottom Line', #E14D60, hline.style_dotted, 2, true )

fill(H1P, H2P, color.new(#E1CB5F,H3B), 'Line fills', editable = true ) 
