РСИ стратегии обратного движения MACD

Автор:Чао Чжан, Дата: 2024-01-15 12:33:14
Тэги:

img

Обзор

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

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

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

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

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

Если показатель RSI индикатора 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 
/////////////////////////////////////////////////////////////////////////////////



Больше