Многопериодная скользящая средняя трендовая динамика, следующая за торговой стратегией

EMA ATR KC SMA LR
Дата создания: 2024-11-12 16:35:41 Последнее изменение: 2024-11-12 16:35:41
Копировать: 4 Количество просмотров: 640
1
Подписаться
1617
Подписчики

Многопериодная скользящая средняя трендовая динамика, следующая за торговой стратегией

Обзор

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

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

Основная логика стратегии включает в себя следующие ключевые части:

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

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

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

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

  1. Средняя отсталость: 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)