В процессе загрузки ресурсов... загрузка...

Тенденция с несколькими временными рамками после торговой системы с интеграцией ATR и MACD

Автор:Чао Чжан, Дата: 2024-11-25 14:42:33
Тэги:ЕМАРСИATRMACDМТСSLТП

img

Обзор

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

Принципы стратегии

Стратегия использует многоуровневый механизм проверки торговых решений:

  1. Идентификация тренда: использует перекрестки EMA 9 и 21 периодов для фиксации изменений тренда
  2. Подтверждение импульса: проверяет импульс тренда через перекрестки и направление MACD (12,26,9)
  3. Сверхпокупленный/сверхпроданный фильтр: для фильтрации используется индикатор RSI ((14) на уровне 70/30
  4. Подтверждение более длительных временных рамок: Ежедневная ЕМА в качестве трендового фильтра
  5. Управление рисками: использует 1,5x ATR для отслеживания стоп-лосса и 2x ATR для целей прибыли

Система вступает в сделку только при выполнении нескольких условий: перекрестный EMA, RSI не на экстремальных уровнях, правильное направление MACD и подтверждение тренда на более высоком временном отрезке.

Преимущества стратегии

  1. Механизмы многократной проверки значительно снижают количество ложных сигналов
  2. Более высокая временная отсортировка тенденций улучшает уровень победы
  3. Динамические остановки, основанные на волатильности, обеспечивают высокую адаптивность
  4. Комплексная система управления рисками
  5. Параметры могут быть гибко скорректированы для различных рынков
  6. Поддержка двусторонней торговли, адаптация к различным рыночным условиям
  7. Комбинация индикаторов учитывает как тенденцию, так и импульс

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

  1. Многочисленные условия могут привести к упущенным торговым возможностям
  2. Возможность частой торговли на различных рынках
  3. Оптимизация параметров может привести к перенастройке
  4. Более длительные сроки подтверждения могут задержать записи Решения:
  • Динамическое регулирование параметров на основе характеристик рынка
  • Увеличение гибкости в выборе направления торговли
  • Внедрение механизма фильтрации волатильности
  • Оптимизировать механизм адаптации параметров

Руководство по оптимизации

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

Резюме

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


/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-24 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5 
strategy("Trend Following with ATR, MTF Confirmation, and MACD", overlay=true)

// Parameters
emaShortPeriod = input.int(9, title="Short EMA Period", minval=1)
emaLongPeriod = input.int(21, title="Long EMA Period", minval=1)
rsiPeriod = input.int(14, title="RSI Period", minval=1)
rsiOverbought = input.int(70, title="RSI Overbought", minval=50)
rsiOversold = input.int(30, title="RSI Oversold", minval=1)
atrPeriod = input.int(14, title="ATR Period", minval=1)
atrMultiplier = input.float(1.5, title="ATR Multiplier", minval=0.1)
takeProfitATRMultiplier = input.float(2.0, title="Take Profit ATR Multiplier", minval=0.1)

// Multi-timeframe settings
htfEMAEnabled = input.bool(true, title="Use Higher Timeframe EMA Confirmation?", inline="htf")
htfEMATimeframe = input.timeframe("D", title="Higher Timeframe", inline="htf")

// MACD Parameters
macdShortPeriod = input.int(12, title="MACD Short Period", minval=1)
macdLongPeriod = input.int(26, title="MACD Long Period", minval=1)
macdSignalPeriod = input.int(9, title="MACD Signal Period", minval=1)

// Select trade direction
tradeDirection = input.string("Both", title="Trade Direction", options=["Both", "Long", "Short"])

// Calculating indicators
emaShort = ta.ema(close, emaShortPeriod)
emaLong = ta.ema(close, emaLongPeriod)
rsiValue = ta.rsi(close, rsiPeriod)
atrValue = ta.atr(atrPeriod)

// Calculate MACD
[macdLine, macdSignalLine, _] = ta.macd(close, macdShortPeriod, macdLongPeriod, macdSignalPeriod)

// Higher timeframe EMA confirmation
htfEMALong = request.security(syminfo.tickerid, htfEMATimeframe, ta.ema(close, emaLongPeriod))

// Trading conditions
longCondition = ta.crossover(emaShort, emaLong) and rsiValue < rsiOverbought and (not htfEMAEnabled or close > htfEMALong) and macdLine > macdSignalLine
shortCondition = ta.crossunder(emaShort, emaLong) and rsiValue > rsiOversold and (not htfEMAEnabled or close < htfEMALong) and macdLine < macdSignalLine

// Plotting EMAs
plot(emaShort, title="EMA Short", color=color.green)
plot(emaLong, title="EMA Long", color=color.red)

// Plotting MACD
hline(0, "Zero Line", color=color.gray)
plot(macdLine - macdSignalLine, title="MACD Histogram", color=color.green, style=plot.style_histogram)
plot(macdLine, title="MACD Line", color=color.blue)
plot(macdSignalLine, title="MACD Signal Line", color=color.red)

// Trailing Stop-Loss and Take-Profit levels
var float trailStopLoss = na
var float trailTakeProfit = na

if (strategy.position_size > 0) // Long Position
    trailStopLoss := na(trailStopLoss) ? close - atrValue * atrMultiplier : math.max(trailStopLoss, close - atrValue * atrMultiplier)
    trailTakeProfit := close + atrValue * takeProfitATRMultiplier
    strategy.exit("Exit Long", "Long", stop=trailStopLoss, limit=trailTakeProfit, when=shortCondition)

if (strategy.position_size < 0) // Short Position
    trailStopLoss := na(trailStopLoss) ? close + atrValue * atrMultiplier : math.min(trailStopLoss, close + atrValue * atrMultiplier)
    trailTakeProfit := close - atrValue * takeProfitATRMultiplier
    strategy.exit("Exit Short", "Short", stop=trailStopLoss, limit=trailTakeProfit, when=longCondition)

// Strategy Entry
if (longCondition and (tradeDirection == "Both" or tradeDirection == "Long"))
    strategy.entry("Long", strategy.long)
    
if (shortCondition and (tradeDirection == "Both" or tradeDirection == "Short"))
    strategy.entry("Short", strategy.short)

// Plotting Buy/Sell signals
plotshape(series=longCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=shortCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")

// Plotting Trailing Stop-Loss and Take-Profit levels
plot(strategy.position_size > 0 ? trailStopLoss : na, title="Long Trailing Stop Loss", color=color.red, linewidth=2, style=plot.style_line)
plot(strategy.position_size < 0 ? trailStopLoss : na, title="Short Trailing Stop Loss", color=color.green, linewidth=2, style=plot.style_line)
plot(strategy.position_size > 0 ? trailTakeProfit : na, title="Long Take Profit", color=color.blue, linewidth=2, style=plot.style_line)
plot(strategy.position_size < 0 ? trailTakeProfit : na, title="Short Take Profit", color=color.orange, linewidth=2, style=plot.style_line)


Связанные

Больше