Untitled
unknown
plain_text
2 years ago
36 kB
19
Indexable
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
//@version=5
indicator("RSI • Yata",
overlay = false,
precision = 3,
max_bars_back = 500)
// ---------------------------------
groupRSI = "Relative Strength Index"
// ---------------------------------
len = input.int (14, minval=1 , title="Length", inline="RSI0", group=groupRSI)
src = input (close , title="Source", inline="RSI0", group=groupRSI)
up = ta.rma(math.max(ta.change(src), 0), len)
dn = ta.rma(-math.min(ta.change(src), 0), len)
rsi0 = dn == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / dn)
show_smooth = input.bool(false , title="Smoothed RSI", inline="RSI0.5", group=groupRSI)
ema_smooth = input.int (3 , title="| Smooth Length", inline="RSI0.5", group=groupRSI)
rsi_smooth = ta.ema (rsi0 , ema_smooth)
rsi = show_smooth ? rsi_smooth : rsi0
// ---------------------------------
show_bar = input.bool(false, title="Show Bars Colors", inline="RSI1", group=groupRSI)
color_rsi_30 = input.color(color.new(#0B54FE, 0), title="Colors:" , inline="RSI2", group=groupRSI)
color_rsi_40 = input.color(color.new(#3348f4, 0), title="" , inline="RSI2", group=groupRSI)
color_rsi_49 = input.color(color.new(#4743EE, 0), title="" , inline="RSI2", group=groupRSI)
color_rsi_51 = input.color(color.new(#8431DF, 0), title="" , inline="RSI2", group=groupRSI)
color_rsi_60 = input.color(color.new(#AC26D5, 0), title="" , inline="RSI2", group=groupRSI)
color_rsi_70 = input.color(color.new(#FC0FC0, 0), title="" , inline="RSI2", group=groupRSI)
color_rsi_no = input.color(color.new(#7e57c2, 0), title="|" , inline="RSI2", group=groupRSI)
rsi_color = rsi < 30 ? color_rsi_30 :
rsi < 40 ? color_rsi_40 :
rsi < 50 ? color_rsi_49 :
rsi > 70 ? color_rsi_70 :
rsi > 60 ? color_rsi_60 :
rsi > 50 ? color_rsi_51 :
na
barcolor(show_bar ? rsi_color : na)
// ---------------------------------
show_rsiF = input.bool(false, title="Show RSI Background Fill", inline="RSI3", group=groupRSI)
rsiF = rsi //ta.rsi(src, len)
rsi_plot = plot(rsiF, title="RSI Fill" , color=na)
middle_plot = plot(50, title="Middle Fill", color=na)
color_f20 = input.color(color.new(#0B54FE, 85) ,title="|", inline="RSI3", group=groupRSI)
color_f49 = input.color(color.new(#4743EE, 95) ,title="", inline="RSI3", group=groupRSI)
color_f51 = input.color(color.new(#8431DF, 95) ,title="", inline="RSI3", group=groupRSI)
color_f80 = input.color(color.new(#FC0FC0, 85) ,title="", inline="RSI3", group=groupRSI)
color_up = show_rsiF and rsiF > 50 ? color_f80 : show_rsiF ? color_f49 : na
color_dn = show_rsiF and rsiF > 50 ? color_f51 : show_rsiF ? color_f20 : na
fill(rsi_plot, middle_plot, rsiF > 50 ? 80 : 50, rsiF > 50 ? 50 : 20, color_up, color_dn)
// ---------------------------------
show_candles = input.bool(false, title="Show RSI Candles", inline="RSI4", group=groupRSI)
ad = true // Advanced RSI
u = math.max(src - src[1], 0)
dm = math.max(src[1] - src, 0)
b = 1 / len
ruh = b * math.max(high - close[1], 0) + (1 - b) * ta.rma(u, len)[1]
rdh = (1 - b) * ta.rma(dm, len)[1]
rul = (1 - b) * ta.rma(u, len)[1]
rdl = b * math.max(close[1] - low, 0) + (1 - b) * ta.rma(dm, len)[1]
function(rsi, len) =>
f = -math.pow(math.abs(math.abs(rsi - 50) - 50), 1 + math.pow(len / 14, 0.618) - 1) / math.pow(50, math.pow(len / 14, 0.618) - 1) + 50
rsiadvanced = if rsi > 50
f + 50
else
-f + 50
rsiadvanced
rsiha = 100 - 100 / (1 + ruh / rdh)
rsila = 100 - 100 / (1 + rul / rdl)
rsia = ta.rsi(src, len)
rsih = if ad
function(rsiha, len)
else
rsiha
rsil = if ad
function(rsila, len)
else
rsila
uc = input.color(color.new(color.green , 50) , title="|", inline="RSI4", group=groupRSI)
dc = input.color(color.new(color.red , 50) , title="", inline="RSI4", group=groupRSI)
bordercolor = input.color(color.new(color.gray , 75) , title="", inline="RSI4", group=groupRSI)
wickcolor = input.color(color.new(color.gray , 75) , title="", inline="RSI4", group=groupRSI)
plotcandle(show_candles ? rsia[1] : na, rsih, rsil, rsia, title="RSI Candles", color=ta.change(rsia) > 0 ? uc : dc, wickcolor=wickcolor, bordercolor=bordercolor)
// ---------------------------------
showDots = input.bool(true, title="Show OB/OS Dots", inline="RSI5", group=groupRSI)
color_Dos = input.color(color.new(color.green , 25), title="|", inline="RSI5", group=groupRSI)
color_Dob = input.color(color.new(color.red , 25), title="", inline="RSI5", group=groupRSI)
ob = ta.cross(rsi, 70) == 1 and rsi >= 70
os = ta.cross(rsi, 30) == 1 and rsi <= 30
plot(ob and showDots ? rsi : na , linewidth=4, style=plot.style_circles, color=color_Dob, title="Overbought")
plot(os and showDots ? rsi : na , linewidth=4, style=plot.style_circles, color=color_Dos, title="Oversold")
// ---------------------------------
color_OB = input.color(color.new(color.green , 65) ,title="Background Lines Colors:" , inline="RSI6", group=groupRSI)
color_NT = input.color(color.new(color.silver , 65) ,title="" , inline="RSI6", group=groupRSI)
color_OS = input.color(color.new(color.red , 65) ,title="" , inline="RSI6", group=groupRSI)
//color_fOB = input.color(color.new(color.green , 97) ,title="|" , inline="RSI6", group=groupRSI)
//color_fOS = input.color(color.new(color.red , 97) ,title="" , inline="RSI6", group=groupRSI)
band0 = hline(80, title="80", linewidth=1, linestyle=hline.style_dotted , color=color_OB)
band1 = hline(70, title="70", linewidth=1, linestyle=hline.style_solid , color=color_OB)
band2 = hline(60, title="60", linewidth=1, linestyle=hline.style_dotted , color=color_NT)
band3 = hline(50, title="50", linewidth=1, linestyle=hline.style_solid , color=color_NT)
band4 = hline(40, title="40", linewidth=1, linestyle=hline.style_dotted , color=color_NT)
band5 = hline(30, title="30", linewidth=1, linestyle=hline.style_solid , color=color_OS)
band6 = hline(20, title="20", linewidth=1, linestyle=hline.style_dotted , color=color_OS)
fill(band1, band0, color=color.new(color.green , 97), title="Background OB")
fill(band5, band6, color=color.new(color.red , 97), title="Background OS")
// ---------------------------------
showLRSI = input.bool(true, title="RSI Label", inline="RSI0", group=groupRSI)
var label Label_RSI = na
Label_RSI := label.new(bar_index + 1, rsi, str.tostring(math.round(rsi, 2), "##"), style=label.style_label_left, color= showLRSI ? color.new(color.silver, 95) : na, textcolor= showLRSI ? color.new(color.silver, 15) : na)
label.delete(Label_RSI[1])
// -----------------------
groupMA = "Moving Average"
// -----------------------
ma(source, length, type) =>
switch type
"SMA" => ta.sma(source, length)
"BB (Bollinger)" => ta.sma(source, length)
"EMA" => ta.ema(source, length)
"SMMA (RMA)" => ta.rma(source, length)
"WMA" => ta.wma(source, length)
"VWMA" => ta.vwma(source, length)
"VWAP" => ta.vwap(source)
"LSMA" => ta.linreg(source, length, offset=0)
"HMA" => ta.hma(source, length)
"ALMA" => ta.alma(source, length, offset=0.85, sigma=6.0)
// -----------------------
show_ma = input.bool (false , title="Show RSI MA" , inline="MA3", group=groupMA)
bull_ma_color = input.color (color.new(#7E9BDE, 50) , title="| Bullish" , inline="MA3", group=groupMA)
bear_ma_color = input.color (color.new(#FF8B00, 50) , title="Bearish" , inline="MA3", group=groupMA)
ma_length = input.int (21 , title="Length" , inline="MA1", group=groupMA)
ma_type = input.string ("SMA" , title="Type", options=["SMA", "BB (Bollinger)", "EMA", "SMMA (RMA)", "WMA", "VWMA", "VWAP", "LSMA", "HMA", "ALMA"], inline="MA1", group=groupMA)
bb_mult = input.float (2.0 , title="Bollinger Bands Standard Dev." , inline="MA2", group=groupMA)
rsi_ma = ma(rsi, ma_length, ma_type)
ma_color = rsi_ma > rsi_ma[1] ? bull_ma_color : bear_ma_color
ma_plot = plot(show_ma ? rsi_ma : na, color=ma_color, title="Moving Average")
bb_color = input.color(color.new(#000000, 75), title="| Fill", inline="MA2", group=groupMA)
bb_check = ma_type == "BB (Bollinger)"
bb_uband = plot(show_ma and bb_check ? rsi_ma + ta.stdev(rsi, ma_length) * bb_mult : na, color=bb_color, title="Upper Bollinger Band")
bb_lband = plot(show_ma and bb_check ? rsi_ma - ta.stdev(rsi, ma_length) * bb_mult : na, color=bb_color, title="Lower Bollinger Band")
fill(bb_uband, bb_lband, color= bb_check ? bb_color : na, title="BB Background")
basis = rsi_ma //ta.sma(rsi, ma_length)
dev = bb_mult * ta.stdev(rsi, ma_length)
upper_bb = basis + dev
lower_bb = basis - dev
over_bb = rsi > upper_bb
under_bb = rsi < lower_bb
// -----------------------
rsiR_input = input.string("None", options=["None", "RSI Levels", "Middle Line", "Moving Average", "Bollinger Bands"], title="| RSI Line Color Ref.", inline="RSI1", group=groupRSI)
rsi_bb = over_bb ? color_rsi_70 : under_bb ? color_rsi_30 : color_rsi_no
rsiR1 = rsi ? color_rsi_no : na
rsiR2 = rsi > 50 ? color_rsi_70 : rsi < 50 ? color_rsi_30 : na
rsiR3 = rsi > 70 ? color_rsi_70 :
rsi < 30 ? color_rsi_30 :
rsi > rsi_ma and rsi > 50 ? color_rsi_60 :
rsi > rsi_ma and rsi < 50 ? color_rsi_51 :
rsi < rsi_ma and rsi > 50 ? color_rsi_49 :
rsi < rsi_ma and rsi < 50 ? color_rsi_40 :
na
rsiR0 = rsiR_input == "None" ? rsiR1 :
rsiR_input == "RSI Levels" ? rsi_color :
rsiR_input == "Middle Line" ? rsiR2 :
rsiR_input == "Moving Average" ? rsiR3 :
rsiR_input == "Bollinger Bands" ? rsi_bb :
na
plot(rsi, title="RSI", color=rsiR0)
// ------------------
groupH = "Histograms"
// ------------------
Color_Grow_Above = input(#2B4B46, title="Histograms Colors:", inline="H0", group=groupH)
Color_Fall_Above = input(#8CA18D, title="" , inline="H0", group=groupH)
Color_Grow_Below = input(#B49C79, title="" , inline="H0", group=groupH)
Color_Fall_Below = input(#8B3D44, title="" , inline="H0", group=groupH)
// ------------------
sHist_RSI = input(false, title="Show RSI Histogram |" , inline="HRSI0", group=groupH)
AbsHistogram = input(false, title="Zero Line" , inline="HRSI0", group=groupH)
HistogramStyle = input(false, title="Columns Style" , inline="HRSI0", group=groupH)
rsiCustom = input(false, title="Use Custom RSI and MA Settings:" , inline="RSI0A", group=groupH)
len_h = input.int (14, minval=1 , title="RSI Length", inline="HRSI1", group=groupH)
src_h = input (close , title="RSI Source", inline="HRSI1", group=groupH)
rsi_h = ta.rsi(src_h, len_h)
ma_length_h = input.int (21 , title="MA Length", inline="HRSI2", group=groupH)
ma_type_h = input.string ("SMA" , title="MA Type", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA", "VWAP", "LSMA", "HMA", "ALMA"], inline="HRSI2", group=groupH)
rsi_ma_h = ma(rsi_h, ma_length_h, ma_type_h)
custom_rsi = rsiCustom ? rsi_h - rsi_ma_h : rsi - rsi_ma
absRSI = math.abs(custom_rsi)
RSIz = AbsHistogram ? custom_rsi : absRSI
hColor = custom_rsi >= 0 ? (custom_rsi[1] < custom_rsi ? Color_Grow_Above : Color_Fall_Above) : (custom_rsi[1] < custom_rsi ? Color_Grow_Below : Color_Fall_Below)
pStyle = HistogramStyle ? plot.style_columns : plot.style_histogram
plot(sHist_RSI ? RSIz : na, style=pStyle, color=hColor, title="RSI Histogram")
// ------------------
//sHist_TSI = input(false , title="Show TSI Histogram", inline="HTSI1", group=groupH)
//Short_Len = input(5 , title="Short Period" , inline="HTSI2", group=groupH)
//Long_Len = input(20 , title="Long Period" , inline="HTSI2", group=groupH)
//TSI_Signal_Len = input(5 , title="| Signal Period" , inline="HTSI1", group=groupH)
//
//TSI = ta.tsi(close, Short_Len, Long_Len)
//TSI_Signal = ta.ema(TSI, TSI_Signal_Len)
//Histogram_TSI = TSI - TSI_Signal
//
//TSIcolor = Histogram_TSI >= 0 ? (Histogram_TSI[1] < Histogram_TSI ? Color_Grow_Above : Color_Fall_Above) : (Histogram_TSI[1] < Histogram_TSI ? Color_Grow_Below : Color_Fall_Below)
//plotshape(Histogram_TSI and sHist_TSI ? 5 : na, style=shape.square, color=TSIcolor, location=location.top, size=size.tiny, title="TSI Histogram")
// ------------------
sHist_MACD = input(true, title="Show MACD Histogram", group=groupH)
Fast_Len = input(12 , title="Fast Length", inline="HMACD1", group=groupH)
Slow_Len = input(26 , title="Slow Length", inline="HMACD1", group=groupH)
MACD_Source = input.source(close , title="MACD Source" , inline="HMACD2", group=groupH)
MACD_Signal_Len = input.int(9, minval=1 , title="Smoothing" , inline="HMACD2", group=groupH)
MA_Source = input.string("EMA" , title="Oscillator Type" , options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA", "VWAP", "LSMA", "HMA", "ALMA"], inline="HMACD3", group=groupH)
MA_Signal = input.string("EMA" , title="Signal Line" , options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA", "VWAP", "LSMA", "HMA", "ALMA"], inline="HMACD3", group=groupH)
Fast_MA = ma(MACD_Source, Fast_Len, MA_Source)
Slow_MA = ma(MACD_Source, Slow_Len, MA_Source)
MACD = Fast_MA - Slow_MA
MACD_Signal = ma(MACD, MACD_Signal_Len, MA_Signal)
Histogram_MACD = MACD - MACD_Signal
MACDcolor = Histogram_MACD >= 0 ? (Histogram_MACD[1] < Histogram_MACD ? Color_Grow_Above : Color_Fall_Above) : (Histogram_MACD[1] < Histogram_MACD ? Color_Grow_Below : Color_Fall_Below)
plotshape(Histogram_MACD and sHist_MACD ? 5 : na, style=shape.square, color=MACDcolor, location=location.bottom, size=size.tiny, title="MACD Histogram")
// ------------------
showMACDf = input.bool(false, title="Show MACD (Full) |" , inline="MACD0", group=groupH)
mHistogramStyle = input(false, title="Columns Style" , inline="MACD0", group=groupH)
mStyle = mHistogramStyle ? plot.style_columns : plot.style_histogram
Color_MACD = input(#0094ff, title="|" , inline="MACD0", group=groupH)
Color_Signal = input(#ff6a00, title="" , inline="MACD0", group=groupH)
fast_length = input.int(12 , title="Fast Length" , inline="MACD1", group=groupH)
slow_length = input.int(26 , title="Slow Length" , inline="MACD1", group=groupH)
macd_src = input.source(close , title="MACD Source" , inline="MACD2", group=groupH)
signal_length = input.int(9 , title="Smoothing" , inline="MACD2", group=groupH)
ma_source = input.string("EMA" , title="Oscillator Type" , inline="MACD3", group=groupH, options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA", "VWAP", "LSMA", "HMA", "ALMA"])
ma_signal = input.string("EMA" , title="Signal Line" , inline="MACD3", group=groupH, options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA", "VWAP", "LSMA", "HMA", "ALMA"])
SetScale = input.int(20 , title="Scaling" , inline="MACD4", group=groupH, minval=1, maxval=100, step=5)
HisLen = input.int(500 , title="Length" , inline="MACD4", group=groupH, minval=1, step=20)
ScaleCol = input.bool(true , title="Colors" , inline="MACD4", group=groupH, tooltip="Scaling: Set Top of Range. 0 will be bottom. \nLength: StdDev period, causes distortion, avoid lowering. Must be >= highest MACD value. \nColors: Uses corrected center for coloring. Otherwise colors will retain original MACD colors.")
// ------------------
shortMA = ma(macd_src, fast_length, ma_source)
longMA = ma(macd_src, slow_length, ma_source)
macdLine = shortMA - longMA
signalLine = ma(macdLine, signal_length, ma_signal)
hist = macdLine - signalLine
// ------------------
midline = SetScale / 2
sd_hist = ta.stdev(hist, HisLen)
basis_hist = ta.ema(hist, HisLen)
up_hist = basis_hist + sd_hist * 2
dn_hist = basis_hist - sd_hist * 2
re_hist = (hist - dn_hist) / (up_hist - dn_hist) * SetScale
sd_sig = ta.stdev(signalLine, HisLen)
basis_sig = ta.ema(signalLine, HisLen)
up_sig = basis_sig + sd_sig * 2
dn_sig = basis_sig - sd_sig * 2
rescaled_sig = (signalLine - dn_sig) / (up_sig - dn_sig) * SetScale
sd_mac = ta.stdev(macdLine, HisLen)
basis_mac = ta.ema(macdLine, HisLen)
up_mac = basis_mac + sd_mac * 2
dn_mac = basis_mac - sd_mac * 2
rescaled_mac = (macdLine - dn_mac) / (up_mac - dn_mac) * SetScale
// ------------------
histLineCol = hist >= 0 ? hist[1] < hist ? Color_Grow_Above : Color_Fall_Above : hist[1] < hist ? Color_Grow_Below : Color_Fall_Below
re_histLineCol = re_hist >= midline ? re_hist[1] < re_hist ? Color_Grow_Above : Color_Fall_Above : re_hist[1] < re_hist ? Color_Grow_Below : Color_Fall_Below
//midCol = ScaleCol ? re_hist >= midline ? Color_Grow_Above : Color_Grow_Below : hist >= 0 ? Color_Grow_Above : Color_Grow_Below
// ------------------
//plot(midline, title="Center (Color)", color=midCol, style=plot.style_line, linewidth=2, display=display.none)
//hline(midline, title="Center", color=color.gray, linestyle=hline.style_solid, linewidth=1)
//hline(SetScale, title="Top Range", color=color.gray, linestyle=hline.style_dashed, linewidth=1)
//hline(0, title="Low Range", color=color.gray, linestyle=hline.style_dashed, linewidth=1)
plot(showMACDf ? rescaled_mac : na , title="MACD" , color=Color_MACD, style=plot.style_line, linewidth=1, histbase=midline)
plot(showMACDf ? rescaled_sig : na , title="Signal" , color=Color_Signal, style=plot.style_line, linewidth=1, histbase=midline)
plot(showMACDf ? re_hist : na , title="Histogram" , color=ScaleCol ? re_histLineCol : histLineCol, style=mStyle, linewidth=1, histbase=midline)
// --------------------------
groupI = "Ichimoku Kinko Hyo"
// --------------------------
ichi_sw = input (true , title="Show Ichimoku Cloud" , inline="ICHI0", group=groupI)
conversionPeriods = input.int (13, minval=1 , title="Tenkan-Sen" , inline="ICHI1", group=groupI)
basePeriods = input.int (33, minval=1 , title="Kijun-Sen" , inline="ICHI1", group=groupI)
laggingSpan2Periods = input.int (84, minval=1 , title="Chikou Span" , inline="ICHI2", group=groupI)
displacement = input.int (33, minval=1 , title="Displacement" , inline="ICHI2", group=groupI)
donchian(len) => math.avg(ta.lowest(rsi, len), ta.highest(rsi, len))
conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = math.avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)
colorI1 = input(color.new(#1B5E20, 65), title="Senkou: Span A" , inline="ICHI3", group=groupI)
colorI2 = input(color.new(#801922, 65), title="Span B" , inline="ICHI3", group=groupI)
colorI3 = input(color.new(#1B5E20, 90), title="Fill A" , inline="ICHI3", group=groupI)
colorI4 = input(color.new(#801922, 90), title="Fill B" , inline="ICHI3", group=groupI)
ichiLwidth = input.int(1, minval=0, title="| Lines Width", inline="ICHI0", group=groupI)
pI1 = plot(ichi_sw ? leadLine1 : na, offset = displacement - 1, linewidth=ichiLwidth, color=colorI1, title="LeadLine A")
pI2 = plot(ichi_sw ? leadLine2 : na, offset = displacement - 1, linewidth=ichiLwidth, color=colorI2, title="LeadLine B")
fill(pI1, pI2, color = leadLine1 > leadLine2 ? colorI3 : colorI4, title="Ichimoku Cloud")
// ----------------------
groupS = "Stochastic RSI"
// ----------------------
show_stoch = input.bool(false, title="Show Stochastic RSI |", inline="STOCH1", group=groupS)
smoothK = input.int(21, minval=1 , title="K" , inline="STOCH2", group=groupS)
smoothD = input.int(5, minval=1 , title="D" , inline="STOCH3", group=groupS)
lengthRSI = input.int(21, minval=1 , title="RSI Length" , inline="STOCH2", group=groupS)
lengthStoch = input.int(50, minval=1 , title="Stoch. Length" , inline="STOCH3", group=groupS)
src_stoch = input(close, title="Source", inline="STOCH4", group=groupS)
colorS1 = input(color.new(color.green, 85) , title="| Bullish" , inline="STOCH4", group=groupS)
colorS2 = input(color.new(color.red, 85) , title="Bearish" , inline="STOCH4", group=groupS)
showSRSI_l = input.bool(false , title="Lines" , inline="STOCH1", group=groupS)
showSRSI_f = input.bool(true , title="Fill" , inline="STOCH1", group=groupS)
showSRSI_lc = showSRSI_l ? display.all : display.none
showSRSI_fc = showSRSI_f ? display.all : display.none
SRSI = ta.rsi(src_stoch, lengthRSI)
kS = ta.sma(ta.stoch(SRSI, SRSI, SRSI, lengthStoch), smoothK)
dS = ta.sma(kS, smoothD)
pkS = plot(show_stoch ? kS : na, linewidth=1, color=colorS1, display=showSRSI_lc, title="Stochastic K")
pdS = plot(show_stoch ? dS : na, linewidth=1, color=colorS2, display=showSRSI_lc, title="Stochastic D")
fill(plot1 = pkS, plot2 = pdS, color = kS >= dS ? colorS1 : colorS2, display=showSRSI_fc, title="Stochastic RSI")
// -----------------
groupT = "RSI Trend"
// -----------------
//show_trend = input.bool(false, title="Show RSI Trend |", inline="T1", group=groupT)
//rsiLengthInput = input.int (14, minval=1 , title="Fast Length" , inline="T1A", group=groupT)
//rsiLengthInput2 = input.int (28, minval=1 , title="Slow Length" , inline="T1A", group=groupT)
show_baseline = input.bool(false , title="Show Hull Trend |" , inline="T2", group=groupT)
trendlen = input (30 , title="Length" , inline="T2A", group=groupT)
//showT_l = input.bool(false, title="Lines", inline="T1", group=groupT)
//showT_f = input.bool(true, title="Fill", inline="T1", group=groupT)
//showT_lc = showT_l ? display.all : display.none
//showT_fc = showT_f ? display.all : display.none
showHl = input.bool(false, title="Lines", inline="T2", group=groupT)
showHf = input.bool(true, title="Fill", inline="T2", group=groupT)
showHlC = showHl ? display.all : display.none
showHfC = showHf ? display.all : display.none
colorR1 = input(color.new(#0B54FE, 90), title="| Bullish" , inline="T2A", group=groupT)
colorR2 = input(color.new(#FC0FC0, 90), title="Bearish" , inline="T2A", group=groupT)
BBMC = ta.hma(close, trendlen)
MHULL = BBMC[0]
SHULL = BBMC[2]
hmac = MHULL > SHULL ? colorR1 : colorR2
//frsi = ta.hma(ta.rsi(close, rsiLengthInput), 10)
//srsi = ta.hma(ta.rsi(close, rsiLengthInput2), 10)
hullrsi1 = ta.rsi(MHULL, len)
hullrsi2 = ta.rsi(SHULL, len)
//RSItrend = frsi > srsi ? colorR1 : colorR2
//trend1 = plot(show_trend ? frsi : na, linewidth=1, color=colorR1, display=showT_lc, title="RSI Trend 1")
//trend2 = plot(show_trend ? srsi : na, linewidth=1, color=colorR2, display=showT_lc, title="RSI Trend 2")
hull1 = plot(show_baseline ? hullrsi1 : na, linewidth=1, color=colorR1, display=showHlC, title="HMA 1")
hull2 = plot(show_baseline ? hullrsi2 : na, linewidth=1, color=colorR2, display=showHlC, title="HMA 2")
//fill(trend1, trend2, color=show_trend ? RSItrend : na, display=showT_fc, title="RSI Trend")
fill(hull1, hull2, color=show_baseline ? hmac : na, display=showHfC, title="RSI Hull Trend")
// -----------------
show_tstate = input.bool(false, title="Show Trend State |", inline="T3", group=groupT)
var state = 0
if ta.crossover(rsi, 66.67)
state := 1
state
if ta.crossunder(rsi, 33.33)
state := 2
state
if state == 1 and ta.crossunder(rsi, 40)
state := 3
state
if state == 2 and ta.crossover(rsi, 60)
state := 3
state
state := state
colorST1 = input(color.new(#0B54FE , 75), title="Bull." , inline="T3", group=groupT)
colorST3 = input(color.new(color.silver , 75), title="N." , inline="T3", group=groupT)
colorST2 = input(color.new(#FC0FC0 , 75), title="Bear." , inline="T3", group=groupT)
state_col = state == 1 ? colorST1 : state == 2 ? colorST2 : state == 3 ? colorST3 : na
state_col2 = state == 1 ? colorST1 : state == 2 ? colorST2 : state == 3 ? colorST3 : na
mh = plot(show_tstate ? 60 : na, title="Mid-High Band", color=state == 2 or state == 3 ? state_col2 : na, style=plot.style_circles, linewidth=1)
ml = plot(show_tstate ? 40 : na, title="Mid-Low Band", color=state == 1 or state == 3 ? state_col2 : na, style=plot.style_circles, linewidth=1)
// --------------------------
groupLR = "Linear Regression"
// --------------------------
linreg = input (true , title="Show Linear Regression |" , inline="LR1", group=groupLR)
periodTrend = input.int (89, minval=4 , title="Trend Period" , inline="LR2", group=groupLR)
deviationsAmnt = input.float (1.618, step=0.1, title="Deviation" , inline="LR2", group=groupLR)
//estimatorType = input.string ("Unbiased" , title="Estimator" , options=["Biased", "Unbiased"], inline="LR3", group=groupLR)
estimatorType = "Unbiased"
var extendType = input.string ("Segment" , title="Lines: Extension" , options=["Right", "Segment"], inline="LR3", group=groupLR) == "Right" ? extend.right : extend.none
lrLwidth = input.int (2, minval=0 , title="Width" , inline="LR3", group=groupLR)
UPlr = input(color.new(color.green, 65), title="Lines Colors: Upper", inline="LR4", group=groupLR)
MIDlr = input(color.new(color.silver, 65), title="Middle" , inline="LR4", group=groupLR)
LOWlr = input(color.new(color.red, 65), title="Lower" , inline="LR4", group=groupLR)
i_line0 = "Solid"
i_line1 = "Dotted"
i_line2 = "Dashed"
f_getLineStyle(_inputStyle) =>
_return = _inputStyle == i_line1 ? line.style_dotted : _inputStyle == i_line2 ? line.style_dashed : line.style_solid
_return
ulLRstyle = input.string(i_line0, title="Style: Upper/Lower", options=[i_line0, i_line1, i_line2], inline="LR5", group=groupLR)
miLRstyle = input.string(i_line2, title="Middle", options=[i_line0, i_line1, i_line2], inline="LR5", group=groupLR)
// --------------------------
rsdcr2(PeriodMinusOne, Deviations, Estimate) =>
var period = PeriodMinusOne + 1
var devDenominator = Estimate == "Unbiased" ? PeriodMinusOne : period
Ex = 0.0
Ex2 = 0.0
Exy = 0.0
Ey = 0.0
for i = 0 to PeriodMinusOne by 1
closeI = nz(rsi[i])
Ex := Ex + i
Ex2 := Ex2 + i * i
Exy := Exy + closeI * i
Ey := Ey + closeI
Ey
ExEx = Ex * Ex
slope = Ex2 == ExEx ? 0.0 : (period * Exy - Ex * Ey) / (period * Ex2 - ExEx)
linearRegression = (Ey - slope * Ex) / period
intercept = linearRegression + bar_index * slope
deviation = 0.0
for i = 0 to PeriodMinusOne by 1
deviation := deviation + math.pow(nz(rsi[i]) - (intercept - bar_index[i] * slope), 2.0)
deviation
deviation := Deviations * math.sqrt(deviation / devDenominator)
correlate = ta.correlation(rsi, bar_index, period)
r2 = math.pow(correlate, 2.0)
[linearRegression, slope, deviation, correlate, r2]
// --------------------------
drawLine(X1, Y1, X2, Y2, ExtendType, Color, LineStyle) =>
var line Line = na
Line := linreg ? line.new(X1, Y1, X2, Y2, xloc.bar_index, ExtendType, Color, LineStyle, width=lrLwidth) : na
line.delete(Line[1])
periodMinusOne = periodTrend - 1
[linReg, slope, deviation, correlate, r2] = rsdcr2(periodMinusOne, deviationsAmnt, estimatorType)
endPointBar = bar_index - periodTrend + 1
endPointY = linReg + slope * periodMinusOne
drawLine(endPointBar, endPointY + deviation, bar_index, linReg + deviation, extendType, UPlr, f_getLineStyle(ulLRstyle))
drawLine(endPointBar, endPointY, bar_index, linReg, extendType, MIDlr, f_getLineStyle(miLRstyle))
drawLine(endPointBar, endPointY - deviation, bar_index, linReg - deviation, extendType, LOWlr, f_getLineStyle(ulLRstyle))
// --------------------------
showCor = input(false, title="Correlation", inline="LR1", group=groupLR)
var label Label = na
Label := label.new(math.max(0, endPointBar - 1), endPointY, text=str.tostring(correlate, "#.##"), style=label.style_label_right, color= showCor ? color.new(color.silver, 95) : na, textcolor= showCor ? color.new(color.silver, 15) : na)
label.delete(Label[1])
// ----------------------
groupZ = "Highs & Lows"
// ----------------------
showDiv = input.bool(true , title="Show Divergences" , inline="Z1", group=groupZ)
length = input (21 , title="| Pivot Length" , inline="Z1", group=groupZ)
r = rsi[length]
l = rsi[14]
ph = ta.pivothigh(rsi,length,length)
pl = ta.pivotlow(rsi,length,length)
valH = ta.valuewhen(ph,r,0)
valL = ta.valuewhen(pl,r,0)
valpH = ta.valuewhen(ph,r,1)
valpL = ta.valuewhen(pl,r,1)
d = math.abs(r)
n = bar_index
label lbl = na
HIH = valH > valpH ? "HH" : na
HIL = valH < valpH ? "LH" : na
LOL = valL < valpL ? "LL" : na
LOH = valL > valpL ? "HL" : na
// ----------------------
zL1style = input.string (i_line1 , title="Lines" , options=[i_line0, i_line1, i_line2], inline="Z2", group=groupZ)
showHL = input.bool (true , title="Show H/L |" , inline="Z3", group=groupZ)
showHLlines = input.bool (true , title="Li." , inline="Z3", group=groupZ)
zL2style = input.string (i_line2 , title="" , options=[i_line0, i_line1, i_line2], inline="Z3", group=groupZ)
styleZ1 = f_getLineStyle(zL1style)
styleZ2 = f_getLineStyle(zL2style)
zL1width = input.int(1, minval=0, title="Width", inline="Z2", group=groupZ)
zL2width = input.int(1, minval=0, title="Wi.", inline="Z3", group=groupZ)
colorZUP = input(color.new(color.green, 25), title="", inline="Z2", group=groupZ)
colorZDN = input(color.new(color.red, 25), title="", inline="Z2", group=groupZ)
colorHIH = input(color.new(color.red, 75) , title="H/L Colors: HH", inline="Z4", group=groupZ)
colorHIL = input(color.new(color.orange, 75), title="LH" , inline="Z4", group=groupZ)
colorLOL = input(color.new(color.green, 75) , title="LL" , inline="Z4", group=groupZ)
colorLOH = input(color.new(#2196F3, 75) , title="HL" , inline="Z4", group=groupZ)
// ----------------------
if ph and valH > valpH and showHL
lbl := label.new(n[length], math.max(r,l), HIH, color=colorHIH,
style=label.style_label_down, textcolor=color.new(color.white, 15), size=size.small)
label.delete(lbl[1])
linehh = showHLlines ? line.new(n[length], math.max(r,l), bar_index, math.max(r,l), extend=extend.right, style=styleZ2, color=colorHIH, width=zL2width) : na
line.delete(linehh[1])
else if ph and valH < valpH and showHL
lbl := label.new(n[length], math.max(r,l), HIL, color=colorHIL,
style=label.style_label_down, textcolor=color.new(color.white, 15), size=size.small)
label.delete(lbl[1])
linehl = showHLlines ? line.new(n[length], math.max(r,l), bar_index, math.max(r,l), extend=extend.right, style=styleZ2, color=colorHIL, width=zL2width) : na
line.delete(linehl[1])
else if pl and valL < valpL and showHL
lbl := label.new(n[length], math.min(r,l), LOL, color=colorLOL,
style=label.style_label_up, textcolor=color.new(color.white, 15), size=size.small)
label.delete(lbl[1])
linell = showHLlines ? line.new(n[length], math.min(r,l), bar_index, math.min(r,l), extend=extend.right, style=styleZ2, color=colorLOL, width=zL2width) : na
line.delete(linell[1])
else if pl and valL > valpL and showHL
lbl := label.new(n[length], math.min(r,l), LOH, color=colorLOH,
style=label.style_label_up, textcolor=color.new(color.white, 15), size=size.small)
label.delete(lbl[1])
linelh = showHLlines ? line.new(n[length], math.min(r,l), bar_index, math.min(r,l), extend=extend.right, style=styleZ2, color=colorLOH, width=zL2width) : na
line.delete(linelh[1])
label.delete(lbl[250])
// ----------------------
showBG = input.bool(true, title="OB/OS Bkg.", inline="LR1", group=groupLR)
bgcolor(rsi > linReg + deviation and ta.pivothigh(rsi, length, 0) and rsi >= 65 and showBG ? color.new(color.red, 95) : rsi < linReg - deviation and ta.pivotlow(rsi, length, 1) and rsi <= 35 and showBG ? color.new(color.green, 95) : na)
// ----------------------
extendOptionUp = input.string("None", title="Upper Line Ext.", options=["None", "Left", "Right", "Both"], inline="ZUP", group=groupZ)
extendOptionLow = input.string("None", title="Lower Line Ext.", options=["None", "Left", "Right", "Both"], inline="ZLOW", group=groupZ)
lengthdiv = input.int(21 , minval=0, title="Leftbars Len." , inline="ZUP", group=groupZ)
lengthright = input.int(0 , minval=0, title="Rightbars Le." , inline="ZLOW", group=groupZ)
lengthwg = lengthright
length2wg = lengthright
astart = input.int(1 , minval=0, title="Draw Upper Line from Pivot" , inline="ZP1", group=groupZ)
aend = input.int(0 , minval=0, title=">" , inline="ZP1" , group=groupZ)
bstart = input.int(1 , minval=0, title="Draw Lower Line from Pivot" , inline="ZP2", group=groupZ)
bend = input.int(0 , minval=0, title=">" , inline="ZP2", group=groupZ)
upwg = ta.pivothigh(rsi, lengthdiv, lengthright)
dnwg = ta.pivotlow(rsi, lengthdiv, lengthright)
upchart = ta.pivothigh(close, lengthdiv, lengthright)
dnchart = ta.pivotlow(close, lengthdiv, lengthright)
nw = bar_index
a1 = ta.valuewhen(not na(upwg), nw, astart)
b1 = ta.valuewhen(not na(dnwg), nw, bstart)
a2 = ta.valuewhen(not na(upwg), nw, aend)
b2 = ta.valuewhen(not na(dnwg), nw, bend)
ach1 = ta.valuewhen(not na(upchart), nw, astart)
bch1 = ta.valuewhen(not na(dnchart), nw, bstart)
ach2 = ta.valuewhen(not na(upchart), nw, aend)
bch2 = ta.valuewhen(not na(dnchart), nw, bend)
// ----------------------
lineExtendUp = extendOptionUp == "Left" ? extend.left :
extendOptionUp == "Right" ? extend.right :
extendOptionUp == "Both" ? extend.both :
extend.none
lineExtendLow = extendOptionLow == "Left" ? extend.left :
extendOptionLow == "Right" ? extend.right :
extendOptionLow == "Both" ? extend.both :
extend.none
//line upper = line.new(nw[nw - a1 + lengthwg], upwg[nw - a1 + lengthwg], nw[nw - a2 + lengthwg], upwg[nw - a2 + lengthwg], extend=lineExtendUp, color=colorZDN, width=zL1width, style=styleZ1)
//line.delete(upper[1])
//line lower = line.new(nw[nw - b1 + length2wg], dnwg[nw - b1 + length2wg], nw[nw - b2 + length2wg], dnwg[nw - b2] , extend=lineExtendLow, color=colorZUP, width=zL1width, style=styleZ1)
//line.delete(lower[1])
// ----------------------
div1 = upwg[nw - a2] < upwg[nw - a1] and upchart[nw - ach2] > upchart[nw - ach1] and upchart > high[nw - ach1] // and ta.pivotlow(rsi,length,0)
div2 = dnwg[nw - b2] > dnwg[nw - b1] and dnchart[nw - bch2] < dnchart[nw - bch1] and dnchart < low[nw - bch1] // and ta.pivothigh(rsi,length,0)
if div1 and showDiv
line.new(nw[nw - a1 + lengthwg], upwg[nw - a1], nw[nw - a2 + lengthwg], upwg[nw - a2], extend=lineExtendUp, color=colorZDN, width=zL1width, style=styleZ1)
label1 = label.new(nw[nw - a2 + lengthwg], 70 , text="div.", style=label.style_label_up, color=color.new(color.red, 100))
label.set_size(label1, size.small)
label.set_textcolor(label1, color.new(color.red, 15))
if div2 and showDiv
line.new(nw[nw - b1 + length2wg], dnwg[nw - b1], nw[nw - b2 + length2wg], dnwg[nw - b2], extend=lineExtendLow, color=colorZUP, width=zL1width, style=styleZ1)
label2 = label.new(nw[nw - b2 + length2wg], 30, text="div.", style=label.style_label_down, color=color.new(color.green, 100))
label.set_size(label2, size.small)
label.set_textcolor(label2, color.new(color.green, 15))
// ----------------------
enterShort = div1
enterLong = div2
enterPos = div1 or div2
alertcondition(enterLong , title="Divergence Alert (Long)" , message="Go Long ▲\n\nTicker: {{ticker}}\nTime: {{time}}\nPrice: {{close}}")
alertcondition(enterShort , title="Divergence Alert (Short)" , message="Go Short ▼\n\nTicker: {{ticker}}\nTime: {{time}}\nPrice: {{close}}")
alertcondition(enterPos , title="Divergences Alert" , message="Ticker: {{ticker}}\nTime: {{time}}\nPrice: {{close}}")Editor is loading...
Leave a Comment