[DS]Bitcoin BTC ETH and others cryptos
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © DalmarSantos - Tadingview
//@version=4
//[DS]Bitcoin BTC ETH and others cryptos - any kind of cryptcoin
//
//================== English version
//The script was based on the setup of the average 8 on the weekly chart
// Price above average 8 on weekly market in UP trend, below market in DOWN trend
// RSI greater than 60% : BULL Market
// RSI greater than 40% and lower 60% : ACCUMULATION
// RSI less than 40% BEAR Market
// FUNCTIONS used
//(1) Average 8, 21 and 56 on Weekly - show the avarage 8, 21, 56 weekly on graphic
//(2) Crossing of averages 8 and 21 Weekly  - is not active but you can activate
//(3) RSI Calculation
//(4) barcolor() - mark the candles with the green color (High market) and red color (Dow market)
//(5) alertcondition() - you can activite this alert on Tadingview
//NOTE: This indicator is not a buy and sell recommendation, it indicates the most likely buy and sell points. Every purchase and sale decision is your responsibility 
//++++++++++++++++++ Versão em Portugues
//O script foi baseado no setup da média 8 no gráfico semanal - qualquer tipo de cryptomoeda
// Preço acima da média 8 no semanal mercado em tendência de ALTA, abaixo mercado em tendência de BAIXA
// RSI maior que 60% o mercado esta em ALTA
// RSI maior que 40% e menor 60% o mercado esta em ACUMULAçÃO
// RSI menor que 40% o mercado esta em BAIXA
// Funções utilizadas
//(1) Média 8, 21 e 56 no Semanal - mosta a média 8, 21,  e 56 no gráfico
//(2) Cruzamento das médias 8 e 21 Semanal - não está ativo mas você pode ativá-lo
//(3) Cálculo do RSI
//(4) barcolor() - marca a vela (Candle) com a cor verde (Mercado em Alta) e a cor vermelha (Mercado em Baixa)
//(5) alertcondition () - you can activite this alert on Tadingview
//NOTA: Este indicador não é recomendação de compra e venda ele indica os pontos mais prováveis de compra e venda. Toda decisão de compra e venda é de sua responsabilidade
study(title="[DS]Bitcoin BTC ETH and others cryptos", overlay=true)
_ZIGZAG	= input(title = "═════ Mostrar no Gráfico ══════════", type = input.bool, defval = false)
show_media8W = input(true, title="Média 8 semanal ?") //weekly 8
show_media21W = input(true, title="Média 21 semanal ?") //weekly 21
show_media56W = input(true, title="Média 56 semanal ?") //weekly 56
show_Dados = input(true, title="Texto do RSI?") // RSI text
show_Tendencia = input(true, title="Pontos de Tendência de ALTA e Baixa?") //High and Low Trend Points
show_Cruzamento = input(false, title="Cruzamentos da Média 8w e 21w semanais?") //crossovers weekly 8w and 21w
show_LinhaTendecia = input(false, title="Linha de Tendencia?") //crossovers weekly 8w and 21w
//
//************************************************************************
//Function==> Função | Média 8, 21 e 56 no Semanal == EMA 8, 21, 56 weekly
//Reference: Pine Script Manual
//************************************************************************
//**** EMA Semanal == EMA weekly
//** EMA 8W
_ema8W	= input(title = "═══ Média 8 semanal ══════════", type = input.bool, defval = false)
len_8W = input(8, minval=1, title="Tamanho")
src_8W = input(close, title="Fonte")
out_8W =ema(src_8W, len_8W)
res_8W = input(title="Resolução", type=input.resolution, defval="1W")
ema8W= security(syminfo.tickerid, res_8W, out_8W, gaps=true)

//** EMA 21W
_ema21W	= input(title = "═══ Média 21 semanal ══════════", type = input.bool, defval = false)
len_21W = input(21, minval=1, title="Tamanho")
src_21W = input(close, title="Fonte")
out_21W =ema(src_21W, len_21W)
res_21W = input(title="Resolução", type=input.resolution, defval="1W")
ema21W= security(syminfo.tickerid, res_21W, out_21W, gaps=true)

