Stochastische und gleitende Durchschnittsquerschnittstrend nach quantitativer Strategie

Schriftsteller:ChaoZhang, Datum: 2024-02-05 15:27:03
Tags:

img

Übersicht

Diese Strategie verwendet hauptsächlich die Kreuzungen des Stoch-Indikators im Überkauf-/Überverkaufsbereich als Einstiegssignale, während die aktuelle Trendrichtung mit dem EMA-Indikator beurteilt wird.

Grundsätze

Die Strategie besteht aus drei Hauptteilen:

  1. EMA zur Bestimmung der Trendrichtung

    Bei Verwendung einer schnellen und einer langsamen EMA wird, wenn die schnelle EMA über der langsamen EMA liegt, als Aufwärtstrend bestimmt.

  2. Aktien zur Erzeugung von Handelssignalen

    Der Stoch-Indikator besteht aus %K und %D-Linien. Wenn %K über %D im Überkaufbereich überschreitet, erzeugt er ein Kaufsignal. Wenn %K unter %D im Überverkaufbereich überschreitet, erzeugt er ein Verkaufssignal. Diese Strategie nimmt nur Stoch-Crossover-Signale an, wenn sie in den Überkauf-/Überverkaufszonen auftreten.

  3. Risikomanagementmechanismus

    Die Strategie setzt auch Stop-Loss- und Take-Profit-Levels fest. Bei der Halte einer Long-Position wird der Preis, wenn er den Stop-Loss-Level überschreitet, aus dem Trade ausgesetzt. Wenn der Preis den Take-Profit-Level überschreitet, wird die Position für den Gewinn geschlossen. Die gleiche Logik gilt für Short-Positionen.

Im Allgemeinen handelt es sich um eine typische quantitative Handelsstrategie, bei der eine Kombination von Indikatoren zur Bestimmung der Trendrichtung und von Handelssignalen verwendet wird, ergänzt durch strenge Risikomanagementregeln zur Verringerung des Handelsrisikos.

Analyse der Vorteile

Die wichtigsten Vorteile dieser Strategie sind:

  1. Die Verwendung der EMA zur Bestimmung der wichtigsten und kleineren Trends verhindert, dass man in einen seitlichen Markt gefangen wird.

  2. Die Stärke des Stoch-Indikators liegt in seiner Fähigkeit, Überkauf-/Überverkaufswerte genau abzubilden.

  3. Die Strategie legt die möglichen langen und kurzen Szenarien klar fest, wodurch die Signale weiter gefiltert und eine blinde Eröffnung von Positionen in einem komplexen Markt vermieden wird.

  4. Das strenge Risikomanagement hilft, den Verlust einzelner Trades zu kontrollieren, begrenzt den maximalen Drawdown und gibt dennoch profitablen Trades Raum zum Laufen.

Risikoanalyse

Diese Strategie birgt auch einige Risiken:

  1. Indikatoren wie die EMA und der Stoch haben einen verzögerten Charakter, was es für diese Strategie schwierig macht, Marktumkehrungen rechtzeitig zu erfassen.

  2. Eine bloße Abhängigkeit von Indikatoren kann leicht zu Verzerrungen führen und somit Handelschancen verpassen, die der Markt tatsächlich bietet.

  3. Der Risikomanagementmechanismus selbst kann auch das Gewinnpotenzial einschränken, indem er einen vorzeitigen Stop-Loss und einen vorzeitigen Take-Profit festlegt.

  4. Bei der Parameterwahl bestehen Risiken. Um die optimalen Parameter zu finden, sind umfangreiche Backtests und Optimierungen erforderlich.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Versuchen Sie verschiedene Arten von EMA für die Trendbestimmung, wie WMA, Hull MA usw. und vergleichen Sie die Ergebnisse.

  2. Kombination anderer Indikatoren zur Erzeugung von Handelssignalen, z.B. MACD, KDJ, um ein Multi-Indikatorsystem zu erstellen.

  3. Optimieren Sie die Stop-Loss- und Take-Profit-Einstellungen, um sich besser an die Marktvolatilität anzupassen.

  4. Versuche die Leistungsdifferenz zwischen verschiedenen Produkten und Zeitrahmen, um eine optimale Kombination zu finden.

  5. Überlegen Sie die Einführung von Modellen des maschinellen Lernens, um den Trend zu unterstützen und das Urteilssignal zu signalisieren, um die Strategie intelligenter zu machen.

Schlussfolgerung

Zusammenfassend lässt sich sagen, dass diese Strategie allgemein verwendete Indikatoren kombiniert, um ein relativ ausgereiftes Trendfolgensystem zu bilden, das die Trendbestimmung, Handelssignale und das Risikomanagement berücksichtigt. Mit weiterer Optimierung glaube ich, dass diese Strategie bessere Live-Handelsergebnisse erzielen kann. Gleichzeitig sollten wir uns auch der Grenzen einzelner Strategien bewusst sein und weiterhin die Marktwicklungen lernen, um langfristige, stabile Gewinne zu erzielen.


/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
//by Wugamlo
//Strategy combining Stochastic Crosses in the Overbought/Oversold Area with a trend determined by two EMAs
//Default setup seems to work best on 4HR timeframe for BTC 

strategy(title = "Strategy Stoch/EMA Cross", shorttitle = "Strategy Stoch/EMA Cross", overlay = true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, currency = currency.USD, commission_value=0.01,commission_type=strategy.commission.percent, initial_capital=1000)

