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

IFVG Sniper Entry Engine

indicator ifvg sniper entry engine for tradingview.pine
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

IFVG Sniper Entry Engine — это индикатор для TradingView, работающий на графике в режиме наложения (overlay). Он отслеживает скрытые зоны несоответствия цены (Hidden FVG) и фиксирует их инверсию, когда цена пробивает эти зоны в противоположном направлении. Каждая инвертированная зона отображается линией и меткой с указанием направления и цены. Индикатор предоставляет визуальные сигналы входа с настраиваемыми уровнями стоп-лосса и тейк-профита, а также информационную панель с текущим состоянием сделки и статистикой.

Настройки программы

НастройкаОписание
maxHiddenFVG Память скрытых FVG — Максимальное количество скрытых зон FVG, хранимых в памяти индикатора.
maxFvgAge Максимальный возраст скрытого FVG — Максимальное количество баров, после которого скрытая зона FVG удаляется из памяти.
minGapTicks Минимальный размер FVG в тиках — Минимальный размер зазора в тиках для распознавания скрытой зоны FVG.
maxVisibleIFVG Максимум видимых IFVG — Ограничение на количество отображаемых линий инвертированных зон IFVG на графике.
ifvgLengthBars Длина линии IFVG в барах — Количество баров, на которое рисуется горизонтальная линия инвертированной зоны.
linePriceMode Режим цены линии IFVG — Определяет, по какой цене строится горизонтальная линия инвертированной зоны: по пробитой границе, по цене подтверждения или по середине.
deleteInvalidIFVG Удаление недействительных IFVG — Автоматически удаляет линии IFVG, которые были инвертированы ценой в обратном направлении.
filterMode Режим фильтрации IFVG — Степень строгости фильтра качества инвертированных зон: выключен, свободный, сбалансированный, строгий или пользовательский.
customMinGapAtr Пользовательский минимальный зазор / ATR — Минимальный размер зазора относительно ATR при пользовательском режиме фильтрации.
customMinBodyRatio Пользовательское минимальное соотношение тела свечи — Минимальное соотношение тела свечи к диапазону при пользовательском режиме фильтрации.
customMinRangeAtr Пользовательский минимальный диапазон / ATR — Минимальный диапазон свечи относительно ATR при пользовательском режиме фильтрации.
customBreakAtr Пользовательский буфер чистого прорыва / ATR — Буфер для подтверждения прорыва цены через зону при пользовательском режиме фильтрации.
entryMode Режим цены входа — Определяет, по какой цене фиксируется вход: по линии IFVG или по цене подтверждения закрытия.
atrLen Длина ATR — Период расчёта среднего истинного диапазона (ATR), используемого для расчёта риска.
slAtrMult Множитель ATR для стоп-лосса — Множитель ATR, определяющий расстояние стоп-лосса от точки входа.
tpRRInput Соотношение риска и прибыли для тейк-профита — Выбор множителя риска для расчёта уровня тейк-профита (1R, 2R, 3R и т.д.).
initialBoxLength Начальная длина блока TP/SL — Количество баров, на которое изначально рисуются блоки стоп-лосса и тейк-профита.
bullIFVGColor Цвет бычьей IFVG — Цвет линии и метки для бычьей инвертированной зоны IFVG.
bearIFVGColor Цвет медвежьей IFVG — Цвет линии и метки для медвежьей инвертированной зоны IFVG.
ifvgLabelSizeInput Размер метки IFVG — Размер текста меток инвертированных зон IFVG на графике.
entryColor Цвет линии входа — Цвет горизонтальной линии точки входа в сделку.
slColor Цвет стоп-лосса — Цвет линии и блока стоп-лосса.
tpColor Цвет тейк-профита — Цвет линии и блока тейк-профита.
dashboardBg Фон панели — Фоновый цвет информационной панели в правом верхнем углу графика.
dashboardText Текст панели — Цвет текста информационной панели.
showDashboard Показать панель — Включает или отключает отображение информационной панели с данными сделки.
Получить полный код

Поиск по коду файла

indicator("IFVG Sniper Entry Engine", overlay=true, max_lines_count=500, max_labels_count=500, max_boxes_count=100)

groupIFVG = "⚙️ 01. IFVG Engine"

maxHiddenFVG = input.int(120, "Hidden FVG Memory", minval=10, maxval=500, group=groupIFVG)
maxFvgAge = input.int(60, "Max Hidden FVG Age", minval=5, maxval=500, group=groupIFVG)
minGapTicks = input.int(0, "Minimum FVG Size / Ticks", minval=0, group=groupIFVG)

