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

Двойная стратегия MACD для отслеживания ценового действия

Автор:Чао Чжан, Дата: 2024-11-25 11:15:50
Тэги:MACDATR

img

Обзор

Это торговая стратегия, которая сочетает в себе двойные индикаторы MACD с анализом ценовых действий. Стратегия определяет рыночные тенденции посредством цветовых изменений в гистограммах MACD на 15-минутной временной шкале, ищет сильные шаблоны свечей на 5-минутной временной шкале и подтверждает сигналы прорыва на 1-минутной временной шкале.

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

Стратегия использует два индикатора MACD с различными параметрами (34/144/9 и 100/200/50) для подтверждения рыночных тенденций. Когда обе гистограммы MACD показывают одинаковую цветовую тенденцию, система ищет сильные шаблоны свечей на 5-минутном графике, характеризующиеся телами в 1,5 раза больше их теней. Как только сильная свеча определяется, система отслеживает прорывы на 1-минутном графике. Позиции открываются, когда цена превышает максимумы в восходящих тенденциях или ниже минимумов в нисходящих тенденциях. Стопы устанавливаются на основе ATR, в то время как многократный ATR 1.5x используется для динамического получения прибыли.

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

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

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

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

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

  1. Оптимизация параметров MACD: корректировка параметров MACD на основе характеристик рынка
  2. Оптимизация стоп-лосса: рассмотреть возможность добавления динамических стопов на основе волатильности
  3. Фильтры времени торговли: Добавить ограничения торгового окна
  4. Управление позициями: внедрение масштабируемых механизмов входа и выхода
  5. Фильтрация рыночной среды: добавление показателей силы тренда
  6. Контроль привлечения: внедрение контроля рисков на основе кривой собственного капитала

Резюме

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


/*backtest
start: 2024-01-01 00:00:00
end: 2024-11-24 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=5
strategy("Price Action + Double MACD Strategy with ATR Trailing", overlay=true)

// Inputs for MACD
fastLength1 = input.int(34, title="First MACD Fast Length")
slowLength1 = input.int(144, title="First MACD Slow Length")
signalLength1 = input.int(9, title="First MACD Signal Length")

fastLength2 = input.int(100, title="Second MACD Fast Length")
slowLength2 = input.int(200, title="Second MACD Slow Length")
signalLength2 = input.int(50, title="Second MACD Signal Length")

// Input for ATR Trailing
atrMultiplier = input.float(1.5, title="ATR Multiplier for Trailing")

// Inputs for Stop Loss
atrStopMultiplier = input.float(1.0, title="ATR Multiplier for Stop Loss")

// MACD Calculations
[macdLine1, signalLine1, macdHist1] = ta.macd(close, fastLength1, slowLength1, signalLength1)
[macdLine2, signalLine2, macdHist2] = ta.macd(close, fastLength2, slowLength2, signalLength2)

// Get 15M MACD histogram colors
macdHist1Color = request.security(syminfo.tickerid, "15", (macdHist1 >= 0 ? (macdHist1[1] < macdHist1 ? #26A69A : #B2DFDB) : (macdHist1[1] < macdHist1 ? #FFCDD2 : #FF5252)))
macdHist2Color = request.security(syminfo.tickerid, "15", (macdHist2 >= 0 ? (macdHist2[1] < macdHist2 ? #26A69A : #B2DFDB) : (macdHist2[1] < macdHist2 ? #FFCDD2 : #FF5252)))

// Check MACD color conditions
isMacdUptrend = macdHist1Color == #26A69A and macdHist2Color == #26A69A
isMacdDowntrend = macdHist1Color == #FF5252 and macdHist2Color == #FF5252

// Function to detect strong 5M candles
isStrongCandle(open, close, high, low) =>
    body = math.abs(close - open)
    tail = math.abs(high - low) - body
    body > tail * 1.5  // Ensure body is larger than the tail

// Variables to track state
var float fiveMinuteHigh = na
var float fiveMinuteLow = na
var bool tradeExecuted = false
var bool breakoutDetected = false
var float entryPrice = na
var float stopLossPrice = na
var float longTakeProfit = na
var float shortTakeProfit = na

// Check for new 15M candle and reset flags
if ta.change(time("15"))
    tradeExecuted := false      // Reset trade execution flag
    breakoutDetected := false  // Reset breakout detection
    if isStrongCandle(open[1], close[1], high[1], low[1])
        fiveMinuteHigh := high[1]
        fiveMinuteLow := low[1]
    else
        fiveMinuteHigh := na
        fiveMinuteLow := na

// Get 1-minute close prices
close1m = request.security(syminfo.tickerid, "5", close)

// Ensure valid breakout direction and avoid double breakouts
if not na(fiveMinuteHigh) and not breakoutDetected
    for i = 1 to 3
        if close1m[i] > fiveMinuteHigh and not tradeExecuted  // 1M breakout check with close
            breakoutDetected := true
            if isMacdUptrend 
                // Open Long trade
                entryPrice := close
                stopLossPrice := close - (atrStopMultiplier * ta.atr(14))  // ATR-based stop loss
                longTakeProfit := close + (atrMultiplier * ta.atr(14)) // Initialize take profit

                strategy.entry("Long", strategy.long)
                tradeExecuted := true
            break // Exit the loop after detecting a breakout

        else if close1m[i] < fiveMinuteLow and not tradeExecuted  // 1M breakout check with close
            breakoutDetected := true
            if isMacdDowntrend
                // Open Short trade
                entryPrice := close
                stopLossPrice := close + (atrStopMultiplier * ta.atr(14))  // ATR-based stop loss
                shortTakeProfit := close - (atrMultiplier * ta.atr(14)) // Initialize take profit

                strategy.entry("Short", strategy.short)
                tradeExecuted := true
            break // Exit the loop after detecting a breakout

// Update trailing take-profit dynamically
if tradeExecuted and strategy.position_size > 0  // Long trade
    longTakeProfit := math.max(longTakeProfit, close + (atrMultiplier * ta.atr(14)))
    strategy.exit("Long TP/SL", "Long", stop=stopLossPrice, limit=longTakeProfit)

else if tradeExecuted and strategy.position_size < 0  // Short trade
    shortTakeProfit := math.min(shortTakeProfit, close - (atrMultiplier * ta.atr(14)))
    strategy.exit("Short TP/SL", "Short", stop=stopLossPrice, limit=shortTakeProfit)

// Reset trade state when position is closed
if strategy.position_size == 0
    tradeExecuted := false
    entryPrice := na
    longTakeProfit := na
    shortTakeProfit := na

Связанные

Больше