//** EMA 56W
_ema56	= input(title = "═══ Média 56 semanal ══════════", type = input.bool, defval = false)
len_56W = input(56, minval=1, title="Tamanho")
src_56W = input(close, title="Fonte")
out_56W =ema(src_56W, len_56W)
res_56W = input(title="Resolução", type=input.resolution, defval="1W")
ema56W= security(syminfo.tickerid, res_56W, out_56W, gaps=true)


//
//**********************************************************************************************
//Function==> Função | Cruzamento das médias 8 e 21 Semanal == Crossing 8 and 21 wekkly averages
//Reference: Pine Script Manual
//**********************************************************************************************
//Identifica os locais de cruzamento entre as médias 8 e 21 semanais
//==Identifies the crossing places between the 8 and 21 weekly averages
sinal = 0
sinal_Tendencia=0
if crossover(ema8W, ema21W)
    sinal := 1
    sinal_Tendencia := 1
if crossunder(ema8W, ema21W)
    sinal := -1
    sinal_Tendencia := -1
sinal := sinal==0 ? sinal[1] : sinal
corsinal = sinal[1]==1 ? color.green : sinal[1]==-1 ? color.red : color.black

//
//*******************************************************
//Function==> Função | Cálculo do RSI == RSI Calculation
//Reference: Pine Script Manual
//*******************************************************
_RSI	= input(title = "═════ Dados para RSI ══════════", type = input.bool, defval = false)
nVelas = input(17, minval=1, title="Número de Velas")
Fonte = input(close, "Fonte", type = input.source) //clseo [fechamento]
pCima = rma(max(change(Fonte), 0), nVelas)
pBaixo = rma(-min(change(Fonte), 0), nVelas)
rsi_Overbought = input(60, minval=51, title="RSI-SobreCompra")
rsi_OverSold = input(40, minval=51, title="RSI-Sobre-Venda")
rsi = pBaixo == 0 ? 100 : pCima == 0 ? 0 : 100 - (100 / (1 + pCima / pBaixo))

// Mostra cor do indicador de acordo com a tendência
corTest=color.white
colorText = color.white
estilo = label.style_label_up
offset = 0.0
colorRSI = color.blue
espessuraRSI = 2
testa_cor=0


//***************************************************************************************
//*** Identifica a cor da linha do RSI - Uso na coloração da média 8 semanal == Color RSI
//***************************************************************************************

//Mercado em ALTA == BULL MARKET
if rsi>=rsi_Overbought
    //linha dos 60% - ALTA
    corTest := color.new(color.green,0)
    colorText := color.white    
    estilo := label.style_label_down
    colorRSI := color.green
    testa_cor := 1
    
//Mercado tendência de ALTA == Uptrend
if rsi>50 and rsi<=rsi_Overbought
    //linha entre 50% e 60% - Tendência de ALTA
    corTest := color.new(color.green,50)
    colorText := color.black
    estilo := label.style_label_up    
    //colorRSI := color.purple
    colorRSI := color.new(color.green,50)
    testa_cor := 1

//Mercado tendência de BAIXA == Downtrend
if rsi<50 and rsi>rsi_OverSold
    //linha entre 50% e 40% - Tendência de BAIXA
    corTest := color.new(color.red,50)
    colorText := color.black
    estilo := label.style_label_down   
    //colorRSI := color.blue
    colorRSI := color.new(color.red,50)
    testa_cor := -1

//Mercado em BAIXA == BEAR MARKET
if rsi<rsi_OverSold
    //linha dos 460% - BAIXA
    corTest := color.new(color.red,0) // verde escuro
    colorText := color.white
    estilo := label.style_label_up
    colorRSI := color.red
    testa_cor := -1

//***************************************************************************
//********** Mostra informações no Gráfico == Show the information on graphic
//***************************************************************************

//** Cruzamento de Medias 8 e 21 no Diário == crossing 8 and 21 weekly average
plot(show_Cruzamento==true and crossover(ema8W, ema21W) ? ema8W : na, color=color.green, style = plot.style_circles, linewidth = 7)       //cruzamento ALTA ema8W X ema21W
plot(show_Cruzamento==true and crossunder(ema8W, ema21W) ? ema8W : na, color=color.red, style = plot.style_circles, linewidth = 7)       //cruzamento BAIXA ema8W X ema21W