maxVisibleIFVG = input.int(20, "Max Visible IFVG", minval=1, maxval=100, group=groupIFVG)
ifvgLengthBars = input.int(50, "IFVG Line Length Bars", minval=5, maxval=500, group=groupIFVG)

linePriceMode = input.string(
     "Broken Boundary",
     "IFVG Line Price",
     options=["Broken Boundary", "Confirmation Close", "Midpoint"],
     group=groupIFVG
)

deleteInvalidIFVG = input.bool(true, "Delete Invalidated IFVG", group=groupIFVG)

groupFilter = "💎 02. IFVG Filter"

filterMode = input.string(
     "Balanced",
     "IFVG Filter Mode",
     options=["Off", "Loose", "Balanced", "Strict", "Custom"],
     group=groupFilter
)

customMinGapAtr = input.float(
     0.25,
     "Custom Minimum Gap / ATR",
     minval=0.0,
     step=0.05,
     group=groupFilter
)

customMinBodyRatio = input.float(
     0.50,
     "Custom Minimum Body Ratio",
     minval=0.0,
     maxval=1.0,
     step=0.05,
     group=groupFilter
)

customMinRangeAtr = input.float(
     0.60,
     "Custom Minimum Range / ATR",
     minval=0.0,
     step=0.05,
     group=groupFilter
)

customBreakAtr = input.float(
     0.05,
     "Custom Clean Break Buffer / ATR",
     minval=0.0,
     step=0.01,
     group=groupFilter
)

groupTrade = "🎯 03. IFVG Entry Model"

entryMode = input.string(
     "IFVG Line",
     "Entry Price",
     options=["IFVG Line", "Confirmation Close"],
     group=groupTrade
)

atrLen = input.int(14, "ATR Length", minval=1, group=groupTrade)
slAtrMult = input.float(1.5, "SL ATR Multiplier", minval=0.1, step=0.1, group=groupTrade)

tpRRInput = input.string(
     "3R",
     "Take Profit RR",
     options=["1R", "2R", "3R", "4R", "5R", "6R"],
     group=groupTrade
)

initialBoxLength = input.int(5, "Initial TP / SL Box Length", minval=1, maxval=50, group=groupTrade)

groupStyle = "🎨 04. Visual Style"

bullIFVGColor = input.color(color.rgb(0, 120, 255), "Bullish IFVG Blue", group=groupStyle)
bearIFVGColor = input.color(color.rgb(255, 60, 70), "Bearish IFVG Red", group=groupStyle)

ifvgLabelSizeInput = input.string(
     "Large",
     "IFVG Label Size",
     options=["Tiny", "Small", "Normal", "Large", "Huge"],
     group=groupStyle
)

entryColor = input.color(color.white, "Entry Line Color", group=groupStyle)
slColor = input.color(color.rgb(220, 50, 50), "SL Color", group=groupStyle)
tpColor = input.color(color.rgb(0, 190, 110), "TP Color", group=groupStyle)

dashboardBg = input.color(color.rgb(12, 12, 16), "Dashboard Background", group=groupStyle)
dashboardText = input.color(color.white, "Dashboard Text", group=groupStyle)

groupDashboard = "📟 05. Dashboard"
showDashboard = input.bool(true, "Show Dashboard", group=groupDashboard)

atrValue = ta.atr(atrLen)
safeAtr = na(atrValue) or atrValue <= 0.0 ? syminfo.mintick : atrValue

tpRR =
     tpRRInput == "1R" ? 1.0 :
     tpRRInput == "2R" ? 2.0 :
     tpRRInput == "3R" ? 3.0 :
     tpRRInput == "4R" ? 4.0 :
     tpRRInput == "5R" ? 5.0 :
     6.0

f_minGapAtr() =>
    filterMode == "Off" ? 0.0 :
     filterMode == "Loose" ? 0.15 :
     filterMode == "Balanced" ? 0.25 :
     filterMode == "Strict" ? 0.40 :
     customMinGapAtr

f_minBodyRatio() =>
    filterMode == "Off" ? 0.0 :
     filterMode == "Loose" ? 0.40 :
     filterMode == "Balanced" ? 0.50 :
     filterMode == "Strict" ? 0.60 :
     customMinBodyRatio

