???? SMC Reversal Engine v3.5 – Clean FVG + Dashboard
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «mr_mt4_smc_reversal_engine_v3_5_–_clean_fvg_+_dashboard_for_tradingview.pine» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
На графике отображаются точки разворота HH/HL/LH/LL, линии уровней HTF, подписи структурных событий и таблица-дашборд с текущим трендом, ожидаемым следующим движением и показателем точности предсказаний. Также реализованы сигналы покупки/продажи на основе пересечения EMA, предупреждения о ранних вершинах на основе длины теней и RSI-дивергенций, а также справочник SMC-терминологии.
Настройки программы
| Настройка | Описание |
|---|---|
| htf | Высокий таймфрейм структуры — Таймфрейм, с которого берутся данные для анализа структуры и уровней HTF High/Low. |
| useAutoFractal | Авточувствительность фракталов — Включает автоматический подбор чувствительности обнаружения фракталов в зависимости от выбранного HTF. |
| manualFractalSensitivity | Ручная чувствительность фракталов — Количество баров чувствительности пивотов, используемое при отключённом автоматическом режиме. |
| showStructureLines | Показывать линии HTF High/Low — Отображает на графике горизонтальные линии последних выявленных уровней высока и низа HTF. |
| dashboardPosition | Позиция дашборда — Угловое расположение таблицы-дашборда на графике: верхний левый, верхний правый, нижний левый или нижний правый. |
| minimalMode | Минимальный режим — Скрывает таблицу дашборда и большинство подписей на графике для уменьшения загруженности. |
| chochLabelOffset | Смещение подписи CHoCH — Горизонтальное смещение подписей сигналов Change of Character от бара события. |
| bosLabelOffset | Смещение подписи BOS — Горизонтальное смещение подписей сигналов Break of Structure от бара события. |
| hlLabelOffset | Смещение подписей HL/LL — Горизонтальное смещение подписей уровней Higher Low и Lower Low от бара события. |
| showFVG | Показывать зоны FVG — Включает отображение зон Fair Value Gap в виде прямоугольников на графике. |
| showFVGFill | Показывать заливку FVG — Определяет, заполнять ли зоны FVG полупрозрачным цветом или оставлять их пустыми. |
| markTapEntry | Отмечать касание FVG — Добавляет метку и удаляет зону FVG при касании её ценой. |
| highlightTarget | Показывать целевую линию FVG — Отображает целевую линию, привязанную к зоне FVG. |
| useTrendFilter | Фильтр по направлению тренда — Показывает зоны FVG только в направлении текущего определённого тренда. |
| maxFVGs | Максимум зон FVG — Ограничивает количество одновременно отображаемых зон FVG в каждом направлении. |
| fvgExtend | Продление FVG — Определяет, в какую сторону растягивается прямоугольник зоны FVG: вправо или не растягивается. |
| fvgMaxLife | Удаление FVG после N баров — Автоматически удаляет зону FVG, если она не была использована указанное количество баров. |
| enableBuySell | Включить сигналы покупки/продажи — Активирует отображение меток BUY/SELL на основе пересечения быстрой и медленной EMA. |
| emaConfirm | Требовать подтверждение EMA — При включении сигналы BUY/SELL формируются только при подтверждении пересечения EMA. |
| useAutoEMA | Автодлины EMA — Автоматически подбирает длины быстрой и медленной EMA в зависимости от выбранного HTF. |
| manualFastEMA | Ручная быстрая EMA — Длина быстрой EMA, используемая при отключённом автоматическом режиме. |
| manualSlowEMA | Ручная медленная EMA — Длина медленной EMA, используемая при отключённом автоматическом режиме. |
| showSwingTags | Показывать теги HH/HL/LH/LL — Отображает подписи Higher High, Higher Low, Lower High, Lower Low рядом с соответствующими свечами. |
| showCheatSheet | Показывать справочник SMC — Отображает таблицу-справочник с расшифровкой терминов CHoCH и BOS в углу графика. |
| showEarlyTop | Показывать предупреждения ранних вершин — Включает раннее предупреждение о возможных разворотах на основе длины теней свечей. |
| wickThresh | Порог длины тени (%) — Процентовый порог длины тени свечи, при превышении которого срабатывает предупреждение о ранней вершине. |
| rsiLen | Длина RSI — Период расчёта индикатора RSI, используемого для обнаружения дивергенций. |
| rsiDivThresh | Порог дивергенции RSI — Пороговое значение для определения дивергенции RSI. |
| showNarrativeLabels | Показывать нарративные подписи — Включает отображение текстовых подписей с описанием текущего состояния структуры на графике. |
| useAutoNarrativeLabels | Автоограничение нарративных подписей — Автоматически ограничивает максимальное количество нарративных подписей в зависимости от HTF. |
| manualMaxNarrativeLabels | Максимум нарративных подписей — Ручное ограничение количества отображаемых нарративных подписей при отключённом автоматическом режиме. |
| showPredictionAccuracy | Показывать точность предсказаний — Отображает в дашборде процент подтверждённых структурных предсказаний. |
| showOnlyRecentLabels | Показывать только последние метки — Ограничивает отображение меток HH/HL/LL/LH только самыми свежими. |
Поиск по коду файла
indicator("???? SMC Reversal Engine v3.5 – Clean FVG + Dashboard", overlay=true, max_lines_count=500, max_boxes_count=500, max_labels_count=500)
htf = input.timeframe("60", "HTF for Structure")
useAutoFractal = input.bool(true, "Auto Fractal Sensitivity?", group="Fractal Settings")
manualFractalSensitivity = input.int(3, "Manual Sensitivity (when Auto OFF)", minval=1, group="Fractal Settings")
fractalSensitivity = useAutoFractal ? (
htf == "1" ? 1 : htf == "5" ? 2 : htf == "15" ? 3 : htf == "30" ? 4 :
htf == "60" ? 5 : htf == "120" ? 6 : htf == "240" ? 7 : htf == "D" ? 8 :
htf == "W" ? 10 : htf == "M" ? 12 : 3) : manualFractalSensitivity
showStructureLines = input.bool(true, "Show HTF High/Low Lines")
dashboardPosition = input.string("Top Right", "Dashboard Position", options=["Top Left","Top Right","Bottom Left","Bottom Right"])
minimalMode = input.bool(false, "Minimal Mode (hide table & most labels)")
chochLabelOffset = input.int(6, "CHoCH Label Offset", options=[2,4,6,8,12])
bosLabelOffset = input.int(4, "BOS Label Offset", options=[2,4,6,8,12])
hlLabelOffset = input.int(2, "HL/LL Label Offset", options=[2,4,6,8,12])
showFVG = input.bool(true, "Show FVG Zones")
showFVGFill = input.bool(true, "Show FVG Fill")
markTapEntry = input.bool(true, "Mark Entry When FVG Is Tapped")
highlightTarget = input.bool(true, "Show FVG‑Based Target Line")
useTrendFilter = input.bool(true, "Only Show FVGs in Trend Direction")
maxFVGs = input.int(3, "Max FVG Zones per direction", minval=1)
fvgExtend = input.string("right", "FVG Extend", options=["right","none"]) == "right" ? extend.right : extend.none
fvgMaxLife = input.int(50, "Delete FVG after N bars", minval=10)
enableBuySell = input.bool(true, "Enable Buy/Sell Signals")
emaConfirm = input.bool(true, "Require EMA Crossover Confirmation")
useAutoEMA = input.bool(true, "Auto EMA lengths?")
manualFastEMA = input.int(9, "Manual Fast EMA", minval=1)
manualSlowEMA = input.int(21, "Manual Slow EMA", minval=1)
fastLen = useAutoEMA ? (htf=="1"?5:htf=="5"?9:htf=="15"?12:htf=="30"?14:htf=="60"?21:htf=="120"?34:htf=="240"?55:htf=="D"?89:144) : manualFastEMA
slowLen = useAutoEMA ? (htf=="1"?13:htf=="5"?21:htf=="15"?34:htf=="30"?50:htf=="60"?89:htf=="120"?144:htf=="240"?200:300) : manualSlowEMA
showSwingTags = input.bool(true, "Show HH/HL/LH/LL tags", group="Educational")
showCheatSheet = input.bool(true, "Show SMC Cheat-Sheet", group="Educational")
showEarlyTop = input.bool(true, "Show Early Top Warnings")
wickThresh = input.float(0.5, "Wick Size Threshold (%)", step=0.1)
rsiLen = input.int(14, "RSI Length")
rsiDivThresh = input.float(0.0, "RSI Divergence Threshold", step=0.1)
showNarrativeLabels = input.bool(true, "Show Chart Narratives")
useAutoNarrativeLabels = input.bool(true, "Auto Max Narrative Labels?")
manualMaxNarrativeLabels = input.int(5, "Manual Max Narrative Labels", minval=1)
autoMaxNarrLabels = htf == "1" ? 12 : htf == "5" ? 10 : htf == "15" ? 8 : htf == "30" ? 6 : htf == "60" ? 5 : htf == "120" ? 4 : htf == "D" ? 3 : htf == "W" ? 2 : 5
maxNarrativeLabels = useAutoNarrativeLabels ? autoMaxNarrLabels : manualMaxNarrativeLabels
showPredictionAccuracy = input.bool(true, "Show Prediction Accuracy Rate")
showOnlyRecentLabels = input.bool(true, "Show Only Most Recent HH/HL/LL/LH Labels")
isFractalHigh = ta.pivothigh(high, fractalSensitivity, fractalSensitivity)
isFractalLow = ta.pivotlow(low, fractalSensitivity, fractalSensitivity)
getConfidenceLabel(p) =>
p >= 90 ? "Very High ✅" :p >= 75 ? "High ????" :p >= 60 ? "Moderate ????" :p >= 40 ? "Low ????" : "Very Low ❌"
drawLabel(_offset, _y, _txt, _col) =>
line.new(bar_index, _y, bar_index + _offset, _y, color=_col, style=line.style_dotted)
label.new(bar_index + _offset, _y, _txt, style=label.style_label_left, color=color.new(_col, 0), textcolor=color.white, size=size.small)
getFormattedDate(t) =>
year = year(t)
month = month(t)
day = dayofmonth(t)
hour = hour(t)
minute = minute(t)
str.tostring(year) + "-" + str.tostring(month, "00") + "-" + str.tostring(day, "00") + " " + str.tostring(hour, "00") + ":" + str.tostring(minute, "00")
var float lastSwingHighEH = na
var float lastSwingHighRSI = na
rsi = ta.rsi(close, rsiLen)
htfPivotHigh = request.security(syminfo.tickerid, htf, ta.pivothigh(high, fractalSensitivity, fractalSensitivity))
htfPivotLow = request.security(syminfo.tickerid, htf, ta.pivotlow(low, fractalSensitivity, fractalSensitivity))
htfHigh = not na(htfPivotHigh) ? htfPivotHigh : na
htfLow = not na(htfPivotLow) ? htfPivotLow : na
var float lastHigh = na
var float lastLow = na
var string lastHighType = ""
var string lastLowType = ""
if not na(htfHigh)
lastHigh := htfHigh
lastHighType := str.tostring(htfHigh, "#.##")
if not na(htfLow)
lastLow := htfLow
lastLowType := str.tostring(htfLow, "#.##")
plot(showStructureLines ? lastHigh : na, title="HTF High", color=color.red)
plot(showStructureLines ? lastLow : na, title="HTF Low", color=color.green)
pivotHigh = ta.pivothigh(high, fractalSensitivity, fractalSensitivity)
pivotLow = ta.pivotlow(low, fractalSensitivity, fractalSensitivity)
bullishCHoCH_raw = not na(pivotHigh) and pivotHigh > lastHigh
bearishCHoCH_raw = not na(pivotLow) and pivotLow < lastLow
bullishBOS = not na(pivotLow) and pivotLow > lastLow
bearishBOS = not na(pivotHigh) and pivotHigh < lastHigh
var string trendDir = "Neutral"
trendDir := bullishBOS or bullishCHoCH_raw ? "Bullish" : bearishBOS or bearishCHoCH_raw ? "Bearish" : trendDir
bullishCHoCH = trendDir != "Bullish" and bullishCHoCH_raw
bearishCHoCH = trendDir != "Bearish" and bearishCHoCH_raw
var int hhSeq = 0, hlSeq = 0, lhSeq = 0, llSeq = 0
var string nextExpect = "—"
var float lastSwingHigh = na
var float lastSwingLow = na
var int predictionCount = 0
var int correctPredictionCount = 0
var float predictionRate = na
var bool expectingHL = false
var bool expectingLH = false
var bool expectingHH = false
var bool expectingLL = false
var label predLbl = na
if not na(predLbl)
label.delete(predLbl)
trendDir := bullishCHoCH or bullishBOS ? "Bullish" : bearishCHoCH or bearishBOS ? "Bearish" : trendDir
nextExpect := bullishCHoCH ? "Expect HL" :
bearishCHoCH ? "Expect LH" :
bullishBOS ? "Expect HH" :
bearishBOS ? "Expect LL" :
trendDir == "Bullish" ? "Look for HL" :
trendDir == "Bearish" ? "Look for LH" :
"⏳ Waiting for Structure"
if bullishCHoCH
expectingHL := true
predictionCount += 1
if bearishCHoCH
expectingLH := true
predictionCount += 1
if bullishBOS
expectingHH := true
predictionCount += 1
if bearishBOS
expectingLL := true
predictionCount += 1
if expectingHL and not na(pivotLow) and low > lastLow
correctPredictionCount += 1
expectingHL := false
predLbl := label.new(bar_index + 1, low, "✅ HL Confirmed", style=label.style_label_left, color=na, textcolor=color.green, size=size.normal)
if expectingLH and not na(pivotHigh) and high < lastHigh
correctPredictionCount += 1
expectingLH := false
predLbl := label.new(bar_index + 1, high, "✅ LH Confirmed", style=label.style_label_left, color=na, textcolor=color.maroon, size=size.normal)
if expectingHH and not na(pivotHigh) and high > lastHigh
correctPredictionCount += 1
expectingHH := false
predLbl := label.new(bar_index + 1, high, "✅ HH Confirmed", style=label.style_label_left, color=na, textcolor=color.lime, size=size.normal)
if expectingLL and not na(pivotLow) and low < lastLow
correctPredictionCount += 1
expectingLL := false
predLbl := label.new(bar_index + 1, low, "✅ LL Confirmed", style=label.style_label_left, color=na, textcolor=color.red, size=size.normal)
predictionRate := predictionCount > 0 ? (correctPredictionCount / predictionCount) * 100 : na
anticipate = bullishCHoCH ? "CHoCH Bullish → HL expected" :
bearishCHoCH ? "CHoCH Bearish → LH expected" :
bullishBOS ? "BOS Bullish → HH expected" :
bearishBOS ? "BOS Bearish → LL expected" :
trendDir == "Bullish" ? "Trend Bullish → Wait for HL" :
trendDir == "Bearish" ? "Trend Bearish → Wait for LH" :
"Neutral → No new structure"
if barstate.islast and not minimalMode and anticipate != "Neutral → No new structure"
label.new(bar_index + 1, low, anticipate, style=label.style_label_left, color=color.aqua, textcolor=color.black, size=size.normal)
pos = dashboardPosition == "Top Left" ? position.top_left :
dashboardPosition == "Top Right" ? position.top_right :
dashboardPosition == "Bottom Left" ? position.bottom_left :
position.bottom_right
var table infoTable = table.new(pos, 1, 9, border_width=1, bgcolor=color.new(color.black, 85), frame_color=color.white)
if barstate.islast and not minimalMode
table.cell(infoTable, 0, 0, "Trend: " + trendDir, text_color=color.white)
table.cell(infoTable, 0, 1, "Last High: " + lastHighType, text_color=color.white)
table.cell(infoTable, 0, 2, "Last Low: " + lastLowType, text_color=color.white)
table.cell(infoTable, 0, 3, "Next: " + nextExpect, text_color=color.yellow)
bosText = bullishBOS ? "↑ Bullish BOS" : bearishBOS ? "↓ Bearish BOS" : "—"
table.cell(infoTable, 0, 4, "BOS: " + bosText, text_color=color.teal)
chochText = bullishCHoCH ? "↑ Bullish CHoCH" : bearishCHoCH ? "↓ Bearish CHoCH" : "—"
table.cell(infoTable, 0, 5, "CHoCH: " + chochText, text_color=color.orange)
accText = (showPredictionAccuracy and predictionRate >= 0) ? "AccuracyПоказано первые 50% кода (символов: 15517)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.