
Die Strategie basiert auf den RSI-Werten des MACD-Indikators, um Kauf- und Verkaufssignale zu ermitteln. Kaufen Sie, wenn die RSI-Werte über die Überkauf- oder Überverkaufsgrenze hinausgehen, und verlieren oder stoppen Sie, wenn die RSI-Werte die Überverkaufsgrenze überschreiten.
Die Strategie kombiniert die Vorzüge der MACD und des RSI.
Zuerst berechnen Sie die drei Kurven des MACD-Indikators, einschließlich der DIF-Linie, der DEA-Linie und der MACD-Linie. Dann berechnen Sie den RSI-Indikator auf der MACD-Linie, um den RSI des MACD zu bilden.
Wenn der RSI of MACD über 30 oder 35 überschreitet, wird ein Kaufsignal erzeugt, um zu zeigen, dass die MACD-Linie in die Überverkaufszone eingetreten ist und der Aktientrend sich umkehrt. Wenn der RSI of MACD wieder unter 15 fällt, wird ein Verkaufsignal erzeugt, um die Trendwende zu beenden.
Die Strategie bietet auch eine partielle Stop-Off, bei der ein Teil der Position verkauft werden kann, um einen Teil der Gewinne zu sperren, wenn der RSI des MACD-Indikators über 80 liegt.
Die Lösung:
Die Strategie kann auch in folgenden Richtungen optimiert werden:
Die Strategie ist klar konzipiert und basiert auf der Theorie, dass der MACD-Rückschlag in Kombination mit dem RSI-Filter die Kauf- und Verkaufsposition bestimmen kann. Durch Parameteroptimierung, Stop-Loss-Management, Risikokontrolle und andere Mittel kann es zu einer sehr praktischen quantitativen Handelsstrategie werden.
/*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
/////////////////////////////////////////////////////////////////////////////////