Стратегия многоуровневой цели и скользящего стоп-лосса

HEIKIN ASHI HA TARGET ZONE Trailing Stop PYRAMIDING BREAK-EVEN risk management
Дата создания: 2025-03-31 16:20:21 Последнее изменение: 2025-03-31 16:20:21
Копировать: 1 Количество просмотров: 309
2
Подписаться
319
Подписчики

Стратегия многоуровневой цели и скользящего стоп-лосса Стратегия многоуровневой цели и скользящего стоп-лосса

Обзор

Многоуровневая стратегия целей и стоп-стоп - это система отслеживания тенденций, основанная на схеме Хайнц-Анси, предназначенная для захвата рыночных движений и защиты прибыли. Эта стратегия позволяет первоначальный вход и второй вход (пирамидальный залог), с независимым целевым и стоп-стопом на каждом входе.

Стратегический принцип

Эта стратегия основана на нескольких ключевых принципах:

  1. Сигнал Хайнси: Используйте диаграмму Хайнц-Анси, чтобы отфильтровать рыночный шум и идентифицировать тенденции. Многоголовый сигнал срабатывает, когда текущая цена закрытия HA выше цены открытия HA и выше цены закрытия HA, а также предыдущей цены закрытия HA.

  2. Двухуровневая система входа:

    • Первый вход: на основе начального сигнала HA, установка предопределенных целей и уровней стоп-лома
    • Второй вход: дополнительный вход разрешается, если рынок продолжает показывать положительные сигналы HA после достижения первой цели
  3. Прорыв в защите прибыли и убытков: когда достигается первая цель, стратегия автоматически переносит уровень стоп-лосса к цене входа (в точку убыточного равновесия), гарантируя, что сделка не будет убыточной

  4. Концепция целевой зоны: когда цена приближается к целевому уровню (в пределах заранее определенного понижения), стратегия запускает “целевую зону”, увеличивая целевой уровень, чтобы поймать больше потенциальной прибыли

  5. Механизм остановки убытков:

    • Первая зацепка: после достижения первоначальной цели, точка остановки движется вслед за ценой с максимальной/минимальной зацепкой, сохраняя фиксированную дистанцию
    • Второй входный отслеживание: отдельный отслеживание стоп-убыток параметры для наживы части
  6. Отслеживание состоянияСтратегия: поддержание нескольких переменных для отслеживания направления сделки, ценовых максимумов, достижения первой цели и нахождения в настоящее время в целевой зоне

Стратегические преимущества

  1. Всестороннее управление рискамиСтратегия обеспечивает многоуровневое управление рисками и защищает капитал от существенного падения за счет предварительного погашения убытков, защиты при ликвидации убытков и устранения последних убытков.

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

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

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

  5. Автоматизация исполнения: После того, как параметры настроены, стратегия выполняет все входные, выходные и стоп-убытки, устраняя эмоциональную торговлю.

  6. Визуальные отзывы: Стратегия содержит четкие визуализированные компоненты, показывающие целевые уровни, уровни стоп-лора и индикаторы текущего состояния, что позволяет трейдеру легко контролировать ход торгов.

Стратегический риск

  1. Параметр Чувствительность: Выполнение стратегии сильно зависит от параметров. Неправильные параметры целей или стоп-лосса могут привести к преждевременному выходу из хорошей сделки или риску слишком большого падения. Этот риск может быть уменьшен с помощью исторической обратной связи и оптимизации конкретных параметров рынка.

  2. Риск проскальзывания: В частности, во время исполнения стоп-стоп, рыночные пробелы или недостаточная ликвидность могут привести к тому, что фактическая цена исполнения будет отличаться от идеального уровня стоп-стоп. Уменьшить этот риск можно, рассмотрев вопрос о добавлении сдвижной буферы или использовании более консервативных параметров стоп-стоп.

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

  4. Риск переключения рынка: Хотя стратегия хорошо работает в трендовых рынках, она может плохо работать в рынках с промежуточными колебаниями или внезапными поворотами. Использование стратегии в сочетании с фильтром состояния рынка может повысить общую эффективность.

  5. Вычислительная плотность: Стратегия отслеживания нескольких переменных и состояний, которые могут привести к задержке выполнения на некоторых платформах. Оптимизация кода и упрощение некоторых вычислений может повысить производительность.

Направление оптимизации стратегии

  1. Добавить фильтр трендов: Интегрированные трендовые индикаторы (например, подвижные средние, ADX или индикаторы интенсивности тренда) могут повысить качество входа, торгуя только в подтвержденном трендовом направлении. Это уменьшит ошибочные сигналы на колеблющихся рынках.

  2. Введение временного фильтра: Добавление временного окна или периода охлаждения для повторного входа, чтобы предотвратить чрезмерную торговлю или частое вхождение в одну и ту же тенденцию за короткое время.

  3. Корректировка волатильности: Позволяет стратегии адаптироваться к различным рыночным условиям путем динамической корректировки параметров целей и остановок на основе рыночной волатильности (например, ATR). Это позволит более точно соответствовать уровню остановок и целей текущим рыночным характеристикам.

  4. Улучшение логики ХайнцзеВ настоящее время выбор HA относительно прост, и качество сигнала может быть улучшено, если принять во внимание множественный график HA или динамический индикатор HA.

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

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

