728 lines
25 KiB
Plaintext
728 lines
25 KiB
Plaintext
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
|
|
// © Lupown
|
|
|
|
//@version=4
|
|
study(shorttitle="Multiple strategies [LPWN]", title="Multpile strategies [LUPOWN]", overlay=false)
|
|
//squeeze momoentum by lazy bear
|
|
show_Momen = input(true, title="-----------Show squeeze momentum-------")
|
|
int lengthM = input(20, title="MOM Length", minval=1, step=1)
|
|
srcM = input(close, title="MOM Source", type=input.source)
|
|
int length = input(20, title="SQZ Length", minval=1, step=1)
|
|
src = input(close, title="SQZ Source", type=input.source)
|
|
|
|
//Momentum
|
|
sz = linreg(srcM - avg(avg(highest(high, lengthM), lowest(low, lengthM)), sma(close, lengthM)), lengthM, 0)
|
|
|
|
//Momentum Conditions
|
|
sc1 = sz >= 0
|
|
sc2 = sz < 0
|
|
sc3 = sz >= sz[1]
|
|
sc4 = sz < sz[1]
|
|
|
|
|
|
clr = sc1 and sc3 ? #00FF00 : sc1 and sc4 ? #008000 :
|
|
sc2 and sc4 ? #FF0000 : sc2 and sc3 ? #800000 : color.gray
|
|
|
|
plot(show_Momen ? sz : na, title="Squeeze Momentum", color=clr, style=plot.style_area)
|
|
|
|
|
|
|
|
//SQUEEZE
|
|
|
|
|
|
|
|
lengths = input(20, title="BB Length")
|
|
mult = input(2.0,title="BB MultFactor")
|
|
lengthKC=input(20, title="KC Length")
|
|
multKC = input(1.5, title="KC MultFactor")
|
|
scale = input(75.0, title = "General scale")
|
|
useTrueRange = true
|
|
|
|
|
|
|
|
// Calculate BB
|
|
source = close
|
|
basis = sma(source, lengths)
|
|
dev = multKC * stdev(source, lengths)
|
|
upperBB = basis + dev
|
|
lowerBB = basis - dev
|
|
|
|
// Calculate KC
|
|
ma = sma(source, lengthKC)
|
|
range = useTrueRange ? tr : (high - low)
|
|
rangema = sma(range, lengthKC)
|
|
upperKC = ma + rangema * multKC
|
|
lowerKC = ma - rangema * multKC
|
|
|
|
sqzOn = (lowerBB > lowerKC) and (upperBB < upperKC)
|
|
sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC)
|
|
noSqz = (sqzOn == false) and (sqzOff == false)
|
|
|
|
scolor = noSqz ? color.blue : sqzOn ? #000000 : color.gray
|
|
//plotshape(show_Momen? true : na, color=scolor, style=shape.xcross)
|
|
plot(show_Momen ? 0 : na, title="Squeeze Zero Line", color=scolor, linewidth=2, style=plot.style_cross, transp=0)
|
|
//plotshape(show_Momen?0:na,style=shape.xcross,color=scolor,location=location.absolute)
|
|
|
|
|
|
|
|
///// ADX
|
|
|
|
|
|
|
|
show_ADX = input(true, title = "------------Show ADX------------")
|
|
scaleADX = input(2.0, title = "ADX scale")
|
|
show_di = input(false, title = " Show +DI -DI")
|
|
show_aa = input(false, "Mostrar punto 23 aparte", inline="adx line")
|
|
far = input(-7, "Separacion", inline="adx line")
|
|
adxlen = input(14, title = "ADX Smoothing")
|
|
dilen = input(14, title = "DI Length")
|
|
keyLevel = input(23, title = "Key level for ADX")
|
|
show_bg = input (false, title = "Show bg color")
|
|
|
|
|
|
dirmov(len) =>
|
|
up = change(high)
|
|
down = -change(low)
|
|
truerange = rma(tr, len)
|
|
plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange)
|
|
minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange)
|
|
[plus, minus]
|
|
|
|
adx(dilen, adxlen) =>
|
|
[plus, minus] = dirmov(dilen)
|
|
sum = plus + minus
|
|
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
|
|
[adx, plus, minus]
|
|
|
|
[adxValue, diplus, diminus] = adx(dilen, adxlen)
|
|
|
|
///////////////////////////////////////////////////////////////
|
|
|
|
//[diplus, diminus, adxValue] = dmi(dilen, adxlen)
|
|
|
|
biggest(series) =>
|
|
max = 0.0
|
|
max := nz(max[1], series)
|
|
if series > max
|
|
max := series
|
|
max
|
|
|
|
// Calculate ADX Scale
|
|
ni = biggest(sz)
|
|
far1=far* ni/scale
|
|
adx_scale = (adxValue - keyLevel) * ni/scale
|
|
|
|
adx_scale2 = (adxValue - keyLevel+far) * ni/scale
|
|
|
|
|
|
|
|
dip= (diplus - keyLevel) * ni/scale
|
|
dim= (diminus - keyLevel) * ni/scale
|
|
plot (show_di ? dip * scaleADX :na, color=color.green, title="DI+")
|
|
plot (show_di ? dim * scaleADX :na, color=color.red, title="DI-")
|
|
|
|
color_ADX = adxValue > adxValue[1] ? #ffffff : #a09a9a
|
|
|
|
bgcolor(adxValue > adxValue[1] and adxValue > 23 and show_Momen and show_bg? clr : na, transp=95)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/////////////////WHALE BY BLACKCAT1404
|
|
|
|
show_whale = input(false,title = "Show Whale detector")
|
|
|
|
|
|
//functions
|
|
xrf(values, length) =>
|
|
r_val = float(na)
|
|
if length >= 1
|
|
for i = 0 to length by 1
|
|
if na(r_val) or not na(values[i])
|
|
r_val := values[i]
|
|
r_val
|
|
r_val
|
|
|
|
xsa(src,len,wei) =>
|
|
sumf = 0.0
|
|
ma = 0.0
|
|
out = 0.0
|
|
sumf := nz(sumf[1]) - nz(src[len]) + src
|
|
ma := na(src[len]) ? na : sumf/len
|
|
out := na(out[1]) ? ma : (src*wei+out[1]*(len-wei))/len
|
|
out
|
|
|
|
//trend follower algorithm
|
|
var2 = xrf(low,1)
|
|
var3 = xsa(abs(low-var2),3,1)/xsa(max(low-var2,0),3,1)*100
|
|
var4 = ema(iff(close*1.2,var3*10,var3/10),3)
|
|
var5 = lowest(low,30)
|
|
var6 = highest(var4,30)
|
|
var7 = iff(lowest(low,58),1,0)
|
|
var8 = ema(iff(low<=var5,(var4+var6*2)/2,0),3)/618*var7
|
|
|
|
|
|
//whale pump detector
|
|
//plotcandle(0,var8 * (ni/scale) ,0,var8* (ni/scale),color= var8 > 0 and show_whale ?color.yellow:na)
|
|
|
|
plot(show_whale? var8 * (ni/scale) : na, title = "whale" , style = plot.style_columns,color=color.yellow, transp=80)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
///////////////////
|
|
|
|
|
|
|
|
|
|
//RSI
|
|
show_rsi = input(true, title="------------Show RSI---------")
|
|
show_RSIfondo=input(true, title="Show RSI background")
|
|
rsiApart = input(0,title="RSI separation")
|
|
len = input(14, minval=1, title="Length RSI ")
|
|
upperR = input (70,title="Upper band")
|
|
middleR = input (50,title="Middle band")
|
|
lowerR = input(30,title="Lower band")
|
|
rsi = rsi(src, len)
|
|
rsiColor = rsi <= lowerR ? color.green : rsi >= upperR ? color.red : #da00ff
|
|
rsi_scale=(rsi+rsiApart)* ni/scale
|
|
|
|
|
|
b1s=(rsiApart+upperR) * ni/scale
|
|
bm= (rsiApart+middleR) * ni/scale
|
|
b0s=(rsiApart+lowerR) * ni/scale
|
|
|
|
|
|
|
|
/////otro RSI DIVERGENCE
|
|
show_rsi2 = input (true,title = "Show RSI DIVERGENCE")
|
|
farRSI = input(70,title = "Adjust RSI DIVERGENCE")
|
|
src_fast = close, len_fast = input(5, minval=1, title="Length Fast RSI")
|
|
src_slow = close, len_slow = input(14,minval=1, title="Length Slow RSI")
|
|
up_fast = rma(max(change(src_fast), 0), len_fast)
|
|
down_fast = rma(-min(change(src_fast), 0), len_fast)
|
|
rsi_fast = down_fast == 0 ? 100 : up_fast == 0 ? 0 : 100 - (100 / (1 + up_fast / down_fast))
|
|
up_slow = rma(max(change(src_slow), 0), len_slow)
|
|
down_slow = rma(-min(change(src_slow), 0), len_slow)
|
|
rsi_slow = down_slow == 0 ? 100 : up_slow == 0 ? 0 : 100 - (100 / (1 + up_slow / down_slow))
|
|
//plotfast = plot(rsi_fast, color=blue)
|
|
//plotslow = plot(rsi_slow, color=orange)
|
|
divergence = rsi_fast - rsi_slow
|
|
//plotdiv = plot(divergence, color = divergence > 0 ? color.lime:color.red, linewidth = 2)
|
|
divergence_scale = divergence * (ni/scale)
|
|
rsiColor2 = divergence > 0 ? color.lime:color.red
|
|
plot(show_rsi ? rsi_scale : show_rsi2 ? divergence_scale + (farRSI * ni/scale) : na, "RSI", color=show_rsi ? rsiColor : show_rsi2 ? rsiColor2 :na)
|
|
//////
|
|
|
|
/////////
|
|
/////// estocastico
|
|
|
|
show_stoch=input(false,title="-------Show Stochastic------")
|
|
|
|
|
|
periodK = input(14, title="%K Length", minval=1)
|
|
smoothK = input(1, title="%K Smoothing", minval=1)
|
|
periodD = input(3, title="%D Smoothing", minval=1)
|
|
k = sma(stoch(close, high, low, periodK), smoothK)
|
|
d = sma(k, periodD)
|
|
|
|
k1=k* ni/scale
|
|
d1=d* ni/scale
|
|
plot(show_stoch?k1:na, title="%K", color=#2962FF)
|
|
plot(show_stoch?d1:na, title="%D", color=#FF6D00)
|
|
upS=input(80,title = "Upper band")
|
|
lowS=input(20,title = "Lower band")
|
|
|
|
h1s=upS * ni/scale
|
|
h0s=lowS * ni/scale
|
|
//plot(show_stoch? h1s : na,color=bar_index % 2 == 0 ? color.white : #00000000,transp=60)
|
|
//plot(show_stoch? h0s : na,color=bar_index % 2 == 0 ? color.white : #00000000,transp=60)
|
|
|
|
//band1 = plot(show_rsi? b1s : show_stoch? h1s: na,color=bar_index % 2 == 0 ? color.white : #00000000,transp=60)
|
|
//bandm = plot(show_rsi? bm : na,color=bar_index % 2 == 0 ? color.white : #00000000,transp=70)
|
|
//band0 = plot(show_rsi? b0s : show_stoch ? h0s: na,color=bar_index % 2 == 0 ? color.white : #00000000,transp=60)
|
|
|
|
|
|
///////
|
|
|
|
|
|
|
|
/////////////////AWESOME
|
|
show_ao = input(false, title="-----------Show AO-------")
|
|
show_aoF = input(true, title = "Show ao away 0 point")
|
|
farAO = input(-30 , title = "Away from 0 point")
|
|
|
|
fastLength = input(5,title="Fast Length")
|
|
slowLength = input(34,title="Slow Length")
|
|
|
|
|
|
ao = sma(hl2, fastLength) - sma(hl2, slowLength)
|
|
//nia = biggest(aoN)
|
|
//ao = aoN*nia/scale
|
|
|
|
|
|
ao_f = ao + (farAO * ni /scale)
|
|
|
|
|
|
aoColor = ao >= 0 ? (ao[1] < ao ? #26A69A : #B2DFDB) : (ao[1] < ao ? #FFCDD2 : #EF5350)
|
|
|
|
|
|
aoPlot = plot(show_aoF and show_ao ? ao_f : show_ao ? ao : na, title="AO", style= show_aoF ? plot.style_line : show_ao ? plot.style_area: plot.style_area , color=aoColor, transp=0) //
|
|
|
|
|
|
bandA = plot(show_aoF and show_ao ? farAO * ni /scale : na, color=color.white,transp=60)
|
|
|
|
|
|
fill(aoPlot,bandA, color= show_aoF and show_ao ? aoColor : na,transp=90,title="AO Fill")
|
|
|
|
/////////////////////
|
|
|
|
|
|
////////////////////////////////////
|
|
///////MACD
|
|
/////////////////////////////
|
|
show_macd = input(false, title="-----------Show MACD-------")
|
|
show_macdF = input (true, title = "Show MACD area away 0 point")
|
|
show_macdLF = input(true, title = "Show MACD lines away 0 point")
|
|
macdF = input(-30 , title = "Away 0 point")
|
|
show_macdL= input(false, title="Show MACD lines")
|
|
fast_length = input(title="Fast Length", type=input.integer, defval=12)
|
|
slow_length = input(title="Slow Length", type=input.integer, defval=26)
|
|
//src = input(title="Source", type=input.source, defval=close)
|
|
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
|
|
sma_source = input(title="Oscillator MA Type", type=input.string, defval="EMA", options=["SMA", "EMA"])
|
|
sma_signal = input(title="Signal Line MA Type", type=input.string, defval="EMA", options=["SMA", "EMA"])
|
|
macdScale = input(2,title="MACD scale")
|
|
|
|
|
|
//calculating
|
|
fast_ma = sma_source == "SMA" ? sma(src, fast_length) : ema(src, fast_length)
|
|
slow_ma = sma_source == "SMA" ? sma(src, slow_length) : ema(src, slow_length)
|
|
macd1 = fast_ma - slow_ma
|
|
signal = sma_signal == "SMA" ? sma(macd1, signal_length) : ema(macd1, signal_length)
|
|
hist = (macd1 - signal)
|
|
//color
|
|
macdColor = hist >= 0 ? (hist[1] < hist ? #26A69A : #B2DFDB) : (hist[1] < hist ? #FFCDD2 : #EF5350)
|
|
histo = hist * macdScale
|
|
macd=macd1*macdScale
|
|
sign = signal * macdScale
|
|
|
|
histo_f = histo + (macdF * ni /scale)
|
|
|
|
colorlineMACD = macd > sign ? color.green : color.red
|
|
|
|
histoA = plot(show_macdF and show_macd ? histo_f : show_macd ? histo : na, title="Histogram", style=show_macdF and show_macd ? plot.style_line : show_macd ? plot.style_columns : plot.style_columns , color=macdColor)
|
|
plot(show_macdLF and show_macdL ? macd + (macdF * ni /scale) : show_macdL ? macd : na, title="MACD", color=colorlineMACD)
|
|
plot(show_macdLF and show_macdL ? sign + (macdF * ni /scale) : show_macdL ? sign : na, title="Signal", color=color.orange)
|
|
|
|
band_macd = plot(show_macdF and show_macd ? macdF * ni /scale : na, color=color.white,transp=60)
|
|
|
|
fill(histoA,band_macd, color= show_macdF and show_macd ? macdColor : na,transp=90,title="MACD Fill")
|
|
////////////////////////////////////////
|
|
//////////////////////END MACD
|
|
/////////////////////////////////
|
|
|
|
////////////////////////////////////////
|
|
////////////////////// KONOCORDE "Koncorde Inversiones en el Mundo by lkdml all the credits for them
|
|
/////////////////////////////////
|
|
show_K = input(false, title = "---------------Show Koncorde-------------")
|
|
scaleK= input(8,title = "Koncorde scale")
|
|
showKF = input(true, title = "Show Koncorde away 0 point")
|
|
fark= input (-30 , title = "Away from 0 point")
|
|
show_KD = input(false, title = "Show Koncorde Diamond")
|
|
kon_pos = input (30, title = "Position diamonds Bull")
|
|
kon_posn = input (-30, title = "Position diamonds Bear")
|
|
srcTprice = input(ohlc4, title="Fuente para Precio Total")
|
|
srcMfi = input(hlc3, title="Fuente MFI", group="Money Flow Index")
|
|
tprice=srcTprice
|
|
|
|
//lengthEMA = input(255, minval=1)
|
|
|
|
|
|
m=input(15, title="Media Exponencial")
|
|
longitudPVI=input(90, title="Longitud PVI")
|
|
longitudNVI=input(90, title="Longitud NVI")
|
|
longitudMFI=input(14, title="Longitud MFI")
|
|
multK=input(2.0, title="Multiplicador para derivacion estandar" , group="Bollinger Oscillator")
|
|
boLength=input(25, title="Calculation length ", group="Bollinger Oscillator" )
|
|
|
|
pvim = ema(pvi, m)
|
|
pvimax = highest(pvim, longitudPVI)
|
|
pvimin = lowest(pvim, longitudPVI)
|
|
oscp = (pvi - pvim) * 100/ (pvimax - pvimin)
|
|
|
|
nvim = ema(nvi, m)
|
|
nvimax = highest(nvim, longitudNVI)
|
|
nvimin = lowest(nvim, longitudNVI)
|
|
azul =( (nvi - nvim) * 100/ (nvimax - nvimin) )
|
|
|
|
xmf = mfi(srcMfi, longitudMFI)
|
|
|
|
// Bands Calculation
|
|
basisK = sma(tprice, boLength) //Find the 20-day moving average average (n1 + n2 ... + n20)/20
|
|
devK = mult * stdev(tprice, boLength) //Find the standard deviation of the 20-days
|
|
upper = basisK + devK //Upper Band = 20-day Moving Average + (2 x standard deviation of the 20-days)
|
|
lower = basisK - devK //Lower Band = 20-day Moving Average - (2 x standard deviation of the 20-days)
|
|
OB1 = (upper + lower) / 2.0
|
|
OB2 = upper - lower
|
|
|
|
BollOsc = ((tprice - OB1) / OB2 ) * 100 // percent b
|
|
xrsi = rsi(tprice, 14)
|
|
|
|
calc_stoch(src, length,smoothFastD ) =>
|
|
ll = lowest(low, length)
|
|
hh = highest(high, length)
|
|
k = 100 * (src - ll) / (hh - ll)
|
|
sma(k, smoothFastD)
|
|
|
|
stoc = calc_stoch(tprice, 21, 3)
|
|
marron =( (xrsi + xmf + BollOsc + (stoc / 3))/2 )
|
|
verde = (marron + oscp)
|
|
media = ema(marron,m)
|
|
bandacero= showKF ? fark*ni/scale : 0
|
|
scaleK1 = (ni/scale)/scaleK
|
|
|
|
//vl=plot(show_K ? verde *scaleK1: na, color=#66FF66, style=plot.style_area, title="verde")// COLOURED(102,255,102) as “verde” , GREEN
|
|
//ml=plot(show_K ? marron *scaleK1: na, color= #FFCC99, style=plot.style_area, title="marron", transp=0) // COLOURED(255,204,153) as"marron" , BEIGE
|
|
//al=plot(show_K ? azul *scaleK1: na, color=#126bd6, style=plot.style_area, title="azul") // COLOURED(0,255,255) as “azul” ,
|
|
|
|
lk1 = plot(show_K and showKF ? (marron *scaleK1) + (fark * ni /scale) : show_K ? marron *scaleK1: na, color= #330000, style=plot.style_line, linewidth=3, title="lmarron") // COLOURED(51,0,0) as “lmarron” ,
|
|
lk2 = plot(show_K and showKF ? (verde *scaleK1) + (fark * ni /scale) : show_K ? verde *scaleK1: na, color=#006600, style=plot.style_line, linewidth=3, title="lineav") // COLOURED(0,102,0) as “lineav” ,
|
|
lk3 = plot(show_K and showKF ? (azul *scaleK1) + (fark * ni /scale): show_K ? azul *scaleK1: na, color=#000066, style=plot.style_line, title="lazul" ) // COLOURED(0,0,102) as “lazul” ,
|
|
plot(show_K and showKF ? (media *scaleK1) + (fark * ni /scale) : show_K ? media *scaleK1: na, color=color.red, title="media", style=plot.style_line, linewidth=2) // COLOURED(255,0,0) as “media” ,
|
|
band0k = plot(show_K ? bandacero : na , color=color.black, title="cero")
|
|
|
|
fill(lk2,band0k,color = show_K ? #66FF66 : na , title = "verde", transp = 50)
|
|
fill(lk1,band0k,color = show_K ? #FFCC99 : na , title = "marron", transp = 50)
|
|
fill(lk3,band0k,color = show_K ? #00FFFF : na , title = "azul", transp = 50)
|
|
|
|
|
|
konBull = crossover(marron,media) and show_KD
|
|
konBear = crossunder(marron,media) and show_KD
|
|
|
|
konlBull=kon_pos * ni/scale
|
|
konlBear=kon_posn * ni/scale
|
|
plotchar(konBull ? konlBull : konBear ? konlBear : na, title = 'Koncorde diamond', char='◆', color = konBull ? color.lime : konBear ? color.maroon : color.white, location = location.absolute, size = size.tiny, transp = 0)
|
|
|
|
|
|
|
|
////////////////////////////////////////
|
|
////////////////////// END KONCORDE
|
|
/////////////////////////////////
|
|
|
|
|
|
////////////////////////////////////////
|
|
////////////////////// CCI
|
|
/////////////////////////////////
|
|
show_cci = input(false, title="------------Show CCI---------")
|
|
cci_len = input(14, "CCI length")
|
|
cci_src = input(close, "CCI source")
|
|
upperCCI = input(100, "CCI Upper band")
|
|
lowerCCI = input(-100, "CCI lower band")
|
|
|
|
b1cci = (upperCCI * ni/scale)*30/100
|
|
b0cci = (lowerCCI * ni/scale) *30/100
|
|
cci = cci(cci_src, cci_len)
|
|
|
|
|
|
cci_scale = (30) * ((cci) * ni/scale) / 100
|
|
//cci_scale=((cci * ni/scale)/scale) *scale_cci
|
|
//(cci / (ni * scale) ) + (50*ni/scale)
|
|
//cci_color = c1 ? #F8B856 : c2 ? #F6AD3C : c3 ? #F5A21B : #F39800
|
|
plot(show_cci ? cci_scale : na, color=color.blue, transp=0, linewidth=2, title="CCI")
|
|
|
|
////////////////////////////////////////
|
|
////////////////////// END CCI
|
|
/////////////////////////////////
|
|
|
|
///////////////////
|
|
////////
|
|
////////////////////
|
|
colorcm = show_cci ? color.blue : color.white
|
|
band1 = plot(show_rsi? b1s : show_stoch? h1s : na,color=bar_index % 2 == 0 ? color.white : #00000000,transp=60)
|
|
band0 = plot(show_rsi? b0s : show_stoch ? h0s: show_cci ? b0cci : na,color=bar_index % 2 == 0 ? color.white : #00000000,transp=60)
|
|
bandm = plot(show_cci ? b1cci : show_rsi? bm : show_rsi2 ? (farRSI * ni/scale): na,color=bar_index % 2 == 0 ? colorcm : #00000000,transp=70)
|
|
band00 = plot(show_cci? b0cci : na, color=bar_index % 2 == 0 ? color.blue : #00000000,transp=60)
|
|
fill(band1,band0, color= show_rsi and show_RSIfondo? color.purple : na,transp=90,title="RSI background")
|
|
//////////////
|
|
////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/////////////////////\/
|
|
/////////////MFI i got the code fo=rom the CIPHER indicator by vumanchu
|
|
//////////////////////
|
|
|
|
|
|
rsiMFIShow = input(true, title = '----------Show MFI---------', type = input.bool)
|
|
rsiMFIperiod = input(60,title = 'MFI Period', type = input.integer)
|
|
rsiMFIMultiplier = input(150, title = 'MFI Area multiplier', type = input.float)
|
|
rsiMFIPosY = input(2.5, title = 'MFI Area Y Pos', type = input.float)
|
|
|
|
|
|
// RSI+MFI
|
|
f_rsimfi(_period, _multiplier, _tf) => security(syminfo.tickerid, _tf, sma(((close - open) / (high - low)) * _multiplier, _period) - rsiMFIPosY)
|
|
|
|
rsiMFI = f_rsimfi(rsiMFIperiod, rsiMFIMultiplier, timeframe.period)
|
|
rsiMFIColor1 = #ffffff
|
|
rsiMFIColor2 = #d1d4dc
|
|
|
|
rsiMFIColor = rsiMFI >= 0 ? rsiMFIColor1: rsiMFI < 0 ? rsiMFIColor2 : na
|
|
rsiMFIplot = plot(rsiMFIShow ? rsiMFI * ni/scale: na, title = 'RSI+MFI Area', color =rsiMFIColor , transp = 80,style=plot.style_area)
|
|
|
|
|
|
/////////////////////
|
|
/////////
|
|
//////////////////////
|
|
|
|
//WT the cipher dots use a indicator by lazy bear
|
|
show_cphr = input(true,title = "------------Show Cipher dots---------")
|
|
n1 = input(9, title = "Channel Length")
|
|
n2 = input(12, title = "Average Length")
|
|
smooth = input(3, title = "Smooth Factor")
|
|
|
|
//wt
|
|
CALC(n1, n2, smooth) =>
|
|
ap = hlc3
|
|
esa = ema(ap, n1)
|
|
dw = ema(abs(ap - esa), n1)
|
|
ci = (ap - esa) / (0.015 * dw)
|
|
tci = ema(ci, n2)
|
|
|
|
wt1 = tci
|
|
wt2 = sma(wt1,smooth)
|
|
wave = wt1 - wt2
|
|
wavecolor = wave >=0? color.lime : color.red
|
|
[wave, wavecolor]
|
|
|
|
//CIPHERR
|
|
[wave, wavecolor] = CALC(n1, n2, smooth)
|
|
|
|
middle = 0
|
|
condWt = cross(wave,middle) ? true : na
|
|
wtjeje= show_Momen ? sz : show_ao ? ao : show_macd ? macd : na
|
|
plot(condWt and show_cphr ? wtjeje : na, title = 'Buy and sell circle', color = wavecolor, style = plot.style_circles, linewidth = 3, transp = 15)
|
|
|
|
/////plot ADX
|
|
|
|
plot(show_aa ? far1 *scaleADX : na,color=color.white, title="Punto 23")
|
|
p1 = plot(show_aa ? adx_scale2 * scaleADX : show_ADX ? adx_scale * scaleADX : na, color = color_ADX, title = "ADX", linewidth = 2)
|
|
|
|
///
|
|
///////////////
|
|
// ESTADOOO
|
|
show_status = input(true, title = "------Show STATUS----------")
|
|
dist= input(10,title="Distancia del monitor")
|
|
dashColor = input(color.new(#696969, 90), "label Color", inline="Dash Line")
|
|
dashTextColor = input(color.new(#ffffff, 0), "Text Color", inline="Dash Line")
|
|
|
|
|
|
if(adxValue > adxValue[1] and adxValue > 23)
|
|
iadx='ADX con pendiente positiva por encima punto 23'
|
|
if(adxValue > adxValue[1] and adxValue < 23)
|
|
iadx='ADX con pendiente positiva por debajo punto 23'
|
|
if(adxValue < adxValue[1] and adxValue < 23)
|
|
iadx='ADX con pendiente negativa por debajo punto 23'
|
|
if(adxValue < adxValue[1] and adxValue > 23)
|
|
iadx='ADX con pendiente negativa por encima punto 23'
|
|
|
|
|
|
|
|
|
|
a1=adxValue >= 23
|
|
a2=adxValue < 23
|
|
a3=adxValue >= adxValue[1]
|
|
a4=adxValue < adxValue[1]
|
|
|
|
|
|
iAdx = a1 and a3 ? 'Pendiente positiva ↑ 23' : a1 and a4 ? 'Pendiente negativa ↑ 23' :
|
|
a2 and a4 ? 'Pendiente negativa ↓ 23' : a2 and a3 ? 'Pendiente positiva ↓ 23' : '-'
|
|
|
|
|
|
iMom = sc1 and sc3 ? 'Direccionalidad alcista' : sc1 and sc4 ? 'Direccionalidad bajista' :
|
|
sc2 and sc4 ? 'Direccionalidad bajista' : sc2 and sc3 ? 'Direccinalidad alcista' : '-'
|
|
|
|
igral = a1 and a3 and sc1 and sc3 ? 'Fuerte movimiento alcista' : a1 and a3 and sc1 and sc4 ? 'Monitor muestra rango-caida pero\nel movimiento tiene fuerza':
|
|
a1 and a3 and sc2 and sc4 ? 'Fuerte movimiento bajista' : a1 and a3 and sc2 and sc3 ? 'Monitor muestra rango-subida pero\nel movimiento tiene fuerza':
|
|
a1 and a4 and sc1 and sc3 ? 'Movimiento alcista sin fuerza' : a1 and a4 and sc1 and sc4 ? 'Monitor muestra rango-caida\n pendiente negativa en ADX ':
|
|
a1 and a4 and sc2 and sc4 ? 'Movimiento bajista sin fuerza' : a1 and a4 and sc2 and sc3 ? 'Monitor muestra rango-subida con \npendiente negativa en ADX ':
|
|
a2 and a4 and sc1 and sc3 ? 'Movimiento alcista sin fuerza' : a2 and a4 and sc1 and sc4 ? 'Monitor muestra rango-caida sin fuerza ':
|
|
a2 and a4 and sc2 and sc4 ? 'Movimiento bajista sin fuerza' : a2 and a4 and sc2 and sc3 ? 'Monitor muestra rango-subida sin fuerza ':
|
|
a2 and a3 and sc1 and sc3 ? 'Movimiento alcista que \n quiere agarrar fuerza' : a2 and a3 and sc1 and sc4 ? 'Monitor muestra rango-caida,\n el movimiento quiere agarrar fuerza':
|
|
a2 and a3 and sc2 and sc4 ? 'Movimiento bajista que \n quiere agarrar fuerza' : a2 and a3 and sc2 and sc3 ? 'Monitor muestra rango-subida,\n el movimiento quiere agarrar fuerza': '-'
|
|
|
|
|
|
s='\n'
|
|
scr_label='Info ADX: '+iAdx+s+'Info monitor: '+iMom+s+'Info general:'+s+igral
|
|
// Plot Label on the chart
|
|
// Plot Label on the chart
|
|
|
|
if show_status
|
|
|
|
lab_l = label.new(
|
|
bar_index + dist, 0, '\t Estatus segun estrategia\n\t' + scr_label,
|
|
color = dashColor,
|
|
textcolor = dashTextColor,
|
|
style = label.style_label_left,
|
|
yloc = yloc.price)
|
|
label.delete(lab_l[1])
|
|
|
|
// Send alert only if screener is not empty
|
|
if (scr_label != '')
|
|
alert('Estatus segun estrategia\n' + scr_label, freq = alert.freq_once_per_bar_close )
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////
|
|
|
|
|
|
//DIVERGENCIAS BUENNNNNNNAS
|
|
show_div=input(true,title="------Divergencias--------")
|
|
lbR = input(title="Pivot Lookback Right", defval=1)
|
|
lbL = input(title="Pivot Lookback Left", defval=1)
|
|
rangeUpper = input(title="Max of Lookback Range", defval=60)
|
|
rangeLower = input(title="Min of Lookback Range", defval=1)
|
|
plotBull = input(title="Plot Bullish", defval=true)
|
|
plotHiddenBull = input(title="Plot Hidden Bullish", defval=true)
|
|
plotBear = input(title="Plot Bearish", defval=true)
|
|
plotHiddenBear = input(title="Plot Hidden Bearish", defval=true)
|
|
|
|
|
|
bearColor = #ff0000
|
|
bullColor = #1bff00
|
|
hiddenBullColor = #a4ff99
|
|
hiddenBearColor = #ff9e9e
|
|
textColor = color.white
|
|
noneColor = color.new(color.white, 100)
|
|
|
|
//FUNCTIONS
|
|
plFound(osc) => na(pivotlow(osc, lbL, lbR)) ? false : true
|
|
phFound(osc) => na(pivothigh(osc, lbL, lbR)) ? false : true
|
|
|
|
_inRange(cond) =>
|
|
bars = barssince(cond == true)
|
|
rangeLower <= bars and bars <= rangeUpper
|
|
|
|
|
|
_findDivRB(osc)=>
|
|
// Osc: Higher Low
|
|
oscHL = osc[lbR] > valuewhen(plFound(osc), osc[lbR], 1) and _inRange(plFound(osc)[1])
|
|
|
|
// Price: Lower Low
|
|
priceLL = low[lbR] < valuewhen(plFound(osc), low[lbR], 1)
|
|
|
|
bullCond = plotBull and priceLL and oscHL and plFound(osc)
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Hidden Bullish
|
|
|
|
// Osc: Lower Low
|
|
oscLL = osc[lbR] < valuewhen(plFound(osc), osc[lbR], 1) and _inRange(plFound(osc)[1])
|
|
|
|
// Price: Higher Low
|
|
priceHL = low[lbR] > valuewhen(plFound(osc), low[lbR], 1)
|
|
|
|
hiddenBullCond = plotHiddenBull and priceHL and oscLL and plFound(osc)
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Regular Bearish
|
|
|
|
// Osc: Lower High
|
|
oscLH = osc[lbR] < valuewhen(phFound(osc), osc[lbR], 1) and _inRange(phFound(osc)[1])
|
|
|
|
// Price: Higher High
|
|
priceHH = high[lbR] > valuewhen(phFound(osc), high[lbR], 1)
|
|
|
|
bearCond = plotBear and priceHH and oscLH and phFound(osc)
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Hidden Bearish
|
|
|
|
// Osc: Higher High
|
|
oscHH = osc[lbR] > valuewhen(phFound(osc), osc[lbR], 1) and _inRange(phFound(osc)[1])
|
|
|
|
// Price: Lower High
|
|
priceLH = high[lbR] < valuewhen(phFound(osc), high[lbR], 1)
|
|
|
|
hiddenBearCond = plotHiddenBear and priceLH and oscHH and phFound(osc)
|
|
|
|
[bullCond,hiddenBullCond,bearCond,hiddenBearCond]
|
|
|
|
|
|
|
|
|
|
[sz_bullCond,sz_hiddenBullCond,sz_bearCond,sz_hiddenBearCond]=_findDivRB(sz)
|
|
|
|
|
|
foundDivBSZ = plFound(sz) and show_Momen and show_div ? true : false
|
|
colordivBSZ = sz_bullCond ? bullColor : sz_hiddenBullCond ? hiddenBullColor : noneColor
|
|
foundDivBeSZ = phFound(sz) and show_Momen and show_div ? true : false
|
|
colordivBeSZ = sz_bearCond ? bearColor : sz_hiddenBearCond ? hiddenBearColor : noneColor
|
|
|
|
|
|
|
|
plot(
|
|
foundDivBSZ ? sz[lbR] : na,
|
|
offset=-lbR,
|
|
title="Regular Bullish",
|
|
linewidth=1,
|
|
color=colordivBSZ,
|
|
transp=0
|
|
)
|
|
plot(
|
|
foundDivBeSZ ? sz[lbR] : na,
|
|
offset=-lbR,
|
|
title="Regular Bullish",
|
|
linewidth=1,
|
|
color=colordivBeSZ,
|
|
transp=0
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////RSI DIV//////////////////
|
|
|
|
|
|
[rsi_bullCond,rsi_hiddenBullCond,rsi_bearCond,rsi_hiddenBearCond]=_findDivRB(rsi_scale)
|
|
|
|
|
|
foundDivBRSI = plFound(rsi_scale) and show_rsi and show_div ? true : false
|
|
colordivBRSI = rsi_bullCond ? bullColor : rsi_hiddenBullCond ? hiddenBullColor : noneColor
|
|
foundDivBeRSI = phFound(rsi_scale) and show_rsi and show_div ? true : false
|
|
colordivBeRSI = rsi_bearCond ? bearColor : rsi_hiddenBearCond ? hiddenBearColor : noneColor
|
|
|
|
|
|
|
|
plot(
|
|
foundDivBRSI ? rsi_scale[lbR] : na,
|
|
offset=-lbR,
|
|
title="Regular Bullish",
|
|
linewidth=1,
|
|
color=colordivBRSI,
|
|
transp=0
|
|
)
|
|
plot(
|
|
foundDivBeRSI ? rsi_scale[lbR] : na,
|
|
offset=-lbR,
|
|
title="Regular Bullish",
|
|
linewidth=1,
|
|
color=colordivBeRSI,
|
|
transp=0
|
|
)
|
|
|