
Эта стратегия основана на значениях 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 для определения точек покупки и продажи. С помощью оптимизации параметров, управления остановкой убытков, контроля риска и других средств ее можно превратить в очень практичную количественную торговую стратегию.
/*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
/////////////////////////////////////////////////////////////////////////////////