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

HH & LL Scalper v5.7

indicator hh & ll scalper v5.7 for tradingview.pine

Похожие материалы по тегам

#__slope direction line.mq5MQL5 / MetaTrader 5 · 1 общих теговrange breakout @meowforex1.pineTradingView · 1 общих тегов#1.mtf_collider_h4_close_13_v18bar.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit3.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit2.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit.mq4MQL4 / MetaTrader 4 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

HH & LL Scalper v5.7 — это индикатор для TradingView, написанный на Pine Script v5. Он определяет точки разворота (pivot high и pivot low) на графике, классифицирует их как HH, HL, LL и LH, а затем строит трендовые линии между ключевыми точками. Индикатор отслеживает пробитие этих линий и их откат, формируя сигналы BUY и SELL при подтверждении.

Индикатор визуально отображает уровни стоп-лосса и тейк-профита для каждого сгенерированного сигнала, рисует линии сделок и метки на графике. Также присутствует таблица статистики в правом нижнем углу, показывающая общее количество сигналов, количество прибыльных и убыточных завершений, а также процент выигрышности.

Все параметры настраиваются пользователем: количество баров для определения разворотов, цвета и стили линий, максимальная длина отображения трендовых линий, смещение стоп-лосса и длительность начальных линий уровней. Индикатор поддерживает условие оповещения TradingView для сигналов BUY и SELL с информацией об уровне SL и расстоянии от входа.

Важно: HH & LL Scalper v5.7 является индикатором анализа и отображения, а не автоматическим советником. Он не исполняет реальные сделки, а лишь визуально симулирует управление позицией на основе внутренних переменных.

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

НастройкаОписание
lb Целое число — количество баров слева, используемое для определения точек разворота (pivot high и pivot low).
rb Целое число — количество баров справа, используемое для определения точек разворота (pivot high и pivot low).
showTL Логический переключатель, управляющий отображением трендовых линий LL→HL и HH→LH на графике.
colUp Цвет нисходящей трендовой линии, соединяющей точки LL и HL.
colDn Цвет восходящей трендовой линии, соединяющей точки HH и LH.
tlSt Стиль отображения трендовых линий LL→HL и HH→LH (сплошной, пунктирный или точечный).
tlVisLen Максимальная длина в барах для отображения трендовых линий LL→HL и HH→LH на графике. После достижения лимита линия перестаёт продлеваться визуально, но логика обнаружения пробития и отката продолжает работать.
showHL Логический переключатель, управляющий отображением трендовых линий HL-HL и LH-LH на графике.
colHLHL Цвет трендовой линии, соединяющей точки HL-HL (более низкие высокие точки).
colLHLH Цвет трендовой линии, соединяющей точки LH-LH (более высокие низкие точки).
hlSt Стиль отображения трендовых линий HL-HL и LH-LH (сплошной, пунктирный или точечный).
hlVisLen Максимальная длина в барах для отображения трендовых линий HL-HL и LH-LH на графике. После достижения лимита линия перестаёт продлеваться визуально, но логика обнаружения пробития и отката продолжает работать.
showSig Логический переключатель, управляющий отображением графических меток BUY и SELL на графике при подтверждении сигнала.
showTr Логический переключатель, управляющий отображением линий сделок (вход, стоп-лосс, тейк-профит) и связанных меток на графике.
maxExtB Целое число — максимальное количество баров ожидания от момента пробития трендовой линии до подтверждения отката. Если откат не произошёл в этот срок, паттерн сбрасывается.
SL_OFFSET Числовое значение смещения стоп-лосса в пунктах, используемое при расчёте уровня SL для новых сделок.
SL_TP_DUR Целое число, задающее длительность (в барах) начальных горизонтальных линий стоп-лосса и тейк-профита на графике.
showRecOnly Логический переключатель. При активации метки стоп-лосса и тейк-профита предыдущей сделки удаляются при открытии новой, отображаются только актуальные уровни.
showBT Логический переключатель, управляющий отображением таблицы статистики сделок в правом нижнем углу графика.
showSwingLbls Логический переключатель, управляющий отображением меток HH, HL, LL и LH рядом с соответствующими точками разворота на графике.
showRetestLbl Логический переключатель, управляющий отображением меток «R» (откат) на графике в момент подтверждения отката от пробитой трендовой линии.
Получить полный код

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

