Стратегия торговли двойной экспоненциальной скользящей средней RSI

Автор:Чао Чжан, Дата: 2024-01-30 15:44:11
Тэги:

img

Обзор

Стратегия называется Double Exponential Moving Average RSI Trading Strategy. Она использует Double EMA и Relative Strength Index (RSI) в качестве основных торговых индикаторов для реализации автоматизированной торговли.

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

Стратегия сначала рассчитывает двойную экспоненциальную скользящую среднюю (MA) цены, затем рассчитывает RSI на основе MA, а затем рассчитывает экспоненциальную скользящую среднюю RSI (гладкий). Она генерирует сигналы покупки, когда RSI пересекает его скользящую среднюю, и сигналы продажи, когда RSI пересекает его скользящую среднюю.

Сильные стороны стратегии

  1. Двойная EMA реагирует быстрее на изменения цен и фильтрует шум.
  2. Расчет RSI на основе MA делает его более стабильным и избегает ложных сделок.
  3. Движущаяся средняя RSI помогает подтвердить торговые сигналы и избежать ложных прорывов.
  4. Установление максимального количества сделок в день помогает контролировать ежедневный риск.
  5. Установление размера сделки в процентах от собственного капитала позволяет избежать чрезмерного убытка от одной сделки.
  6. Установка времени торгового сеанса позволяет избежать ключевых временных узлов и контролирует риск ликвидности.
  7. Приобретение прибыли и остановка убытков в пунктах помогают ограничить прибыль и убытки от единой торговли.
  8. Отставание в точках помогает зафиксировать плавающие прибыли и уменьшить вывод.

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

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

Противодействие:

  1. Укоротить периоды MA для улучшения чувствительности.
  2. Добавьте другие показатели, такие как громкость, для фильтрации сигналов.
  3. Динамически регулируйте размер сделки.
  4. Адаптировать целевые показатели стоп-лосса/прибыли на основе волатильности рынка.
  5. Отпустите задние точки стоп-лосса.

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

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

Резюме

Стратегия имеет четкие механические правила и высокую надежность в целом, подходящую для средне- и долгосрочных трендовых продуктов.


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

//@version=2
strategy(title='[STRATEGY][RS]DemaRSI V0', shorttitle='D', overlay=false, initial_capital=100000, currency=currency.USD)
src = input(close)
ma_length = input(21)
rsi_length = input(4)
rsi_smooth = input(4)

ma = ema(ema(src, ma_length), ma_length)
marsi = rsi(ma, rsi_length)
smooth = ema(marsi, rsi_smooth)
plot(title='M', series=marsi, color=black)
plot(title='S', series=smooth, color=red)
hline(0)
hline(50)
hline(100)

max_order_per_day = input(6)
// strategy.risk.max_intraday_filled_orders(max_order_per_day)
trade_size_as_equity_factor = input(false)
trade_size = input(type=float, defval=10000.00) * (trade_size_as_equity_factor ? strategy.equity : 1)
take_profit_in_points = input(100000)
stop_loss_in_points = input(100000)
trail_in_points = input(150)

USE_SESSION = input(true)
trade_session = input(title='Trade Session:', defval='0400-1500', confirm=false)
istradingsession = not USE_SESSION ? true : not na(time('1', trade_session))

buy_entry = istradingsession and crossover(marsi, smooth)
sel_entry = istradingsession and crossunder(marsi, smooth)

strategy.entry('buy', long=true, qty=1, when=buy_entry)
strategy.entry('sel', long=false, qty=1, when=sel_entry)

strategy.exit('buy.Exit', from_entry='buy', profit=take_profit_in_points, loss=stop_loss_in_points, trail_points=trail_in_points, trail_offset=trail_in_points)
strategy.exit('sel.Exit', from_entry='sel', profit=take_profit_in_points, loss=stop_loss_in_points, trail_points=trail_in_points, trail_offset=trail_in_points)
strategy.close_all(when=not istradingsession)

Больше