Win 99
Win 99
0 at
https://mozilla.org/MPL/2.0/
// © binancash
//@version=5
indicator("Snag - NEW SWING FAST", overlay=true)
f_nDecimals(_in) =>
n = int(na), s = str.tostring(_in), p = str.pos(s, ".")
n := na(str.tonumber(s)) ? int(na) : na(p) ? 0 :
str.length(str.substring(s, p + 1))
_n = f_nDecimals(close)
// Trend Up Strong
// Close Cross Up EMA 13, or Close Cross Up EMA 50 or Close Cross Up EMA 200
// Mark as Begin Up Trend
// Wait for EMA 13 Cross Up EMA 48 🡪 Confirm Strong Uptrend 🡪 BUY
// EMA 48 CROSS UP EMA 200 🡪 STRONGER UPTREND
// Trend Down Strong
// Close Cross Down EMA 13, or Close Cross Down EMA 50 or Close Cross Down EMA 200
// Mark as Begin Down Trend
// Wait for EMA 13 Cross Down EMA 48 🡪 Confirm Strong Downtrend 🡪 SELL
// EMA 48 CROSS DOWN EMA 200 🡪 STRONGER DOWNTREND
if crossUpWMA48_200
price_wmacrossdown_arr := array.new_float()
array.push(price_wmacrossup_arr, close)
else if crossDownWMA48_200
price_wmacrossup_arr := array.new_float()
array.push(price_wmacrossdown_arr, close)
//price_up = 0.0
//price_down = 0.0
//if array.size(price_wmacrossup_arr) > 0
// price_up := array.get(price_wmacrossup_arr, array.size(price_wmacrossup_arr)-
1)
//else if array.size(price_wmacrossdown_arr) > 0
// price_down := array.get(price_wmacrossdown_arr,
array.size(price_wmacrossdown_arr)-1)
txtMarkTrend = ''
txtOrder = 'N/A'
if isUpTrend
if crossUpWMA13_48
trendUp := 1
trendDown := 0
if crossUpWMA48_200
trendUp := 2
trendDown := 0
if isDownTrend
if crossDownWMA13_48
trendUp := 0
trendDown := 1
if crossDownWMA48_200
trendUp := 0
trendDown := 2
if isUpTrend
txtMarkTrend := 'Begin Up Trend'
if trendUp == 1
txtMarkTrend := 'Confirm Strong Uptrend'
txtOrder := 'BUY'
else if trendUp == 2
txtMarkTrend := 'STRONGER UPTREND'
txtOrder := 'BUY'
else if isDownTrend
txtMarkTrend := 'Begin Down Trend'
if trendDown == 1
txtMarkTrend := 'Confirm Strong Downtrend'
txtOrder := 'SELL'
else if trendDown == 2
txtMarkTrend := 'STRONGER DOWNTREND'
txtOrder := 'SELL'
// setting % period
pctTop = 5.0
pctBottom = -5.0
if str.format("{0}", timeframe.period) == '5'
pctTop := 2.5
pctBottom := -2.5
txtBottom = ''
txtTop = ''
is_bottom_wma200 = false
is_top_wma200 = false
pct_low_wma200 = 0.0
pct_high_wma200 = 0.0
if low < wma200
pct_low_wma200 := f_RoundUp((low - wma200)/wma200*100, 2)
if pct_low_wma200 <= pctBottom
txtBottom := 'BOTTOM'
is_bottom_wma200 := true
else if high > wma200
pct_high_wma200 := f_RoundUp((high - wma200)/wma200*100, 2)
if trendUp == 1 or trendUp == 2
time_wmacrossdown_arr := array.new_int()
if array.size(time_wmacrossup_arr) == 0
array.push(time_wmacrossup_arr, time)
else if trendDown == 1 or trendDown == 2
time_wmacrossup_arr := array.new_int()
if array.size(time_wmacrossdown_arr) == 0
array.push(time_wmacrossdown_arr, time)
is_alert_wmacrossup = false
is_alert_wmacrossdown = false
if array.size(time_wmacrossup_arr) > 0
if time == array.get(time_wmacrossup_arr, array.size(time_wmacrossup_arr)-1)
is_alert_wmacrossup := true
array.push(has_wmacrossup_arr, true)
else if array.size(time_wmacrossdown_arr) > 0
if time == array.get(time_wmacrossdown_arr, array.size(time_wmacrossdown_arr)-
1)
is_alert_wmacrossdown := true
array.push(has_wmacrossdown_arr, true)
///////////////////////////////////////////////////////////////////////////////////
//////////
// alert TOP - BOTTOM START
var time_top_arr = array.new_int()
var time_bottom_arr = array.new_int()
if is_top_wma200
time_bottom_arr := array.new_int()
if array.size(time_top_arr) == 0
array.push(time_top_arr, time)
else if is_bottom_wma200
time_top_arr := array.new_int()
if array.size(time_bottom_arr) == 0
array.push(time_bottom_arr, time)
is_alert_top = false
is_alert_bottom = false
if array.size(time_top_arr) > 0
if time == array.get(time_top_arr, array.size(time_top_arr)-1)
is_alert_top := true
array.push(has_top_arr, true)
else if array.size(time_bottom_arr) > 0
if time == array.get(time_bottom_arr, array.size(time_bottom_arr)-1)
is_alert_bottom := true
array.push(has_bottom_arr, true)
f_resInMinutes() =>
if stockschart or futureschart or indexchart
_resInMinutes = timeframe.multiplier * (timeframe.isseconds ? 1. / 60 :
timeframe.isminutes ? 1. : timeframe.isdaily ? 60. * 16 : timeframe.isweekly ? 60.
* 7 * 5 : timeframe.ismonthly ? 60. * 7 * 21 : na)
_resInMinutes
else
_resInMinutes = timeframe.multiplier * (timeframe.isseconds ? 1. / 60 :
timeframe.isminutes ? 1. : timeframe.isdaily ? 60. * 24 : timeframe.isweekly ? 60.
* 24 * 7 : timeframe.ismonthly ? 60. * 24 * 30.4375 : na)
_resInMinutes
f_tfResInMinutes(_res) =>
request.security(syminfo.tickerid, _res, f_resInMinutes())
TF1InMinutes = f_tfResInMinutes(TF1)
currentTFInMinutes = f_resInMinutes()
chartOnLowerTF1 = currentTFInMinutes <= TF1InMinutes
TF1_CalcFractalUp() =>
TF1_FractalUp = 0.0
TF1_FractalUp := TF1_Up ? TF1_High[3] : TF1_FractalUp[1]
TF1_FractalUp
TF1_CalcFractalDown() =>
TF1_FractalDown = 0.0
TF1_FractalDown := TF1_Down ? TF1_Low[3] : TF1_FractalDown[1]
TF1_FractalDown
bottomsupport = close > TF1_SupportZone[0] and close > close[1] and rsi > rsi[1] +
10
plotshape(bottomsupport, title="Big Bottom", style=shape.xcross,
location=location.belowbar, color=color.yellow, size=size.tiny)
if bigdrop
time_exitdown_arr := array.new_int()
if array.size(time_exitup_arr) == 0
array.push(time_exitup_arr, time)
else if bottomsupport
time_exitup_arr := array.new_int()
if array.size(time_exitdown_arr) == 0
array.push(time_exitdown_arr, time)
is_alert_exitup = false
is_alert_exitdown = false
fast_length = 12
slow_length = 26
signal_length = 9
fast_ma = ta.ema(close, fast_length)
slow_ma = ta.ema(close, slow_length)
macd = fast_ma - slow_ma
signal = ta.ema(macd, signal_length)
macd_crossover = ta.crossover(macd, -40)
var bool is_macd_corssover = false
var bool is_macd_corssunder = false
if macd_crossover
is_macd_corssover := true
is_macd_corssunder := false
// UPTREND
bool check_gap = input.bool(title = "Gap Size Filter", defval = true)
float gap = input.float(title = "Gap Size", defval = 0.05, minval
= 0.01, maxval = 0.5)
bool check_strong_trend = input.bool(title = "Strong Trend Filter", defval =
true)
bool check_upward_trend = input.bool(title = "Upward Trend Filter", defval =
true)
// -- inline function(s)
uptrend(opens, closes, len, total) =>
count = 0
for i = 0 to (len - 1)
if (opens[i] < closes[i])
count := count + 1
flag = count >= total
flag
// Bullish
length = input(21)
//------------------------------------------------------------------------------
o = open[length],h = high[length]
l = low[length],c = close[length]
//------------------------------------------------------------------------------
ph = ta.pivothigh(close,length,length)
pl = ta.pivotlow(open,length,length)
valH = ta.valuewhen(ph,c,0)
valL = ta.valuewhen(pl,c,0)
valpH = ta.valuewhen(ph,c,1)
valpL = ta.valuewhen(pl,c,1)
//------------------------------------------------------------------------------
d = math.abs(c - o)
hammer = pl and math.min(o,c) - l > d and h - math.max(c,o) < d
ihammer = pl and h - math.max(c,o) > d and math.min(c,o) - l < d
bulleng = c > o and c[1] < o[1] and c > o[1] and o < c[1]
hanging = ph and math.min(c,o) - l > d and h - math.max(o,c) < d
shooting = ph and h - math.max(o,c) > d and math.min(c,o) - l < d
beareng = c > o and c[1] < o[1] and c > o[1] and o < c[1]
//------------------------------------------------------------------------------
//Descriptions
//------------------------------------------------------------------------------
hammer_ = "The hammer candlestick pattern is formed of a short body with a long
lower wick, and is found at the bottom of a downward trend."
+ "\n" + "\n A hammer shows that although there were selling pressures during the
day, ultimately a strong buying pressure drove the price back up."
ihammer_ = "The inverted hammer is a similar pattern than the hammer pattern. The
only difference being that the upper wick is long, while the lower wick is short."
+ "\n" + "\n It indicates a buying pressure, followed by a selling pressure that
was not strong enough to drive the market price down. The inverse hammer suggests
that buyers will soon have control of the market."
bulleng_ = "The bullish engulfing pattern is formed of two candlesticks. The first
candle is a short red body that is completely engulfed by a larger green candle"
+ "\n" + "\n Though the second day opens lower than the first, the bullish market
pushes the price up, culminating in an obvious win for buyers"
hanging_ = "The hanging man is the bearish equivalent of a hammer; it has the same
shape but forms at the end of an uptrend."
+ "\n" + "It indicates that there was a significant sell-off during the day, but
that buyers were able to push the price up again. The large sell-off is often seen
as an indication that the bulls are losing control of the market."
shotting_ = "The shooting star is the same shape as the inverted hammer, but is
formed in an uptrend: it has a small lower body, and a long upper wick."
+ "\n" + "Usually, the market will gap slightly higher on opening and rally to an
intra-day high before closing at a price just above the open – like a star falling
to the ground."
beareng_ = "A bearish engulfing pattern occurs at the end of an uptrend. The first
candle has a small green body that is engulfed by a subsequent long red candle."
+ "\n" + "It signifies a peak or slowdown of price movement, and is a sign of an
impending market downturn. The lower the second candle goes, the more significant
the trend is likely to be."
//------------------------------------------------------------------------------
n = bar_index
label lbl = na
H = valH > valpH ? "HH" : valH < valpH ? "LH" : na
L = valL < valpL ? "LL" : valL > valpL ? "HL" : na
txt = hammer ? "Hammer" : ihammer ? "Inverse Hammer" :
bulleng ? "Bullish Engulfing" : hanging ? "Hanging Man" :
shooting ? "Shooting Star" : beareng ? "Bearish Engulfing" : "None"
des = hammer ? hammer_ : ihammer ? ihammer_ :
bulleng ? bulleng_ : hanging ? hanging_ :
shooting ? shotting_ : beareng ? beareng_ : ""
if ph
lbl := label.new(n[length],math.max(c,o),H + "\n" + txt,color=#ff1100,
style=label.style_label_down,textcolor=color.white,tooltip=des)
label.delete(lbl[1])
else if pl
lbl := label.new(n[length],math.min(c,o),L + "\n" + txt,color=#2157f3,
style=label.style_label_up,textcolor=color.white,tooltip=des)
label.delete(lbl[1])
/////////////////////////////////////////////////////////////
// pattern DOJI - HAMARI
//
pip = syminfo.mintick
hl_range = srchigh - srclow
dojiBull = not sHm and not haramiBull and not haramiBear and lbBull and dojiBu
dojiBear = not sHm and not haramiBull and not haramiBear and lbBear and dojiBe
//
//plotshape(haramiBear and sname?srchigh:na,title="Bearish Harami",text='Bearish\
nHarami',color=color.red, style=shape.arrowdown,location=location.abovebar)
//plotshape(haramiBear and cbar?math.max(srcopen,srcclose):na,title="Bear Colour
Harami",color=color.red,
style=shape.circle,location=location.absolute,size=size.normal)
//
//plotshape(haramiBull and sname?srclow:na,title="Bullish Harami",text='Bullish\
nHarami',color=color.green, style=shape.arrowup,location=location.belowbar)
//plotshape(haramiBull and cbar?math.max(srcopen,srcclose):na,title="Bull Colour
Harami",color=color.green,
style=shape.circle,location=location.absolute,size=size.normal)
//
//plotshape(dojiBear and sname?srchigh:na,title="Bearish Doji",text='Bearish\
nDoji',color=color.fuchsia, style=shape.arrowdown,location=location.abovebar)
//plotshape(dojiBear and cbar?math.max(srcopen,srcclose):na,title="Bear Colour
Doji",color=color.fuchsia,
style=shape.circle,location=location.absolute,size=size.normal)
//
//plotshape(dojiBull and sname?srclow:na,title="Bullish Doji",text='Bullish\
nDoji',color=color.aqua, style=shape.arrowup,location=location.belowbar)
//plotshape(dojiBull and cbar?math.max(srcopen,srcclose):na,title="Bull Colour
Doji",color=color.aqua,
style=shape.circle,location=location.absolute,size=size.normal)
//
//plotshape(na(baralert[1])?na:baralert[1],
transp=0,style=shape.circle,location=location.bottom, offset=-1,title="Bar Alert
Confirmed",
// color=bcolor[1]==1 ? green : bcolor[1]==2? red : bcolor[1]==3? aqua :
bcolor[1]==4? fuchsia : na)
/////////////////////////////////////////////////////////////
src = close
di = (6 - 1.0) / 2.0 + 1.0
c1 = 2 / (di + 1.0)
c2 = 1 - c1
c3 = 3.0 * (0.4 * 0.4 + 0.4 * 0.4 * 0.4)
c4 = -3.0 * (2.0 * 0.4 * 0.4 + 0.4 + 0.4 * 0.4 * 0.4)
c5 = 3.0 * 0.4 + 1.0 + 0.4 * 0.4 * 0.4 + 3.0 * 0.4 * 0.4
var float i1 = na
var float i2 = na
var float i3 = na
var float i4 = na
var float i5 = na
var float i6 = na
i1 := c1 * src + c2 * nz(i1[1])
i2 := c1 * i1 + c2 * nz(i2[1])
i3 := c1 * i2 + c2 * nz(i3[1])
i4 := c1 * i3 + c2 * nz(i4[1])
i5 := c1 * i4 + c2 * nz(i5[1])
i6 := c1 * i5 + c2 * nz(i6[1])
cto = -0.4 * 0.4 * 0.4 * i6 + c3 * i5 + c4 * i4 + c5 * i3
ema3 = ta.ema(close, 3)
long = (close > cto and close[1] < cto[1] and close > close[1] or close[1] > cto[1]
and close > close[1] and close [1] < close[2] and close > ema3) ? true : false
profit_long = close < close[1] and low < ema3 and close[1] > ema3[1] and close[2] >
ema3[2]
short = (close < cto and close[1] > cto[1] and close < close[1] or close[1] <
cto[1] and close < close[1] and close [1] > close[2] and close < ema3) ? true :
false
profit_short = close > close[1] and high > ema3 and close[1] < ema3[1] and close[2]
< ema3[2]
gain1 = math.abs(close-close[1])
gain2 = math.abs(close[1]-close[2])
pattern_call = close[1]<close[2] and close[2]<close[3] and low <= low[1] and close
>= close[1]and (gain1-gain2)/gain2 >= 0.5
plotshape(pattern_call?low:na, title = "Inside pattern CALL", location =
location.belowbar, color = color.green, style = shape.labelup, text = "IC",
textcolor=color.white)
if barstate.islast
var table panel = table.new("bottom_right", 6, 30)