f_minRangeAtr() =>
    filterMode == "Off" ? 0.0 :
     filterMode == "Loose" ? 0.40 :
     filterMode == "Balanced" ? 0.60 :
     filterMode == "Strict" ? 0.85 :
     customMinRangeAtr

f_breakBufferAtr() =>
    filterMode == "Off" ? 0.0 :
     filterMode == "Loose" ? 0.00 :
     filterMode == "Balanced" ? 0.05 :
     filterMode == "Strict" ? 0.10 :
     customBreakAtr

f_qualityPass(float _gapAtr, float _bodyRatio, float _rangeAtr) =>
    filterMode == "Off" or (
         _gapAtr >= f_minGapAtr() and
         _bodyRatio >= f_minBodyRatio() and
         _rangeAtr >= f_minRangeAtr()
    )

f_priceText(float _price) =>
    na(_price) ? "-" : str.tostring(_price, format.mintick)

f_linePrice(float _top, float _bot, float _confirmClose, int _dir) =>
    float price = na

    if linePriceMode == "Confirmation Close"
        price := _confirmClose
    else if linePriceMode == "Midpoint"
        price := (_top + _bot) / 2.0
    else
        price := _dir == 1 ? _top : _bot

    price

f_ifvgLabelSize() =>
    ifvgLabelSizeInput == "Tiny" ? size.tiny :
     ifvgLabelSizeInput == "Small" ? size.small :
     ifvgLabelSizeInput == "Normal" ? size.normal :
     ifvgLabelSizeInput == "Large" ? size.large :
     size.huge

f_statusText(int _status) =>
    _status == 1 ? "ACTIVE" :
     _status == 2 ? "TP HIT" :
     _status == -1 ? "SL HIT" :
     "WAITING"

f_statusColor(int _status) =>
    _status == -1 ? color.new(slColor, 0) :
     _status == 2 ? color.new(tpColor, 0) :
     _status == 1 ? color.new(color.orange, 15) :
     color.new(color.gray, 35)

var array<float> rawTops = array.new_float()
var array<float> rawBots = array.new_float()
var array<int> rawDirs = array.new_int()
var array<int> rawAges = array.new_int()

var array<float> rawGapAtr = array.new_float()
var array<float> rawBodyRatio = array.new_float()
var array<float> rawRangeAtr = array.new_float()

var array<line> ifvgLines = array.new_line()
var array<label> ifvgLabels = array.new_label()

var array<float> ifvgTops = array.new_float()
var array<float> ifvgBots = array.new_float()
var array<int> ifvgDirs = array.new_int()

f_deleteVisibleIFVG(int _idx) =>
    line ln = array.get(ifvgLines, _idx)
    label lb = array.get(ifvgLabels, _idx)

    line.delete(ln)

    if not na(lb)
        label.delete(lb)

    array.remove(ifvgLines, _idx)
    array.remove(ifvgLabels, _idx)
    array.remove(ifvgTops, _idx)
    array.remove(ifvgBots, _idx)
    array.remove(ifvgDirs, _idx)

f_addVisibleIFVG(int _bar, float _top, float _bot, float _confirmClose, int _dir) =>
    color c = _dir == 1 ? bullIFVGColor : bearIFVGColor
    float linePrice = f_linePrice(_top, _bot, _confirmClose, _dir)

    string labelText = _dir == 1 ? "IFVG+" : "IFVG-"

    string tooltip =
         "IFVG Sniper Entry Engine\n" +
         "Direction: " + (_dir == 1 ? "Bullish IFVG+" : "Bearish IFVG-") + "\n" +
         "Filter Mode: " + filterMode + "\n" +
         "Top: " + str.tostring(_top, format.mintick) + "\n" +
         "Bottom: " + str.tostring(_bot, format.mintick) + "\n" +
         "Line Price: " + str.tostring(linePrice, format.mintick)

    line ln = line.new(
         x1=_bar,
         y1=linePrice,
         x2=_bar + ifvgLengthBars,
         y2=linePrice,
         xloc=xloc.bar_index,
         extend=extend.none,
         color=c,
         width=1
    )

    label lb = label.new(
         x=_bar + ifvgLengthBars,
         y=linePrice,
         text=labelText,
         xloc=xloc.bar_index,
         yloc=yloc.price,
         style=label.style_label_left,
         color=color.new(c, 0),
         textcolor=color.white,
         size=f_ifvgLabelSize(),
         tooltip=tooltip
    )

    array.push(ifvgLines, ln)
    array.push(ifvgLabels, lb)

    array.push(ifvgTops, _top)
    array.push(ifvgBots, _bot)
    array.push(ifvgDirs, _dir)

    while array.size(ifvgLines) > maxVisibleIFVG
        f_deleteVisibleIFVG(0)

    linePrice

