← К каталогу
Исходный код · ID 4169

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 и перейдите к оплате.

Стоимость полного кода
1 463,40₽ ≈ $17.89