Адаптивная торговая стратегия, сочетающая динамический разворот тренда и стохастические индикаторы

ZigZag ATR SMA STOCH TP/SL
Дата создания: 2025-02-21 13:37:41 Последнее изменение: 2025-02-27 17:00:50
Копировать: 1 Количество просмотров: 370
2
Подписаться
319
Подписчики

Адаптивная торговая стратегия, сочетающая динамический разворот тренда и стохастические индикаторы Адаптивная торговая стратегия, сочетающая динамический разворот тренда и стохастические индикаторы

Обзор

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

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

В основе стратегии - динамическое отслеживание рыночных тенденций с помощью метода процентной обратной связи. Она позволяет пользователям выбирать между ручной установкой процентной обратной связи или динамическим расчетом ATR, основанным на различных периодах (от 5 до 250 дней).

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

  1. Использование динамически адаптируемого метода обратного расчета для лучшего адаптации к различным рыночным условиям
  2. В сочетании с обратным трендом и динамическим индикатором, обеспечивает более надежные торговые сигналы
  3. Встроенный стоп-стоп, помогающий трейдерам автоматически управлять рисками
  4. Гибкая параметровая настройка позволяет трейдерам оптимизироваться в соответствии с индивидуальным стилем торговли
  5. Визуализированные торговые сигналы для анализа и принятия решений

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

  1. Некоторые эксперты считают, что в этом случае рынок может быть подрывным.
  2. Выбор цикла ATR влияет на эффективность стратегии
  3. Фиксированный стоп-стоп может не подходить для всех рыночных условий
  4. В некоторых рыночных условиях случайные показатели могут отставать
  5. Необходимо разумно настроить параметры, чтобы избежать чрезмерной торговли

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

  1. Внедрение многократного анализа временных рамок для повышения надежности сигнала
  2. Динамическая корректировка уровня стоп-стоп для лучшего адаптации к рыночным колебаниям
  3. Добавление индикатора объема сделки в качестве подтверждающего сигнала
  4. Разработка адаптированных параметров случайных показателей
  5. Повышение интенсивности тренда фильтрами, уменьшение ложных сигналов

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

Это современная торговая стратегия, объединенная с классическими инструментами технического анализа. Она предоставляет трейдерам всеобъемлющую торговую систему, объединяя ZigZag reversal, Random Indicator и управление рисками. Стратегия имеет высокую настраиваемость и подходит для использования трейдерами с разными рисковыми предпочтениями.

Исходный код стратегии
/*backtest
start: 2024-06-04 00:00:00
end: 2025-02-19 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("[RS]ZigZag Percent Reversal with Stochastic Strategy", overlay=true)

// ZigZag Settings
string percent_method = input.string(
         defval="MANUAL", 
         title="Method to use for the zigzag reversal range:", 
         options=[
             "MANUAL", 
             "ATR005 * X", "ATR010 * X", "ATR020 * X", "ATR050 * X", "ATR100 * X", "ATR250 * X"
             ]
         )

var float percent = input.float(
         defval=0.25, 
         title="Percent of last pivot price for zigzag reversal:", 
         minval=0.0, maxval=99.0
         ) / 100

float percent_multiplier = input.float(
         defval=1.0, 
         title="Multiplier to apply to ATR if applicable:"
         )
if percent_method == "ATR005 * X"
    percent := ta.atr(5) / open * percent_multiplier
if percent_method == "ATR010 * X"
    percent := ta.atr(10) / open * percent_multiplier
if percent_method == "ATR020 * X"
    percent := ta.atr(20) / open * percent_multiplier
if percent_method == "ATR050 * X"
    percent := ta.atr(50) / open * percent_multiplier
if percent_method == "ATR100 * X"
    percent := ta.atr(100) / open * percent_multiplier
if percent_method == "ATR250 * X"
    percent := ta.atr(250) / open * percent_multiplier

// Zigzag function
f_zz(_percent)=>
    // Direction
    var bool _is_direction_up = na
    var float _htrack = na
    var float _ltrack = na
    var float _pivot = na
    float _reverse_range = 0.0
    var int _real_pivot_time = na
    var int _htime = na
    var int _ltime = na
    var float _reverse_line = na
    
    if bar_index >= 1
        
        if na(_is_direction_up)
            _is_direction_up := true
        
        _reverse_range := nz(_pivot[1]) * _percent
        
        if _is_direction_up
            _ltrack := na
            _ltime := time
            
            if na(_htrack)
                if high > high[1]
                    _htrack := high
                    _htime := time
                else
                    _htrack := high[1]
                    _htime := time[1]
            else
                if high > _htrack
                    _htrack := high
                    _htime := time

            _reverse_line := _htrack - _reverse_range
            
            if close <= _reverse_line
                _pivot := _htrack
                _real_pivot_time := _htime
                _is_direction_up := false

        if not _is_direction_up
            _htrack := na
            _htime := na
            
            if na(_ltrack)
                if low < low[1]
                    _ltrack := low
                    _ltime := time
                else
                    _ltrack := low[1]
                    _ltime := time[1]
            else
                if low < _ltrack
                    _ltrack := low
                    _ltime := time
                
            _reverse_line := _ltrack + _reverse_range
            
            if close >= _reverse_line
                _pivot := _ltrack
                _real_pivot_time := _ltime
                _is_direction_up := true

    [_pivot, _is_direction_up, _reverse_line, _real_pivot_time]

[pivot, direction_up, reverse_line, pivot_time] = f_zz(percent)

// Reversal line
var float static_reverse_line = na
if (not na(reverse_line))
    static_reverse_line := reverse_line

plot(series=static_reverse_line, color=color.gray, style=plot.style_line, title="Reversal Line", trackprice=false)

// Stochastic Settings
K_length = input.int(9, title="Stochastic K Length", minval=1)  // User input
K_smoothing = input.int(3, title="Stochastic K Smoothing", minval=1)  // User input
stochK = ta.sma(ta.stoch(close, high, low, K_length), K_smoothing)

// User Input: Take Profit and Stop Loss Levels
stop_loss_pips = input.int(100, title="Stop Loss (pips)", minval=1)  // Stop Loss
take_profit_pips = input.int(300, title="Take Profit (pips)", minval=1)  // Take Profit

// Calculating levels
long_stop_loss = close - stop_loss_pips * syminfo.mintick
long_take_profit = close + take_profit_pips * syminfo.mintick
short_stop_loss = close + stop_loss_pips * syminfo.mintick
short_take_profit = close - take_profit_pips * syminfo.mintick

// Buy and Sell Conditions
buy_signal = close > static_reverse_line and stochK < 30  // K < 30 condition
sell_signal = close < static_reverse_line and stochK > 70  // K > 70 condition

if buy_signal
    strategy.entry("Buy", strategy.long)
    strategy.exit("TP/SL", "Buy", stop=long_stop_loss, limit=long_take_profit)

if sell_signal
    strategy.entry("Sell", strategy.short)
    strategy.exit("TP/SL", "Sell", stop=short_stop_loss, limit=short_take_profit)

// Signal Visualization
plotshape(series=buy_signal, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="BUY", textcolor=color.white)
plotshape(series=sell_signal, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="SELL", textcolor=color.white)