Quant Lights est une stratégie combinée utilisant l'indicateur stochastique et l'indicateur OTT. La stratégie utilise l'indicateur stochastique pour générer des signaux d'achat et de vente, et les combine avec l'indicateur OTT pour filtrer les signaux, en essayant de capturer la grande tendance et de réduire l'impact des fluctuations du marché qui causent de faux signaux.
L'idée de base de la stratégie est de superposer l'indicateur OTT à l'indicateur stochastique pour le filtrage des signaux. L'indicateur stochastique compare le prix avec les prix les plus élevés et les plus bas dans la période de temps spécifiée pour juger si le prix est dans une zone extrême.
Le code définit le niveau élevé du stochastique à 1080 et le niveau bas à 1020. Lorsque la valeur stochastique est entre eux, c'est une zone de fourchette. Lorsque le stochastique génère des signaux d'achat / vente, le code déterminera la validité du signal en fonction de l'indicateur OTT. Si le prix dépasse la ligne moyenne OTT, un signal d'achat est émis. Si le prix dépasse la ligne moyenne OTT, un signal de vente est émis.
Cette combinaison tire parti de Stochastic pour déterminer les conditions de surachat et de survente et générer des signaux d'entrée, tandis que OTT est responsable du suivi des tendances et utilise des arrêts pour filtrer les faux signaux causés par des fluctuations excessives du marché, optimisant ainsi la précision et la volatilité du signal.
La stratégie combine des indicateurs stochastiques et OTT pour optimiser les aspects suivants:
En résumé, en utilisant l'OTT pour filtrer les signaux stochastiques, la stratégie améliore efficacement la qualité des signaux et les rendements des investissements, tout en réduisant le nombre de transactions et la volatilité de la stratégie, ce qui permet d'obtenir l'effet de faible risque, de rendement élevé et de suivi attentif des tendances.
En ce qui concerne les risques susmentionnés, les mesures suivantes peuvent être prises pour améliorer:
La stratégie peut être encore optimisée dans les aspects suivants:
Les valeurs par défaut actuelles sont universelles et peuvent être testées séparément pour différents stocks afin de trouver les combinaisons optimales de paramètres.
Introduire des mécanismes de prise de profit et d'arrêt de mouvement. Actuellement, l'utilisation d'arrêts fixes dynamiques est incapable de suivre dynamiquement les pertes et les gains.
Optimiser la logique de jugement des signaux. La logique de jugement actuelle est relativement simple, marquant directement les signaux d'achat et de vente lorsque les prix s'effondrent ou baissent. Plus d'indicateurs et de modèles de prix peuvent être incorporés pour assurer la fiabilité du signal.
L'augmentation des conditions de position ouverte et des mécanismes de filtrage. La stratégie actuelle traite tous les signaux sans distinction. Des indicateurs de volume, des indicateurs de volume de négociation et d'autres conditions de position ouverte peuvent être introduits, ainsi qu'une certaine fenêtre de temps de signal pour filtrer les faux signaux.
Testez différentes combinaisons d'indicateurs avec OTT. Actuellement en utilisant la combinaison stochastique et OTT. L'efficacité de la combinaison d'autres indicateurs tels que MACD et RSI avec OTT peut être testée.
Intégrer des modules de gestion des capitaux et de dimensionnement des positions. Actuellement, il n'existe pas de mécanismes de gestion des capitaux et de contrôle des positions, qui reposent entièrement sur des arrêts. Différents types de méthodes de gestion des capitaux et de dimensionnement des positions peuvent être testés pour contrôler davantage les risques uniques et globaux.
Quant Lights est une stratégie quantitative qui combine organiquement l'indicateur stochastique avec l'indicateur OTT. Il utilise les forces complémentaires des deux indicateurs pour améliorer la précision du signal et capturer efficacement les tendances majeures tout en réduisant les risques.
Les avantages de la stratégie incluent un faible taux d'erreur, des signaux clairs et une faible volatilité.
Dans le même temps, il reste encore des possibilités d'amélioration de cette stratégie. Par l'optimisation des paramètres, l'amélioration du mécanisme d'arrêt, l'amélioration des signaux et des mécanismes de filtrage, etc., la stratégie peut évoluer vers une direction plus stable, automatisée et intelligente. C'est également l'objectif de nos travaux de suivi.
/*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())