Quant Lights Moving Average Trend Tracking Optimierungsstrategie

Schriftsteller:ChaoZhang, Datum: 2024-01-04
Tags:

img

Übersicht

Quant Lights ist eine kombinierte Strategie, die den Stochastic-Indikator und den OTT-Indikator verwendet. Die Strategie verwendet den Stochastic-Indikator, um Kauf- und Verkaufssignale zu generieren, und kombiniert sie mit dem OTT-Indikator, um die Signale zu filtern, um den großen Trend zu erfassen und die Auswirkungen von Marktschwankungen, die falsche Signale verursachen, zu reduzieren. Dieser Artikel wird die Strategie im Detail bewerten.

Strategieprinzip

Der Stochastische Indikator vergleicht den Preis mit den höchsten und niedrigsten Preisen im angegebenen Zeitraum, um zu beurteilen, ob sich der Preis in einem extremen Bereich befindet. Der OTT-Indikator verwendet gleitende Durchschnitte und dynamische Stopps, um Trends zu verfolgen.

Der Code setzt die höchste Stufe des Stochastic auf 1080 und die niedrigste Stufe auf 1020. Wenn der Stochastic-Wert zwischen ihnen liegt, ist dies ein Bereich. Wenn der Stochastic Kauf-/Verkaufssignale erzeugt, bestimmt der Code die Gültigkeit des Signals auf der Grundlage des OTT-Indikators. Wenn der Preis über die OTT-Durchschnittslinie überschreitet, wird ein Kaufsignal ausgegeben. Wenn der Preis unter die OTT-Durchschnittslinie überschreitet, wird ein Verkaufssignal ausgegeben.

Diese Kombination nutzt Stochastic, um Überkauf- und Überverkaufsbedingungen zu bestimmen und Eingangssignale zu erzeugen, während OTT für die Verfolgung von Trends und die Verwendung von Stops verantwortlich ist, um falsche Signale auszufiltern, die durch übermäßige Marktschwankungen verursacht werden, wodurch die Genauigkeit und Volatilität des Signals optimiert werden.

Analyse der Vorteile

Die Strategie kombiniert Stochastische und OTT-Indikatoren, um folgende Aspekte zu optimieren:

  1. Verbesserte Signalgenauigkeit. Stochastische Beurteilungen überkaufter und überverkaufter Bedingungen, OTT filtert falsche Signale aus, die durch schwankende Märkte verursacht werden.
  2. Verringerte Strategievolatilität, die den aktuellen Verlust durch dynamische Stopps begrenzt und viele falsche Ausbrüche ausfiltert.
  3. Stochastic liefert grundlegende Signale und OTT verfolgt wichtige Trends.
  4. Verringert übermäßige Signalstörungen, verbessert die Signalqualität und reduziert nutzlose Signale.
  5. Es quantifiziert dynamische Stopp-Einstellungen, garantiert qualitativ den aktuellen Verlust und reduziert die Strategievolatilität weiter.
  6. Das System integriert Trend- und Überkauf-/Überverkaufsindizes.

Zusammenfassend lässt sich sagen, dass die Strategie durch die Verwendung von OTT zur Filterung von stochastischen Signalen die Signalqualität und die Investitionsrendite effektiv verbessert und gleichzeitig die Anzahl der Transaktionen und die Volatilität der Strategie reduziert, wodurch ein Effekt von geringem Risiko, hoher Rendite und einer genauen Verfolgung von Trends erzielt wird.

Risikoanalyse

  • Der Anwendungsbereich dieser Strategie ist relativ begrenzt und eignet sich vor allem für Aktien mit offensichtlichen Trends. Sie wirkt sich weniger auf Aktien mit sehr starken Kursschwankungen oder auf Aktien in seitlicher Konsolidierung aus.
  • Die Strategie berücksichtigt nicht die Fundamentaldaten der Aktien und das Makroumfeld, so dass es einige blinde Flecken gibt.
  • Viele Parameter von Stochastic und OTT müssen professionell abgestimmt werden, sonst beeinträchtigt dies die Rentabilität der Strategie.
  • Die Stopps sind zu locker, mit potenziellen Verlusten, die weiter optimiert werden müssen.
  • Es wird bei falschen Ausbrüchen und fluktuierenden Märkten gewisse Verluste und Signalstörungen geben.

