
Diese Strategie basiert auf dem 50-Tage-Moving-Average und dem 200-Tage-Moving-Average von BTC und kombiniert mit zusätzlichen technischen Indikatoren, um ein Kauf- und Verkaufssignal zu erzeugen. Die Strategie gilt hauptsächlich für BTC/USDT, ein Währungspaar mit deutlichen Trendmerkmalen.
Wenn der 50-Tage-Moving-Average über dem 200-Tage-Moving-Average bricht und einen Gold-Fork bildet, bedeutet dies, dass BTC in den Mehrkopfmarkt eintritt und ein Kaufsignal erzeugt. Wenn der 50-Tage-Moving-Average nach unten bricht und den 200-Tage-Moving-Average bricht und einen Stillstandsfork bildet, bedeutet dies, dass BTC in den leeren Markt eintritt und ein Verkaufssignal erzeugt.
Zusätzlich zu den grundlegenden Bewertungen von Moving Averages, Goldforks und Stillstandsforks wurden einige zusätzliche technische Kennzahlen hinzugefügt, um die Beurteilung zu unterstützen, darunter:
EMA-Indikator: Berechnet ein EMA-Indikator mit einer Länge+Offset, der bei einem Anstieg anzeigt, dass er sich derzeit in einem mehrköpfigen Markt befindet und kann gekauft werden.
Vergleiche zwischen dem Moving Average und dem EMA: Wenn der EMA über dem 50-Tage-Moving Average liegt, wird ein Kaufentscheid getroffen.
Der Checkpreis ist um mehr als 1% niedriger als der niedrigste Punkt der vorherigen K-Linie, und wenn er erfüllt wird, erzeugt er ein Verkaufssignal.
Durch die Kombination der oben genannten Indikatoren können falsche Signale herausgefiltert und strategische Handelsentscheidungen zuverlässiger gemacht werden.
Die Strategie hat folgende Vorteile:
Die Verwendung von Moving Averages als primäres Handelssignal filtert Marktlärm und identifiziert die Richtung der Trends.
In Kombination mit mehreren unterstützenden technischen Indikatoren wie EMA kann die Signalzuverlässigkeit erhöht und falsche Signale gefiltert werden.
Durch geeignete Stop-Loss-Strategien können einzelne Verluste wirksam kontrolliert werden.
Die einfache Logik, die leicht verständliche Implementierung und für Anfänger im Quantitative Trading geeignet.
Die Parameter sind konfigurierbar und können nach Ihren Vorlieben angepasst werden.
Die Strategie birgt auch einige Risiken, die beachtet werden müssen:
Der Moving Average selbst ist stark rückläufig und kann die Chance auf eine schnelle Preiswende verpassen.
Die Hilfsindikatoren erhöhen die Anzahl der Regeln und die Wahrscheinlichkeit, dass ein falsches Signal erzeugt wird.
Eine falsche Stop-Loss-Einstellung kann zu einer Vergrößerung der Verluste führen.
Die falsche Einstellung von Parametern (z. B. der Länge des Moving Averages) beeinträchtigt die Effektivität der Strategie.
Entsprechende Lösungen:
Die Perioden der Moving Averages werden entsprechend verkürzt und der Optimierungsbereich der Parameter wird erweitert.
Erhöhung der Rückmessungsdaten und Überprüfung der Signalqualität.
Die Stop-Loss-Marge wird entsprechend gelockert, während die Profit-Stop-Marge eingestellt wird.
Hinzufügen von Parameteroptimierungen, um die optimale Kombination von Parametern zu finden.
Die Strategie kann auch in folgenden Richtungen optimiert werden:
Die automatische Optimierung von Parametern durch die Zugabe von Machine Learning-Algorithmen.
Es ist wichtig, mehr Hilfsindikatoren hinzuzufügen, mehrere Unterstrategien zu entwickeln und Entscheidungen über die Abstimmungsmechanismen zu treffen.
Das ist eine Breakout-Strategie, um einen Preisbruch zu erkennen.
Mit Hilfe von Deep Learning können wir Preistrends vorhersagen.
Optimierung der Stop-Loss-Mechanismen, um eine dynamische Stop-Loss-Verfolgung zu ermöglichen.
Diese Optimierungen können die Genauigkeit von Entscheidungen verbessern und die Rentabilität und Stabilität von Strategien verbessern.
Die Strategie basiert hauptsächlich auf der Kreuzung von Moving Averages in BTC, wobei technische Indikatoren wie EMA zur Filterung von Signalen verwendet werden. Die Strategie hat eine starke Trendverfolgung und ist hoch konfigurierbar und eignet sich als Einstiegsstrategie für quantifizierte Transaktionen. Es besteht jedoch auch ein gewisses Rückstandsrisiko, vor dem Vorsicht geboten ist. Die nächste Optimierungsrichtung kann auf mehreren Ebenen erfolgen, wie z. B. Machine Learning, Integrationsstrategien und Stop-Loss-Strategien.
/*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)