Подвести итог

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

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

Исходный код стратегии
/*backtest
start: 2024-03-31 00:00:00
end: 2025-03-29 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Algo Trading v1 | SUNNY GUHA By OIESU", overlay=true, margin_long=100, margin_short=100, pyramiding=100)

// ———— USER INPUTS ———— //
// First Entry Settings
float initialTarget  = input.float(10000, "First Entry: Target ($)", minval=1, tooltip="First target level")
float initialStopLoss = input.float(3000, "First Entry: Stop Loss ($)", minval=1, tooltip="Initial stop loss distance")
bool  useTrailFirst = input.bool(true, "First Entry: Enable Trail", tooltip="Enable trailing features after first target hit")
float profitTrailStepFirst = input.float(1500, "First Entry: Trail Amount ($)", minval=1, tooltip="Trail amount after first target hit")
bool  useTargetZoneFirst = input.bool(true, "First Entry: Enable Target Zone", tooltip="Enable target zone feature")
float targetZoneThresholdFirst = input.float(1000, "First Entry: Target Zone Threshold ($)", minval=1, tooltip="Distance to activate target zone")
float targetIncreaseStepFirst = input.float(2000, "First Entry: Target Increase ($)", minval=1, tooltip="Amount to increase target")

// Second Entry Settings
bool  enableSecondEntries = input.bool(true, "Enable Second Entries", tooltip="Allow re-entries after first target hit")
float secondTarget = input.float(5000, "Second Entry: Target ($)", minval=1, tooltip="Target for second entries")
float secondStopLoss = input.float(2000, "Second Entry: Stop Loss ($)", minval=1, tooltip="Stop loss for second entries")
bool  useTrailSecond = input.bool(true, "Second Entry: Enable Trail", tooltip="Enable trailing for second entries")
float profitTrailStepSecond = input.float(1500, "Second Entry: Trail Amount ($)", minval=1, tooltip="Trail amount for second entries")
bool  useTargetZoneSecond = input.bool(true, "Second Entry: Enable Target Zone", tooltip="Enable target zone")
float targetZoneThresholdSecond = input.float(1000, "Second Entry: Target Zone Threshold ($)", minval=1)
float targetIncreaseStepSecond = input.float(2000, "Second Entry: Target Increase ($)", minval=1)

// ———— HEIKIN-ASHI CALCULATIONS ———— //
var float haOpen   = na
var float haClose  = na
var float haHigh   = na
var float haLow    = na

haClose := (open + high + low + close)/4
haOpen  := na(haOpen[1]) ? (open + close)/2 : (haOpen[1] + haClose[1])/2
haHigh  := math.max(high, math.max(haOpen, haClose))
haLow   := math.min(low, math.min(haOpen, haClose))

// ———— TRACKING VARIABLES ———— //
var float highestPrice     = na  // Tracks highest price for long positions
var float lowestPrice      = na  // Tracks lowest price for short positions
var float basePrice        = na  // Entry price for position
var float targetLevel      = na  // Current target level
var float stopLevel        = na  // Current stop level
var bool  firstTargetHit   = false  // Indicates if first target was hit
var string tradeDirection  = "none"  // Current trade direction
var bool   isSecondEntry   = false   // Tracks if current position is a second entry
var bool   inTargetZone    = false   // Tracks if price is in target zone

// ———— SIGNAL DETECTION ———— //
bullish = haClose > haOpen and haClose > haClose[1]
bearish = haClose < haOpen and haClose < haClose[1]

// Entry conditions - only allow second entries if enabled and after first target hit
longCondition  = bullish and (tradeDirection != "long" or (enableSecondEntries and firstTargetHit))
shortCondition = bearish and (tradeDirection != "short" or (enableSecondEntries and firstTargetHit))

// Position Management - Long Positions
if strategy.position_size > 0
    highestPrice := math.max(high, nz(highestPrice, high))

    if isSecondEntry
        // Second Entry Management
        inTargetZone := useTargetZoneSecond and high >= targetLevel - targetZoneThresholdSecond

        if inTargetZone and useTargetZoneSecond
            targetLevel := targetLevel + targetIncreaseStepSecond

        if useTrailSecond
            stopLevel := math.max(stopLevel, highestPrice - profitTrailStepSecond)

        if low <= stopLevel
            strategy.close_all("Second Entry Stop")
            basePrice := na
            targetLevel := na
            stopLevel := na
            highestPrice := na
            lowestPrice := na
            firstTargetHit := false
            isSecondEntry := false
            inTargetZone := false
            tradeDirection := "none"
    else
        // First Entry Management - improved profit locking
        if not firstTargetHit and high >= basePrice + initialTarget
            // First target hit - ALWAYS lock profit at break-even
            firstTargetHit := true
            stopLevel := basePrice  // Move stop to break-even
            targetLevel := useTrailFirst ? high + targetIncreaseStepFirst : basePrice + initialTarget
        else if firstTargetHit
            // Only modify target if trailing is enabled
            if useTrailFirst
                inTargetZone := useTargetZoneFirst and high >= targetLevel - targetZoneThresholdFirst
                if inTargetZone and useTargetZoneFirst
                    targetLevel := targetLevel + targetIncreaseStepFirst
                // Trail stop-loss but never below break-even
                stopLevel := math.max(basePrice, highestPrice - profitTrailStepFirst)
        else
            // Before first target hit
            targetLevel := basePrice + initialTarget
            stopLevel := basePrice - initialStopLoss

        // Exit on stop hit - this could only be at break-even or better after first target
        if low <= stopLevel
            strategy.close_all("First Entry Stop")
            basePrice := na
            targetLevel := na
            stopLevel := na
            highestPrice := na
            lowestPrice := na
            firstTargetHit := false
            isSecondEntry := false
            inTargetZone := false
            tradeDirection := "none"

// Position Management - Short Positions
if strategy.position_size < 0
    lowestPrice := math.min(low, nz(lowestPrice, low))

    if isSecondEntry
        // Second Entry Management
        inTargetZone := useTargetZoneSecond and low <= targetLevel + targetZoneThresholdSecond

        if inTargetZone and useTargetZoneSecond
            targetLevel := targetLevel - targetIncreaseStepSecond

        if useTrailSecond
            stopLevel := math.min(stopLevel, lowestPrice + profitTrailStepSecond)

        if high >= stopLevel
            strategy.close_all("Second Entry Stop")
            basePrice := na
            targetLevel := na
            stopLevel := na
            highestPrice := na
            lowestPrice := na
            firstTargetHit := false
            isSecondEntry := false
            inTargetZone := false
            tradeDirection := "none"
    else
        // First Entry Management - improved profit locking
        if not firstTargetHit and low <= basePrice - initialTarget
            // First target hit - ALWAYS lock profit at break-even
            firstTargetHit := true
            stopLevel := basePrice  // Move stop to break-even
            targetLevel := useTrailFirst ? low - targetIncreaseStepFirst : basePrice - initialTarget
        else if firstTargetHit
            // Only modify target if trailing is enabled
            if useTrailFirst
                inTargetZone := useTargetZoneFirst and low <= targetLevel + targetZoneThresholdFirst
                if inTargetZone and useTargetZoneFirst
                    targetLevel := targetLevel - targetIncreaseStepFirst
                // Trail stop-loss but never above break-even
                stopLevel := math.min(basePrice, lowestPrice + profitTrailStepFirst)
        else
            // Before first target hit
            targetLevel := basePrice - initialTarget
            stopLevel := basePrice + initialStopLoss

        // Exit on stop hit - this could only be at break-even or better after first target
        if high >= stopLevel
            strategy.close_all("First Entry Stop")
            basePrice := na
            targetLevel := na
            stopLevel := na
            highestPrice := na
            lowestPrice := na
            firstTargetHit := false
            isSecondEntry := false
            inTargetZone := false
            tradeDirection := "none"

// New Position Entry
if strategy.position_size == 0
    if longCondition
        tradeDirection := "long"
        basePrice := close
        targetLevel := basePrice + (firstTargetHit ? secondTarget : initialTarget)
        stopLevel := basePrice - (firstTargetHit ? secondStopLoss : initialStopLoss)
        highestPrice := high
        isSecondEntry := firstTargetHit
        strategy.entry("Long", strategy.long)
    else if shortCondition
        tradeDirection := "short"
        basePrice := close
        targetLevel := basePrice - (firstTargetHit ? secondTarget : initialTarget)
        stopLevel := basePrice + (firstTargetHit ? secondStopLoss : initialStopLoss)
        lowestPrice := low
        isSecondEntry := firstTargetHit
        strategy.entry("Short", strategy.short)

// ———— VISUALIZATION ———— //
// Entry signals
plotshape(longCondition and (strategy.position_size == 0),     title="Buy", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)

plotshape(shortCondition and (strategy.position_size == 0),     title="Sell", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)

// Target and stop levels with clearer colors
plot(targetLevel, title="Target Level", color=color.orange, linewidth=2)
plot(stopLevel, title="Stop Level", color=color.red, linewidth=2)

// Break-even level - shown prominently after first target hit
plot(strategy.position_size != 0 and firstTargetHit ? basePrice : na,     title="Break-Even Level", color=color.green, linewidth=2, style=plot.style_linebr)

// Debug plots for state tracking
plotchar(firstTargetHit, title="First Target Hit", char="T", location=location.top, color=color.yellow, size=size.tiny)
plotchar(isSecondEntry, title="Second Entry", char="2", location=location.top, color=color.white, size=size.tiny)
plotchar(useTrailFirst and firstTargetHit, title="Trail Active", char="→", location=location.top, color=color.blue, size=size.tiny)
plotchar(inTargetZone, title="Target Zone", char="Z", location=location.top, color=color.fuchsia, size=size.tiny)