f_updateIFVGInvalidation() =>
    if deleteInvalidIFVG and barstate.isconfirmed and array.size(ifvgLines) > 0
        int count = array.size(ifvgLines)

        for j = 0 to count - 1
            int i = count - 1 - j

            if i >= 0 and i < array.size(ifvgLines)
                float top = array.get(ifvgTops, i)
                float bot = array.get(ifvgBots, i)
                int dir = array.get(ifvgDirs, i)

                bool invalidBull = dir == 1 and close < bot
                bool invalidBear = dir == -1 and close > top

                if invalidBull or invalidBear
                    f_deleteVisibleIFVG(i)

var array<box> tradeBoxes = array.new_box()
var array<line> tradeLines = array.new_line()
var array<label> tradeLabels = array.new_label()

f_clearActiveTradeObjects() =>
    while array.size(tradeBoxes) > 0
        box bx = array.shift(tradeBoxes)
        box.delete(bx)

    while array.size(tradeLines) > 0
        line ln = array.shift(tradeLines)
        line.delete(ln)

    while array.size(tradeLabels) > 0
        label lb = array.shift(tradeLabels)
        label.delete(lb)

f_drawActiveTradeObjects(int _bar, float _entry, float _sl, float _tp) =>
    f_clearActiveTradeObjects()

    int rightBar = _bar + initialBoxLength

    float tpTop = math.max(_entry, _tp)
    float tpBot = math.min(_entry, _tp)

    float slTop = math.max(_entry, _sl)
    float slBot = math.min(_entry, _sl)

    box tpBox = box.new(
         left=_bar,
         top=tpTop,
         right=rightBar,
         bottom=tpBot,
         xloc=xloc.bar_index,
         bgcolor=color.new(tpColor, 82),
         border_color=color.new(tpColor, 0),
         border_width=1
    )

    box slBox = box.new(
         left=_bar,
         top=slTop,
         right=rightBar,
         bottom=slBot,
         xloc=xloc.bar_index,
         bgcolor=color.new(slColor, 82),
         border_color=color.new(slColor, 0),
         border_width=1
    )

    line entryLine = line.new(
         x1=_bar,
         y1=_entry,
         x2=rightBar,
         y2=_entry,
         xloc=xloc.bar_index,
         color=entryColor,
         width=2
    )

    line slLine = line.new(
         x1=_bar,
         y1=_sl,
         x2=rightBar,
         y2=_sl,
         xloc=xloc.bar_index,
         color=slColor,
         width=2
    )

    line tpLine = line.new(
         x1=_bar,
         y1=_tp,
         x2=rightBar,
         y2=_tp,
         xloc=xloc.bar_index,
         color=tpColor,
         width=2
    )

    label entryLabel = label.new(
         x=rightBar,
         y=_entry,
         text="ENTRY",
         xloc=xloc.bar_index,
         yloc=yloc.price,
         style=label.style_label_left,
         color=entryColor,
         textcolor=color.black,
         size=size.small
    )

    label slLabel = label.new(
         x=rightBar,
         y=_sl,
         text="SL",
         xloc=xloc.bar_index,
         yloc=yloc.price,
         style=label.style_label_left,
         color=slColor,
         textcolor=color.white,
         size=size.small
    )

    label tpLabel = label.new(
         x=rightBar,
         y=_tp,
         text="TP " + tpRRInput,
         xloc=xloc.bar_index,
         yloc=yloc.price,
         style=label.style_label_left,
         color=tpColor,
         textcolor=color.white,
         size=size.small
    )

    array.push(tradeBoxes, tpBox)
    array.push(tradeBoxes, slBox)

    array.push(tradeLines, entryLine)
    array.push(tradeLines, slLine)
    array.push(tradeLines, tpLine)

    array.push(tradeLabels, entryLabel)
    array.push(tradeLabels, slLabel)
    array.push(tradeLabels, tpLabel)

f_updateActiveTradeRight(int _right) =>
    if array.size(tradeBoxes) 

Показано первые 50% кода (символов: 16826)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
1 682,60₽ ≈ $20.56