// Plota a EMA 8 e 21 e 56 Semanal (1W) em qualquer tempo gráfico == Weekly avarage 8, 21 and 56
//*** Plotar EMAs
plot(show_media8W==false ? na : ema8W, color=colorRSI, title="EMA8W", linewidth=6)
plot(show_media21W==false ? na : ema21W, color=color.new(color.orange,80), title="EMA21W", linewidth=3)
plot(show_media56W==false ? na : ema56W, color=color.new(color.purple,80),  title="EMA56W", linewidth=3)

//*** Monstra pontos de Tendência de Alta e Baxia  - market TREND 
//plotarrow(show_Tendencia==true and testa_cor[1]==-1 and testa_cor==1? testa_cor : na, title="Tendência de Alta", colorup=color.new(color.green,50), maxheight=40, minheight=40)
//plotarrow(show_Tendencia==true and testa_cor[1]==1 and testa_cor==-1? testa_cor : na, title="Tendência de Baixa", colordown=color.new(color.red,50), maxheight=-40, minheight=-40)

//Buy point ==> pontos de compra
plotshape(show_Tendencia==true and testa_cor[1]==-1 and testa_cor==1? high : na, style=shape.labelup, location=location.belowbar, text="Buy", transp=0, textcolor = color.white, color=color.green, editable=false)
//Sell points ==> pontos de venda
plotshape(show_Tendencia==true and testa_cor[1]==1 and testa_cor==-1? low : na, style=shape.labeldown, location=location.abovebar, text="Sell", transp=0, textcolor = color.white, color=color.red, editable=false)

//Cross Point ==> pontos de cruzamento
crossUP= testa_cor[1]==-1 and testa_cor==1? high : na
crossDN=testa_cor[1]==1 and testa_cor==-1? low : na
//Show de Buy and Sell points ==> mostra pontos de compra e venda
tradeColor=crossUP ? color.red : crossDN ? color.green : na
//line buy or sell ==> linha de compra ou venda
plot(show_LinhaTendecia==true and crossUP ? low : show_LinhaTendecia==true and crossDN ? high : na, color=tradeColor, style=plot.style_line, linewidth=4, editable=false)


//*******************************
//Function==> Função | Barcolor()
//*******************************
//Plota as cores ds candels em função das cores do RSI
barcolor(color=colorRSI, title="EMA Diaria")


//** Mostra o texto do RSI == RSI Text
corADX=color.white
colorTxtADX = color.white
estilo_DADOS = label.style_label_upper_left

//** Mercado em ALTA : RSI>=60 : Caixa do texto do RSI em VERDE
if rsi>=60
    estilo_DADOS := label.style_label_upper_left
    corADX:=color.new(color.green,0)
    
//** Mercado em ACUMULUAÇÃO : RSI<40 e RSI<60 - Intervalo 40x60  : Caixa do texto do RSI em CINZA
if rsi>40 and rsi<60
    estilo_DADOS := label.style_label_upper_left
    corADX:=color.new(color.gray,0)

//**Mercado em BAIXA : RSI<=40 : Caixa do texto do RSI em VERMELHO
if rsi<=40
    estilo_DADOS := label.style_label_lower_left
    corADX:=color.new(color.red,0)
if show_Dados
    ////indica o valor do rsi como texto
    myLabel = label.new(x=bar_index, y=close, style= estilo_DADOS, color=corADX, textcolor=colorTxtADX, text="RSI=" + tostring(rsi,"###.#") +"%")
    // Get the label text
    labelText = label.get_text(id=myLabel)
    // Then set the label's text to a new string that
    // includes its current text
    label.set_text(id=myLabel, text=labelText)
    label.delete(myLabel[1])

//ALERTA de COMPRA E VENDA na Tendência
alertcondition(testa_cor[1]==-1 and testa_cor==1, title="COMPRAR", message="COMPRA FORTE {{close}} {{ticker}}") //alerta COMPRA FORTE
alertcondition(testa_cor[1]==1 and testa_cor==-1, title="VENDER", message="VENDER FORTE {{close}} {{ticker}}") //alerta COMPRA FORTE


