Die Ressourcen sind geladen. Beförderung...

BTC-Handelsstrategie auf Basis eines gleitenden Durchschnitts-Crossovers

Schriftsteller:ChaoZhang, Datum: 2023-12-07 14:56:50
Tags:

img

Übersicht

Diese Strategie basiert auf den goldenen Kreuz- und Todeskreuzsignalen des 50-tägigen gleitenden Durchschnitts und des 200-tägigen gleitenden Durchschnitts von BTC, kombiniert mit zusätzlichen technischen Indikatoren, um Kauf- und Verkaufssignale zu generieren.

Strategieprinzip

Wenn der 50-Tage- gleitende Durchschnitt über den 200-Tage- gleitenden Durchschnitt überschreitet, um ein goldenes Kreuz zu bilden, deutet dies darauf hin, dass BTC einen Bullenmarkt betreten hat und ein Kaufsignal erzeugt. Wenn der 50-Tage-gleitende Durchschnitt unter den 200-Tage-gleitenden Durchschnitt überschreitet, um ein Todeskreuz zu bilden, deutet dies darauf hin, dass BTC einen Bärenmarkt betreten hat und ein Verkaufssignal erzeugt.

Zusätzlich zu den grundlegenden gleitenden Durchschnitten golden cross und death cross enthält diese Strategie auch einige zusätzliche technische Indikatoren, die bei der Beurteilung helfen, darunter:

  1. EMA-Indikator: Berechnen Sie einen EMA-Indikator mit Länge + Offset, wenn er nach oben geht, zeigt der aktuelle Markt aufwärts, können wir kaufen.

  2. Vergleichen Sie den Wertverhältnis zwischen gleitendem Durchschnitt und EMA: Wenn der EMA-Wert höher als der gleitende 50-Tage-Durchschnitt ist, wird ein Kaufsignal generiert.

  3. Überprüfen Sie, ob der Preis im Vergleich zum Tief der vorherigen K-Linie um mehr als 1% gefallen ist.

Durch die Kombination der Verwendung mehrerer oben genannten Indikatoren können einige falsche Signale herausgefiltert werden und die Handelsentscheidungen der Strategie zuverlässiger sein.

Analyse der Vorteile

Diese Strategie hat folgende Vorteile:

  1. Die Verwendung gleitender Durchschnitte als Haupthandelssignal kann Marktlärm filtern und die Trendrichtung identifizieren.

  2. Die Kombination mit mehreren zusätzlichen technischen Indikatoren kann die Signalzuverlässigkeit erhöhen und falsche Signale filtern.

  3. Die Einführung geeigneter Stop-Loss-Strategien kann den Einzelverlust wirksam kontrollieren.

  4. Die relativ einfache Handelslogik ist leicht zu verstehen und umzusetzen und eignet sich für Anfänger des quantitativen Handels.

  5. Es gibt viele konfigurierbare Parameter, die nach Ihren Vorlieben angepasst werden können.

Risikoanalyse

Diese Strategie birgt auch einige Risiken:

  1. Der gleitende Durchschnitt selbst weist ein starkes Verzögerungsmerkmal auf, möglicherweise fehlende Chancen für eine schnelle Preisumkehr.

  2. Durch das Hinzufügen von Hilfsindikatoren wird die Anzahl der Regeln erhöht und die Wahrscheinlichkeit, dass falsche Signale erzeugt werden, erhöht.

  3. Eine unsachgemäße Einstellung des Stop-Loss kann zu vergrößerten Verlusten führen.

  4. Auch unangemessene Parameter-Einstellungen (wie beispielsweise gleitende Durchschnittslänge usw.) beeinflussen die Strategieergebnisse.

Die entsprechenden Lösungen:

  1. Der gleitende Durchschnittszyklus wird angemessen verkürzt und der Parameteroptimierungsbereich erhöht.

  2. Erhöhen Sie die Datenmenge des Backtests, um die Signalkwalität zu überprüfen.

  3. Die Stop-Loss-Range sollte während der Einstellung von Take-Profit-Stops ordnungsgemäß lockern.

  4. Die Parameteroptimierung erhöhen, um die besten Parameterkombinationen zu finden.

Optimierungsrichtlinien

Diese Strategie kann auch in folgenden Richtungen optimiert werden:

  1. Erhöhung der Algorithmen für maschinelles Lernen zur automatischen Optimierung von Parametern.

  2. Hinzufügen von zusätzlichen Indikatoren, um mehrere Teilstrategien zu entwickeln und Entscheidungen über einen Abstimmungsmechanismus zu treffen.

  3. Versuchen Sie Breakout-Strategien, um Preisdurchbrüche zu erkennen.

  4. Verwenden Sie Deep Learning, um Preistrends vorherzusagen.

  5. Optimierung von Stop-Loss-Mechanismen zur Erreichung eines dynamischen Tracking-Stop-Loss.