indicator("HH & LL Scalper v5.7", overlay=true,
          max_lines_count=500, max_labels_count=500, max_boxes_count=300)

lb = input.int(6, "Left Bars",  minval=1)
rb = input.int(9, "Right Bars", minval=1)

GTL      = "Trendlines — LL→HL / HH→LH"
showTL   = input.bool(true,               "Show",                     group=GTL, inline="t1")
colUp    = input.color(color.lime,        "↑",                        group=GTL, inline="t1")
colDn    = input.color(color.red,         "↓",                        group=GTL, inline="t1")
tlSt     = input.string(line.style_solid, "Style",                    group=GTL,
           options=[line.style_solid, line.style_dashed, line.style_dotted])
tlVisLen = input.int(30, "Max Length (bars)", group=GTL, minval=1, maxval=500,
           tooltip="Trendline displays at most N bars since drawing (or until the break bar if earlier). Break / Retest / Signal are still detected after this limit.")

GHL      = "Trendlines — HL-HL / LH-LH"
showHL   = input.bool(true,               "Show",                     group=GHL, inline="t2")
colHLHL  = input.color(color.aqua,        "HL-HL",                    group=GHL, inline="t2")
colLHLH  = input.color(color.orange,      "LH-LH",                    group=GHL, inline="t2")
hlSt     = input.string(line.style_solid, "Style",                    group=GHL,
           options=[line.style_solid, line.style_dashed, line.style_dotted])
hlVisLen = input.int(30, "Max Length (bars)", group=GHL, minval=1, maxval=500,
           tooltip="Trendline displays at most N bars since drawing (or until the break bar if earlier). Break / Retest / Signal are still detected after this limit.")

GE          = "Entry / SL / TP"
showSig     = input.bool(true,  "Show Signals",           group=GE)
showTr      = input.bool(true,  "Show Trade Lines",        group=GE)
maxExtB     = input.int(10,     "Pattern Timeout (bars)",  group=GE, minval=10, maxval=500)
SL_OFFSET   = input.float(3.0,  "SL Offset (pts)",         group=GE, minval=0.0, step=0.5)
SL_TP_DUR   = input.int(16,     "Initial Line Duration",   group=GE, minval=1, maxval=200)
showRecOnly = input.bool(true,  "Show Recent Labels Only", group=GE)
showBT      = input.bool(true,  "Show Backtest Table",     group=GE)

GS            = "Debug Labels"
showSwingLbls = input.bool(false, "Show HL/HH/LL/LH Labels", group=GS)
showRetestLbl = input.bool(false, "Show Retest (R) Labels",   group=GS)

ph = ta.pivothigh(lb, rb)
pl = ta.pivotlow(lb, rb)

hl = ph ? 1 : pl ? -1 : na
zz = ph ? ph : pl ? pl : na

zz := (pl and hl == -1 and ta.valuewhen(hl, hl, 1) == -1 and pl > ta.valuewhen(zz, zz, 1)) ? na : zz
zz := (ph and hl ==  1 and ta.valuewhen(hl, hl, 1) ==  1 and ph < ta.valuewhen(zz, zz, 1)) ? na : zz
hl := (hl == -1 and ta.valuewhen(hl, hl, 1) ==  1 and zz > ta.valuewhen(zz, zz, 1)) ? na : hl
hl := (hl ==  1 and ta.valuewhen(hl, hl, 1) == -1 and zz < ta.valuewhen(zz, zz, 1)) ? na : hl
zz := na(hl) ? na : zz

