Trendhandelsstrategie auf Basis des Goldenen Kreuzes

Schriftsteller:ChaoZhang, Datum: 2023-11-23 14:07:11
Tags:

img

Übersicht

Die goldene Kreuzhandelsstrategie ist eine mittelfristige bis langfristige Trendverfolgungsstrategie. Sie identifiziert die Trendrichtung der Aktienkurse durch Berechnung des SR-Indikators und des SR-Signalindikators und implementiert Trendverfolgungsoperationen durch Zeichnen eines Trendkanals mithilfe von Neuralnetzwerk-Algorithmen. Wenn der SR-Indikator über das SR-Signal überquert, wird ein Kaufsignal generiert. Wenn der SR-Indikator unter das SR-Signal überquert, wird ein Verkaufssignal generiert. Diese Strategie verwendet auch eine adaptive lineare Regressionsfiltertechnik, um die Kanalkurve zu optimieren, die falsche Signale effektiv unterdrückt.

Grundsätze

Die Kernindikatoren dieser Strategie sind der SR-Indikator und der SR-Signalindikator. Der SR-Indikator ist eine sekundäre Synthese des gleitenden Durchschnitts der WMA und des gleitenden Durchschnitts der SMA mit einer Periode von 8. Der SR-Signalindikator ist der SR-Indikator, der mit einer Periode von 20 berechnet wird.

Diese Strategie verwendet einen neuronalen Netzwerk-Algorithmus, um automatisch die oberen und unteren Grenzen des Aktienkurses zu zeichnen, um einen anpassungsfähigen Kanal zu bilden. Die oberste Grenze nimmt den historischen maximalen Wert des SR-Indikators als Eingang, die untere Grenze nimmt den historischen Mindestwert als Eingang, und die Regressionskurven werden als die oberen und unteren Grenzen des Kanals berechnet. Die Kanalkurve ist nach adaptivem linearem Regressionsfiltern glatter.

Wenn der SR-Indikator über das SR-Signal überschreitet, wird ein Kaufsignal generiert. Wenn der SR-Indikator unter dem SR-Signal überschreitet, wird ein Verkaufssignal generiert. Nachdem die langen und kurzen Signale ausgegeben wurden, bestimmt die Beziehung zwischen dem Aktienkurs und den oberen und unteren Grenzen des Kanals die Stop-Loss- und Take-Profit-Positionen.

Vorteile

  • Verwendung der bilinearen Synthese-Technologie, um die Auswirkungen von Preisschwankungen zu beseitigen und die Trendrichtung genau zu bestimmen;
  • Adaptive Kanal-Algorithmen optimieren die Ein- und Ausstiegszeit und vermeiden falsche Ausbrüche.
  • Kanalkurven verwenden eine adaptive lineare Regressionsfiltertechnologie, um Verzerrungen durch Extreme zu vermeiden.
  • Stop-Loss- und Take-Profit-Positionen ändern sich dynamisch mit dem Kanal und verfolgen automatisch Trends für den Gewinn.

Risikoanalyse

Die wichtigsten Risiken dieser Trendverfolgungsstrategie sind:

  • Erzeugt viele falsche Signale und übermäßige ungültige Operationen bei schwankenden Trends;
  • Ein schneller Bruch unterhalb der unteren Grenze des Kanals durch plötzliche Ereignisse führt zu enormen Verlusten.
  • Falsche Parameter-Einstellungen können leicht zu einem Strategieversagen führen.

Um Risiken zu kontrollieren, wird empfohlen, sich mit anderen Strategien zu kombinieren, anstatt sich auf eine einzige Strategie zu verlassen; gleichzeitig werden die Parameter-Einstellungen optimiert, um sich an verschiedene Marktumgebungen anzupassen.

Optimierungsrichtlinien

Diese Strategie kann in folgenden Aspekten optimiert werden:

  1. Optimierung der Parameter des SR-Anzeigers und des Signalanzeigers zur Verbesserung der Stabilität der Crossover-Signale;

  2. Optimierung der Zyklusdauer des adaptiven Kanals, um die Kanalkurve zu glätten;

  3. Hinzufügen anderer Filterindikatoren, um Fehlfunktionen zu vermeiden, wie z. B. Energieindikatoren, Volatilitätsindikatoren usw.;

  4. Einbeziehung von Deep-Learning-Algorithmen zur Optimierung von Kanalkurven in Echtzeit und Verbesserung der Anpassungsfähigkeit.

