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.
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.
Die Strategie kombiniert Stochastische und OTT-Indikatoren, um folgende Aspekte zu optimieren:
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.
Im Hinblick auf die oben genannten Risiken können folgende Maßnahmen ergriffen werden:
Die Strategie kann in folgenden Bereichen weiter optimiert werden:
Die aktuellen Standardwerte sind universell und können für verschiedene Bestände separat getestet werden, um die optimalen Parameterkombinationen zu finden.
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.
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.
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.
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.
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.
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())