Стратегия следования за трендом EMA/SMA и свинг-трейдинга в сочетании с фильтрацией объема и процентной системой стоп-лосса и тейк-профита

EMA SMA
Дата создания: 2024-12-11 15:12:35 Последнее изменение: 2024-12-11 15:12:35
Копировать: 1 Количество просмотров: 444
1
Подписаться
1617
Подписчики

Стратегия следования за трендом EMA/SMA и свинг-трейдинга в сочетании с фильтрацией объема и процентной системой стоп-лосса и тейк-профита

Обзор

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

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

Стратегия использует многоуровневый механизм фильтрации сигнала, сначала используя EMA ((10) и SMA ((21) для определения базовой тенденции, а затем для определения времени входа с помощью прорыва высоких и низких точек шести K-линий слева и справа, а также требует, чтобы объем торгов превышал 200-циклическую подвижную среднюю, чтобы обеспечить торговлю в условиях достаточной ликвидности. Система использует 2% процентный стоп-стоп и 1% отслеживающий стоп-лосс для управления риском.

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

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

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

  1. Фальшивые прорывы на рынке криптовалют могут быть частыми
  2. Пропускная способность фильтра может пропустить часть сигнала.
  3. Фиксированный процент сдерживания может быть задействован при сильной игре.
  4. Противоположная система отстает в быстром переходе на рынок
  5. Необходимо учитывать влияние транзакционных издержек на доходность стратегии

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

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

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

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

Исходный код стратегии
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// Strategy combining EMA/SMA Crossover, Swing High/Low, Volume Filtering, and Percentage TP & Trailing Stop
strategy("Swing High/Low Strategy with Volume, EMA/SMA Crossovers, Percentage TP and Trailing Stop", overlay=true)

// --- Inputs ---
source = close
TITLE = input(false, title='Enable Alerts & Background Color for EMA/SMA Crossovers')
turnonAlerts = input(true, title='Turn on Alerts?')
colorbars = input(true, title="Color Bars?")
turnonEMASMA = input(true, title='Turn on EMA1 & SMA2?')
backgroundcolor = input(false, title='Enable Background Color?')

// EMA/SMA Lengths
emaLength = input.int(10, minval=1, title='EMA Length')
smaLength = input.int(21, minval=1, title='SMA Length')
ema1 = ta.ema(source, emaLength)
sma2 = ta.sma(source, smaLength)

// Swing High/Low Lengths
leftBars = input.int(6, title="Left Bars for Swing High/Low", minval=1)
rightBars = input.int(6, title="Right Bars for Swing High/Low", minval=1)

// Volume MA Length
volMaLength = input.int(200, title="Volume Moving Average Length")

// Percentage Take Profit with hundredth place adjustment
takeProfitPercent = input.float(2.00, title="Take Profit Percentage (%)", minval=0.01, step=0.01) / 100

// Trailing Stop Loss Option
useTrailingStop = input.bool(true, title="Enable Trailing Stop Loss?")
trailingStopPercent = input.float(1.00, title="Trailing Stop Loss Percentage (%)", minval=0.01, step=0.01) / 100

// --- Swing High/Low Logic ---
pivotHigh(_leftBars, _rightBars) =>
    ta.pivothigh(_leftBars, _rightBars)

pivotLow(_leftBars, _rightBars) =>
    ta.pivotlow(_leftBars, _rightBars)

ph = fixnan(pivotHigh(leftBars, rightBars))
pl = fixnan(pivotLow(leftBars, rightBars))

// --- Volume Condition ---
volMa = ta.sma(volume, volMaLength)

// Declare exit conditions as 'var' so they are initialized
var bool longExitCondition = na
var bool shortExitCondition = na

// --- Long Entry Condition: Close above Swing High & Volume >= 200 MA ---
longCondition = (close > ph and volume >= volMa)
if (longCondition)
    strategy.entry("Long", strategy.long)

// --- Short Entry Condition: Close below Swing Low & Volume >= 200 MA ---
shortCondition = (close < pl and volume >= volMa)
if (shortCondition)
    strategy.entry("Short", strategy.short)

// --- Take Profit and Trailing Stop Logic ---

// For long position: Set take profit at the entry price + takeProfitPercent
longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercent)
shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercent)

// --- Long Exit Logic ---
if (useTrailingStop)
    // Trailing Stop for Long
    strategy.exit("Long Exit", "Long", stop=na, trail_offset=strategy.position_avg_price * trailingStopPercent, limit=longTakeProfitLevel)
else
    // Exit Long on Take Profit only
    strategy.exit("Long Exit", "Long", limit=longTakeProfitLevel)

// --- Short Exit Logic ---
if (useTrailingStop)
    // Trailing Stop for Short
    strategy.exit("Short Exit", "Short", stop=na, trail_offset=strategy.position_avg_price * trailingStopPercent, limit=shortTakeProfitLevel)
else
    // Exit Short on Take Profit only
    strategy.exit("Short Exit", "Short", limit=shortTakeProfitLevel)

// --- Plot Swing High/Low ---

plot(ph, style=plot.style_circles, linewidth=1, color=color.blue, offset=-rightBars, title="Swing High")
plot(ph, style=plot.style_line, linewidth=1, color=color.blue, offset=0, title="Swing High")
plot(pl, style=plot.style_circles, linewidth=1, color=color.red, offset=-rightBars, title="Swing High")
plot(pl, style=plot.style_line, linewidth=1, color=color.red, offset=0, title="Swing High")
// --- Plot EMA/SMA ---
plot(turnonEMASMA ? ema1 : na, color=color.green, title="EMA")
plot(turnonEMASMA ? sma2 : na, color=color.orange, title="SMA")

// --- Alerts ---
alertcondition(longCondition, title="Long Entry", message="Price closed above Swing High with Volume >= 200 MA")
alertcondition(shortCondition, title="Short Entry", message="Price closed below Swing Low with Volume >= 200 MA")

// --- Bar Colors for Visualization ---
barcolor(longCondition ? color.green : na, title="Long Entry Color")
barcolor(shortCondition ? color.red : na, title="Short Entry Color")
bgcolor(backgroundcolor ? (ema1 > sma2 ? color.new(color.green, 50) : color.new(color.red, 50)) : na)