LIQS and FIBS Scalp System
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «indicator liqs and fibs scalp system for tradingview.pine» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор «LIQS and FIBS Scalp System» — это инструмент анализа и отображения на графике TradingView, написанный на Pine Script v6. Он ориентирован на выявление торговых установок для скальпинга и интрадей-торговли, комбинируя несколько модулей технического анализа.
Основные функции индикатора включают отображение VWAP, определение направления тренда на старшем таймфрейме через структурные пробои (пивоты), отслеживание ликвидностных захватов (sweeps) старших максимумов и минимумов, а также построение уровней Фибоначчи с зонами входа, целями и стоп-лоссом. Также реализована логика BOS/CHoCH (Break of Structure / Change of Character) с визуализацией кандидатов и подтверждённых пробоев.
Индикатор поддерживает пользовательские настройки цветов, стилей и количества отображаемых уровней. Встроенные вызовы alert() позволяют получать уведомления о входе цены в зоны и о событиях BOS/CHoCH. Индикатор отображается поверх графика (overlay = true).
Настройки программы
| Настройка | Описание |
|---|---|
| showVwap | Отображать ли линию VWAP на графике. |
| htf | Старший таймфрейм, с которого берётся данные для определения общего направления тренда. |
| useBiasFilter | Включает фильтр направления тренда: недействующие контр-трендовые установки отображаются серым цветом. |
| grayCol | Цвет заливки для недействующих (контр-трендовых) установок при включённом фильтре. |
| maxLevels | Максимальное количество уровней ликвидностных захватов старшего таймфрейма, отображаемых одновременно. |
| bullColor | Цвет линий и отметок для бычьих захватов (пробой старших минимумов). |
| bearColor | Цвет линий и отметок для медвежьих захватов (пробой старших максимумов). |
| showLastFib | Количество последних Фибоначчи-установок, отображаемых на графике. |
| showReactBox | Отображать ли зону входа 0.318–0.618 в каждой Фибоначчи-установке. |
| reactBoxBullCol | Цвет заливки бычьей зоны входа (0.318–0.618). |
| reactBoxBearCol | Цвет заливки медвежьей зоны входа (0.318–0.618). |
| targetBoxCol | Цвет заливки целевых зон (1.47–1.55 и 2.56–2.68). |
| slBoxCol | Цвет заливки зоны стоп-лосса (-0.23 до -0.31). |
| len | Длина фрактала для определения пивотов BOS/CHoCH (нечётное число). |
| barsToRight | Количество баров вправо для расширения линий кандидатов BOS/CHoCH за пределы текущего бара. |
| requireBody | Если включено, пробой BOS/CHoCH считается подтверждённым только при закрытии свечи за уровнем; иначе — при пробое максимумом/минимумом. |
| maxKeep | Количество последних подтверждённых пробоев BOS/CHoCH, отображаемых на графике. |
| candCol | Цвет линий-кандидатов BOS/CHoCH до подтверждения пробоя. |
| candW | Толщина линий-кандидатов BOS/CHoCH. |
| candStyleS | Стиль линий-кандидатов BOS/CHoCH (Solid, Dashed или Dotted). |
| showCandText | Отображать ли текстовые метки «BOS ↑» / «BOS ↓» у кандидатов. |
| brkUpCol | Цвет линий и меток для подтверждённых восходящих BOS/CHoCH. |
| brkDnCol | Цвет линий и меток для подтверждённых нисходящих BOS/CHoCH. |
| brkW | Толщина линий для подтверждённых пробоев BOS/CHoCH. |
| brkStyleS | Стиль линий для подтверждённых пробоев BOS/CHoCH (Solid, Dashed или Dotted). |
Поиск по коду файла
indicator("LIQS and FIBS Scalp System", overlay = true, max_lines_count = 500, max_boxes_count = 500, max_labels_count = 500)
var table wmTable = table.new(position.bottom_right, 1, 1)
if barstate.isfirst
table.cell(wmTable, 0, 0, "Telegram @SimpleForexTools", text_color = color.new(color.gray, 70), text_size = size.huge)
showVwap = input.bool(true, "Show VWAP", group="Extra Features")
vwapVal = ta.vwap
plot(showVwap ? vwapVal : na, color=color.blue, title="VWAP")
grpHtf = "Higher Timeframe Settings"
htf = input.timeframe("720", "Higher Timeframe (HTF)", group=grpHtf)
useBiasFilter = input.bool(true, "Use Bias Filter (Gray out invalid setups)", group=grpHtf)
grayCol = input.color(color.new(color.gray, 80), "Invalid Setup Box Color", group=grpHtf)
f_htf_bias() =>
pLength = 5 // Internal pivot length for HTF structure
ph = ta.pivothigh(high, pLength, pLength)
pl = ta.pivotlow(low, pLength, pLength)
var float lastPh = na
var float lastPl = na
var int trend = 0
if not na(ph)
lastPh := ph
if not na(pl)
lastPl := pl
if not na(lastPh) and close > lastPh
trend := 1
lastPh := na // reset after break
if not na(lastPl) and close < lastPl
trend := -1
lastPl := na // reset after break
trend
htfBiasDir = request.security(syminfo.tickerid, htf, f_htf_bias())
isHtfBullish = htfBiasDir == 1
isHtfBearish = htfBiasDir == -1
grpSweeps = "HTF Sweeps & Reversals"
maxLevels = input.int(3, "Max Sweep Levels (n)", minval = 1, group=grpSweeps)
bullColor = input.color(#089981, "Bullish Sweep Color (Low)", group=grpSweeps)
bearColor = input.color(#f23645, "Bearish Sweep Color (High)", group=grpSweeps)
float rsiVal = ta.rsi(close, 14)
float momVal = ta.mom(close, 10)
[diPlus, diMinus, adx] = ta.dmi(14, 14)
float atr = ta.atr(14)
type FiboSetup
line[] lines
label[] labels
box[] boxes
float bTop
float bBot
int dir // 1 for bull, -1 for bear
bool isValid
box bT3
box bT4
box bT5
box bT6
float t2Price
float t4Price
bool t2Hit
bool t4Hit
color tgCol
type Level
float price
line ln
line extLn
bool swept
bool reversed
box sweepBox
label[] extraLabels
line[] extraLines
int lastDottedTouchBar
var bullLevels = array.new<Level>()
var bearLevels = array.new<Level>()
var float currentHtfHigh = na
var int currentHtfHighBar = na
var float currentHtfLow = na
var int currentHtfLowBar = na
bool newHtfBar = ta.change(time(htf)) != 0
if newHtfBar
if not na(currentHtfHigh)
line lBear = line.new(currentHtfHighBar, currentHtfHigh, bar_index, currentHtfHigh, color = bearColor, style = line.style_solid, width = 2)
array.unshift(bearLevels, Level.new(currentHtfHigh, lBear, na, false, false, na, array.new_label(), array.new_line(), 0))
while array.size(bearLevels) > maxLevels
Level removed = array.pop(bearLevels)
line.delete(removed.ln)
line.delete(removed.extLn)
box.delete(removed.sweepBox)
for lb in removed.extraLabels
label.delete(lb)
for extLine in removed.extraLines
line.delete(extLine)
if not na(currentHtfLow)
line lBull = line.new(currentHtfLowBar, currentHtfLow, bar_index, currentHtfLow, color = bullColor, style = line.style_solid, width = 2)
array.unshift(bullLevels, Level.new(currentHtfLow, lBull, na, false, false, na, array.new_label(), array.new_line(), 0))
while array.size(bullLevels) > maxLevels
Level removed = array.pop(bullLevels)
line.delete(removed.ln)
line.delete(removed.extLn)
box.delete(removed.sweepBox)
for lb in removed.extraLabels
label.delete(lb)
for extLine in removed.extraLines
line.delete(extLine)
currentHtfHigh := high
currentHtfHighBar := bar_index
currentHtfLow := low
currentHtfLowBar := bar_index
else
if high > currentHtfHigh or na(currentHtfHigh)
currentHtfHigh := high
currentHtfHighBar := bar_index
if low < currentHtfLow or na(currentHtfLow)
currentHtfLow := low
currentHtfLowBar := bar_index
isBearishPinbar() =>
body = math.abs(close - open)
upperWick = high - math.max(close, open)
upperWick > body * 1.5 and upperWick > atr * 0.2
isBullishPinbar() =>
body = math.abs(close - open)
lowerWick = math.min(close, open) - low
lowerWick > body * 1.5 and lowerWick > atr * 0.2
formatVal(float v) => str.tostring(v, format.mintick)
if array.size(bearLevels) > 0
for i = 0 to array.size(bearLevels) - 1
Level b = array.get(bearLevels, i)
if not b.swept
line.set_x2(b.ln, bar_index)
if high > b.price
b.swept := true
line.set_style(b.ln, line.style_dashed)
b.extLn := line.new(bar_index, b.price, bar_index, b.price, color = bearColor, style = line.style_dotted, width = 2)
b.sweepBox := box.new(left = bar_index, top = high, right = bar_index + 1, bottom = b.price, border_color = bearColor, border_style = line.style_dashed, border_width = 1, bgcolor = color.new(bearColor, 90))
if close < b.price
b.reversed := true
line lRev = line.new(bar_index, high, bar_index, close, color=bearColor, width=2)
array.push(b.extraLines, lRev)
if isBearishPinbar()
label pbLb = label.new(bar_index, high + (atr * 0.2), text="▼", color=#00000000, textcolor=bearColor, style=label.style_label_down, size=size.normal)
array.push(b.extraLabels, pbLb)
else if b.swept
if not na(b.extLn)
line.set_x2(b.extLn, bar_index)
if bar_index > line.get_x1(b.extLn) and high >= b.price and close < b.price
if b.lastDottedTouchBar != bar_index
b.lastDottedTouchBar := bar_index
label dotLb = label.new(bar_index, high + (atr * 0.1), text="●", style=label.style_none, textcolor=bearColor, size=size.tiny)
array.push(b.extraLabels, dotLb)
if not b.reversed
if close < b.price
b.reversed := true
line lRev = line.new(bar_index - 1, high[1], bar_index, close, color=bearColor, width=2)
array.push(b.extraLines, lRev)
if isBearishPinbar()
label pbLb = label.new(bar_index, high + (atr * 0.2), text="▼", color=#00000000, textcolor=bearColor, style=label.style_label_down, size=size.normal)
array.push(b.extraLabels, pbLb)
if array.size(bullLevels) > 0
for i = 0 to array.size(bullLevels) - 1
Level b = array.get(bullLevels, i)
if not b.swept
line.set_x2(b.ln, bar_index)
if low < b.price
b.swept := true
line.set_style(b.ln, line.style_dashed)
b.extLn := line.new(bar_index, b.price, bar_index, b.price, color = bullColor, style = line.style_dotted, width = 2)
b.sweepBox := box.new(left = bar_index, top = b.price, right = bar_index + 1, bottom = low, border_color = bullColor, border_style = line.style_dashed, border_width = 1, bgcolor = color.new(bullColor, 90))
if close > b.price
b.reversed := true
line lRev = line.new(bar_index, low, bar_index, close, color=bullColor, width=2)
array.push(b.extraLines, lRev)
if isBullishPinbar()
label pbLb = label.new(bar_index, low - (atr * 0.2), text="▲", color=#00000000, textcolor=bullColor, style=label.style_label_up, size=size.normal)
array.push(b.extraLabels, pbLb)
else if b.swept
if not na(b.extLn)
line.set_x2(b.extLn, bar_index)
if bar_index > line.get_x1(b.extLn) and low <= b.price and close > b.price
if b.lastDottedTouchBar != bar_index
b.lastDottedTouchBar := bar_index
label dotLb = label.new(bar_index, low - (atr * 0.1), text="●", style=label.style_none, textcolor=bullColor, size=size.tiny)
array.push(b.extraLabels, dotLb)
if not b.reversed
if close > b.price
b.reversed := true
line lRev = line.new(bar_index - 1, low[1], bar_index, close, color=bullColor, width=2)
array.push(b.extraLines, lRev)
if isBullishPinbar()
label pbLb = label.new(bar_index, low - (atr * 0.2), text="▲", color=#00000000, textcolor=bullColor, style=label.style_label_up, size=size.normal)
array.push(b.extraLabels, pbLb)
grpFib = "Fibonacci Setups"
showLastFib = input.int(1, "Show Last N Fibo Setups", minval=1, maxval=10, group=grpFib)
showReactBox = input.bool(true, "Show 0.318-0.618 Reaction Box", group=grpFib)
reactBoxBullCol = input.color(color.new(color.rgb(8,153,129), 80), "Bullish Box Color", group=grpFib)
reactBoxBearCol = input.color(color.new(color.red, 80), "Bearish Box Color", group=grpFib)
targetBoxCol = input.color(color.new(color.blue, 85), "Target Box Color (1.47-1.55 & 2.56-2.68)", group=grpFib)
slBoxCol = input.color(color.new(color.red, 85), "Stop Loss Box Color (-0.23 to -0.31)", group=grpFib)
var float[] fibLevels = array.from(0.0, 1.0)
var FiboSetup[] fibSetups = array.new<FiboSetup>()
f_drawFib(float priceA, float priceB, int startBar) =>
float diff = priceB - priceA
float p318 = priceA + diff * 0.318
float p618 = priceA + diff * 0.618
float bTop = math.max(p318, p618)
float bBot = math.min(p318, p618)
int dir = diff > 0 ? 1 : -1
bool isValid = true
if useBiasFilter
if dir == 1
if (not isHtfBullish) or (close < vwapVal)
isValid := false
else
if (not isHtfBearish) or (close > vwapVal)
isValid := false
FiboSetup newSetup = FiboSetup.new(array.new_line(), array.new_label(), array.new_box(), bTop, bBot, dir, isValid, na, na, na, na, 0.0, 0.0, false, false, na)
if showReactBox
color bCol = dir > 0 ? reactBoxBullCol : reactBoxBearCol
if not isValid
bCol := grayCol
string bTxt = dir > 0 ? "Bullish Entry Zone\n" + str.tostring(bTop, format.mintick) + " - " + str.tostring(bBot, format.mintick) : "Sell Entry Zone\n" + str.tostring(bTop, format.mintick) + " - " + str.tostring(bBot, format.mintick)
if not isValid
bTxt := "Counter-Trend Zone\n(Lower Probability)"
box b = box.new(startBar, bTop, bar_index, bBot, border_color = na, bgcolor = bCol, text = bTxt, text_color = color.white, text_halign = text.align_right, text_valign = text.align_center, text_size = size.small)
array.push(newSetup.boxes, b)
float pSl1 = priceA + diff * -0.23
float pSl2 = priceA + diff * -0.31
color slColToUse = isValid ? slBoxCol : grayCol
string slTxt = "Stop Loss\n" + str.tostring(math.max(pSl1, pSl2), format.mintick) + " - " + str.tostring(math.min(pSl1, pSl2), format.mintick)
box bSl = box.new(startBar, math.max(pSl1, pSl2), bar_index, math.min(pSl1, pSl2), border_color = na, bgcolor = slColToUse, text = slTxt, text_color = color.white, text_halign = text.align_right, text_valign = text.align_center, text_size = size.small)
array.push(newSetup.boxes, bSl)
float p147 = priceA + diff * 1.47
float p155 = priceA + diff * 1.55
color tgColToUse = isValid ? targetBoxCol : grayCol
newSetup.tgCol := tgColToUse
string t1Txt = "Target 1\n" + str.tostring(math.max(p147, p155), format.mintick) + " - " + str.tostring(math.min(p147, p155), format.mintick)
box bT1 = box.new(startBar, math.max(p147, p155), bar_index, math.min(p147, p155), border_color = na, bgcolor = tgColToUse, text = t1Txt, text_color = color.white, text_halign = text.align_right, text_valign = text.align_center, text_size = size.small)
array.push(newSetup.boxes, bT1)
float p256 = priceA + diff * 2.56
float p268 = priceA + diff * 2.68
newSetup.t2Price := dir == 1 ? math.min(p256, p268) : math.max(p256, p268) // Price edge to hit T2
string t2Txt = "Target 2\n" + str.tostring(math.max(p256, pПоказано первые 50% кода (символов: 19175)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.