// === GENERAL INPUTS ===
SectionInd      = input(defval = true ,title = "════════════ INDICATORS ════════════")
maFastLength    = input(defval = 55,   title = "Fast MA Period", minval = 1)
maSlowLength    = input(defval = 89,   title = "Slow MA Period", minval = 1)
StochLength     = input(defval = 14,   title = "Stochastic Length", minval=1)
smoothK         = input(defval = 6,    title = "%K Smooth", minval=1)
smoothD         = input(defval = 3,    title = "%D Smooth", minval=1)
overbought      = 80
oversold        = 20
HighlightOBOS   = input(defval = true, title = "Highlight Stoch Cross?")
HighlightTrend  = input(defval = true, title = "Highlight Trend?")

//DATE AND TIME
SectionFrom     = input(defval = true ,title = "═══════════════ FROM ═══════════════")
fromDay         = input(defval = 01,   title = "From day", minval=1)
fromMonth       = input(defval = 1,    title = "From month", minval=1)
fromYear        = input(defval = 2019, title = "From year", minval=2014)
SectionTo       = input(defval = true, title = "════════════════ TO ════════════════")
toDay           = input(defval = 31,   title = "To day", minval=1)
toMonth         = input(defval = 12,    title = "To month", minval=1)
toYear          = input(defval = 2020, title = "To year", minval=2014)

// === STRATEGY RELATED INPUTS ===
SectionStra     = input(defval = true ,title = "═════════════ STRATEGY ═════════════")

// Include Shorts or only trade Long Positions?
includeShorts   = input(defval = true, title = "Include Short Positions?")


// Risk Management inputs
useTakeProfit   = input(defval = true,  title = "User Take Profit?")
inpTakeProfit   = input(defval = 8,     title = "Take Profit (%)", minval = 0)
useStopLoss     = input(defval = false, title = "User Stop Loss?")
inpStopLoss     = input(defval = 2,     title = "Stop Loss (%)", minval = 0)

StopLossPerc    = inpStopLoss * 0.01
TakeProfitPerc  = inpTakeProfit * 0.01


// === EMA SERIES SETUP ===
maFast = ema(close, maFastLength)
maSlow = ema(close, maSlowLength)
diff   = maFast - maSlow

// === STOCHASTIC SETUP ===
k      = sma(stoch(close, high, low, StochLength), smoothK)
d      = sma(k, smoothD)

// Stochastic Long/Short Entry determination
stochLong  = crossover(k,d)  and (k < oversold)
stochShort = crossunder(k,d) and (k > overbought)

// Stochastic Long/Short Exit determination
stochLongEx  = crossover (k, overbought)
stochShortEx = crossunder(k, oversold)


// === PLOTTING EMAs ===
fast = plot(maFast, title = "Fast MA", color = yellow, linewidth = 1, style = line, transp = 10)
slow = plot(maSlow, title = "Slow MA", color = white,  linewidth = 1, style = line, transp = 10)


// === Vertical Coloring for Crosses in Overbought/Oversold zone and for MA Trend Zones ===
b_color = stochLong ? green : stochShort ? red : na
bgcolor(HighlightOBOS ? b_color : na, title="Overbought / Oversold", transp=65)   //Highlight the Overbought/Oversold Stoch Crossings
t_color = diff>=0 ? green : diff<0 ? red : na
bgcolor(HighlightTrend ? t_color : na, title="Trend up / Trend down", transp=75)  //Highlight the EMA Trend


// === STRATEGY LOGIC ===
// Time Restriction
timeInRange = true


// === STRATEGY - LONG POSITION EXECUTION ===
if stochLong and (diff >=0) and timeInRange    //Open Long when Stoch crossing in Oversold area and EMATrend is up
    strategy.entry(id = "Long", long = true)
if stochLong and (diff <0) and timeInRange     //Close Long when another Long Stoch cross signal is given after Trend has changed to down (avoid fake signals)
    strategy.close(id = "Long")
if stochLongEx and timeInRange                 //Close Long when Stoch is getting Overbought 
    strategy.close(id = "Long")


// === STRATEGY - SHORT POSITION EXECUTION ===
if stochShort and (diff <0) and timeInRange and includeShorts  //Open Short when Stoch crossing in Overbought area and EMA Trend is down
    strategy.entry(id = "Short", long = false)
if stochShort and (diff >=0) and timeInRange                   //Close Short when another Short Stoch cross signal is given after Trend has changed to up (avoid fake signals)
    strategy.close(id = "Short")
if stochShortEx and timeInRange                                //Close Short when Stoch is getting Oversold 
    strategy.close(id = "Short")

        
// === STRATEGY RISK MANAGEMENT EXECUTION ===
//Stop Loss
if useStopLoss    //Exit when Stop Loss is hit
    strategy.exit("Exit Long SL",   from_entry = "Long",  loss = close * StopLossPerc / syminfo.mintick )
    strategy.exit("Exit Short SL",  from_entry = "Short", loss = close * StopLossPerc / syminfo.mintick )

//Take Profit
if useTakeProfit  //Exit when Take Profit Limit is hit
    strategy.exit("Exit Long TP",   from_entry = "Long",  profit = close * TakeProfitPerc / syminfo.mintick)
    strategy.exit("Exit Short TP",  from_entry = "Short", profit = close * TakeProfitPerc / syminfo.mintick)




Mehr