Multi-Faktor-Handelsstrategie für Bitcoin

Schriftsteller:ChaoZhang, Datum: 2023-09-25 18:24:02
Tags:

Übersicht

Dies ist eine umfassende Handelsstrategie, die für den 15-minütigen Handel mit Bitcoin und anderen Kryptowährungen entwickelt wurde. Sie kombiniert mehrere Indikatoren, um Kauf- und Verkaufssignale zu generieren, einschließlich Triple Exponential Moving Average (TEMA), Average True Range (ATR) und Heikin-Ashi-Kerzen, zusammen mit Risikomanagementfunktionen wie Take Profit und Stop Loss.

Strategie Logik

Die Strategie verwendet folgende Indikatoren:

  • Triple Exponential Moving Average (TEMA): Drei TEMA-Linien unterschiedlicher Länge und Quellen, die auf hohen, niedrigen bzw. nahen Preisen basieren.

  • Der Wert der anfallenden Risikopositionen wird auf der Grundlage der in Artikel 4 Absatz 1 Buchstabe a der Richtlinie 2009/138/EG festgelegten Risikopositionen berechnet.

  • Supertrend: Mit ATR und einem Multiplikator zur Bestimmung der Trendrichtung berechnet.

  • Einfacher gleitender Durchschnitt (SMA): Auf der kurzen TEMA-Linie angewendet, um seine Werte zu glätten.

  • Heikin-Ashi-Schließung: Wird zur zusätzlichen Trendbestätigung verwendet.

Das Long-Entry-Signal wird ausgelöst, wenn die kurze TEMA über beiden langen TEMA-Linien liegt, der Supertrend bullisch ist, die kurze TEMA über der SMA liegt und der Heikin-Ashi-Schluss höher ist als der vorherige Schluß.

Das Short-Entry-Signal wird ausgelöst, wenn die entgegengesetzten Bedingungen erfüllt sind.

Die Profit- und Stop-Loss-Sätze werden auf 1% bzw. 3% des Einstiegspreises festgelegt.

Analyse der Vorteile

  • Mehrere Faktoren verbessern die Genauigkeit Die Kombination von Trend-, Volatilitäts- und Musterindikatoren kann die Genauigkeit verbessern und falsche Signale vermeiden.

  • Berechtigtes Stop-Loss-/Take-Profit-Kontrollrisiko Gut eingestellte Stop-Loss- und Take-Profit-Niveaus schließen Gewinne ein und begrenzen Verluste.

  • Großer Parameteroptimierungsraum Die Indikatorparameter können flexibel an die sich ändernden Märkte angepasst werden.

  • Realistischer, wenn die Provision berücksichtigt wird Die Kommission betrachtet die Ergebnisse der Backtests näher an die Live-Auftritte.

Risikoanalyse

  • Risiko von Fehleinschätzungen durch Überoptimierung Zu viele kombinierte Indikatoren können auch zu Fehleinschätzungen führen.

  • Höheres Risiko bei kurzfristigen Geschäften Im Vergleich zu längeren Zeitrahmen sind 15 Minuten anfälliger für plötzliche Ereignisse und Risiken.

  • Die Strategie zur Stabilität muss weiter geprüft werden Um die Zuverlässigkeit zu gewährleisten, sind umfangreichere Tests über eine lange Geschichte und Märkte hinweg erforderlich.

  • Lange Optimierung mit mehreren Parametern Viele eingeführte Parameter führen zu einem langwierigen Prozess zur Optimierung aller Parameterkombinationen.

Verbesserungsrichtlinien

  • Bewertung der tatsächlichen Wirkung jedes Indikators Backtest, um den tatsächlichen inkrementellen Nutzen jedes Indikators zu überprüfen und Redundanzen zu vermeiden.

  • Optimierung und Prüfung der Stabilität Testoptimierungsergebnisse für mehr Märkte zur Gewährleistung der Robustheit.

  • Einbeziehung von Stop-Loss-Strategien Die Risikopositionen sind in der Regel in den folgenden Kategorien aufgeführt:

  • Betrachten Sie weitere Kostenfaktoren Wie zum Beispiel ein Rutsch, um den Backtest näher an die Live-Auftritte zu bringen.

Zusammenfassung

