-
W posted in the group AI Trading Lab
PineScript for TradingView
HAMA Cloud//@version=6
indicator(‘NSDT HAMA Candles v6 + Trend Cloud’, overlay = true)////////////////////
// FUNKTSIOONID
////////////////////
f_c_gradientAdvDecPro(_source, _center, _steps, _c_bearWeak, _c_bearStrong, _c_bullWeak, _c_bullStrong) =>
var float _qtyAdvDec = 0.
float _maxSteps = math.max(1, _steps)
bool _xUp = ta.crossover(_source, _center)
bool _xDn = ta.crossunder(_source, _center)
float _chg = ta.change(_source)
bool _up = _chg > 0
bool _dn = _chg _center
bool _srcBear = _source
switch type
‘EMA’ => ta.ema(src, len)
‘SMA’ => ta.sma(src, len)
‘WMA’ => ta.wma(src, len)
=> naf_kama_vb(float src, int len) =>
float xvnoise = math.abs(src – src[1])
float nsignal = math.abs(src – src[len])
float nnoise = math.sum(xvnoise, len)
float nefratio = nnoise != 0 ? nsignal / nnoise : 0.0
float nsmooth = math.pow(nefratio * (0.666 – 0.0645) + 0.0645, 2)
var float nAMA = 0.0
nAMA := nz(nAMA[1]) + nsmooth * (src – nz(nAMA[1]))
nAMA////////////////////
// ══ HAMA KÜÜNLAD ══
////////////////////
var string GRP_C = ‘══ HAMA KÜÜNLAD ══’OpenLength = input.int(25, minval=1, title=’Open Pikkus’, inline=’o’, group=GRP_C)
OpenType = input.string(‘EMA’, title=’/ Tüüp’, options=[‘EMA’,’SMA’,’WMA’], inline=’o’, group=GRP_C)
CloseLength = input.int(20, minval=1, title=’Close Pikkus’, inline=’c’, group=GRP_C)
CloseType = input.string(‘EMA’, title=’/ Tüüp’, options=[‘EMA’,’SMA’,’WMA’], inline=’c’, group=GRP_C)c_use_grad = input.bool(false, title=’Kasuta Gradienti’, group=GRP_C)
c_grad_steps = input.int(5, minval=2, maxval=20, title=’Gradiendi Sammud’, group=GRP_C)
c_bull = input.color(color.rgb(0, 200, 100), title=’Tõus ▲’, inline=’cc’, group=GRP_C)
c_bear = input.color(color.rgb(220, 50, 50), title=’Langus ▼’, inline=’cc’, group=GRP_C)
c_neutral = input.color(color.rgb(255,255,0,0), title=’Neutraalne’, group=GRP_C)////////////////////
// ══ HAMA BARCOLOR ══
////////////////////
var string GRP_B = ‘══ HAMA BARCOLOR ══’b_enable = input.bool(true, title=’Värvid baarid’, group=GRP_B)
b_use_grad = input.bool(false, title=’Kasuta Gradienti’, group=GRP_B)
b_grad_steps = input.int(5, minval=2, maxval=20, title=’Gradiendi Sammud’, group=GRP_B)
b_bull = input.color(color.rgb(0, 200, 100), title=’Tõus ▲’, inline=’bb’, group=GRP_B)
b_bear = input.color(color.rgb(220, 50, 50), title=’Langus ▼’, inline=’bb’, group=GRP_B)
b_neutral = input.color(color.rgb(255,255,0,0), title=’Neutraalne’, group=GRP_B)////////////////////
// ══ HAMA MA JOON ══
////////////////////
var string GRP_M = ‘══ HAMA MA JOON ══’LengthMA = input.int(55, minval=1, title=’Pikkus’, inline=’ma’, group=GRP_M)
MAType = input.string(‘WMA’, title=’/ Tüüp’, options=[‘EMA’,’SMA’,’WMA’], inline=’ma’, group=GRP_M)
MASource = input.source(hl2, title=’Allikas’, group=GRP_M)
ma_width = input.int(2, minval=1, maxval=5, title=’Paksus’, group=GRP_M)
ma_use_grad = input.bool(false, title=’Kasuta Gradienti’, group=GRP_M)
ma_grad_steps = input.int(5, minval=2, maxval=20, title=’Gradiendi Sammud’, group=GRP_M)
ma_bull = input.color(color.rgb(0, 200, 255), title=’Tõus ▲’, inline=’mc’, group=GRP_M)
ma_bear = input.color(color.rgb(255, 100, 200), title=’Langus ▼’, inline=’mc’, group=GRP_M)
ma_neutral = input.color(color.rgb(255,255,0,0), title=’Neutraalne’, group=GRP_M)////////////////////
// ══ 9 EMA ══
////////////////////
var string GRP_E9 = ‘══ 9 EMA ══’
show_ema9 = input.bool(true, title=’Näita’, group=GRP_E9)
ema9_color = input.color(color.rgb(255, 165, 0), title=’Värv’, inline=’e9′, group=GRP_E9)
ema9_width = input.int(1, minval=1, maxval=5, title=’Paksus’, inline=’e9′, group=GRP_E9)////////////////////
// ══ 200 EMA ══
////////////////////
var string GRP_E200 = ‘══ 200 EMA ══’
show_ema200 = input.bool(true, title=’Näita’, group=GRP_E200)
ema200_color = input.color(color.rgb(255, 255, 255), title=’Värv’, inline=’e200′, group=GRP_E200)
ema200_width = input.int(2, minval=1, maxval=5, title=’Paksus’, inline=’e200′, group=GRP_E200)////////////////////
// ══ MTF 21 EMA ══
////////////////////
var string GRP_MTF = ‘══ MTF 21 EMA (ainult 15M) ══’
show_mtf = input.bool(true, title=’Näita’, group=GRP_MTF)
mtf_h1_color = input.color(color.rgb(0, 200, 255), title=’H1 Värv’, inline=’h1′, group=GRP_MTF)
mtf_h1_width = input.int(2, minval=1, maxval=5, title=’Paksus’, inline=’h1′, group=GRP_MTF)
mtf_h4_color = input.color(color.rgb(255, 0, 200), title=’H4 Värv’, inline=’h4′, group=GRP_MTF)
mtf_h4_width = input.int(2, minval=1, maxval=5, title=’Paksus’, inline=’h4′, group=GRP_MTF)////////////////////
// ══ TREND CLOUD ══
////////////////////
var string GRP_TC = ‘══ TREND CLOUD ══’
tc_enable = input.bool(true, title=’Näita Trend Cloud’, group=GRP_TC)
tc_body_enable = input.bool(true, title=’Näita Fill’, group=GRP_TC)
tc_slope_color = input.bool(true, title=’Värv vastavalt suunale’, group=GRP_TC)
glow_tc_enable = input.bool(true, title=’Glow efekt’, group=GRP_TC)
tc_base_width = input.int(3, minval=1, maxval=5, title=’Base Paksus’, group=GRP_TC)
tc_bull_color = input.color(color.rgb(0, 255, 0), title=’Tõusev’, inline=’tcc’, group=GRP_TC)
tc_bear_color = input.color(color.rgb(255, 0, 0), title=’Langev’, inline=’tcc’, group=GRP_TC)
tc_neut_color = input.color(color.rgb(128,128,128), title=’Neutraalne’, group=GRP_TC)////////////////////
// ARVUTUSED — HAMA
////////////////////
float ATR14 = ta.atr(14)// Gradient generaatorid igaühele eraldi
grad_ma_base = ta.wma(close, 55)col_candle = f_c_gradientAdvDecPro(grad_ma_base, ta.ema(grad_ma_base,3), c_grad_steps, c_neutral, c_bear, c_neutral, c_bull)
col_bar = f_c_gradientAdvDecPro(grad_ma_base, ta.ema(grad_ma_base,3), b_grad_steps, b_neutral, b_bear, b_neutral, b_bull)
col_ma = f_c_gradientAdvDecPro(grad_ma_base, ta.ema(grad_ma_base,3), ma_grad_steps, ma_neutral, ma_bear, ma_neutral, ma_bull)MA1 = calcMA(MAType, MASource, LengthMA)
CandleOpen = calcMA(OpenType, (open[1] + close[1]) / 2, OpenLength)
CandleHigh = ta.ema(math.max(high, close), 20)
CandleLow = ta.ema(math.min(low, close), 20)
CandleClose = calcMA(CloseType, (open + high + low + close) / 4, CloseLength)bool is_bull_bar = CandleOpen > CandleOpen[1]
// Lõplikud värvid — gradient või fikseeritud
color final_candle = c_use_grad ? col_candle : (is_bull_bar ? c_bull : c_bear)
color final_bar = b_use_grad ? col_bar : (is_bull_bar ? b_bull : b_bear)
color final_ma = ma_use_grad ? col_ma : (MA1 > MA1[1] ? ma_bull : ma_bear)////////////////////
// ARVUTUSED — EMA-d
////////////////////
EMA9 = ta.ema(close, 9)
EMA200 = ta.ema(close, 200)
ema21_h1 = request.security(syminfo.tickerid, ’60’, ta.ema(close, 21))
ema21_h4 = request.security(syminfo.tickerid, ‘240’, ta.ema(close, 21))
is_15m = timeframe.period == ’15’////////////////////
// ARVUTUSED — TREND CLOUD
////////////////////
int TC_BASE_LEN = 100
float TC_MULT = 10.0
float tc_ohlc4 = (open + high + low + close) / 4.0float tc_k05 = f_kama_vb(tc_ohlc4, 5), float tc_k10 = f_kama_vb(tc_ohlc4, 10)
float tc_k15 = f_kama_vb(tc_ohlc4, 15), float tc_k20 = f_kama_vb(tc_ohlc4, 20)
float tc_k25 = f_kama_vb(tc_ohlc4, 25), float tc_k30 = f_kama_vb(tc_ohlc4, 30)
float tc_k35 = f_kama_vb(tc_ohlc4, 35), float tc_k40 = f_kama_vb(tc_ohlc4, 40)
float tc_k45 = f_kama_vb(tc_ohlc4, 45), float tc_k50 = f_kama_vb(tc_ohlc4, 50)
float tc_k55 = f_kama_vb(tc_ohlc4, 55), float tc_k60 = f_kama_vb(tc_ohlc4, 60)
float tc_k65 = f_kama_vb(tc_ohlc4, 65), float tc_k70 = f_kama_vb(tc_ohlc4, 70)
float tc_k75 = f_kama_vb(tc_ohlc4, 75), float tc_k80 = f_kama_vb(tc_ohlc4, 80)
float tc_k85 = f_kama_vb(tc_ohlc4, 85), float tc_k90 = f_kama_vb(tc_ohlc4, 90)
float tc_k100 = f_kama_vb(tc_ohlc4, TC_BASE_LEN)float tc_total_dist =
(tc_k05-tc_k10)/tc_k10 + (tc_k10-tc_k15)/tc_k15 + (tc_k15-tc_k20)/tc_k20 +
(tc_k20-tc_k25)/tc_k25 + (tc_k25-tc_k30)/tc_k30 + (tc_k30-tc_k35)/tc_k35 +
(tc_k35-tc_k40)/tc_k40 + (tc_k40-tc_k45)/tc_k45 + (tc_k45-tc_k50)/tc_k50 +
(tc_k50-tc_k55)/tc_k55 + (tc_k55-tc_k60)/tc_k60 + (tc_k60-tc_k65)/tc_k65 +
(tc_k65-tc_k70)/tc_k70 + (tc_k70-tc_k75)/tc_k75 + (tc_k75-tc_k80)/tc_k80 +
(tc_k80-tc_k85)/tc_k85 + (tc_k85-tc_k90)/tc_k90 + (tc_k90-tc_k100)/tc_k100float tc_avg_dist = tc_total_dist / 18.0
float tc_base = f_kama_vb(close, TC_BASE_LEN)
float tc_cloud_top = tc_base * (1.0 + tc_avg_dist * TC_MULT)float tc_strength = math.abs(tc_cloud_top – tc_base) / ATR14
float tc_transp = math.max(55.0, math.min(90.0, 90.0 – tc_strength / 2.0 * 35.0))color tc_trend_col = tc_cloud_top > tc_base ? color.new(tc_bull_color, tc_transp) : color.new(tc_bear_color, tc_transp)
color tc_line_col = color.new(tc_neut_color, 20)
color tc_base_col = tc_slope_color
? (tc_base > tc_base[1] ? color.new(tc_bull_color, 0) : color.new(tc_bear_color, 0))
: tc_line_col////////////////////
// PLOT — Trend Cloud
////////////////////
plot(tc_enable and glow_tc_enable ? tc_base : na, color=color.new(tc_base_col,80), linewidth=10, title=’TC Glow 1′)
plot(tc_enable and glow_tc_enable ? tc_base : na, color=color.new(tc_base_col,90), linewidth=20, title=’TC Glow 2′)
plot(tc_enable and glow_tc_enable ? tc_base : na, color=color.new(tc_base_col,95), linewidth=30, title=’TC Glow 3′)
plot(tc_enable and glow_tc_enable ? tc_base : na, color=color.new(tc_base_col,98), linewidth=45, title=’TC Glow 4′)tc_p_base = plot(tc_enable ? tc_base : na,
title=’Trend Cloud Base’, color=tc_base_col, linewidth=tc_base_width)
tc_p_top = plot(tc_enable and tc_body_enable ? tc_cloud_top : na,
title=’Trend Cloud Top’, color=tc_line_col, linewidth=1)
fill(tc_p_base, tc_p_top,
color=tc_enable and tc_body_enable ? tc_trend_col : na, title=’Trend Cloud Fill’)////////////////////
// PLOT — EMA jooned
////////////////////
plot(show_ema200 ? EMA200 : na, title=’200 EMA’, color=ema200_color, linewidth=ema200_width)
plot(show_ema9 ? EMA9 : na, title=’9 EMA’, color=ema9_color, linewidth=ema9_width)
plot(show_mtf and is_15m ? ema21_h1 : na, title=’H1 21 EMA’, color=mtf_h1_color, linewidth=mtf_h1_width)
plot(show_mtf and is_15m ? ema21_h4 : na, title=’H4 21 EMA’, color=mtf_h4_color, linewidth=mtf_h4_width)////////////////////
// PLOT — HAMA küünlad
////////////////////
barcolor(b_enable ? final_bar : na, title=’HAMA Barcolor’)plotcandle(CandleOpen, CandleHigh, CandleLow, CandleClose,
title=’HAMA Candles’,
color=final_candle,
wickcolor=na,
bordercolor=na)plot(MA1, title=’HAMA MA Joon’, color=final_ma, linewidth=ma_width)
////////////////////
// ALERTS
////////////////////
alertcondition(ta.rising(MA1, 2), title=’MA Rising’, message=’MA Rising’)
alertcondition(ta.falling(MA1, 2), title=’MA Falling’, message=’MA Falling’)
alertcondition(ta.crossover(high, MA1), title=’High Crossing MA’, message=’High Crossing MA’)
alertcondition(ta.crossunder(low, MA1), title=’Low Crossing MA’, message=’Low Crossing MA’)
alertcondition(ta.crossover(close, EMA9), title=’Price Cross 9 EMA Up’, message=’Price crossed 9 EMA upward’)
alertcondition(ta.crossunder(close, EMA9), title=’Price Cross 9 EMA Down’, message=’Price crossed 9 EMA downward’)
alertcondition(ta.crossover(close, EMA200), title=’Price Cross 200 EMA Up’, message=’Price crossed 200 EMA upward’)
alertcondition(ta.crossunder(close, EMA200), title=’Price Cross 200 EMA Down’, message=’Price crossed 200 EMA downward’)
alertcondition(ta.crossover(close, tc_base), title=’Price Cross TC Base Up’, message=’Price crossed TC Base upward’)
alertcondition(ta.crossunder(close, tc_base), title=’Price Cross TC Base Down’, message=’Price crossed TC Base downward’)////////////////////
// WATERMARK
////////////////////
var Watermark = table.new(position.bottom_left, 1, 1, border_width=3)
table.cell(Watermark, 0, 0,
text=’NSDT HAMA v6 + Trend Cloud’,
text_color=color.new(color.white, 95),
text_size=size.huge)
About Me
Futures Speculator in Slippers
Chief Financial Analyst at home, as never seen on Forbes or CNBC.
Discovered trading in 2006. Took me exactly 20 years of pain, market cycles, and weight gain to finally go full-time in 2026. And, well, normal jobs feel suspicious.
If I'm going to stay depressed inside my appartment, I might as well get paid for it.
Don't contact me unless it's about why NQ made that 100 point move without any reason.
