Reversal Detection v3.2 - FX Optimized | Non-Repainting
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «indicator reversal detection v3.2 .pine» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Reversal Detection v3.2 — FX Optimized | Non-Repainting — это индикатор для TradingView, предназначенный для обнаружения разворотов цены. Он работает поверх графика и отображает сигналы на основе комбинации тройной системы скользящих средних EMA (9/14/21) и расчёта порогов разворота с адаптивной чувствительностью на основе ATR. Индикатор заявлен как неперерисовывающийся, с несколькими режимами подтверждения сигналов.
Основные возможности включают триггеры разворотов с горизонтальными линиями и метками на графике, зоны спроса и предложения в виде полупрозрачных прямоугольников, а также информационную таблицу с текущими настройками и состоянием тренда. Чувствительность можно настраивать через предустановки или вручную, а пороги адаптируются к волатильности инструмента.
Индикатор поддерживает систему оповещений TradingView для различных типов сигналов: развороты, сигналы по EMA, изменение тренда и комбинированные сильные сигналы. Дополнительно на графике отображается панель с информацией. Индикатор предназначен для использования на любых инструментах и таймфреймах, с оптимизацией для валютных пар и фьючерсов.
Настройки программы
| Настройка | Описание |
|---|---|
| confirmationMode | Режим подтверждения сигналов. "Confirmed Only" — только подтверждённые сигналы без перерисовки; "Confirmed + Preview" — подтверждённые сигналы с предпросмотром потенциальных; "Preview Only" — только предпросмотр без подтверждения. |
| confirmationBars | Количество дополнительных баров ожидания перед подтверждением сигнала. При значении 0 сигнал подтверждается немедленно, при увеличении — сигнал отображается только после указанного числа баров. |
| input_sensitivity | Предустановка чувствительности индикатора. "Very High" — максимальное количество сигналов; "Very Low" — минимум, но наиболее качественные сигналы. "Custom" позволяет вручную задать параметры. |
| input_method | Метод расчёта пивотов. "average" — сглаженный вариант через EMA, "high_low" — более отзывчивый, использующий напрямую максимумы и минимумы. |
| input_atrlength | Период расчёта среднего истинного диапазона (ATR), используемого для адаптивной настройки порогов разворота. |
| input_averagelength | Период сглаживания для расчёта максимумов и минимумов при использовании метода "average". Влияет на плавность определения пивотов. |
| input_showSupplyDemand | Стиль визуализации зон спроса и предложения: "Pivot" — в виде пивотов, "Arrow" — в виде стрелок, "None" — без отображения. |
| input_numbersuppdemandtoshow | Максимальное количество зон спроса и предложения, отображаемых одновременно на графике. |
| input_showsupplydemandcloud | Включает отображение прямоугольных зон спроса и предложения в точках пивотов на графике. |
| input_zoneExtension | Количество баров вперёд, на которые распространяются прямоугольные зоны спроса и предложения от точки пивота. |
| zoneThickness | Толщина прямоугольных зон спроса и предложения, выраженная в процентах от текущей цены. |
| input_lineExtension | Количество баров, на которые продлеваются горизонтальные линии разворота вправо от точки пивота. |
| input_maxLines | Максимальное количество линий разворота, отображаемых одновременно на графике. Старые линии удаляются при превышении лимита. |
| labelSizeOption | Размер меток сигналов разворота на графике: "Small", "Normal" или "Large". |
| showInfoTable | Отображает информационную таблицу в углу графика с текущими настройками индикатора и состоянием тренда. |
| tablePosition | Позиция информационной таблицы на графике: верхний правый, верхний левый, верхний центральный, нижний правый, нижний левый или нижний центральный угол. |
| tableSizeOption | Размер ячеек информационной таблицы: от "Tiny" до "Huge". |
Поиск по коду файла
indicator("Reversal Detection v3.2 - FX Optimized | Non-Repainting",
shorttitle="Reversal Pro v3.2",
overlay=true,
max_boxes_count=50,
max_lines_count=200,
max_labels_count=100)
confirmationMode = input.string("Confirmed Only", "Signal Mode",
options=["Confirmed Only", "Confirmed + Preview", "Preview Only"],
tooltip="Confirmed Only = No repainting | Preview = Shows potential signals",
group="SIGNAL CONTROLS")
confirmationBars = input.int(0, "Extra Confirmation Bars",
minval=0, maxval=5,
tooltip="Additional bars to wait before confirming signal (0 = immediate)",
group="SIGNAL CONTROLS")
input_sensitivity = input.string("Medium", "Sensitivity Preset",
options=["Very High", "High", "Medium", "Low", "Very Low", "Custom"],
tooltip="Very High = Most signals | Very Low = Fewest, highest quality signals",
group="MAIN CONTROLS")
float atrMultiplier = switch input_sensitivity
"Very High" => 0.8
"High" => 1.2
"Medium" => 2.0
"Low" => 2.8
"Very Low" => 3.5
=> na
float percentThreshold = switch input_sensitivity
"Very High" => 0.02
"High" => 0.03
"Medium" => 0.05
"Low" => 0.06
"Very Low" => 0.08
=> na
bool isCustom = input_sensitivity == "Custom"
input_method = input.string("average", "Calculation Method",
options=["average", "high_low"],
tooltip="average = smoother | high_low = more responsive",
group="ADVANCED SETTINGS")
input_percentamount = isCustom ? input.float(0.08, "Percentage Reversal (%)",
minval=0.01, maxval=1.0, step=0.01,
tooltip="Price must reverse by this % - acts as minimum threshold",
group="ADVANCED SETTINGS") : 0.08
input_revAmount = isCustom ? input.float(0.0001, "Absolute Reversal",
minval=0.0001, maxval=50.0, step=0.0001,
tooltip="Minimum absolute price reversal amount (0.0001 for FX, 1.0 for futures)",
group="ADVANCED SETTINGS") : 0.0001
input_atrreversal = isCustom ? input.float(2.0, "ATR Multiplier",
minval=0.1, maxval=10.0, step=0.1,
tooltip="Primary sensitivity control - reversal = ATR x this multiplier",
group="ADVANCED SETTINGS") : 2.0
input_atrlength = input.int(14, "ATR Length", minval=1, maxval=50,
tooltip="Period for ATR calculation (14 is standard)",
group="ADVANCED SETTINGS")
input_averagelength = input.int(5, "Average Length", minval=1, maxval=50,
tooltip="Smoothing period for high/low calculation when using 'average' method",
group="ADVANCED SETTINGS")
input_showSupplyDemand = input.string("Pivot", "Supply/Demand Display",
options=["Pivot", "Arrow", "None"],
tooltip="Visual style for supply/demand zones",
group="ZONES")
input_numbersuppdemandtoshow = input.int(3, "Number of Zones",
minval=0, maxval=20,
tooltip="Maximum number of zones to display",
group="ZONES")
input_showsupplydemandcloud = input.bool(false, "Show Supply/Demand Zones",
tooltip="Display rectangular zones at pivot points",
group="ZONES")
input_zoneExtension = input.int(40, "Zone Box Extension (bars)",
minval=5, maxval=100,
tooltip="How many bars forward to extend zones",
group="ZONES")
zoneThickness = input.float(0.01, "Zone Thickness (%)",
minval=0.001, maxval=0.2, step=0.001,
tooltip="Thickness of rectangular zone as % of price",
group="ZONES")
input_lineExtension = input.int(5, "Stop Line Extension",
minval=1, maxval=50,
tooltip="Bars to extend horizontal reversal lines",
group="LABELS")
input_maxLines = input.int(10, "Maximum Lines to Display",
minval=3, maxval=50,
tooltip="Maximum number of reversal lines on chart",
group="LABELS")
labelSizeOption = input.string("Normal", "Label Size",
options=["Small", "Normal", "Large"],
group="LABELS")
labelSize = switch labelSizeOption
"Small" => size.small
"Normal" => size.normal
"Large" => size.large
=> size.normal
showInfoTable = input.bool(true, "Show Info Table",
tooltip="Display indicator settings and status",
group="INFO TABLE")
tablePosition = input.string("Top Right", "Table Position",
options=["Top Right", "Top Left", "Top Center", "Bottom Right", "Bottom Left", "Bottom Center"],
group="INFO TABLE")
tableSizeOption = input.string("Normal", "Table Size",
options=["Tiny", "Small", "Normal", "Large", "Huge"],
group="INFO TABLE")
float finalATRMult = isCustom ? input_atrreversal : atrMultiplier
float finalPctThreshold = isCustom ? input_percentamount : percentThreshold
atrValue = ta.atr(input_atrlength)
reversalAmount = math.max(close * finalPctThreshold / 100,
math.max(input_revAmount, finalATRMult * atrValue))
superfast_length = 9
fast_length = 14
slow_length = 21
mov_avg9 = ta.ema(close, superfast_length)
mov_avg14 = ta.ema(close, fast_length)
mov_avg21 = ta.ema(close, slow_length)
buy = mov_avg9 > mov_avg14 and mov_avg14 > mov_avg21 and low > mov_avg9
stopbuy = mov_avg9 <= mov_avg14
buynow = not buy[1] and buy
var int buysignal = 0
buysignal := buynow and not stopbuy ? 1 : buysignal == 1 and stopbuy ? 0 : buysignal
sell = mov_avg9 < mov_avg14 and mov_avg14 < mov_avg21 and high < mov_avg9
stopsell = mov_avg9 >= mov_avg14
sellnow = not sell[1] and sell
var int sellsignal = 0
sellsignal := sellnow and not stopsell ? 1 : sellsignal == 1 and stopsell ? 0 : sellsignal
GREEN = #00FF00
RED = #FF0000
PURPLE = #ab47bc
priceh = input_method == "high_low" ? high : ta.ema(high, input_averagelength)
pricel = input_method == "high_low" ? low : ta.ema(low, input_averagelength)
pricehConfirmed = priceh[confirmationBars]
pricelConfirmed = pricel[confirmationBars]
actualHighConfirmed = high[confirmationBars]
actualLowConfirmed = low[confirmationBars]
var float zhigh = na
var float zlow = na
var float zhighActual = na
var float zlowActual = na
var int zhighbar = 0
var int zlowbar = 0
var int direction = 0
if na(zhigh) or na(zlow)
zhigh := pricehConfirmed
zlow := pricelConfirmed
zhighActual := actualHighConfirmed
zlowActual := actualLowConfirmed
zhighbar := bar_index - confirmationBars
zlowbar := bar_index - confirmationBars
direction := 1
var float lastConfirmedPivotPrice = na
var float lastConfirmedPivotActual = na
var int lastConfirmedPivotBar = 0
var bool lastConfirmedPivotIsHigh = false
var bool confirmedPivotDetected = false
confirmedPivotDetected := false
if direction == 1
if pricehConfirmed > zhigh
zhigh := pricehConfirmed
zhighActual := actualHighConfirmed
zhighbar := bar_index - confirmationBars
if zhigh - pricelConfirmed >= reversalAmount
lastConfirmedPivotPrice := zhigh
lastConfirmedPivotActual := zhighActual
lastConfirmedPivotBar := zhighbar
lastConfirmedPivotIsHigh := true
confirmedPivotDetected := true
direction := -1
zlow := pricelConfirmed
zlowActual := actualLowConfirmed
zlowbar := bar_index - confirmationBars
else if direction == -1
if pricelConfirmed < zlow
zlow := pricelConfirmed
zlowActual := actualLowConfirmed
zlowbar := bar_index - confirmationBars
if pricehConfirmed - zlow >= reversalAmount
lastConfirmedPivotPrice := zlow
lastConfirmedPivotActual := zlowActual
lastConfirmedPivotBar := zlowbar
lastConfirmedPivotIsHigh := false
confirmedPivotDetected := true
direction := 1
zhigh := pricehConfirmed
zhighActual := actualHighConfirmed
zhighbar := bar_index - confirmationBars
var float previewPivotPrice = na
var int previewPivotBar = 0
var bool previewIsHigh = false
var bool showPreview = false
showPreview := false
if confirmationMode != "Confirmed Only"
var float zhigh_preview = na
var float zlow_preview = na
var int direction_preview = 0
if na(zhigh_preview)
zhigh_preview := priceh
zlow_preview := pricel
direction_preview := 1
if direction_preview == 1
if priceh > zhigh_preview
zhigh_preview := priceh
if zhigh_preview - pricel >= reversalAmount
previewPivotPrice := zhigh_preview
previewPivotBar := bar_index
previewIsHigh := true
showPreview := true
direction_preview := -1
zlow_preview := pricel
else if direction_preview == -1
if pricel < zlow_preview
zlow_preview := pricel
if priceh - zlow_preview >= reversalAmount
previewPivotPrice := zlow_preview
previewPivotBar := bar_index
previewIsHigh := false
showPreview := true
direction_preview := 1
zhigh_preview := priceh
var float EIL = na
var float EПоказано первые 50% кода (символов: 14634)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.