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


Дата создания: 2024-01-15 12:33:14 Последнее изменение: 2024-01-15 12:33:14
Копировать: 0 Количество просмотров: 763
1
Подписаться
1617
Подписчики

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

Обзор

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

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

Эта стратегия сочетает в себе преимущества MACD и RSI.

Сначала вычисляют три кривые MACD, включая DIF, DEA и MACD. Затем вычисляют RSI на MACD, чтобы сформировать RSI of MACD.

Когда RSI of MACD превышает 30 или 35 в пределах перепродажной зоны, то появляется сигнал покупателя, который указывает на то, что MACD-линия входит в перепродажу, и цена акций начинает меняться. Когда RSI of MACD снова падает ниже 15 в пределах перепродажной зоны, то появляется сигнал продажи, который указывает на то, что перепродажа закончена.

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

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

  • Показатели MACD используются для определения перелома
  • Фильтрация ложных сигналов в зоне перепродажи с использованием RSI
  • В сочетании с двумя показателями мы сможем точно определить точку продажи.
  • Установка частичного тормоза для предотвращения увеличения убытков

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

  • Неправильно настроенные параметры MACD не позволяют точно определить тренд
  • RSI параметры неправильно настроены, что не позволяет точно определить перекуп и перепродажу
  • Некоторые сдерживающие параметры слишком радикальны и могут пропустить больший рост

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

  • Оптимизация MACD-параметров, чтобы найти оптимальную комбинацию
  • Оптимизация параметров RSI для повышения точности
  • Необходимо отменить некоторые ограничения, чтобы добиться большей прибыли

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

Эта стратегия также может быть оптимизирована в следующих направлениях:

  1. Увеличение стратегии по остановке убытков для дальнейшего контроля риска падения
  2. Добавление модуля управления позициями, позволяющего постепенно увеличивать позиции по цене
  3. Интегрированные модели машинного обучения, использующие обучение на основе исторических данных для дальнейшего повышения точности определения точек купли-продажи
  4. Попробуйте работать в более коротких периодах, например, 15 минут или 5 минут, чтобы еще больше увеличить частоту стратегии

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

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

Исходный код стратегии
/*backtest
start: 2024-01-07 00:00:00
end: 2024-01-14 00:00:00
period: 3m
basePeriod: 1m
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/
// © mohanee

//@version=4

strategy(title="RSI of MACD Strategy[Long only]",  shorttitle="RSIofMACD" , overlay=false, pyramiding=1,     default_qty_type=strategy.percent_of_equity,  default_qty_value=20, initial_capital=10000, currency=currency.USD)  //default_qty_value=10, default_qty_type=strategy.fixed,

	

/////////////////////////////////////////////////////////////////////////////////



// MACD Inputs ///
fastLen = input(12, title="Fast Length")
slowLen = input(21, title="Slow Length")
sigLen  = input(9, title="Signal Length")

rsiLength  = input(14, title="RSI of MACD Length")




riskCapital = input(title="Risk % of capital", defval=10, minval=1)
stopLoss=input(3,title="Stop Loss",minval=1)

takeProfit=input(false, title="Take Profit")


[macdLine, signalLine, _] = macd(close, fastLen, slowLen, sigLen)

rsiOfMACD = rsi(macdLine, rsiLength)
emaSlow = ema(close, slowLen)



//drawings
/////////////////////////////////////////////////////////////////////////////////


obLevelPlot = hline(80, title="Overbought / Profit taking line",  color=color.blue , linestyle=hline.style_dashed)
osLevelPlot = hline(30, title="Oversold / entry line", color=color.green, linestyle=hline.style_dashed)

exitLinePlot = hline(15, title="Exit line", color=color.red, linestyle=hline.style_dashed)




plot(rsiOfMACD, title = "rsiOfMACD" ,  color=color.purple)


//drawings
/////////////////////////////////////////////////////////////////////////////////




//Strategy Logic 
/////////////////////////////////////////////////////////////////////////////////

//Entry--
//Echeck how many units can be purchased based on risk manage ment and stop loss
qty1 = (strategy.equity  * riskCapital / 100 ) /  (close*stopLoss/100)  

//check if cash is sufficient  to buy qty1  , if capital not available use the available capital only
qty1:= (qty1 * close >= strategy.equity ) ? (strategy.equity / close) : qty1


strategy.entry(id="RSIofMACD", long=true,   qty=qty1,  when =  ( crossover(rsiOfMACD, 30) or crossover(rsiOfMACD, 35)  ) and close>=emaSlow )



bgcolor(abs(strategy.position_size)>=1 ? color.blue : na , transp=70)


barcolor(abs(strategy.position_size)>=1 and  ( crossover(rsiOfMACD, 30) or crossover(rsiOfMACD, 35) ) ? color.purple : abs(strategy.position_size)>=1 ? color.blue : na  )


//partial exit
strategy.close(id="RSIofMACD", comment="PExit Profit is "+tostring(close - strategy.position_avg_price,  "###.##")  ,  qty=strategy.position_size/3, when= takeProfit and abs(strategy.position_size)>=1 and close > strategy.position_avg_price and crossunder(rsiOfMACD,80) )

//Close All
strategy.close(id="RSIofMACD", comment="Close All   Profit is "+tostring(close - strategy.position_avg_price,  "###.##"), when=abs(strategy.position_size)>=1 and crossunder(rsiOfMACD,15) ) //and close > strategy.position_avg_price )


//Strategy Logic 
/////////////////////////////////////////////////////////////////////////////////