Im Hinblick auf die oben genannten Risiken können folgende Maßnahmen ergriffen werden:

  1. Für verschiedene Arten von Beständen unterschiedliche Parameterkombinationen verwenden.
  2. Verbessern Sie die Signale, indem Sie Grundlagen und Nachrichten einbeziehen.
  3. Optimieren Sie die Parameter durch Tests, um die optimalen Einstellungen zu finden.
  4. Einführung von Bewegungshaltestellen zur weiteren Verringerung der Risiken.
  5. Änderungen der Beurteilungsbedingungen und Einsatz strengerer Signalbestätigungsmechanismen.

Optimierungsrichtlinien

Die Strategie kann in folgenden Bereichen weiter optimiert werden:

  1. Die aktuellen Standardwerte sind universell und können für verschiedene Bestände separat getestet werden, um die optimalen Parameterkombinationen zu finden.

  2. Einführung von Take Profit und Moving Stop Mechanismen. Derzeit ist die Verwendung dynamischer Fixed Stops nicht in der Lage, Verluste und Gewinne dynamisch zu verfolgen. Die Einführung von Moving Stops und Take Profit kann für eine weitere Risikokontrolle und Gewinnkontrolle getestet werden.

  3. Optimieren Sie die Signalbeurteilungslogik. Die aktuelle Beurteilungslogik ist relativ einfach und markiert direkt Kauf- und Verkaufssignale, wenn die Preise nach unten oder nach oben gehen. Mehr Indikatoren und Preismuster können integriert werden, um die Signalzuverlässigkeit zu gewährleisten.

  4. Erhöhen Sie die Bedingungen für offene Positionen und Filtermechanismen. Die aktuelle Strategie verarbeitet jedes Signal unterschiedslos. Volumenindikatoren, Handelsvolumenindikatoren und andere offene Positionsbedingungen können eingeführt werden, sowie ein bestimmtes Signalzeitfenster, um falsche Signale auszufiltern.

  5. Testen Sie verschiedene Indikatorkombinationen mit OTT. Derzeit wird die Stochastic- und OTT-Kombination verwendet. Die Wirksamkeit der Kombination anderer Indikatoren wie MACD und RSI mit OTT kann getestet werden.

  6. Integration von Modulen für Kapitalmanagement und Positionsgrößenbildung. Derzeit gibt es keine Kapitalmanagement- und Positionskontrollmechanismen, die sich ausschließlich auf Stops stützen. Verschiedene Arten von Kapitalmanagement- und Positionsgrößenbildungsmethoden können getestet werden, um einzelne und Gesamtrisiken weiter zu kontrollieren.

Zusammenfassung

Quant Lights ist eine quantitative Strategie, die den Stochastischen Indikator organisch mit dem OTT-Indikator kombiniert.

Die Vorteile der Strategie sind eine geringe Fehlerquote, klare Signale und geringe Volatilität.

Gleichzeitig gibt es noch Raum für Verbesserungen in dieser Strategie. Durch die Optimierung der Parameter, die Verbesserung des Stoppmechanismus, die Verbesserung der Signale und Filtermechanismen usw. kann sich die Strategie in eine stabilere, automatisierte und intelligente Richtung entwickeln. Dies ist auch das Ziel unserer Folgemaßnahmen.


