Lange-Kurzhandelsstrategie auf Basis von MACD und RSI

Schriftsteller:ChaoZhang, Datum: 2023-10-09 15:33:17
Tags:

Übersicht

Diese Strategie kombiniert MACD- und RSI-Indikatoren, um Long- und Short-Handel gleichzeitig durchzuführen, um in unklaren Trendsituationen übermäßige Renditen zu erzielen.

Strategie Logik

  1. Berechnung des schnellen EMA (12 Tage) und des langsamen EMA (26 Tage)
  2. Berechnung der MACD-Konvergenzdivergenz (schnelle EMA minus langsame EMA)
  3. Berechnung des 9-Tage- gleitenden Durchschnitts des MACD als Signallinie
  4. Berechnung des 14-Tage-RSI
  5. Bei MACD<-0,1, RSI<27 und schneller EMA unter langsamer EMA Long gehen
  6. Bei MACD>0,125, RSI>81 und einem schnellen EMA über einem langsamen EMA kurz gehen
  7. Verwenden Sie Take Profit, Stop Loss, Trailing Stop Loss, um Positionen zu verwalten

Analyse der Vorteile

  1. Long- und Shortgeschäfte können in nicht-trendigen Märkten zu hohen Renditen führen
  2. Die Kombination von Trendindikator EMA und Umkehrindikator RSI verbessert die Signalqualität
  3. Die Verwendung von Trailing Stop Loss zur Gewinnbindung kontrolliert das Verlustrisiko wirksam

Risikoanalyse

  1. Der Handel in beide Richtungen erfordert mehr Kapital, um die Marginanforderungen zu erfüllen
  2. Die Preise können bei starken Umkehrungen sowohl bei Long- als auch bei Short-Positionen einen Stop-Loss erzielen
  3. Falsche Parameter-Einstellungen können zu einem Überhandel führen

Risikolösungen:

  1. Ausreichendes Kapital zur Unterstützung der Positionsgröße
  2. Ein angemessener Stoppverlust, um überfüllte Haltestellen zu vermeiden
  3. Optimierung der Parameter zur Verringerung der Handelshäufigkeit

Optimierungsrichtlinien

  1. Überlegen Sie, Volatilitätsindikatoren zu kombinieren, um den Eintrittszeitplan zu verbessern
  2. Verschiedene Parameterkombinationen testen, um das optimale Ergebnis zu finden
  3. Optimierung der Stop-Loss-Strategie basierend auf den Marktbedingungen, z. B. Trailing Stop-Loss
  4. Verwenden Sie Machine-Learning-Algorithmen zur automatischen Optimierung von Parametern

Zusammenfassung

Diese Strategie implementiert den zweidimensionalen Handel mit der Kombination von MACD und RSI. Die Verwendung von Trailing Stop Loss, um Gewinne zu erzielen, kann in nicht-trendigen Märkten überschüssige Renditen generieren. Die Strategie kann auf Parametern, Stop-Loss-Strategien usw. weiter optimiert werden, um mehr konsistente Überzugsrenditen zu erzielen.


/*backtest
start: 2023-09-08 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
// Revision:        290
// Author:          @Hugo_Moriceau
//study("Moriceau_Crypto_strategies_Long_short_indicator_thesis",overlay=true)

// Pyramide 10 order size 100, every tick

strategy("Moriceau_Crypto_strategies_Long_short_indicator",overlay=true)

// === GENERAL INPUTS ===

fast = 12, slow = 26
fastMA = ema(close, fast)
slowMA = ema(close, slow)

macd = fastMA - slowMA
signal = sma(macd, 9)
rsi = rsi(close,14)

dataB = macd < -0.1  and rsi<27 and fastMA < slowMA
// data1 = macd > 0.125  and rsi>81 and fastMA> slowMA
dataS = macd > 0.125 and rsi > 81 and fastMA > slowMA

tradeInvert     = input(defval = false, title = "Invert Trade Direction?")

// === LOGIC ===

// is fast ma above slow ma?
Achat = macd < -0.1  and rsi < 27 and fastMA < slowMA ? true : false
vente = macd > 0.125 and rsi > 81 and fastMA > slowMA ? true : false

// are we inverting our trade direction?
tradeDirection = vente ? Achat ? false : true : Achat ? true : false

// === Plot Setting ===

plot(fastMA,color=red)
plot(slowMA,color=blue)
barcolor(color=iff(fastMA > slowMA, yellow, na))
barcolor(color=iff(fastMA < slowMA, black, na))
//barcolor(color=iff(macd > 0.12*close , fuchsia, na))
//barcolor(color=iff(macd < -0.1*close , lime, na))
plotchar(dataB, char='B',color=black,size = size.auto,location = location.belowbar,transp= 0)  
plotchar(dataS, char='S',color=black,size = size.auto,location = location.abovebar,transp= 0)

//fast = plot(maFast, title = "FastMA", color = yellow, linewidth = 2, style = line, transp = 50)
//slow = plot(maSlow, title = "SlowMA", color = black, linewidth = 2, style = line, transp = 50)

// === BACKTEST RANGE ===
FromMonth = input(defval = 05, title = "From Month", minval = 1)
FromDay   = input(defval = 23, title = "From Day", minval = 1)
FromYear  = input(defval = 2021, title = "From Year", minval = 2017)
ToMonth   = input(defval = 5, title = "To Month", minval = 1)
ToDay     = input(defval = 25, title = "To Day", minval = 1)
ToYear    = input(defval = 2021, title = "To Year", minval = 2017)


// === STRATEGY RELATED INPUTS ===+
// the risk management inputs
inpTakeProfit   = input(defval = 2500, title = "Take Profit", minval = 28)
inpStopLoss     = input(defval = 600, title = "Stop Loss", minval = 15)
inpTrailStop    = input(defval = 300, title = "Trailing Stop Loss", minval = 5)
inpTrailOffset  = input(defval = 50, title = "Trailing Stop Loss Offset", minval = 1)

// === RISK MANAGEMENT VALUE PREP ===

// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.

useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na


// === STRATEGY - LONG POSITION EXECUTION ===

enterLong() => not tradeDirection[1] and tradeDirection 
exitLong() => tradeDirection[1] and not tradeDirection
strategy.entry(id = "Achat", long = true, when = enterLong()) // use function or simple condition to decide when to get in
strategy.close(id = "TP 50% Sell", when = exitLong()) // ...and when to get out

// === STRATEGY - SHORT POSITION EXECUTION ===

enterShort() => tradeDirection[1] and not tradeDirection
exitShort() => not tradeDirection[1] and tradeDirection
strategy.entry(id = "Vente", long = false, when = enterShort())
strategy.close(id = "Vente", when = exitShort())

// === STRATEGY RISK MANAGEMENT EXECUTION ===

// finally, make use of all the earlier values we got prepped
strategy.exit("Vente", from_entry = "Vente", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Short", from_entry = "Achat", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)

Mehr