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

Стратегия торговли EMA по тренду и импульсу в течение нескольких периодов времени

Автор:Чао Чжан, Дата: 2024-11-12 16:35:41
Тэги:ЕМАATRККSMALR

img

Обзор

Это количественная торговая стратегия, которая сочетает в себе многочасовую тенденцию EMA с анализом импульса. Стратегия в основном анализирует выравнивание 20, 50, 100 и 200-дневных экспоненциальных скользящих средних (EMA) в сочетании с индикаторами импульса как в ежедневных, так и в еженедельных временных рамках.

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

Основная логика включает в себя несколько ключевых компонентов:

  1. Система выравнивания EMA: требует 20-дневной EMA выше 50-дневной EMA, которая выше 100-дневной EMA, которая выше 200-дневной EMA, формируя идеальное бычье выравнивание.
  2. Система подтверждения импульса: рассчитывает пользовательские индикаторы импульса на основе линейной регрессии как в ежедневных, так и в еженедельных временных рамках.
  3. Система обратного входа: цена должна вернуться в пределах определенного процентного диапазона 20-дневной EMA для входа, избегая погони за покупкой.
  4. Система управления рисками: использует множители ATR для установления целей стоп-лосса и прибыли, по умолчанию на 1,5x ATR для стоп-лосса и 3x ATR для цели прибыли.

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

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

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

  1. EMA Lag: EMA, как отстающие показатели, могут привести к задержке ввода.
  2. Плохая производительность на рыночных рынках: стратегия может часто генерировать ложные сигналы на боковых рынках.
  3. Риск снижения: несмотря на остановки ATR, значительные снижения возможны в экстремальных условиях.
  4. Чувствительность параметров: производительность стратегии чувствительна к параметрам. Рекомендуется тщательное тестирование оптимизации параметров.

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

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

Резюме

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


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

//@version=5
strategy("Swing Trading with EMA Alignment and Custom Momentum", overlay=true)

// User inputs for customization
atrLength = input.int(14, title="ATR Length", minval=1)
atrMultiplierSL = input.float(1.5, title="Stop-Loss Multiplier (ATR)", minval=0.1)   // Stop-loss at 1.5x ATR
atrMultiplierTP = input.float(3.0, title="Take-Profit Multiplier (ATR)", minval=0.1)   // Take-profit at 3x ATR
pullbackRangePercent = input.float(1.0, title="Pullback Range (%)", minval=0.1) // 1% range for pullback around 20 EMA
lengthKC = input.int(20, title="Length for Keltner Channels (Momentum Calculation)", minval=1)

// EMA settings
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema100 = ta.ema(close, 100)
ema200 = ta.ema(close, 200)

// ATR calculation
atrValue = ta.atr(atrLength)

// Custom Momentum Calculation based on Linear Regression for Daily Timeframe
highestHighKC = ta.highest(high, lengthKC)
lowestLowKC = ta.lowest(low, lengthKC)
smaCloseKC = ta.sma(close, lengthKC)

// Manually calculate the average of highest high and lowest low
averageKC = (highestHighKC + lowestLowKC) / 2

// Calculate daily momentum using linear regression
dailyMomentum = ta.linreg(close - (averageKC + smaCloseKC) / 2, lengthKC, 0) // Custom daily momentum calculation

// Fetch weekly data for momentum calculation using request.security()
[weeklyHigh, weeklyLow, weeklyClose] = request.security(syminfo.tickerid, "W", [high, low, close])

// Calculate weekly momentum using linear regression on weekly timeframe
weeklyHighestHighKC = ta.highest(weeklyHigh, lengthKC)
weeklyLowestLowKC = ta.lowest(weeklyLow, lengthKC)
weeklySmaCloseKC = ta.sma(weeklyClose, lengthKC)
weeklyAverageKC = (weeklyHighestHighKC + weeklyLowestLowKC) / 2

weeklyMomentum = ta.linreg(weeklyClose - (weeklyAverageKC + weeklySmaCloseKC) / 2, lengthKC, 0) // Custom weekly momentum calculation

// EMA alignment condition (20 EMA > 50 EMA > 100 EMA > 200 EMA)
emaAligned = ema20 > ema50 and ema50 > ema100 and ema100 > ema200

// Momentum increasing condition (daily and weekly momentum is positive and increasing)
dailyMomentumIncreasing = dailyMomentum > 0 and dailyMomentum > dailyMomentum[1] //and dailyMomentum[1] > dailyMomentum[2]
weeklyMomentumIncreasing = weeklyMomentum > 0 and weeklyMomentum > weeklyMomentum[1] //and weeklyMomentum[1] > weeklyMomentum[2]

// Redefine Pullback condition: price within 1% range of the 20 EMA
upperPullbackRange = ema20 * (1 + pullbackRangePercent / 100)
lowerPullbackRange = ema20 * (1 - pullbackRangePercent / 100)
pullbackToEma20 = (close <= upperPullbackRange) and (close >= lowerPullbackRange)

// Entry condition: EMA alignment and momentum increasing on both daily and weekly timeframes
longCondition = emaAligned and dailyMomentumIncreasing and weeklyMomentumIncreasing and pullbackToEma20

// Initialize stop loss and take profit levels as float variables
var float longStopLevel = na
var float longTakeProfitLevel = na

// Calculate stop loss and take profit levels based on ATR
if (longCondition)
    longStopLevel := close - (atrMultiplierSL * atrValue)  // Stop loss at 1.5x ATR below the entry price
    longTakeProfitLevel := close + (atrMultiplierTP * atrValue) // Take profit at 3x ATR above the entry price

// Strategy execution
if (longCondition)
    strategy.entry("Long", strategy.long)

// Exit conditions: Stop-loss at 1.5x ATR and take-profit at 3x ATR
if (strategy.position_size > 0)
    strategy.exit("Take Profit/Stop Loss", "Long", stop=longStopLevel, limit=longTakeProfitLevel)


Связанные

Больше