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

geometric pattern.pine

Вы автор или правообладатель?

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

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

О программе

Скрипт для TradingView, предназначенный для автоматического обнаружения геометрических гармонических ценовых паттернов на графике. Использует алгоритм определения пивотов (zigzag) для выделения ключевых точек разворота цены, а затем проверяет пропорции между ногами паттерна на соответствие уровням Фибоначчи. Поддерживается более десятка классических гармонических структур, включая Gartley, Bat, Butterfly, Crab и другие.

Обнаруженные паттерны отображаются на графике в виде структурных линий, подписей вершин, зон потенциального разворота и аннотаций с коэффициентами Фибоначчи. Пользователь может выбрать режим отображения: постоянное отображение всех подтверждённых паттернов или показ только текущего формирующегося паттерна в реальном времени. Доступны различные цветовые схемы и настройки прозрачности заливки.

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

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

НастройкаОписание
zigzag_len Период свинг-пивотов ZigZag — Период lookback для определения истинных рыночных свингов. Большее значение даёт более сглаженные пивоты.
p_right Глубина подтверждения пивота — Количество баров для подтверждения разворотной точки свинга.
fib_tol_pct Допустимая погрешность Фибоначчи — Процентное отклонение, допускаемое при сопоставлении с эталонными коэффициентами Фибоначчи.
dir_filter Фильтр направления — Фильтр по направлению паттернов: только бычьи, только медвежьи или оба направления.
min_bars_len Минимальная длина паттерна (свечей) — Минимальное количество баров, за которое должен быть сформирован паттерн, чтобы отсеять микрофлуктуации.
max_bars_len Максимальная длина паттерна (свечей) — Максимальное количество баров для признания структуры допустимым паттерном.
keep_all_pat Сохранять все подтверждённые паттерны на графике — При включении каждый подтверждённый паттерн остаётся постоянно отображённым на всей истории графика.
show_forming Показывать формирующийся паттерн в точке D — Отображает предварительный просмотр гармонической структуры в реальном времени по мере формирования ноги CD.
show_gartley Gartley — Включает обнаружение и отображение паттерна Gartley.
show_bat Bat — Включает обнаружение и отображение паттерна Bat.
show_altbat Alternate Bat — Включает обнаружение и отображение альтернативного паттерна Bat.
show_butterfly Butterfly — Включает обнаружение и отображение паттерна Butterfly.
show_crab Crab — Включает обнаружение и отображение паттерна Crab.
show_deepcrab Deep Crab — Включает обнаружение и отображение паттерна Deep Crab.
show_shark Shark — Включает обнаружение и отображение паттерна Shark.
show_cypher Cypher — Включает обнаружение и отображение паттерна Cypher.
show_nenstar Nen Star — Включает обнаружение и отображение паттерна Nen Star.
show_five0 5-0 Pattern — Включает обнаружение и отображение паттерна 5-0.
show_abcd AB=CD — Включает обнаружение и отображение паттерна AB=CD.
show_threedrv 3-Drive — Включает обнаружение и отображение паттерна 3-Drive.
show_swans White Swan & Black Swan — Включает обнаружение и отображение экзотических паттернов White Swan и Black Swan.
show_antis Anti-Harmonic Patterns — Включает обнаружение и отображение анти-гармонических структур.
_mode Палитра цветов паттернов — Выбор режима окраски: индивидуальные цвета для каждого паттерна, бычья/медвежья тема или монохромный минимализм.
shading_mode Режим заливки крыльев — Определяет способ заливки геометрических крыльев паттернов: для всех, только для последнего или без заливки.
shading_transp Прозрачность заливки крыльев — Уровень прозрачности заливки крыльев паттернов в диапазоне от 10 до 95.
show_prz_box Показать зоны валидации PRZ — Отрисовывает прямоугольную зону потенциального разворода в точке D.
show_ratios Показать коэффициенты Фибоначчи на ногах — Отображает числовые значения коэффициентов Фибоначчи на каждой ноге паттерна.
show_vertices Показать метки вершин — Отрисовывает подписи X, A, B, C, D на соответствующих точках свингов.
bull_col_def Цвет бычьих паттернов по умолчанию — Базовый цвет для бычьих гармонических структур в режиме общей тематики.
bear_col_def Цвет медвежьих паттернов по умолчанию — Базовый цвет для медвежьих гармонических структур в режиме общей тематики.
col_gartley Цвет Gartley — Индивидуальный цвет для паттерна Gartley в режиме раздельной палитры.
col_bat Цвет Bat — Индивидуальный цвет для паттерна Bat в режиме раздельной палитры.
col_altbat Цвет Alternate Bat — Индивидуальный цвет для альтернативного Bat в режиме раздельной палитры.
col_butterfly Цвет Butterfly — Индивидуальный цвет для паттерна Butterfly в режиме раздельной палитры.
col_crab Цвет Crab — Индивидуальный цвет для паттерна Crab в режиме раздельной палитры.
col_deepcrab Цвет Deep Crab — Индивидуальный цвет для паттерна Deep Crab в режиме раздельной палитры.
col_shark Цвет Shark — Индивидуальный цвет для паттерна Shark в режиме раздельной палитры.
col_cypher Цвет Cypher — Индивидуальный цвет для паттерна Cypher в режиме раздельной палитры.
col_nenstar Цвет Nen Star — Индивидуальный цвет для паттерна Nen Star в режиме раздельной палитры.
col_five0 Цвет 5-0 Pattern — Индивидуальный цвет для паттерна 5-0 в режиме раздельной палитры.
col_abcd Цвет AB=CD — Индивидуальный цвет для паттерна AB=CD в режиме раздельной палитры.
col_threedrv Цвет 3-Drive — Индивидуальный цвет для паттерна 3-Drive в режиме раздельной палитры.
alert_on_bull Оповещение при бычьем паттерне — Включает отправку уведомления при обнаружении бычьего гармонического паттерна.
alert_on_bear Оповещение при медвежьем паттерне — Включает отправку уведомления при обнаружении медвежьего гармонического паттерна.
Получить полный код

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