Zusammenfassung

Die Golden Cross Trading Strategie ist eine effektive quantitative Strategie zur Verfolgung mittelfristiger bis langfristiger Trends. Sie hat eine hohe Wahrscheinlichkeit, die Trendrichtung und niedrige Betriebsrisiken korrekt zu bestimmen.


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-22 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

strategy(title = " Strategy PyramiCover",
         shorttitle = "S-PC",
         overlay = true,
         precision = 8,
         calc_on_order_fills = true,
         calc_on_every_tick = true,
         backtest_fill_limits_assumption = 0,
         default_qty_type = strategy.fixed,
         default_qty_value = 2,
         initial_capital = 10000,
         pyramiding=50,
         currency = currency.USD,
         linktoseries = true)

//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

backTestSectionFrom = input(title = "═══════════════ From ═══════════════", defval = true, type = input.bool)

FromMonth         = input(defval = 1, title = "Month", minval = 1)
FromDay           = input(defval = 1, title = "Day", minval = 1)
FromYear          = input(defval = 2014, title = "Year", minval = 2014)

backTestSectionTo = input(title = "════════════════ To ════════════════", defval = true, type = input.bool)
ToMonth           = input(defval = 31, title = "Month", minval = 1)
ToDay             = input(defval = 12, title = "Day", minval = 1)
ToYear            = input(defval = 9999, title = "Year", minval = 2014)

backTestPeriod() => (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59))

//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

per = input(14,title="🔹 Length")
//
up = 0.0
nup= 0.0
lowl = 0.0
nin = 0.0
//
srl=wma(close,8)
srr = sma(close,8)
sr = 2*srl - srr
//
srsl=wma(close,20)
srsr= sma(close,20)
srsignal = 2*srsl - srsr
//
if sr>srsignal
    up := highest(sr,round(150))
    nup :=highest(srsignal,round(20))
else
    up := highest(srsignal,round(150))
    nup := highest(sr,round(20))
//
if sr<srsignal
    lowl := lowest(sr,round(150))
    nin := lowest(srsignal,round(20))
else
    lowl := lowest(sr,round(150))
    nin := lowest(srsignal,round(20))
//reg alexgrover
f_reg(src,length)=>
    x = bar_index
    y = src
    x_ = sma(x, length)
    y_ = sma(y, length)
    mx = stdev(x, length)
    my = stdev(y, length)
    c = correlation(x, y, length)
    slope = c * (my / mx)
    inter = y_ - slope * x_
    reg = x * slope + inter
    reg
//
up_=f_reg(up,per)
lowl_=f_reg(lowl,per)
nup_=f_reg(nup,per)
nin_=f_reg(nin,per)
//
plot(sr, title='SR', color=color.green, linewidth=2, style=plot.style_line,transp=0)
plot(srsignal, title='SR-Signal', color=color.red, linewidth=2, style=plot.style_line,transp=0)
plot(up_, title='Upper limit', color=color.blue, linewidth=3, style=plot.style_line,transp=0)
plot(lowl_, title='Lower limit', color=color.blue, linewidth=3, style=plot.style_line,transp=0)
a=plot(nup_, title='Neuronal Upper', color=color.gray, linewidth=1, style=plot.style_line,transp=0)
b=plot(nin_, title='Neuronal Lower', color=color.gray, linewidth=1, style=plot.style_line,transp=0)
fill(a, b, color=color.gray)
plotshape(crossunder(sr,nup_)? sr+atr(20):na, title="Sell", text="🐻", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.black,transp=0)
plotshape(crossover(sr,nin_)? sr-atr(20):na, title="Buy", text="🐂", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.black,transp=0)

//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

if backTestPeriod()

    strategy.entry("Buy", true, 1, when = crossover(sr,nin_)) 
    strategy.entry("Short", false, 1, when = crossunder(sr,nup_))

Mehr