findprevious() =>
    ehl  = hl == 1 ? -1 : 1
    loc1 = 0.0
    loc2 = 0.0
    loc3 = 0.0
    loc4 = 0.0
    xx   = 0
    for x = 1 to 1000
        if hl[x] == ehl and not na(zz[x])
            loc1 := zz[x]
            xx   := x + 1
            break
    ehl := hl
    for x = xx to 1000
        if hl[x] == ehl and not na(zz[x])
            loc2 := zz[x]
            xx   := x + 1
            break
    ehl := hl == 1 ? -1 : 1
    for x = xx to 1000
        if hl[x] == ehl and not na(zz[x])
            loc3 := zz[x]
            xx   := x + 1
            break
    ehl := hl
    for x = xx to 1000
        if hl[x] == ehl and not na(zz[x])
            loc4 := zz[x]
            break
    [loc1, loc2, loc3, loc4]

float a = na, float b = na, float c = na, float d = na, float e = na
if not na(hl)
    [loc1, loc2, loc3, loc4] = findprevious()
    a := zz
    b := loc1
    c := loc2
    d := loc3
    e := loc4

_hh = not na(zz) and (a > b and a > c and c > b and c > d)
_ll = not na(zz) and (a < b and a < c and c < b and c < d)
_hl = not na(zz) and ((a >= c and (b > c and b > d and d > c and d > e)) or (a < b and a > c and b < d))
_lh = not na(zz) and ((a <= c and (b < c and b < d and d < c and d < e)) or (a > b and a < c and b > d))

plotshape(showSwingLbls and _hl, text="HL", title="Higher Low",  style=shape.labelup,   color=color.lime, textcolor=color.black, location=location.belowbar, offset=-rb)
plotshape(showSwingLbls and _hh, text="HH", title="Higher High", style=shape.labeldown, color=color.lime, textcolor=color.black, location=location.abovebar, offset=-rb)
plotshape(showSwingLbls and _ll, text="LL", title="Lower Low",   style=shape.labelup,   color=color.red,  textcolor=color.white, location=location.belowbar, offset=-rb)
plotshape(showSwingLbls and _lh, text="LH", title="Lower High",  style=shape.labeldown, color=color.red,  textcolor=color.white, location=location.abovebar, offset=-rb)

float res = na
float sup = na
res   := _lh ? zz : res[1]
sup   := _hl ? zz : sup[1]
int trend = na
trend := close > res ? 1 : close < sup ? -1 : nz(trend[1])
res   := ((trend == 1 and _hh) or (trend == -1 and _lh)) ? zz : res
sup   := ((trend == 1 and _hl) or (trend == -1 and _ll)) ? zz : sup

var line  tu_ln       = na
var bool  tu_vis      = false
var bool  tu_det      = false
var int   tu_draw_bar = na
var float tu_sl       = na
var int   tu_x1       = na
var float tu_y1       = na

var line  td_ln       = na
var bool  td_vis      = false
var bool  td_det      = false
var int   td_draw_bar = na
var float td_sl       = na
var int   td_x1       = na
var float td_y1       = na

var float pv_ll_v = na
var int   pv_ll_b = na
var float pv_hh_v = na
var int   pv_hh_b = na
var bool  ll_used = true
var bool  hh_used = true

var float hlhl_prev_v  = na
var int   hlhl_prev_b  = na
var bool  hlhl_valid   = false

var line  hlhl_ln       = na
var bool  hlhl_vis      = false
var bool  hlhl_det      = false
var int   hlhl_draw_bar = na
var float hlhl_sl       = na
var int   hlhl_x1       = na
var float hlhl_y1       = na

var float lhlh_prev_v  = na
var int   lhlh_prev_b  = na
var bool  lhlh_valid   = false

var line  lhlh_ln       = na
var bool  lhlh_vis      = false
var bool  lhlh_det      = false
var int   lhlh_draw_bar = na
var float lhlh_sl       = na
var int   lhlh_x1       = na
var float lhlh_y1       = na

var bool  in_trade       = false
var float active_sl      = na
var float active_tp1     = na
var bool  active_is_long = false