grp_engine     = "Pattern Detection Engine & Smooth Swings"
zigzag_len     = input.int(10, "ZigZag Swing Period", minval=4, maxval=30, tooltip="Lookback period to identify genuine market swings. Default 10 produces smooth, textbook harmonic patterns identical to the original indicator.", group=grp_engine, display=display.none)
p_right        = input.int(3, "Pivot Confirmation Depth", minval=1, maxval=10, tooltip="Bars to confirm swing pivot. 3 provides fast confirmation with textbook swing accuracy.", group=grp_engine, display=display.none)
fib_tol_pct    = input.float(10.0, "Fibonacci Error Tolerance %", minval=1.0, maxval=25.0, step=0.5, tooltip="Error tolerance for matching Fibonacci harmonic ratios. 10% is textbook institutional precision.", group=grp_engine, display=display.none)
dir_filter     = input.string("Long and Short", "Direction Filter", options=["Long and Short", "Only Long", "Only Short"], group=grp_engine, display=display.none)
min_bars_len   = input.int(10, "Minimum Pattern Length (Bars)", minval=5, maxval=50, tooltip="Filters out noisy micro-fluctuations. Genuine harmonic patterns develop over 10+ candles.", group=grp_engine, display=display.none)
max_bars_len   = input.int(300, "Maximum Pattern Length (Bars)", minval=20, maxval=500, group=grp_engine, display=display.none)
keep_all_pat   = input.bool(true, "Keep All Confirmed Patterns on Chart", tooltip="When enabled, every confirmed pattern remains permanently plotted across chart history.", group=grp_engine, display=display.none)
show_forming   = input.bool(true, "Show Live Forming Pattern at Point D", tooltip="Displays real-time preview of the harmonic pattern as Leg CD develops.", group=grp_engine, display=display.none)

