HH & LL Scalper v5.7
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «indicator hh & ll scalper v5.7 for tradingview.pine» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.