Die oben genannten Optimierungen können die Entscheidungsgenauigkeit verbessern und die Rentabilität und Stabilität der Strategie erhöhen.

Zusammenfassung

Diese Strategie trifft hauptsächlich Handelsentscheidungen basierend auf dem gleitenden Durchschnitts-Crossover von BTC, unterstützt durch technische Indikatoren wie EMA, um Signale zu filtern. Die Strategie verfügt über eine starke Trendverfolgungsfähigkeit und hohe Konfigurationsfähigkeit, was sie als quantitative Handelsstrategie für Anfänger geeignet macht. Es gibt jedoch auch bestimmte Rückstandsrisiken, vor denen man sich hüten muss. Die nächsten Optimierungsrichtungen können aus mehreren Dimensionen wie maschinelles Lernen, Portfoliostrategie, Stop-Loss-Strategie usw. stammen.


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

//@version=5
strategy('JayJay BTC Signal', overlay=true, initial_capital=100, currency='USD', default_qty_value=100, default_qty_type=strategy.percent_of_equity, commission_value=0, calc_on_every_tick=true)

securityNoRepaint(sym, tf, src) => request.security(sym, tf, src[barstate.isrealtime ? 1 : 0])[barstate.isrealtime ? 0 : 1]

//200 50 Moving Average
ma50Len = input.int(50, minval=1, title='MA50-Length')
ma50Src = input(close, title='MA50-Source')
ma50Show = input(true, title='Show SMA50 on chart')
ma50Close = ta.sma(ma50Src, ma50Len)
ma50CloseTimeframe = input.timeframe("240", "Ma50 Timeframe", group = "EMA Options")
ma50Open = ta.sma(open, ma50Len)
ma200Len = input.int(200, minval=1, title='MA200-Length')
ma200Src = input(close, title='MA200-Source')
ma200Show = input(true, title='Show SMA200 on chart')
ma200CloseTimeframe = input.timeframe("D", "Ma200 Timeframe", group = "EMA Options")
ma200Close = ta.sma(ma200Src, ma200Len)
ma200Open = ta.sma(open, ma200Len)
//plot(ma200Close, color=color.new(#0b6ce5, 0), title='MA200')
//plot(ma50Close, color=color.new(#00d8ff, 0), title='MA50')

sma50 = securityNoRepaint(syminfo.tickerid, ma50CloseTimeframe, ma50Close)
plot(sma50 and ma50Show ? sma50 : na, color=color.new(#00d8ff, 0), title='SMA50')
sma200 = securityNoRepaint(syminfo.tickerid, ma200CloseTimeframe, ma200Close)
plot(sma200 and ma200Show ? sma200 : na, color=color.new(#00d8ff, 0), title='SMA200')

// Short/Long EMA
// Define the offset value
EMAOffsetValue = input.int(2, title='EMA Offset', minval=0)
emaplot = input(true, title='Show EMA on chart')
len = input.int(20, minval=1, title='ema Length') + EMAOffsetValue
emaCloseTimeframe = input.timeframe("240", "EMA 1 Timeframe", group = "EMA Options")
emaOpen = ta.ema(open, len)
emaClose = ta.ema(close, len)

ema = securityNoRepaint(syminfo.tickerid, emaCloseTimeframe, emaClose)

up = emaClose > ema[1]
down = emaClose < ema[1]
mycolor = up ? color.green : down ? color.red : color.blue

plot(ema and emaplot ? ema : na, title='Signal EMA', color=mycolor, linewidth=3)
//plot(emaClose and emaplot ? emaClose : na, title='Signal 20 EMA', color=color.yellow, linewidth=3)

ma50GreaterThanMa200 = sma50 > sma200

last3BarUp = ema > ema[1]

startLong = up and ema > sma50 and ma50GreaterThanMa200 and (100 - (sma50 / ema * 100) > 1.0)

startFrom = input(timestamp("20 Jan 2000 00:00"), "StartFrom")

yearFilter = true

alertLongPositionMessage = "{\"direction:\": \"long\", \"action\": \"{{strategy.order.action}}\", \"price\": \"{{strategy.order.price}}\", \"qty\": \"{{strategy.position_size}}\", \"symbol\": \"{{ticker}}\", \"date\": \"{{time}}\"}"

if true and startLong and yearFilter
    strategy.entry('Long', strategy.long, comment = "Long", alert_message = alertLongPositionMessage)

longStopLossLevel = open * 0.05
strategy.exit('StopLoss', from_entry='Long',comment = "StopLoss!", loss=longStopLossLevel, profit=close * 0.3, alert_message = alertLongPositionMessage)
longPercentageChange = low / close[1] * 100 - 100
is1PercentLower = longPercentageChange < -0.1
closeLongPositionWhen = (down and is1PercentLower) or (emaClose < sma50)
if closeLongPositionWhen
    strategy.close('Long', comment = "Fuck It!", alert_message =  alertLongPositionMessage)

bgcolor(startLong ? color.green : na, transp=90)



Mehr