grp_patterns   = "Harmonic Pattern Library"
show_gartley   = input.bool(true, "Gartley", group=grp_patterns, display=display.none)
show_bat       = input.bool(true, "Bat", group=grp_patterns, display=display.none)
show_altbat    = input.bool(true, "Alternate Bat", group=grp_patterns, display=display.none)
show_butterfly = input.bool(true, "Butterfly", group=grp_patterns, display=display.none)
show_crab      = input.bool(true, "Crab", group=grp_patterns, display=display.none)
show_deepcrab  = input.bool(true, "Deep Crab", group=grp_patterns, display=display.none)
show_shark     = input.bool(true, "Shark", group=grp_patterns, display=display.none)
show_cypher    = input.bool(true, "Cypher", group=grp_patterns, display=display.none)
show_nenstar   = input.bool(true, "Nen Star", group=grp_patterns, display=display.none)
show_five0     = input.bool(true, "5-0 Pattern", group=grp_patterns, display=display.none)
show_abcd      = input.bool(true, "AB=CD", group=grp_patterns, display=display.none)
show_threedrv  = input.bool(true, "3-Drive", group=grp_patterns, display=display.none)
show_swans     = input.bool(false, "White Swan & Black Swan", group=grp_patterns, display=display.none)
show_antis     = input.bool(false, "Anti-Harmonic Patterns", group=grp_patterns, display=display.none)

