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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.