Kryptowährungs-Handelsstrategie basierend auf MACD


Erstellungsdatum: 2023-09-19 11:21:42 zuletzt geändert: 2023-09-19 11:21:42
Kopie: 0 Klicks: 759
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Die Strategie basiert auf dem Moving Average Aggregate Spread (MACD) und dem Relative Strength Index (RSI), um die Kauf- und Verkaufspunkte von Kryptowährungen zu beurteilen. Durch die Berechnung der Differenz zwischen den kurz- und langfristigen Moving Averages in Verbindung mit dem RSI wird die Marktentwicklung und die Überbuying-Überverkaufssituation beurteilt und die Handelsentscheidung signalisiert.

Strategieprinzip

  1. Die 12-Tage-EMA und die 26-Tage-EMA werden als kurz- und langfristige gleitende Durchschnitte berechnet

  2. Berechnung der Differenz zwischen kurz- und langfristigen EMAs als MACD-Spaltenbild

  3. Berechnen Sie den 9-Tage-EMA des MACD als Signallinie

  4. Berechnen Sie den 14-Tage-RSI, um zu überkaufen und zu verkaufen

  5. Wenn der MACD eine Signalleitung durchbricht und der RSI größer als 81 ist, zeigt ein Kaufsignal auf

  6. Wenn der MACD unterhalb der Signallinie ist und der RSI kleiner als 27 ist, wird ein Verkaufssignal angezeigt

  7. Ein- und Ausstieg mit einem integrierten Strategie-Modul

Analyse der Stärken

  1. Der MACD-Indikator kann Trends und Trendänderungen erkennen, der RSI-Indikator kann Überkaufe und Überverkäufe anzeigen, die zusammen die Genauigkeit von Handelssignalen verbessern können

  2. Der MACD zeigt die Richtung und Stärke der kurz- und langfristigen Trends an, die sich nach oben und unten bewegen und die Richtung des Marktes bestimmen.

  3. Hohe RSI-Bereiche stellen die Wahrscheinlichkeit von Überhitzung und Überkauf dar, während niedrige RSI-Bereiche die Wahrscheinlichkeit von Überverkauf darstellen und als Grundlage für die Suche nach Kauf- und Verkaufspunkten dienen

  4. Handelssignale sind einfach und klar, und es ist einfach, nach den Regeln zu handeln.

  5. Optimierbare Konfigurationsparameter für unterschiedliche Marktumgebungen

Risikoanalyse

  1. Die Daten, auf die MACD und RSI basieren, sind anfällig für falsche Durchbrüche und Ausnahme-Daten, die falsche Signale auslösen können

  2. Festgelegte Parameter-Einstellungen können sich nicht an Marktveränderungen anpassen und müssen optimiert werden

  3. Es könnte zu einer Verzögerung des Kauf- und Verkaufssignals an den Wendepunkten kommen.

  4. Die Positionen sind nur noch frei und können nicht von den Erschütterungen profitieren

Optimierungsrichtung

  1. Verschiedene Parameterkombinationen testen, um die optimale Parameter zu finden

  2. Zusätzliche Filterbedingungen, um falsche Durchbrüche zu vermeiden

  3. Erhöhung der Stop-Loss-Strategie und Verringerung der Verluste bei einseitigen Geschäften

  4. Erhöhen Sie Ihre Positionsverwaltung, erhöhen Sie Ihre Positionen im Trend und reduzieren Sie Ihre Positionen im Umbruch

  5. In Kombination mit anderen Indikatoren sucht man nach einem genaueren Kauf- und Verkaufspunkt.

  6. Wirksamkeit in verschiedenen Sorten und Zeiträumen getestet

Zusammenfassen

Die Strategie nutzt die komplementären Vorteile der beiden Indikatoren MACD und RSI, um Trendrichtungen und Kauf- und Verkaufspunkte zu identifizieren. Die Stabilität der Strategie und die Profitfaktoren können durch Optimierung der Parameter und die Erhöhung der Filterbedingungen verbessert werden. Die richtige Anpassung von Stop-Loss- und Positionsmanagement kann auch dazu beitragen, die Gewinnspanne zu erhöhen und das Risiko zu senken.

Strategiequellcode
/*backtest
start: 2023-09-11 00:00:00
end: 2023-09-12 04:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
// Revision:        5
// Author:          @Hugo_Moriceau
//study("Thesis_EMLYON_Withdate-strategies-Daily_Crypto_Moriceau_indicator",overlay=true)

// Pyramide 10 order size 100, every tick

strategy("Daily_Crypto_Moriceau_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)



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

// === LOGIC ===

// is fast ma above slow ma?
aboveBelow = fastMA >= slowMA ? true : false

// are we inverting our trade direction?
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? 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))
dataS= macd > 0.125 and rsi>81 and fastMA > slowMA
dataB= macd < -0.1  and rsi<27 and fastMA< slowMA


plotchar(dataB, char='B',color=black,size = size.tiny,location = location.belowbar,transp= 0)  
plotchar(dataS, char='S',color=black,size = size.tiny,location = location.abovebar,transp= 0)


// === BACKTEST RANGE ===
FromMonth = input(defval = 01, title = "From Month", minval = 1)
FromDay   = input(defval = 01, title = "From Day", minval = 1)
FromYear  = input(defval = 2017, title = "From Year", minval = 2014)
ToMonth   = input(defval = 2, title = "To Month", minval = 1)
ToDay     = input(defval = 10, title = "To Day", minval = 1)
ToYear    = input(defval = 2019, title = "To Year", minval = 2018)


// === STRATEGY RELATED INPUTS ===+
// the risk management inputs
inpTakeProfit   = input(defval = 20000, title = "Take Profit", minval = 0)
inpStopLoss     = input(defval = 1500, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 100, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

// === 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 = "Long", long = true, when = enterLong()) // use function or simple condition to decide when to get in
strategy.close(id = "Long", 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 = "Short", long = false, when = enterShort())
strategy.close(id = "Short", when = exitShort())

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

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