Professional Documents
Culture Documents
Ema + SMT MTF
Ema + SMT MTF
0 at
https://mozilla.org/MPL/2.0/
// Big thanks to AlbaTherium for orginal script
https://www.tradingview.com/script/nSSzkNji-AlbaTherium-Structure-mapping-v2-0/
// Author: Ma Bang Chu from https://t.me/wyckoffneverdie
//@version=5
indicator("聖杯 ver2", "聖杯 ver2", true, max_bars_back = 5000, max_labels_count =
500, max_lines_count = 500)
ATRFactor_ON_OF = input.bool(true,"Thiet lap gia tri theo tung TF", group = "👉
SmartTrail Settings")
ATRFactor_M5 = input.float(6, 'ATR Factor M5', group = "👉 SmartTrail
Settings" ,tooltip = "Thông số mặc định phù hợp đánh vàng",minval = 2, maxval = 10,
step = 0.5)
ATRFactor_M15 = input.float(5.7, 'ATR Factor M15', group = "👉 SmartTrail
Settings" ,tooltip = "Thông số mặc định phù hợp đánh vàng",minval = 2, maxval = 10,
step = 0.5)
ATRFactor_M30 = input.float(8, 'ATR Factor M30', group = "👉 SmartTrail
Settings" ,tooltip = "Thông số mặc định phù hợp đánh vàng",minval = 2, maxval = 10,
step = 0.5)
ATRFactor_H1 = input.float(6, 'ATR Factor H1', group = "👉 SmartTrail
Settings" ,tooltip = "Thông số mặc định phù hợp đánh vàng",minval = 2, maxval = 10,
step = 0.5)
ATRFactor_H4 = input.float(7, 'ATR Factor H4', group = "👉 SmartTrail
Settings" ,tooltip = "Thông số mặc định phù hợp đánh vàng",minval = 2, maxval = 10,
step = 0.5)
ATRFactor_D1 = input.float(7, 'ATR Factor D1', group = "👉 SmartTrail
Settings" ,tooltip = "Thông số mặc định phù hợp đánh vàng",minval = 2, maxval = 10,
step = 0.5)
smtColorfib1_up = input.color (color.rgb(0, 13, 255, 57), "smtColorfib1_up",
group="👉 SmartTrail Settings")
smtColorfib1_down = input.color (color.rgb(255, 0, 0, 50), "smtColorfib1_down",
group="👉 SmartTrail Settings")
smtColorfib2 = input.color (color.new(#73760d, 49), "smtColorfib2", group="👉
SmartTrail Settings")
smtColorfib3 = input.color (color.new(#73760d, 51), "smtColorfib3", group="👉
SmartTrail Settings")
fib1Level = 61.8
fib2Level = 78.6
fib3Level = 88.6
// drawWithLabel(price) =>
// // Khai báo biến cho nhãn
// var label_id = label.new(na, na, text="", color=color.rgb(33, 149, 243,
100), style=label.style_label_left, yloc=yloc.price)
// // Xóa nhãn nếu không phải là cây nến cuối cùng
// if not barstate.islast
// label.delete(label_id)
// // Tính chỉ số của cây nến cuối cùng
// last_candle_index = bar_index - ta.barssince(ta.change(time)) + 1
// // Đặt nhãn mới cho đường EMA tại cây nến cuối cùng
// if barstate.islast
// label_id := label.new(last_candle_index, price, text="EMA(" +
str.tostring(price) + ")", color=color.blue, style=label.style_label_left,
yloc=yloc.price)
// Function
Wild_ma(_src, _malength) =>
_wild = 0.0
_wild := nz(_wild[1]) + (_src - nz(_wild[1])) / _malength
_wild
TrendUp = Up68
TrendDown = Dn68
Trendtrade = 1
TrendUp := norm_c[1] > TrendUp[1] ? math.max(Up68, TrendUp[1]) : Up68
ex = 0.0
ex := ta.crossover(Trendtrade, 0) ? norm_h : ta.crossunder(Trendtrade, 0) ?
norm_l : Trendtrade == 1 ? math.max(ex[1], norm_h) : Trendtrade == -1 ?
math.min(ex[1], norm_l) : ex[1]
[ex,trail,Trendtrade]
smartTrailTiming = ((high >= trail) and (low <= trail)) or ((high >= f3) and (low
<= f3)) or ((high >= f2) and (low <= f2))
alertcondition(smartTrailTiming, title="Smart trail timing", message="Smart trail
timing")
//plot SMT HTF 1
[exHTF,trailHTF,TrendtradeHTF] = request.security(ticker.new(syminfo.prefix,
syminfo.ticker), multiTF1, CalculateSMT_MultiTF(multiTF1,getATRFactor(multiTF1)))
f2HTF = exHTF + (trailHTF - exHTF) * fib2Level / 100
f3HTF = exHTF + (trailHTF - exHTF) * fib3Level / 100
Fib1HTF = plot(ShowSmartTrailTF1 ?trailHTF:na, 'S/R - SIGNAL',
style=plot.style_line, color=TrendtradeHTF == 1 ? smtColorfib1_up : TrendtradeHTF
== -1 ? smtColorfib1_down : na,linewidth = 1,editable = false)
Fib2HTF = plot(ShowSmartTrailTF1 ?f2HTF:na, 'Ranger B', color=smtColorfib2)
Fib3HTF = plot(ShowSmartTrailTF1 ?f3HTF:na, 'Ranger C',color=smtColorfib3)
fill(Fib1HTF, Fib3HTF, color = trailHTF > f3HTF ? color.rgb(202, 39, 161, 63):
color.rgb(19, 46, 153, 72),title = 'Backgroud TF 1')
fill(Fib3HTF, Fib2HTF, color = trailHTF > f3HTF ? color.rgb(202, 39, 161, 87):
color.rgb(19, 46, 153, 87),title = 'Backgroud TF 1')
[exHTF2,trailHTF2,TrendtradeHTF2] = request.security(ticker.new(syminfo.prefix,
syminfo.ticker), multiTF2, CalculateSMT_MultiTF(multiTF2,getATRFactor(multiTF2)) )
f2HTF2 = exHTF2 + (trailHTF2 - exHTF2) * fib2Level / 100
f3HTF2 = exHTF2 + (trailHTF2 - exHTF2) * fib3Level / 100
Fib1HTF2 = plot(ShowSmartTrailTF2 ?trailHTF2:na, 'S/R - SIGNAL',
style=plot.style_line, color=TrendtradeHTF2 == 1 ? smtColorfib1_up : TrendtradeHTF2
== -1 ? smtColorfib1_down : na,linewidth = 1,editable = false)
Fib2HTF2 = plot(ShowSmartTrailTF2 ?f2HTF2:na, 'Ranger B', color=smtColorfib2)
Fib3HTF2 = plot(ShowSmartTrailTF2 ?f3HTF2:na, 'Ranger C',color=smtColorfib3)
fill(Fib1HTF2, Fib3HTF2, color = trailHTF2 > f3HTF2 ? color.rgb(206, 141, 21, 63):
color.rgb(21, 220, 220, 72),title = 'Backgroud TF 2')
fill(Fib3HTF2, Fib2HTF2, color = trailHTF2 > f3HTF2 ? color.rgb(206, 141, 21, 87):
color.rgb(21, 220, 220, 87),title = 'Backgroud TF 2')
///ema///
showEMA = input.bool(false, 'EMA 13 50 200 800 ON/OFF', inline = 'overlayLine5',
group = 'ON/OFF')
//alert
// BB start
// pivot
///pivot Add Start
ShowPivot = input.bool(false,'Show Pivot', inline = 'overlayLine8',group =
'ON/OFF')
AUTO = "Auto"
DAILY = "Daily"
WEEKLY = "Weekly"
MONTHLY = "Monthly"
QUARTERLY = "Quarterly"
YEARLY = "Yearly"
BIYEARLY = "Biyearly"
TRIYEARLY = "Triyearly"
QUINQUENNIALLY = "Quinquennially"
DECENNIALLY = "Decennially"
TRADITIONAL = "Traditional"
FIBONACCI = "Fibonacci"
WOODIE = "Woodie"
CLASSIC = "Classic"
DEMARK = "DM"
CAMARILLA = "Camarilla"
pivotX_open = float(na)
pivotX_open := nz(pivotX_open[1], open)
pivotX_high = float(na)
pivotX_high := nz(pivotX_high[1], high)
pivotX_low = float(na)
pivotX_low := nz(pivotX_low[1], low)
pivotX_prev_open = float(na)
pivotX_prev_open := nz(pivotX_prev_open[1])
pivotX_prev_high = float(na)
pivotX_prev_high := nz(pivotX_prev_high[1])
pivotX_prev_low = float(na)
pivotX_prev_low := nz(pivotX_prev_low[1])
pivotX_prev_close = float(na)
pivotX_prev_close := nz(pivotX_prev_close[1])
get_pivot_resolution() =>
resolution = "M"
if pivot_time_frame == AUTO
if timeframe.isintraday
resolution := timeframe.multiplier <= 15 ? "D" : "W"
else if timeframe.isweekly or timeframe.ismonthly
resolution := "12M"
else if pivot_time_frame == DAILY
resolution := "D"
else if pivot_time_frame == WEEKLY
resolution := "W"
else if pivot_time_frame == MONTHLY
resolution := "M"
else if pivot_time_frame == QUARTERLY
resolution := "3M"
else if pivot_time_frame == YEARLY or pivot_time_frame == BIYEARLY or
pivot_time_frame == TRIYEARLY or pivot_time_frame == QUINQUENNIALLY or
pivot_time_frame == DECENNIALLY
resolution := "12M"
resolution
traditional() =>
pivotX_Median = (pivotX_prev_high + pivotX_prev_low + pivotX_prev_close) / 3
array.push(p, pivotX_Median)
array.push(r1, pivotX_Median * 2 - pivotX_prev_low)
array.push(s1, pivotX_Median * 2 - pivotX_prev_high)
array.push(r2, pivotX_Median + 1 * (pivotX_prev_high - pivotX_prev_low))
array.push(s2, pivotX_Median - 1 * (pivotX_prev_high - pivotX_prev_low))
fibonacci() =>
pivotX_Median = (pivotX_prev_high + pivotX_prev_low + pivotX_prev_close) / 3
pivot_range = pivotX_prev_high - pivotX_prev_low
array.push(p, pivotX_Median)
array.push(r1, pivotX_Median + 0.382 * pivot_range)
array.push(s1, pivotX_Median - 0.382 * pivot_range)
array.push(r2, pivotX_Median + 0.618 * pivot_range)
array.push(s2, pivotX_Median - 0.618 * pivot_range)
woodie() =>
pivotX_Woodie_Median = (pivotX_prev_high + pivotX_prev_low + pivotX_open * 2)/4
pivot_range = pivotX_prev_high - pivotX_prev_low
array.push(p, pivotX_Woodie_Median)
array.push(r1, pivotX_Woodie_Median * 2 - pivotX_prev_low)
array.push(s1, pivotX_Woodie_Median * 2 - pivotX_prev_high)
array.push(r2, pivotX_Woodie_Median + 1 * pivot_range)
array.push(s2, pivotX_Woodie_Median - 1 * pivot_range)
classic() =>
pivotX_Median = (pivotX_prev_high + pivotX_prev_low + pivotX_prev_close)/3
pivot_range = pivotX_prev_high - pivotX_prev_low
array.push(p, pivotX_Median)
array.push(r1, pivotX_Median * 2 - pivotX_prev_low)
array.push(s1, pivotX_Median * 2 - pivotX_prev_high)
array.push(r2, pivotX_Median + 1 * pivot_range)
array.push(s2, pivotX_Median - 1 * pivot_range)
demark() =>
pivotX_Demark_X = pivotX_prev_high + pivotX_prev_low * 2 + pivotX_prev_close
if pivotX_prev_close == pivotX_prev_open
pivotX_Demark_X := pivotX_prev_high + pivotX_prev_low + pivotX_prev_close *
2
if pivotX_prev_close > pivotX_prev_open
pivotX_Demark_X := pivotX_prev_high * 2 + pivotX_prev_low +
pivotX_prev_close
array.push(p, pivotX_Demark_X / 4)
array.push(r1, pivotX_Demark_X / 2 - pivotX_prev_low)
array.push(s1, pivotX_Demark_X / 2 - pivotX_prev_high)
camarilla() =>
pivotX_Median = (pivotX_prev_high + pivotX_prev_low + pivotX_prev_close) / 3
pivot_range = pivotX_prev_high - pivotX_prev_low
array.push(p, pivotX_Median)
array.push(r1, pivotX_prev_close + pivot_range * 1.1 / 12.0)
array.push(s1, pivotX_prev_close - pivot_range * 1.1 / 12.0)
array.push(r2, pivotX_prev_close + pivot_range * 1.1 / 6.0)
array.push(s2, pivotX_prev_close - pivot_range * 1.1 / 6.0)
resolution = get_pivot_resolution()
is_change_years = false
if custom_years_divisor > 0 and ta.change(time(resolution))
is_change_years := year % custom_years_divisor == 0
var is_change = false
var uses_current_bar = timeframe.isintraday and kind == WOODIE
var change_time = int(na)
is_time_change = (ta.change(time(resolution)) and custom_years_divisor == -1) or
is_change_years
if is_time_change
change_time := time
if kind == TRADITIONAL
traditional()
else if kind == FIBONACCI
fibonacci()
else if kind == WOODIE
woodie()
else if kind == CLASSIC
classic()
else if kind == DEMARK
demark()
else if kind == CAMARILLA
camarilla()
for i = 0 to array.size(lines) - 1
if array.size(lines) > 0
line.delete(array.shift(lines))
if array.size(lines) > 0
label.delete(array.shift(labelsPivot))
for i = 0 to array.size(arr_time) - 2
if array.size(p) > 0 and p_show
draw_line(i, p, p_color)
draw_label(i, array.get(p, i), "P", p_color)
if array.size(r1) > 0 and s1r1_show
draw_line(i, r1, s1r1_color)
draw_label(i, array.get(r1, i), "R1", s1r1_color)
if array.size(s1) > 0 and s1r1_show
draw_line(i, s1, s1r1_color)
draw_label(i, array.get(s1, i), "S1", s1r1_color)
//Session C
showSession = input(false, 'Show Session Asian', group = 'ON/OFF', inline =
'overlayLine5')
//Timezones
tz_incr = input.int(0, 'UTC (+/-)', group = 'Timezone', group = "EntryTime")
use_exchange = input(false, 'Use Exchange Timezone', group = 'EntryTime')
//Ranges Options
bg_transp = input.float(90, 'Range Area Transparency', group = 'Ranges Settings')
show_outline = input(false, 'Range Outline', group = 'Ranges Settings')
show_txt = input(false, 'Range Label', group = 'Ranges Settings')
//-----------------------------------------------------------------------------}
//Functions
//-----------------------------------------------------------------------------{
n = bar_index
sma
var float y1 = na
var float y2 = na
var float stdev = na
var float r2 = na
y1 := 4 * sma - 3 * wma
y2 := 3 * wma - 2 * sma
//Session Vwap
get_vwap(session) =>
var float num = na
var float den = na
[num, den]
//Set line
set_line(session, y1, y2, session_css)=>
var line tl = na
if show_txt
lbl := label.new(t, max, session_name
, xloc = xloc.bar_time
, textcolor = session_css
, style = label.style_label_down
, color = color.new(color.white, 100)
, size = size.tiny)
box.set_top(bx, max)
box.set_rightbottom(bx, n, min)
if show_txt
label.set_xy(lbl, int(math.avg(t, time)), max)
//-----------------------------------------------------------------------------}
//Sessions
//-----------------------------------------------------------------------------{
tf = timeframe.period
//-----------------------------------------------------------------------------}
//Overlays
//-----------------------------------------------------------------------------{
//Ranges
if show_sesc and sesc_range and showSession
[max, min] = get_range(is_sesc, sesc_txt, sesc_css)
max_sesc := max
min_sesc := min
//-----------------------------------------------------------------------------}
//Plots
//-----------------------------------------------------------------------------{
//Plot max/min
plot(sesc_maxmin ? max_sesc : na, 'Session C Maximum', sesc_css, 1,
plot.style_linebr)
plot(sesc_maxmin ? min_sesc : na, 'Session C Minimum', sesc_css, 1,
plot.style_linebr)
//--------------------------------------------------------------------
// Inputs
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// Variables declarations
//--------------------------------------------------------------------
f_draw(bool _isNew, float _h, float _l, int _lookback, color _color, string _style,
int _width) =>
var line _high = na
var line _low = na
var _highs = array.new_line()
var _lows = array.new_line()
_end = i_areHeadsEnabled ? f_getRightBarIndex() : bar_index
if _isNew
line.set_x2(_high, _end)
line.set_x2(_low, _end)
if i_hasGradient
_size = array.size(_highs)
if _size > 1
for i = 0 to _size - 1
_c = color.from_gradient(i, 0, _size - 1, color.new(_color,
100), color.new(_color, 0))
line.set_color(array.get(_highs, i), _c)
line.set_color(array.get(_lows, i), _c)
//--------------------------------------------------------------------
// Logic
//--------------------------------------------------------------------
// Plot invisible highs and lows for displaying their last values in `status line`,
`scale`, `data window` as well for providing defaults alert conditions
swing_length = input.int(10, title = 'Swing High/Low Length', group = "👉 SUPPLY AND
DEMAND", minval = 1, maxval = 50)
zigzag_color = input.color(color.new(#000000,0), title = 'Zig Zag', group = 'Visual
Settings', inline = '9')
Zigzag = input.bool(false, ' Show Zigzag ON/OFF', inline = 'overlayLine7', group =
'ON/OFF')
///////////////////////////////////////// ZIGZAG HIGH
LOW //////////////////////////
// 0. Inputs
// 1. Types
// 2. Switches
// 3. Variables and arrays
// 4. Custom Functions
// 5. Execution
// 6. Constructs
////////////////////////////
////////////////// REV ZONES BB ////////////////////
reversalZone = input.bool(false, "Reversal Zones ", inline =
'overlayLine8', group = 'ON/OFF', tooltip = 'Hiệu quả nhất khi sideway')