var label sl_label           = na
var label tp1_label          = na
var line  last_sl_line       = na
var line  last_tp1_line      = na
var line  last_entry_line    = na
var box   last_tp1_box       = na
var box   last_sl_box        = na
var bool  lines_active       = false
var float active_sl_ref      = na
var float active_tp1_ref     = na
var bool  active_is_long_ref = false

var string pattern_state  = "Idle"
var int    break_bar      = na
var float  break_close_v  = na
var int    break_dir      = 0
var float  break_tl_slope = na
var int    break_tl_x1    = na
var float  break_tl_y1    = na
var int    retest_bar     = na
var line   key_line       = na
var line   break_tl_ref   = na

var int bt_tot = 0
var int bt_win = 0
var int bt_los = 0

float bull_sl_level  = ta.lowest (low[1],  30)
float bear_sl_level  = ta.highest(high[1], 30)
float bull_sl_dist   = close - bull_sl_level
float bear_sl_dist   = bear_sl_level - close
float bull_tp1_level = close + bull_sl_dist
float bear_tp1_level = close - bear_sl_dist

bool ev_tp = false
bool ev_sl = false

if in_trade and not na(active_sl) and not na(active_tp1)
    bool tp1_hit = active_is_long ? high >= active_tp1 : low  <= active_tp1
    bool sl_hit  = active_is_long ? low  <= active_sl  : high >= active_sl

    if tp1_hit and not sl_hit
        in_trade     := false
        lines_active := false
        ev_tp        := true
        bt_win       += 1
        bt_tot       += 1
        if not na(key_line)
            line.delete(key_line)
            key_line := na
        pattern_state  := "Idle"
        break_bar      := na
        break_close_v  := na
        break_dir      := 0
        break_tl_slope := na
        break_tl_x1    := na
        break_tl_y1    := na
        retest_bar     := na
        break_tl_ref   := na

    else if sl_hit
        in_trade     := false
        lines_active := false
        ev_sl        := true
        bt_los       += 1
        bt_tot       += 1
        if not na(key_line)
            line.delete(key_line)
            key_line := na
        pattern_state  := "Idle"
        break_bar      := na
        break_close_v  := na
        break_dir      := 0
        break_tl_slope := na
        break_tl_x1    := na
        break_tl_y1    := na
        retest_bar     := na
        break_tl_ref   := na

