Динамическая стратегия двойного движущегося среднего задержки

Автор:Чао Чжан, Дата: 2024-02-26 11:13:17
Тэги:

img

Обзор

Это динамическая стратегия остановки, основанная на двойных линиях EMA. Она использует 9-дневные и 20-дневные EMA для определения направления тренда рынка, в сочетании с индикатором RSI для фильтрации ложных перерывов. Она также использует индикатор ATR для расчета динамических уровней остановки потерь и получения прибыли. Эта стратегия подходит для средне- и долгосрочных холдингов.

Логика стратегии

Стратегия использует 9-дневную EMA в качестве краткосрочной линии и 20-дневную EMA в качестве среднесрочной линии для определения ценовой тенденции. Она длится, когда цена пересекает короткосрочную линию и цена закрытия выше предыдущего дня, с RSI ниже 70 и закрывается выше 20-дневной EMA минус 1 ATR. Она длится, когда цена пересекает короткосрочную линию и цена закрытия ниже предыдущего дня, с RSI выше 30 и закрывается выше 20-дневной EMA минус 1 ATR.

Стоп-лосс устанавливается по цене закрытия минус 1,5 раза ATR. Прибыль от покупки устанавливается по цене закрытия плюс ATR, умноженной на коэффициент получения прибыли.

Анализ преимуществ

  1. Использование двойных EMA для определения основных рыночных тенденций, избегает давления от шума
  2. Сочетание индикатора RSI для фильтрации ложных перерывов, улучшает точность ввода
  3. Динамическая остановка потерь и получение прибыли адаптируется к волатильности рынка
  4. Стоп-лосс за трендом максимизирует прибыль

Анализ рисков

  1. Линии EMA имеют отстающий эффект, могут упустить краткосрочные возможности
  2. Неправильное установление параметров RSI может пропустить записи
  3. Неправильное соотношение стоп-лосс/прибыль может быть слишком свободным или строгим
  4. Стоп-лосс может быть проникнут во время сильных колебаний рынка

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

  1. Испытать различные комбинации EMA для поиска оптимальных параметров
  2. Оптимизировать параметры RSI для сбалансирования точности входа и возможностей лова
  3. Испытать различные коэффициенты стоп-лосс/прибыль для поиска оптимальной конфигурации
  4. Добавить больше условий фильтрации для снижения вероятности проникновения стоп-потери

Резюме

В целом, это относительно стабильная средне- и долгосрочная стратегия хранения. Она использует двойные EMA для определения основных рыночных тенденций, избегая влияния краткосрочного шума. Добавление RSI также фильтрует ложные перерывы в некоторой степени. Кроме того, динамический механизм стоп-лосс/тач-прибыль позволяет стратегии корректировать на основе волатильности рынка. Однако все еще существуют риски, такие как отставание от скользящих средних и потенциал проникновения стоп-лосса. Мы должны найти оптимальную конфигурацию посредством настройки параметров и оптимизации во время практического применения.


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

//@version=4
strategy("CJTrade", overlay=true)

short = ema(close, 9)
medium = ema(close, 20)
long = ema(close, 50)
very_long = ema(close, 200)

plot(short, color=color.gray, linewidth=1)
plot(medium, color=color.red, linewidth=1)
plot(long, color=color.black, linewidth=1)
plot(very_long, color=color.blue, linewidth=1)

rsiValue = rsi(close, 14)

near20EMA = close > medium - atr(14)

longCond = crossover(close[1], short) and close >= high[1] and rsiValue < 70 and near20EMA
shortCond = crossunder(close[1], short) and close <= low[1] and rsiValue > 30 and near20EMA

strategy.entry("Long", strategy.long, when=longCond)
strategy.entry("Short", strategy.short, when=shortCond)

atrValue = atr(14)
stopLossLevel = close - atrValue * 1.5

// Dynamic take profit level based on ATR
takeProfitMultiplier = input(2, title="Take Profit Multiplier", minval=0.1, maxval=10, step=0.1)
takeProfitLevel = close + atrValue * takeProfitMultiplier

// Trailing stop loss for long positions
longTrailingStop = close - atrValue * 2
strategy.exit("LongTrailingStop", from_entry="Long", loss=longTrailingStop)

// Trailing stop loss for short positions
shortTrailingStop = close + atrValue * 2
strategy.exit("ShortTrailingStop", from_entry="Short", loss=shortTrailingStop)

strategy.exit("Take Profit/Stop Loss", from_entry="Long", loss=stopLossLevel, profit=takeProfitLevel)
strategy.exit("Take Profit/Stop Loss", from_entry="Short", loss=stopLossLevel, profit=takeProfitLevel)


Больше