Die Ressourcen sind geladen. Beförderung...

Kurzfristige Handelsstrategie, die MACD und RSI integriert

Schriftsteller:ChaoZhang, Datum: 2023-09-13 14:59:32
Tags:

Diese Strategie trägt den Namen Kurzfristige Handelsstrategie, die MACD und RSI integriert. Sie kombiniert die Signale der MACD- und RSI-Indikatoren, um Marktschwankungen über kurze Zeitrahmen zu erfassen, um Gewinn zu erzielen.

MACD steht für Moving Average Convergence Divergence. Es besteht aus der schnellen Linie, der langsamen Linie und dem Histogramm. Wenn die schnelle Linie über die langsame Linie geht, signalisiert sie eine Stärkung der kurzfristigen Kursdynamik und erzeugt ein Kaufsignal. Wenn die schnelle Linie unter die langsame Linie geht, signalisiert sie eine Schwächung der Dynamik und erzeugt ein Verkaufssignal.

RSI steht für Relative Strength Index. Es spiegelt überkaufte und überverkaufte Bedingungen der Preise wider. RSI unter 20 ist überverkauft und über 80 ist überkauft. Überkaufte Zonen sind Warnungen vor potenziellen Preissenkungen, während überverkaufte Zonen vor potenziellen Sprung warnen.

Die Handelssignale dieser Strategie sind in zweierlei Hinsicht ausgerichtet:

Zunächst werden die MACD-Linien überschritten und das Histogramm ändert sich. Wenn sich das Histogramm von negativ auf positiv ändert, zeigt es eine zunehmende Kursdynamik auf kurze Sicht, was auf Kaufmöglichkeiten hinweist. Wenn sich das Histogramm von positiv auf negativ ändert, zeigt es eine abnehmende Dynamik und schlägt einen Verkauf vor.

Zweitens sind die RSI-Überkauf-/Überverkaufsniveaus. Die Kombination des RSI hilft, einige falsche Signale aus dem MACD zu filtern. Nur zu kaufen, wenn der RSI niedrig ist und nur zu verkaufen, wenn der RSI hoch ist, verbessert die Genauigkeit.

Der Vorteil dieser Strategie besteht darin, die Stärken der beiden Indikatoren für genauere Handelssignale zu kombinieren und kurzfristige Schwankungen sensibel zu erfassen. Aber MACD- und RSI-Parameter müssen optimiert werden, um Überhandel zu vermeiden. Stop-Loss-Level müssen auch angemessen sein, um Einzelhandelsverluste zu kontrollieren.

Zusammenfassend ist diese Strategie für wendige kurzfristige Geschäfte geeignet, um Gewinnchancen aus kurzfristigen Umkehrungen zu nutzen.


/*backtest
start: 2022-09-06 00:00:00
end: 2023-09-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Uraynium V3", overlay=false, pyramiding = 0, calc_on_every_tick=true, precision=1, currency="USD", default_qty_value=10, default_qty_type=strategy.cash,initial_capital=100,commission_type=strategy.commission.percent,commission_value=0.1) 
// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2019, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2020, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
inTimeframe()  => true

overSold      = input( 20 , minval = 1, title = "RSI Oversold")
overBought    = input( 80 , minval = 1, title = "RSI Overbought")
rsiLength     = input(14, minval = 1, title = "RSI Length")
fastLength    = input(12, minval = 1, title = "MACD fast")
slowlength    = input(26, minval = 1, title = "MACD slow")
MACDLength    = input( 9, minval = 1, title = "MACD length")
stopLoss      = input(   10, minval = 1, title = "Stop Loss (price %)")
takeProfit    = input(   50, minval = 1, title = "Take Profit (price %)")
triggerPosLvl = input(    2, minval = 1 ,title ="Take Position Threshold", type=input.float)
src = close

// === CALC ===

stopLossValue        = close*(stopLoss/100)/syminfo.mintick
takeProfitValue      = close*(takeProfit/100)/syminfo.mintick

vrsi = rsi(src, rsiLength)
//avgRSI = vrsi*0.5 + vrsi[1]*0.25 + vrsi[2]*0.125 + vrsi[3]*0.0625
avgRSI = (4*vrsi + 3*vrsi + 2*vrsi[2] + vrsi[3])/10
[macdLine, signalLine, histLine] = macd(src, fastLength, slowlength, MACDLength)


MACDdelta         = signalLine - macdLine
isMACDRunLong     = signalLine > macdLine
isMACDRunShort    = macdLine < signalLine
isMACDSwitchLong  = crossover(MACDdelta, 0)
isMACDSwitchShort = crossunder(MACDdelta, 0)
isMACDCross       = crossover(MACDdelta, 0) or crossunder(MACDdelta, 0)

buySignal =  (histLine-histLine[1]) + (avgRSI - avgRSI[1])

// === ACTION ===
isPosLong    = strategy.position_size > 0
isPosShort   = strategy.position_size < 0
isNoMarginPos= strategy.position_size == 0
entryLong  = (isNoMarginPos or isPosShort) and ( buySignal >  triggerPosLvl )
entryShort = (isNoMarginPos or isPosLong ) and ( buySignal < -triggerPosLvl ) 

if inTimeframe()
    strategy.entry("Long" , strategy.long,  comment="Entry Long",  when=entryLong )
    strategy.entry("Short", strategy.short, comment="Entry Short", when=entryShort)
    strategy.entry("Long" , strategy.long,  comment="Switch Long", when=entryLong)
    strategy.entry("Short", strategy.short, comment="Switch Short",when=entryShort)
    strategy.exit("Stop (long SL/TP)",  loss=stopLossValue, profit=takeProfitValue, when=entryLong )  
    strategy.exit("Stop (short SL/TP)", loss=stopLossValue, profit=takeProfitValue, when=entryShort)  
    strategy.close("Long" , when=entryShort)
    strategy.close("Short", when=entryLong)    

// === DRAW ===
posColor = isNoMarginPos ?  color.black : isPosLong ? color.green : color.red
plot(100, color=posColor,style=plot.style_area, transp=90, histbase=0)
        
plot(buySignal+overBought, color=color.green)
plot(50+macdLine/4, color=color.yellow)
plot(50+signalLine/4, color=color.orange)
histColor = histLine[1]-histLine > 0 ? color.red : color.green
plot(overSold+histLine/2, color=histColor, style=plot.style_histogram, histbase=overSold, transp=50, linewidth=2)

rsicolor = avgRSI>overBought ? color.red : avgRSI<overSold ? color.green : color.blue
plot(avgRSI,color=rsicolor, linewidth=2)
//plot(vrsi,color=color.purple, linewidth=2)
hline(overBought, color=color.red)
hline(overSold, color=color.green)
hline(50, color=color.gray)


Mehr