Стратегия разворота тренда на основе MACD и RSI


Дата создания: 2023-12-18 17:53:38 Последнее изменение: 2023-12-18 17:53:38
Копировать: 0 Количество просмотров: 660
1
Подписаться
1621
Подписчики

Стратегия разворота тренда на основе MACD и RSI

Обзор

Эта стратегия использует три показателя MACD, EMA и RSI для отслеживания тренда и обратной торговли. Она генерирует сигнал покупки, когда MACD проходит через сигнальную линию вверх и закрытие выше средней линии EMA; генерирует сигнал продажи, когда MACD проходит через сигнальную линию вниз и закрытие ниже средней линии EMA, чтобы улавливать тренд; и, в то же время, совершает обратную торговлю, когда RSI достигает зоны перекупа.

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

  1. Вычислить MACDdiffs и EMA.
   fastMA = ema(close, fast)  
   slowMA = ema(close, slow)
   macd = fastMA - slowMA
   signal = sma(macd, 9)
   ema = ema(close, input(200))
  1. Получается сигнал покупки: MACD-дифференциал ((macd-signal) проходит по 0-й оси и цена закрытия выше средней линии EMA.
   delta = macd - signal 
   buy_entry= close>ema and delta > 0
  1. Сигнал продажи: MACD-дифференциация переходит на нулевую ось, а цена закрытия ниже средней линии EMA.
   sell_entry = close<ema and delta<0 
  1. Когда RSI входит в зону сверхпокупа и сверхпродажи, проводится обратная торговля.
   if (rsi > 70 or rsi < 30)
       reversal := true

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

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

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

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

Решение проблемы:

  1. Оптимизируйте параметры, чтобы найти оптимальную комбинацию параметров.
  2. RSI-порог для обратной торговли с соответствующей корректировкой.
  3. Подумайте о том, чтобы включить стоп-лосс для контроля потерь.

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

  1. Проверить средние параметры EMA различных длин.
  2. Оптимизация MACD-параметров, чтобы найти оптимальную комбинацию.
  3. Тестирование различных обратных порогов RSI.
  4. Подумайте о комбинации с другими показателями.

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

В этой стратегии используются MACD, EMA и RSI, что обеспечивает органическое сочетание отслеживания трендов и обратных сделок. MACD определяет направление основного тренда, EMA - волну шума, RSI - ловит обратную точку. Такая комбинация мультииндикаторов позволяет более точно определять движение рынка и повышать вероятность получения прибыли, одновременно снижая ошибочную торговлю.

Исходный код стратегии
/*backtest
start: 2023-11-17 00:00:00
end: 2023-12-17 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mbuthiacharles4

//Good with trending markets
//@version=4
strategy("CHARL MACD EMA RSI")

fast = 12, slow = 26
fastMA = ema(close, fast)
slowMA = ema(close, slow)
macd = fastMA - slowMA
signal = sma(macd, 9)

ema = ema(close, input(200))

rsi = rsi(close, input(14))
//when delta > 0  and close above ema buy

delta = macd - signal

buy_entry= close>ema and delta > 0
sell_entry = close<ema and delta<0 
var bought = false
var sold = false
var reversal = false
if (buy_entry and bought == false and rsi <= 70) 
    strategy.entry("Buy",true , when=buy_entry)
    bought := true
    
strategy.close("Buy",when= delta<0 or rsi > 70)
if (delta<0 and bought==true)
    bought := false

//handle sells

if (sell_entry and sold == false and rsi >= 30)
    strategy.entry("Sell",false , when=sell_entry)
    sold := true

strategy.close("Sell",when= delta>0 or rsi < 30)
if (delta>0 and sold==true)
    sold := false
    
if (rsi > 70 or rsi < 30)
    reversal := true
    placing = rsi > 70 ? high :low
    label.new(bar_index, placing, style=label.style_flag, color=color.blue, size=size.tiny)
if (reversal == true)
    if (rsi < 70 and sold == false and delta < 0)
        strategy.entry("Sell",false , when= delta < 0)
        sold := true
        reversal := false
    else if (rsi > 30 and bought == false and delta > 0)
        strategy.entry("Buy",true , when= delta > 0)
        bought := true
        reversal := false