if ev_tp and showTr
    label.new(bar_index, active_tp1,
              text      = "✓  Done",
              style     = label.style_label_left,
              color     = color.new(#2962FF, 10),
              textcolor = color.white,
              size      = size.small)

bool  brk_detected = false
bool  brk_conflict = false
int   brk_dir_raw  = 0
float brk_slope    = na
int   brk_x1       = na
float brk_y1       = na
line  brk_line_tmp = na

if tu_det and not na(tu_ln)
    pc = tu_y1 + tu_sl * (bar_index     - tu_x1)
    pp = tu_y1 + tu_sl * (bar_index - 1 - tu_x1)
    if close[1] >= pp and close < pc
        tu_det := false
        tu_vis := false   // freeze trendline at the break bar
        if not brk_detected
            brk_detected := true
            brk_dir_raw  := -1
            brk_slope    := tu_sl
            brk_x1       := tu_x1
            brk_y1       := tu_y1
            brk_line_tmp := tu_ln
        else if brk_dir_raw != -1
            brk_conflict := true

if td_det and not na(td_ln)
    pc = td_y1 + td_sl * (bar_index     - td_x1)
    pp = td_y1 + td_sl * (bar_index - 1 - td_x1)
    if close[1] <= pp and close > pc
        td_det := false
        td_vis := false
        if not brk_detected
            brk_detected := true
            brk_dir_raw  := 1
            brk_slope    := td_sl
            brk_x1       := td_x1
            brk_y1       := td_y1
            brk_line_tmp := td_ln
        else if brk_dir_raw != 1
            brk_conflict := true

if hlhl_det and not na(hlhl_ln)
    pc = hlhl_y1 + hlhl_sl * (bar_index     - hlhl_x1)
    pp = hlhl_y1 + hlhl_sl * (bar_index - 1 - hlhl_x1)
    if close[1] >= pp and close < pc
        hlhl_det := false
        hlhl_vis := false
        if not brk_detected
            brk_detected := true
            brk_dir_raw  := -1
            brk_slope    := hlhl_sl
            brk_x1       := hlhl_x1
            brk_y1       := hlhl_y1
            brk_line_tmp := hlhl_ln
        else if brk_dir_raw != -1
            brk_conflict := true

if lhlh_det and not na(lhlh_ln)
    pc = lhlh_y1 + lhlh_sl * (bar_index     - lhlh_x1)
    pp = lhlh_y1 + lhlh_sl * (bar_index - 1 - lhlh_x1)
    if close[1] <= pp and close > pc
        lhlh_det := false
        lhlh_vis := false
        if not brk_detected
            brk_detected := true
            brk_dir_raw  := 1
            brk_slope    := lhlh_sl
            brk_x1       := lhlh_x1
            brk_y1       := lhlh_y1
            brk_line_tmp := lhlh_ln
        else if brk_dir_raw != 1
            brk_conflict := true

if brk_detected and not brk_conflict and not in_trade
    if not na(key_line)
        line.delete(key_line)
        key_line := na
    break_bar      := bar_index
    break_close_v  := close
    break_dir      := brk_dir_raw
    break_tl_slope := brk_slope
    break_tl_x1    := brk_x1
    break_tl_y1    := brk_y1
    retest_bar     := na
    pattern_state  := "Break, Wait Retest"
    break_tl_ref   := brk_line_tmp
    key_line := line.new(bar_index, close, bar_index + maxExtB, close,
                 color=color.yellow, width=1, style=line.style_dashed)

if not na(key_line) and
   (pattern_state == "Break, Wait Retest" or pattern_state == "Retested")
    line.set_x2(key_line, bar_index + 1)

if pattern_state == "Break, Wait Retest" and not na(break_bar)

    if bar_index - break_bar >= maxExtB
        if not na(key_line)
            line.delete(key_line)
            key_line := na
        pattern_state  := "Idle"
        break_bar      := na
        break_close_v  := na
        break_dir      := 0
        break_tl_slope := na
        break_tl_x1    := na
        break_tl_y1    := na
        retest_bar     := na
        break_tl_ref   := na

    else if bar_index > break_bar and not na(break_tl_slope)
        float tl_val_now = break_tl_y1 + break_tl_slope * (bar_index - break_tl_x1)

        bool retest_ok = break_dir == -1 ? high >= tl_val_now
                                         : low  <= tl_val_now

        if retest_ok
            pattern_state := "Retested"
            retest_bar    := bar_index
            if showRetestLbl
                if break_dir == -1
                    label.new(bar_index, high,
                              text="R", style=label.style_label_down,
                              color=color.yellow, textcolor=color.black, size=size.tiny)
                else
                    label.new(bar_index, low,
                              text="R", style=label.style_label_up,
                              color=color.yellow, textcolor=color.black, size=size.tiny)

bool sig_long  = false
bool sig_short = false

if pattern_state == "Retested" and not na(break_close_v) and not na(retest_bar)

    if bar_index - break_bar >= maxExtB
        if not na(key_line)
            line.delete(key_line)
            key_line := na
        pattern_state  := "Idle"
        break_bar      := na
        break_close_v  := na
        break_dir      := 0
        break_tl_slope := na
        break_tl_x1    := na
        break_tl_y1    := na
        retest_bar     := na
        break_tl_ref   := na

    else if bar_index >= retest_bar
        if break_dir == -1 and close < break_close_v and close < open
            sig_short     := true
            pattern_state := "Open"
            break_tl_ref  := na
            if not na(key_line)
                line.delete(key_line)
                key_line := na

        else if break_dir == 1 and close > break_close_v and close > open
            sig_long      := true
            pattern_state := "Open"
            break_tl_ref  := na
            if not na(key_line)
                line.delete(key_line)
                key_line := na

b

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

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

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

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

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

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

Стоимость полного кода
1 945,50₽ ≈ $23.78