grp_style      = "Executive Visual Styling"
color_mode     = input.string("Distinct Pattern Colors", "Pattern Color Palette", options=["Distinct Pattern Colors", "Bullish / Bearish Theme", "Monochrome Minimalist"], tooltip="Distinct Pattern Colors gives each pattern its signature vibrant executive color (like original HPP Pro).", group=grp_style, display=display.none)
shading_mode   = input.string("All Patterns Shaded", "Wing Shading Mode", options=["All Patterns Shaded", "Only Latest Pattern", "Outlines Only (No Shade)"], tooltip="All Patterns Shaded renders sleek transparent wings for all confirmed patterns.", group=grp_style, display=display.none)
shading_transp = input.int(84, "Wing Shading Transparency (10-95)", minval=10, maxval=95, tooltip="Higher value = Softer, more transparent wings.", group=grp_style, display=display.none)
show_prz_box   = input.bool(true, "Show PRZ Validation Zones (Point D Box)", tooltip="Draws the institutional Potential Reversal Zone box at Point D.", group=grp_style, display=display.none)
show_ratios    = input.bool(true, "Show Fibonacci Rates on Legs", tooltip="Displays exact inter-wave retracement and extension ratios on chart legs.", group=grp_style, display=display.none)
show_vertices  = input.bool(true, "Show Vertex Labels (X, A, B, C, D)", tooltip="Draws neat X, A, B, C, D labels at the swing pivot tips.", group=grp_style, display=display.none)
bull_col_def   = input.color(#00F2FE, "Default Bullish Color", group=grp_style, display=display.none)
bear_col_def   = input.color(#FF2A6D, "Default Bearish Color", group=grp_style, display=display.none)

grp_palette    = "Distinct Pattern Colors Palette"
col_gartley    = input.color(#00E676, "Gartley Color", group=grp_palette, display=display.none)
col_bat        = input.color(#9D4EDD, "Bat Color", group=grp_palette, display=display.none)
col_altbat     = input.color(#C77DFF, "Alternate Bat Color", group=grp_palette, display=display.none)
col_butterfly  = input.color(#00B0FF, "Butterfly Color", group=grp_palette, display=display.none)
col_crab       = input.color(#FF1744, "Crab Color", group=grp_palette, display=display.none)
col_deepcrab   = input.color(#FF6D00, "Deep Crab Color", group=grp_palette, display=display.none)
col_shark      = input.color(#F72585, "Shark Color", group=grp_palette, display=display.none)
col_cypher     = input.color(#FFD166, "Cypher Color", group=grp_palette, display=display.none)
col_nenstar    = input.color(#7209B7, "Nen Star Color", group=grp_palette, display=display.none)
col_five0      = input.color(#FF70A6, "5-0 Color", group=grp_palette, display=display.none)
col_abcd       = input.color(#06D6A0, "AB=CD Color", group=grp_palette, display=display.none)
col_threedrv   = input.color(#4CC9F0, "3-Drive Color", group=grp_palette, display=display.none)

grp_alerts     = "Notification Alerts"
alert_on_bull  = input.bool(true, "Alert on Bullish Pattern", group=grp_alerts, display=display.none)
alert_on_bear  = input.bool(true, "Alert on Bearish Pattern", group=grp_alerts, display=display.none)

type SwingPoint
    int   bar_idx
    float price
    bool  is_high

var SwingPoint[] sw_pivots = array.new<SwingPoint>()

var line  live_lx_xa   = na
var line  live_lx_ab   = na
var line  live_lx_bc   = na
var line  live_lx_cd   = na
var line  live_lx_xb   = na
var line  live_lx_bd   = na
var line  live_lx_xd   = na
var linefill live_fill_1 = na
var linefill live_fill_2 = na
var label live_lb_x    = na
var label live_lb_a    = na
var label live_lb_b    = na
var label live_lb_c    = na
var label live_lb_d    = na
var box   live_prz_box = na

var linefill latest_fill_1 = na
var linefill latest_fill_2 = na

alert_bull_sig = false
alert_bear_sig = false
alert_any_sig  = false

atr_val = ta.atr(14)
tol     = fib_tol_pct / 100.0

is_in_range(float ratio, float min_r, float max_r, float t) =>
    ratio >= (min_r * (1.0 - t)) and ratio <= (max_r * (1.0 + t))

is_near_ratio(float ratio, float target_r, float t) =>
    math.abs(ratio - target_r) <= (target_r * t)

get_pattern_color(string pat, bool is_bull) =>
    if color_mode == "Bullish / Bearish Theme"
        is_bull ? bull_col_def : bear_col_def
    else if color_mode == "Monochrome Minimalist"
        is_bull ? color.silver : color.gray
    else
        switch pat
            "Gartley"        => col_gartley
            "Bat"            => col_bat
            "Alternate Bat"  => col_altbat
            "Butterfly"      => col_butterfly
            "Crab"           => col_crab
            "Deep Crab"      => col_deepcrab
            "Shark"          => col_shark
            "Cypher"         => col_cypher
            "Nen Star"       => col_nenstar
            "5-0 Pattern"    => col_five0
            "AB=CD"          => col_abcd
            "3-Drive"        => col_threedrv
            "White Swan"     => #00E676
            "Black Swan"     => #FF5252
            => is_bull ? bull_col_def : bear_col_def

match_harmonic_pattern(float px, float pa, float pb, float pc, float pd, bool is_bull) =>
    xa = math.abs(pa - px)
    ab = math.abs(pb - pa)
    bc = math.abs(pc - pb)
    cd = math.abs(pd - pc)
    ad = math.abs(pd - pa)
    xc = math.abs(pc - px)

    r_ab = xa > 0.0 ? ab / xa : 0.0
    r_bc = ab > 0.0 ? bc / ab : 0.0
    r_cd = bc > 0.0 ? cd / bc : 0.0
    r_ad = xa > 0.0 ? ad / xa : 0.0
    r_xc = xa > 0.0 ? xc / xa : 0.0

    pat = ""

    if show_gartley and pat == ""
        if is_in_range(r_ab, 0.58, 0.65, tol) and is_in_range(r_bc, 0.382, 0.886, tol) and is_in_range(r_cd, 1.13, 1.618, tol) and is_near_ratio(r_ad, 0.786, tol)
            pat := "Gartley"

    if show_bat and pat == ""
        if is_in_range(r_ab, 0.382, 0.500, tol) and is_in_range(r_bc, 0.382, 0.886, tol) and is_in_range(r_cd, 1.618, 2.618, tol) and is_near_ratio(r_ad, 0.886, tol)
            pat := "Bat"

    if show_altbat and pat == ""
        if is_in_range(r_ab, 0.30, 0.45, tol) and is_in_range(r_bc, 0.382, 0.886, tol) and is_in_range(r_cd, 2.0, 3.618, tol) and is_near_ratio(r_ad, 1.13, tol)
            pat := "Alternate Bat"

    if show_butterfly and pat == ""
        if is_in_range(r_ab, 0.75, 0.82, tol) and is_in_range(r_bc, 0.382, 0.886, tol) and is_in_range(r_cd, 1.618, 2.618, tol) and is_in_range(r_ad, 1.272, 1.618, tol)
            pat := "Butterfly"

    if show_crab and pat == ""
        if is_in_range(r_ab, 0.382, 0.618, tol) and is_in_range(r_bc, 0.382, 0.886, tol) and is_in_range(r_cd, 2.24, 3.618, tol) and is_near_ratio(r_ad, 1.618, tol)
            pat := "Crab"

    if show_deepcrab and pat == ""
        if is_in_range(r_ab, 0.85, 0.92, tol) and is_in_range(r_bc, 0.382, 0.886, tol) and is_in_range(r_cd, 2.0, 3.618, tol) and is_near_ratio(r_ad, 1.618, tol)
            pat := "Deep Crab"

    if show_shark and pat == ""
        if is_in_range(r_ab, 0.45, 0.90, tol) and is_in_range(r_bc, 1.13, 1.618, tol) and is_in_range(r_cd, 1.618, 2.24, tol) and is_in_range(r_ad, 0.886, 1.13, tol)
            pat := "Shark"

    if show_cypher and pat == ""
        if is_in_range(r_ab, 0.382, 0.618, tol) and is_in_range(r_xc, 1.13, 1.45, tol) and is_near_ratio(r_ad, 0.786, tol)
            pat := "Cypher"

    if show_nenstar and pat == ""
        if is_in_range(r_ab, 0.382, 0.618, tol) and is_in_range(r_bc, 1.35, 2.15, tol) and is_near_ratio(r_ad, 1.272, tol)
            pat := "Nen Star"

    if show_five0 and pat == ""
        if is_in_range(r_ab, 1.13, 1.618, tol) and is_in_range(r_bc, 1.618, 2.24, tol) and is_near_ratio(r_cd, 0.50, tol)
            pat := "5-0 Pattern"

    if show_abcd and pat == ""
        if is_in_range(r_bc, 0.618, 0.786, tol) and is_in_range(r_cd, 1.272, 1.618, tol) and ab > 0 and math.abs(cd - ab) / ab <= (tol * 2.0)
            pat := "AB=CD"

    if show_threedrv and pat == ""
        if is_near_ratio(r_bc, 0.618, tol * 1.5) and is_near_ratio(r_cd, 1.272, tol * 1.5)
            pat := "3-Drive"

    if show_swans and pat == ""
        if is_in_range(r_ab, 0.382, 0.786, tol) and is_in_range(r_bc, 1.13, 2.0, tol) and is_in_range(r_ad, 1.13, 1.618, tol)
            pat := is_bull ? "White Swan" : "Black Swan"

    if show_antis and pat == ""
        if is_near_ratio(r_ab, 0.618, tol) and is_in_range(r_bc, 0.618, 0.886, tol) and is_near_ratio(r_ad, 1.272, tol)
            pat := "Anti-Gartley"
        else if is_in_range(r_ab, 0.382, 0.500, tol) and is_near_ratio(r_ad, 1.13, tol)
            pat := "Anti-Bat"

    pat

ph = ta.pivothigh(high, zigzag_len, p_right)
pl = ta.pivotlow(low, zigzag_len, p_right)

pivot_updated = false

if not na(ph)
    p_bar = bar_index - p_right
    p_pr  = high[p_right]
    s_len = array.size(sw_pivots)
    if s_len > 0
        last_p = array.get(sw_pivots, s_len - 1)
        if last_p.is_high
            if p_pr >= last_p.price
                last_p.price := p_pr
                last_p.bar_idx := p_bar
                pivot_updated := true
        else
            array.push(sw_pivots, SwingPoint.new(p_bar, p_pr, true))
            pivot_updated := true
    else
        array.push(sw_pivots, SwingPoint.new(p_bar, p_pr, true))
        pivot_updated := true

if not na(pl)
    p_bar = bar_index - p_right
    p_pr  = low[p_right]
    s_len = array.size(sw_pivots)
    if s_len > 0
        last_p = array.get(sw_pivots, s_len - 1)
        if not last_p.is_high
            if p_pr <= last_p.price
                last_p.price := p_pr
                last_p.bar_idx := p_bar
                pivot_updated := true
        else
            array.push(sw_pivots, SwingPo

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

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

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

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

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

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

Стоимость полного кода
1 949₽ ≈ $23.82