/*backtest
start: 2023-12-27 00:00:00
end: 2024-01-03 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KivancOzbilgic
//created by: @Anil_Ozeksi
//developer: ANIL ÖZEKŞİ
//author: @kivancozbilgic


strategy(title="Stochastic Optimized Trend Tracker", shorttitle="SOTT", format=format.price, precision=2)
periodK = input(250, title="%K Length", minval=1)
smoothK = input(50, title="%K Smoothing", minval=1)
src1 = input(close, title="Source")
length=input(3, "OTT Period", minval=1)
percent=input(0.618, "OTT Percent", type=input.float, step=0.1, minval=0)
showsupport = input(title="Show Support Line?", type=input.bool, defval=false)
showsignalsc = input(title="Show Stochastic/OTT Crossing Signals?", type=input.bool, defval=false)
Var_Func1(src1,length)=>
    valpha1=2/(length+1)
    vud11=src1>src1[1] ? src1-src1[1] : 0
    vdd11=src1<src1[1] ? src1[1]-src1 : 0
    vUD1=sum(vud11,9)
    vDD1=sum(vdd11,9)
    vCMO1=nz((vUD1-vDD1)/(vUD1+vDD1))
    VAR1=0.0
    VAR1:=nz(valpha1*abs(vCMO1)*src1)+(1-valpha1*abs(vCMO1))*nz(VAR1[1])
VAR1=Var_Func1(src1,length)
k = Var_Func1(stoch(close, high, low, periodK), smoothK)
src=k+1000
Var_Func(src,length)=>
    valpha=2/(length+1)
    vud1=src>src[1] ? src-src[1] : 0
    vdd1=src<src[1] ? src[1]-src : 0
    vUD=sum(vud1,9)
    vDD=sum(vdd1,9)
    vCMO=nz((vUD-vDD)/(vUD+vDD))
    VAR=0.0
    VAR:=nz(valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*nz(VAR[1])
VAR=Var_Func(src,length)
h0 = hline(1080, "Upper Band", color=#606060)
h1 = hline(1020, "Lower Band", color=#606060)
fill(h0, h1, color=#9915FF, transp=80, title="Background")
plot(k+1000, title="%K", color=#0094FF)
MAvg=Var_Func(src, length)
fark=MAvg*percent*0.01
longStop = MAvg - fark
longStopPrev = nz(longStop[1], longStop)
longStop := MAvg > longStopPrev ? max(longStop, longStopPrev) : longStop
shortStop =  MAvg + fark
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := MAvg < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
MT = dir==1 ? longStop: shortStop
OTT=MAvg>MT ? MT*(200+percent)/200 : MT*(200-percent)/200 
plot(showsupport ? MAvg : na, color=#0585E1, linewidth=2, title="Support Line")
OTTC = #B800D9 
pALL=plot(nz(OTT[2]), color=OTTC, linewidth=2, title="OTT", transp=0)
alertcondition(cross(src, OTT[2]), title="Price Cross Alert", message="OTT - Price Crossing!")
alertcondition(crossover(src, OTT[2]), title="Price Crossover Alarm", message="PRICE OVER OTT - BUY SIGNAL!")
alertcondition(crossunder(src, OTT[2]), title="Price Crossunder Alarm", message="PRICE UNDER OTT - SELL SIGNAL!")
buySignalc = crossover(src, OTT[2])
plotshape(buySignalc and showsignalsc ? OTT*0.995 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
sellSignallc = crossunder(src, OTT[2])
plotshape(sellSignallc and showsignalsc ? OTT*1.005 : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)

dummy0 = input(true, title = "=Backtest Inputs=")
FromDay    = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth  = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear   = input(defval = 2005, title = "From Year", minval = 2005)
ToDay      = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToMonth    = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToYear     = input(defval = 9999, title = "To Year", minval = 2006)
Start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)
Finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)
Timerange() =>
    time >= Start and time <= Finish ? true : false
if buySignalc
    strategy.entry("Long", strategy.long,when=Timerange())
if sellSignallc
    strategy.entry("Short", strategy.short,when=Timerange())

  
  



Mehr