Diese Strategie kombiniert mehrere Indikatoren und Risikomanagementtechniken, die auf den 15-minütigen Bitcoin-Handel zugeschnitten sind. Es bleibt noch viel Raum für die Optimierung von Parametern, die Bewertung der Indikatorwirksamkeit, einen breiten Marktstabilitätstest und die Einführung von mehr Faktoren aus der realen Welt, um die optimale Kombination innerhalb des Mehrfaktoransatzes zu finden. Mit anhaltender Optimierung und Verifizierung kann es zu einem effektiven Werkzeug für den Krypto-Hochfrequenzhandel werden.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © deperp
//@version=5
strategy('3kilos', shorttitle='3kilos BTC 15m', overlay=true, initial_capital=100000, max_bars_back=5000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.07, pyramiding=0)

short = input.int(50, minval=1)
srcShort = input(high, title='TEMA short')

long = input.int(100, minval=1)
srcLong = input(low, title='TEMA long 2')

long2 = input.int(350, minval=1)
srcLong2 = input(close, title='TEMA long 3')

atrLength = input.int(550, title='ATR Length', minval=1)
mult = input.float(3, title="Multiplier", minval=0.5, step=1)

smaPeriod = input.int(100, title="SMA Period", minval=1)

takeProfitPercent = input.float(1, title="Take Profit (%)", minval=0.1) / 100
stopLossPercent = input.float(3, title="Stop Loss (%)", minval=0.1) / 100


tema(src, length) =>
    ema1 = ta.ema(src, length)
    ema2 = ta.ema(ema1, length)
    ema3 = ta.ema(ema2, length)
    3 * (ema1 - ema2) + ema3

tema1 = tema(srcShort, short)
plot(tema1, color=color.new(color.red, 0), linewidth=2)

tema2 = tema(srcLong, long)
plot(tema2, color=color.new(color.blue, 0), linewidth=2)

tema3 = tema(srcLong2, long2)
plot(tema3, color=color.new(color.green, 0), linewidth=2)

// Custom ATR calculation with EMA smoothing
atr_ema(src, length) =>
    trueRange = math.max(math.max(high - low, math.abs(high - close[1])), math.abs(low - close[1]))
    emaTrueRange = ta.ema(trueRange, length)
    emaTrueRange

// Calculate ATR with EMA smoothing
atr = atr_ema(close, atrLength)

// Calculate Supertrend
var float up = na
var float dn = na
var bool uptrend = na
up := na(up[1]) ? hl2 - (mult * atr) : uptrend[1] ? math.max(hl2 - (mult * atr), up[1]) : hl2 - (mult * atr)
dn := na(dn[1]) ? hl2 + (mult * atr) : uptrend[1] ? hl2 + (mult * atr) : math.min(hl2 + (mult * atr), dn[1])
uptrend := na(uptrend[1]) ? true : close[1] > dn[1] ? true : close[1] < up[1] ? false : uptrend[1]

// Calculate SMA
sma = ta.sma(tema1, smaPeriod)

// Heikin-Ashi Close
haTicker = ticker.heikinashi(syminfo.tickerid)
haClose = request.security(haTicker, timeframe.period, close)


// Trend determination using Heikin-Ashi Close
longC = tema1 > tema2 and tema1 > tema3 and uptrend and tema1 > sma and haClose > haClose[1]
shortC = tema1 < tema2 and tema1 < tema3 and not uptrend and tema1 < sma and haClose < haClose[1]


alertlong = longC and not longC[1]
alertshort = shortC and not shortC[1]

useDateFilter = input.bool(true, title="Begin Backtest at Start Date",
     group="Backtest Time Period")
backtestStartDate = input(timestamp("1 Jan 2023"), 
     title="Start Date", group="Backtest Time Period",
     tooltip="This start date is in the time zone of the exchange " + 
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")

inTradeWindow = true

stopLossLevelLong = close - atr * mult
stopLossLevelShort = close + atr * mult
longTakeProfitLevel = close * (1 + takeProfitPercent)
longStopLossLevel = close * (1 - stopLossPercent)
shortTakeProfitLevel = close * (1 - takeProfitPercent)
shortStopLossLevel = close * (1 + stopLossPercent)



if inTradeWindow and longC
    strategy.entry('Long', strategy.long, comment='Long')
    strategy.exit("TP Long", "Long", limit=longTakeProfitLevel, stop=longStopLossLevel, comment="TP/SL Long")

if inTradeWindow and shortC
    strategy.entry('Short', strategy.short, comment='Short')
    strategy.exit("TP Short", "Short", limit=shortTakeProfitLevel, stop=shortStopLossLevel, comment="TP/SL Short")

// Alerts

alertcondition(longC, title='Long', message=' Buy Signal ')
alertcondition(shortC, title='Short', message=' Sell Signal ')

Mehr