Адаптивная трендовая ликвидность, многофильтровая торговая стратегия

EMA SMA MACD ATR HLC3
Дата создания: 2025-01-06 11:58:25 Последнее изменение: 2025-01-06 11:58:25
Копировать: 0 Количество просмотров: 617
1
Подписаться
1617
Подписчики

Адаптивная трендовая ликвидность, многофильтровая торговая стратегия

Обзор

Данная стратегия представляет собой адаптивную систему отслеживания тренда, основанную на фильтрации нескольких технических индикаторов. Он объединяет несколько технических индикаторов, таких как экспоненциальная скользящая средняя (EMA), простая скользящая средняя (SMA) и конвергенция-расхождение скользящей средней (MACD), и динамически корректирует параметры для адаптации к различным рыночным условиям, обеспечивая эффективное выявление тенденций и контроль рисков. Эта стратегия использует многоуровневый механизм фильтрации и значительно повышает надежность торговых сигналов за счет скоординированного взаимодействия нескольких технических индикаторов.

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

Основная логика стратегии основана на трехуровневом механизме фильтрации:

  1. Адаптивный слой распознавания тренда: используйте комбинацию быстрых и медленных EMA для расчета базовой линии тренда и динамически корректируйте верхнюю и нижнюю линии трека на основе волатильности рынка.
  2. Фильтр SMA: используйте простую скользящую среднюю, чтобы убедиться, что направление движения цены соответствует общему тренду.
  3. Уровень подтверждения MACD: используйте функцию подтверждения тренда индикатора MACD для дальнейшей проверки действительности торгового сигнала.

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

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

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

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

  1. Зависимость от тренда: на нестабильном рынке могут часто возникать ложные сигналы.
  2. Риск гистерезиса: множественные механизмы фильтрации могут привести к задержке ввода.
  3. Чувствительность параметров: Различные комбинации параметров могут привести к значительным различиям в эффективности стратегии.
  4. Риск кредитного плеча: чрезмерное кредитное плечо может увеличить убытки.

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

  1. Адаптация волатильности: добавлен динамический механизм стоп-лосса на основе ATR.
  2. Идентификация рыночной среды: добавьте систему классификации статуса рынка и используйте различные комбинации параметров в различных рыночных средах.
  3. Оценка качества сигнала: создайте систему оценки уровня сигнала и динамически корректируйте позиции в зависимости от уровня сигнала.
  4. Оптимизация управления фондами: внедрение более сложных алгоритмов управления фондами для достижения более совершенного контроля позиций.

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

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

Исходный код стратегии
/*backtest
start: 2024-12-29 00:00:00
end: 2025-01-05 00:00:00
period: 45m
basePeriod: 45m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Adaptive Trend Flow Strategy with Filters for SPX", overlay=true, max_labels_count=500, 
     initial_capital=1000, commission_type=strategy.commission.cash_per_order, commission_value=0.01, slippage=2,
     margin_long=20, margin_short=20, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// User-defined inputs for trend logic
atr           = input.int(14, "Main Length", minval=2, group = "Find more strategies like this on pineindicators.com")
length        = input.int(2, "Main Length", minval=2)
smooth_len    = input.int(2, "Smoothing Length", minval=2)
sensitivity   = input.float(2.0, "Sensitivity", step=0.1)

// User-defined inputs for SMA filter
use_sma_filter = input.bool(true, "Enable SMA Filter?")
sma_length = input.int(4, "SMA Length", minval=1)

// User-defined inputs for MACD filter
use_macd_filter = input.bool(true, "Enable MACD Filter?")
macd_fast_length = input.int(2, "MACD Fast Length", minval=1)
macd_slow_length = input.int(7, "MACD Slow Length", minval=1)
macd_signal_length = input.int(2, "MACD Signal Length", minval=1)
// User-defined inputs for leverage
leverage_factor = input.float(4.5, "Leverage Factor", minval=1.0, step=0.1)
id           = input("besttrader123", title= "Your TradingView username", group = "Automate this strategy with plugpine.com")
key           = input("nc739ja84gf", title= "Unique identifier (UID)")
ticker        = input("SPX", title= "Ticker/symbol of your broker")
bullcolor     = #0097a7
bearcolor     = #ff195f
showbars      = input.bool(true, "Color Bars?")
showbg        = input.bool(true, "Background Color?")
showsignals   = input.bool(true, "Show Signals?")


// Trend calculation functions
calculate_trend_levels() =>
    typical = hlc3
    fast_ema = ta.ema(typical, length)
    slow_ema = ta.ema(typical, length * 2)
    basis = (fast_ema + slow_ema) / 2
    vol = ta.stdev(typical, length)
    smooth_vol = ta.ema(vol, smooth_len)
    upper = basis + (smooth_vol * sensitivity)
    lower = basis - (smooth_vol * sensitivity)
    [basis, upper, lower]

get_trend_state(upper, lower, basis) =>
    var float prev_level = na
    var int trend = 0
    if na(prev_level)
        trend := close > basis ? 1 : -1
        prev_level := trend == 1 ? lower : upper
    if trend == 1
        if close < lower
            trend := -1
            prev_level := upper
        else
            prev_level := lower
    else
        if close > upper
            trend := 1
            prev_level := lower
        else
            prev_level := upper
    [trend, prev_level]

[basis, upper, lower] = calculate_trend_levels()
[trend, level] = get_trend_state(upper, lower, basis)

// SMA filter
sma_value = ta.sma(close, sma_length)
sma_condition = use_sma_filter ? close > sma_value : true

// MACD filter
[macd_line, signal_line, _] = ta.macd(close, macd_fast_length, macd_slow_length, macd_signal_length)
macd_condition = use_macd_filter ? macd_line > signal_line : true

// Signal detection with filters
long_signal = trend == 1 and trend[1] == -1 and sma_condition and macd_condition
short_signal = trend == -1 and trend[1] == 1

// Plotting visuals
p2 = plot(basis, color=trend == 1 ? bullcolor : bearcolor, linewidth=2)
p1 = plot(level, color=close > level ? bullcolor : bearcolor, linewidth=2, style=plot.style_linebr)
// if showsignals and ta.crossover(close, level)
//     label.new(bar_index, level, "▲", color=bullcolor, textcolor=chart.bg_color, style=label.style_label_upper_right)
// if showsignals and ta.crossunder(close, level)
//     label.new(bar_index, level, "▼", color=bearcolor, textcolor=chart.fg_color, style=label.style_label_lower_right)

qty = strategy.equity / close * leverage_factor

// Automated alerts
if long_signal
    alert('{"AccountID": "' + id + '","Key": "' + key + '", "symbol": "' + ticker + '", "action": "long", "volume": ' + str.tostring(qty) + '}', alert.freq_once_per_bar)
if short_signal
    alert('{"AccountID": "' + id + '","Key": "' + key + '", "symbol": "' + ticker + '", "action": "closelong"}', alert.freq_once_per_bar)

// Strategy entries and exits
if long_signal
    strategy.entry("Long", strategy.long, qty=qty)
if short_signal
    strategy.close("Long")

// Optional SMA and MACD plot
plot(use_sma_filter ? sma_value : na, color=color.new(color.blue, 80), title="SMA")
plot(use_macd_filter ? macd_line : na, color=color.new(color.orange, 80), title="MACD Line")
plot(use_macd_filter ? signal_line : na, color=color.new(color.red, 80), title="Signal Line")