Smart Money Renko Matrix
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «indicator smart money renko matrix for tradingview.pine» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Smart Money Renko Matrix — индикатор для TradingView, написанный на Pine Script v6. Отображает ренко-свечи на графике с градиентной окраской, зависящей от направления и длины серии сделок. Использует ATR для определения размера блоков ренко и позволяет настраивать визуальное представление через пользовательские параметры.
Индикатор включает мультитаймфреймовую матрицу сходимости на основе скользящих средних, а также элементы анализа структуры рынка: обнаружение ликвидностных сдвигов, отображение ордер-блоков институциональных игроков и фильтрацию по торговым сессиям. Поддерживается автоматическое определение точек разворота характера и профиль объёма с уровнем POC.
Встроенный модуль управления рисками рассчитывает уровни стоп-лосса и три цели прибыли на основе ATR, а также отображает линию трейлинг-стопа. При наступлении сигналов индикатор формирует JSON-оповещения с ценовыми уровнями и отправляет их через систему алертов TradingView. На графике отображается информационная панель с текущими параметрами индикатора.
Настройки программы
| Настройка | Описание |
|---|---|
| i_atrLen | Длина ATR — Период расчёта ATR, используемый для определения размера блоков ренко |
| i_mult | Множитель разрешения ATR — Множитель, применяемый к ATR при расчёте таймфрейма для ренко-бингов |
| i_cBullA | Начальный цвет бычьего градиента — Цвет начала градиента для бычьих серий |
| i_cBullB | Конечный цвет бычьего градиента — Цвет конца градиента для бычьих серий |
| i_cBearA | Начальный цвет медвежьего градиента — Цвет начала градиента для медвежьих серий |
| i_cBearB | Конечный цвет медвежьего градиента — Цвет конца градиента для медвежьих серий |
| i_gDepth | Глубина градиента серии — Количество баров, за которое градиент переходит от начального к конечному цвету |
| i_sltp | Динамические SL/TP в алертах — Включает ли уровни стоп-лосса и целей прибыли в JSON-оповещения |
| i_structSl | Использовать стоп-лосс по структуре — Включает привязку стоп-лосса к ближайшему ордер-блоку вместо ATR |
| i_slMult | Множитель ATR для стоп-лосса — Множитель ATR, определяющий расстояние стоп-лосса от цены входа |
| i_tp1Mult | Множитель ATR для цели 1 — Множитель ATR для первого уровня фиксации прибыли |
| i_tp2Mult | Множитель ATR для цели 2 — Множитель ATR для второго уровня фиксации прибыли |
| i_tp3Mult | Множитель ATR для цели 3 — Множитель ATR для третьего уровня фиксации прибыли |
| i_trail | Показывать линию трейлинг-стопа — Отображает ли линию трейлинг-стопа на графике |
| i_useMtf | Использовать мультитаймфреймовую матрицу — Включает подтверждение сигнала по нескольким таймфреймам через скользящие средние |
| i_mtfTf1 | Таймфрейм матрицы 1 — Первый таймфрейм для мультитаймфреймового анализа |
| i_mtfTf2 | Таймфрейм матрицы 2 — Второй таймфрейм для мультитаймфреймового анализа |
| i_mtfTf3 | Таймфрейм матрицы 3 — Третий таймфрейм для мультитаймфреймового анализа |
| i_showLiq | Показывать сдвиги ликвидности — Отображает маркеры ликвидностных сдвигов на графике |
| i_liqLen | Глубина поиска сдвигов — Количество баров назад для поиска экстремумов при определении сдвигов ликвидности |
| i_cLiqB | Цвет бычьего сдвига — Цвет маркера бычьего сдвига ликвидности |
| i_cLiqS | Цвет медвежьего сдвига — Цвет маркера медвежьего сдвига ликвидности |
| i_showIob | Показывать институциональные ордер-блоки — Отображает блоки ордеров институциональных игроков на графике |
| i_iobMax | Максимум активных ордер-блоков — Максимальное количество отображаемых ордер-блоков одновременно |
| i_useKz | Включить зоны убийства сессий — Включает фильтрацию сигналов по заданным торговым сессиям |
| i_session | Активные сессии (UTC) — Диапазоны времени торговых сессий в UTC для фильтрации сигналов |
| i_showWick | Показывать отклонения по теням (x3) — Отмечает точки, где три и более подряд свечей имеют отклонение по тени |
| i_showDiv | Показывать дивергенцию объёма — Отображает маркеры дивергенции между направлением сделки и уровнем объёма |
| i_aLong | Действие Long — Текстовое значение действия для бычьего сигнала в вебхуке |
| i_aShort | Действие Short — Текстовое значение действия для медвежьего сигнала в вебхуке |
| i_aCLong | Закрытие Long — Текстовое значение действия для закрытия длинной позиции в вебхуке |
| i_aCSh | Закрытие Short — Текстовое значение действия для закрытия короткой позиции в вебхуке |
| dash_bg_color | Цвет фона панели — Фоновый цвет информационной таблицы на графике |
| dash_txt_color | Цвет текста панели — Цвет текста в информационной таблице на графике |
Поиск по коду файла
indicator("Smart Money Renko Matrix", overlay=true, precision=5)
type RenkoBar
float rc = na
float ro = na
float vol = na
type SignalEngine
int lStrk = 0
int sStrk = 0
bool isBull = false
bool isBear = false
bool buyF = false
bool sellF = false
bool isChoCh = false
float entryPrice = na
type RiskManager
float sl = na
float tp1 = na
float tp2 = na
float tp3 = na
float trailStop = na
method updateSignals(SignalEngine this, float rcConf, float roConf, bool mtfBull, bool mtfBear, bool inKz, int recentSweep) =>
this.isBull := rcConf > roConf
this.isBear := rcConf < roConf
this.lStrk := this.isBull ? this.lStrk + 1 : 0
this.sStrk := this.isBear ? this.sStrk + 1 : 0
this.buyF := this.lStrk == 1 and mtfBull and inKz
this.sellF := this.sStrk == 1 and mtfBear and inKz
this.isChoCh := (this.buyF and recentSweep == -1) or (this.sellF and recentSweep == 1)
this.entryPrice := rcConf
f_color(int streak, color cA, color cB, int gd, bool highVol, bool exhausted) =>
float t = math.min(streak / float(gd), 1.0)
int a = math.max(highVol ? 5 : 40, 50 - streak * 4)
if exhausted
a := 85
color.new(color.from_gradient(t, 0.0, 1.0, cA, cB), a)
float i_atrLen = input.float(10.0, "ATR Length", minval=1, maxval=100, step=1, group="◈ Renko")
int i_mult = input.int(1, "ATR Resolution ×", minval=0, group="◈ Renko")
color i_cBullA = input.color(#0A2818, "Bull → Start", group="◈ Visuals")
color i_cBullB = input.color(#39FF6A, "Bull → End", group="◈ Visuals")
color i_cBearA = input.color(#2A0A0A, "Bear → Start", group="◈ Visuals")
color i_cBearB = input.color(#FF4500, "Bear → End", group="◈ Visuals")
int i_gDepth = input.int(12, "Gradient Streak Depth", minval=3, maxval=50, group="◈ Visuals")
bool i_sltp = input.bool(true, "Dynamic SL/TP in Alerts", group="◈ Risk Management")
bool i_structSl = input.bool(false, "Use Structure-Based SL", group="◈ Risk Management")
float i_slMult = input.float(1.5, "SL ATR Multiplier", minval=0.1, maxval=10.0, step=0.1, group="◈ Risk Management")
float i_tp1Mult = input.float(2.0, "TP1 ATR Multiplier", minval=0.1, maxval=20.0, step=0.1, group="◈ Risk Management")
float i_tp2Mult = input.float(4.0, "TP2 ATR Multiplier", minval=0.1, maxval=20.0, step=0.1, group="◈ Risk Management")
float i_tp3Mult = input.float(6.0, "TP3 ATR Multiplier", minval=0.1, maxval=20.0, step=0.1, group="◈ Risk Management")
bool i_trail = input.bool(true, "Show Trailing Stop Line", group="◈ Risk Management")
bool i_useMtf = input.bool(false, "Use MTF Matrix", group="◈ Quant Matrix")
string i_mtfTf1 = input.timeframe("60", "MTF Tier 1 (1H)", group="◈ Quant Matrix")
string i_mtfTf2 = input.timeframe("240", "MTF Tier 2 (4H)", group="◈ Quant Matrix")
string i_mtfTf3 = input.timeframe("D", "MTF Tier 3 (1D)", group="◈ Quant Matrix")
bool i_showLiq = input.bool(true, "Show Liquidity Sweeps", group="◈ SMC & Liquidity")
int i_liqLen = input.int(10, "Sweep Lookback (bars)", minval=3, maxval=50, group="◈ SMC & Liquidity")
color i_cLiqB = input.color(color.rgb(50, 220, 255), "Bullish Sweep Color", group="◈ SMC & Liquidity")
color i_cLiqS = input.color(color.rgb(255, 140, 0), "Bearish Sweep Color", group="◈ SMC & Liquidity")
bool i_showIob = input.bool(true, "Show Institutional OBs", group="◈ SMC & Liquidity")
int i_iobMax = input.int(5, "Max Active OBs", minval=1, maxval=10, group="◈ SMC & Liquidity")
bool i_useKz = input.bool(false, "Enable Session Killzones", group="◈ SMC & Liquidity")
string i_session = input.session("0800-1200,1300-1700", "Active Sessions (UTC)", group="◈ SMC & Liquidity")
bool i_showWick= input.bool(true, "Show Wick Rejections (x3)", group="◈ Order Flow")
bool i_showDiv = input.bool(true, "Show Volume Divergence", group="◈ Order Flow")
string i_aLong = input.string("long", "Long", group="◈ Webhook Actions")
string i_aShort = input.string("short", "Short", group="◈ Webhook Actions")
string i_aCLong = input.string("closelong", "Close Long", group="◈ Webhook Actions")
string i_aCSh = input.string("closeshort", "Close Short", group="◈ Webhook Actions")
string GRP_DASH = '📊 Dashboard Settings'
color dash_bg_color = input.color(color.rgb(10, 14, 26, 5), 'Background Color', group=GRP_DASH)
color dash_txt_color = input.color(color.rgb(224, 247, 255, 0), 'Text Color', group=GRP_DASH)
string _res = timeframe.ismonthly ? str.tostring(timeframe.multiplier * i_mult, "###M") : timeframe.isweekly ? str.tostring(timeframe.multiplier * i_mult, "###W") : timeframe.isdaily ? str.tostring(timeframe.multiplier * i_mult, "###D") : timeframe.isintraday ? str.tostring(timeframe.multiplier * i_mult, "####") : "1D"
string _tid = ticker.renko(syminfo.tickerid, "ATR", i_atrLen)
var RenkoBar _bar = RenkoBar.new()
_bar.rc := request.security(_tid, _res, close[1], lookahead=barmerge.lookahead_on)
_bar.ro := request.security(_tid, _res, open[1], lookahead=barmerge.lookahead_on)
_bar.vol := request.security(_tid, _res, volume[1], lookahead=barmerge.lookahead_on)
float _rcConf = _bar.rc
float _roConf = _bar.ro
float _atr = ta.atr(14)
float _volMa = ta.sma(_bar.vol, 20)
bool _highVol = _bar.vol > _volMa
bool _boxChanged = _rcConf != _rcConf[1] or _roConf != _roConf[1]
float _mtfEma1 = request.security(syminfo.tickerid, i_mtfTf1, ta.sma(close, 50)[1], lookahead=barmerge.lookahead_on)
float _mtfEma2 = request.security(syminfo.tickerid, i_mtfTf2, ta.sma(close, 50)[1], lookahead=barmerge.lookahead_on)
float _mtfEma3 = request.security(syminfo.tickerid, i_mtfTf3, ta.sma(close, 50)[1], lookahead=barmerge.lookahead_on)
int _bullScore = (close > _mtfEma1 ? 1 : 0) + (close > _mtfEma2 ? 1 : 0) + (close > _mtfEma3 ? 1 : 0)
int _bearScore = (close < _mtfEma1 ? 1 : 0) + (close < _mtfEma2 ? 1 : 0) + (close < _mtfEma3 ? 1 : 0)
bool _mtfBull = not i_useMtf or _bullScore >= 2
bool _mtfBear = not i_useMtf or _bearScore >= 2
bool _inKz = not i_useKz or not na(time(timeframe.period, i_session))
float _recentHigh = ta.highest(high[1], i_liqLen)
float _recentLow = ta.lowest(low[1], i_liqLen)
bool _bslSweep = high > _recentHigh and close < _recentHigh and close < open
bool _sslSweep = low < _recentLow and close > _recentLow and close > open
var int _recentSweepState = 0
if _bslSweep
_recentSweepState := 1
if _sslSweep
_recentSweepState := -1
var SignalEngine _engine = SignalEngine.new()
_engine.updateSignals(_rcConf, _roConf, _mtfBull, _mtfBear, _inKz, _recentSweepState)
if _engine.buyF or _engine.sellF
_recentSweepState := 0
var array<int> _streakHist = array.new<int>()
var bool _isExhausted = false
if _boxChanged and _engine.lStrk == 0 and (_engine[1]).lStrk > 2
array.push(_streakHist, (_engine[1]).lStrk)
if _boxChanged and _engine.sStrk == 0 and (_engine[1]).sStrk > 2
array.push(_streakHist, (_engine[1]).sStrk)
int _histSz = array.size(_streakHist)
if _histSz > 30
array.shift(_streakHist)
_histSz := array.size(_streakHist)
if _histSz >= 5
float _meanStrk = array.avg(_streakHist)
float _stdStrk = array.stdev(_streakHist)
if _stdStrk > 0
if _engine.isBull
_isExhausted := (_engine.lStrk - _meanStrk) / _stdStrk > 2.0
else if _engine.isBear
_isExhausted := (_engine.sStrk - _meanStrk) / _stdStrk > 2.0
var array<float> _vpPrice = array.new<float>()
var array<float> _vpVol = array.new<float>()
var float _pocPrice = na
if _boxChanged and not na(_bar.vol)
int _idx = array.indexof(_vpPrice, _rcConf)
if _idx == -1
array.push(_vpPrice, _rcConf)
array.push(_vpVol, _bar.vol)
else
array.set(_vpVol, _idx, array.get(_vpVol, _idx) + _bar.vol)
int _vpSz = array.size(_vpPrice)
if _vpSz > 100
array.shift(_vpPrice)
array.shift(_vpVol)
_vpSz := array.size(_vpPrice)
if _vpSz > 0
float _maxVol = array.max(_vpVol)
int _pocIdx = array.indexof(_vpVol, _maxVol)
_pocPrice := array.get(_vpPrice, _pocIdx)
var float _avwapNum = 0.0
var float _avwapDen = 0.0
var float _avwapVal = na
if _engine.isChoCh
_avwapNum := 0.0
_avwapDen := 0.0
if not na(_bar.vol)
_avwapNum += close * volume
_avwapDen += volume
_avwapVal := _avwapDen > 0 ? _avwapNum / _avwapDen : na
var array<float> _iobTop = array.new<float>()
var array<float> _iobBot = array.new<float>()
var array<bool> _iobBull = array.new<bool>()
var array<box> _iobDrw = array.new<box>()
if i_showIob and (_engine.buyF or _engine.sellF)
if array.size(_iobTop) >= i_iobMax
array.shift(_iobTop)
array.shift(_iobBot)
array.shift(_iobBull)
box.delete(array.shift(_iobDrw))
float _top = math.max(_rcConf, _roConf)
float _bot = math.min(_rcConf, _roConf)
array.push(_iobTop, _top)
array.push(_iobBot, _bot)
array.push(_iobBull, _engine.buyF)
color _iobCol = _engine.buyF ? color.new(i_cBullA, 85) : color.new(i_cBearA, 85)
array.push(_iobDrw, box.new(bar_index - 10, _top, bar_index + 20, _bot, border_color=na, bgcolor=_iobCol))
int _iobDrwSz = array.size(_iobDrw)
if _iobDrwSz > 0
for i = 0 to _iobDrwSz - 1
box.set_right(array.get(_iobDrw, i), bar_index + 15)
var float _lastWickH = na, var int _cntWickH = 0
var float _lastWickL = na, var int _cntWickL = 0
if high > math.max(close, open)
if math.abs(high - _lastWickH) <= (_atr * 0.1)
_cntWickH += 1
else
_lastWickH := high
_cntWickH := 1
else
_cntWickH := 0
if low < math.min(close, open)
if math.abs(low - _lastWickL) <= (_atr * 0.1)
_cntWickL += 1
else
_lastWickL := low
_cntWickL := 1
else
_cntWickL := 0
bool _volDivBuy = _engine.buyF and not _highVol
bool _volDivSell = _engine.sellF and not _highVol
var RiskManager _risk = RiskManager.new()
if _engine.isBull
_risk.trailStop := na(_risk.trailStop) ? _roConf : math.max(_risk.trailStop, _roConf)
else if _engine.isBear
_risk.trailStop := na(_risk.trailStop) ? _rcConf : math.min(_risk.trailStop, _rcConf)
else
_risk.trailStop := na
float _nearestSrSl = na
if _engine.buyF or _engine.sellF
if i_structSl and array.size(_iobTop) > 1
float _dist = 9999999.9
int _iobSz = array.size(_iobTop)
for i = 0 to _iobSz - 2
float top = array.get(_iobTop, i)
float bot = array.get(_iobBot, i)
if _engine.buyF and top < _rcConf
if (_rcConf - top) < _dist
_dist := _rcConf - top
_nearestSrSl := bot
if _engine.sellF and bot > _rcConf
if (bot - _rcConf) < _dist
_dist := bot - _rcConf
_nearestSrSl := top
float _atrSl = _engine.buyF ? _rcConf - _atr * i_slMult : _rcConf + _atr * i_slMult
_risk.sl := not na(_nearestSrSl) ? _nearestSrSl : _atrSl
_risk.tp1 := _engine.buyF ? _rcConf + _atr * i_tp1Mult : _rcConf - _atr * i_tp1Mult
_risk.tp2 := _engine.buyF ? _rcConf + _atr * i_tp2Mult : _rcConf - _atr * i_tp2Mult
_risk.tp3 := _engine.buyF ? _rcConf + _atr * i_tp3Mult : _rcConf - _atr * i_tp3Mult
var int _legBoxCount = 0
_legBoxCount := _engine.isBull or _engine.isBear ? (_engine.buyF or _engine.sellF ? 1 : _legBoxCount + (_boxChanged ? 1 : 0)) : _legBoxCount
float _gradT = _engine.isBull ? math.min(_engine.lStrk / flПоказано первые 50% кода (символов: 19311)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.