Stratégie de suivi des tendances optimisée pour jumeaux

Auteur:ChaoZhang est là., Date: 2023-10-08 15:10:31 Je vous en prie.
Les étiquettes:

Résumé

La stratégie Twin Optimized Trend Tracker est une version améliorée de la stratégie OTT qui combine deux lignes OTT et un coefficient pour mieux gérer les faux signaux pendant le marché latéral.

Principaux

Le noyau de la stratégie Twin OTT est de déterminer la direction de la tendance en utilisant deux lignes de suivi de tendance optimisées - OTT. Elle calcule d'abord la moyenne mobile MAvg, puis obtient la ligne de stop-loss longue longStop et la ligne de stop-loss courte shortStop en fonction d'un pourcentage de la valeur MAvg. Lorsque le prix traverse au-dessus de la ligne longStop, c'est un signal long, et lorsqu'il traverse en dessous de la ligne shortStop, c'est un signal court.

Pour gérer les faux signaux lors d'un marché latéral, la stratégie améliore les deux aspects suivants:

  1. Deux lignes OTT verticalement déplacées, OTTup et OTTdn, sont ajoutées. Ce sont de légers mouvements vers le haut et vers le bas de l'OTT d'origine.

  2. Un petit coefficient est introduit pour affiner les deux lignes OTT déplacées pour une meilleure précision.

Avec cette conception OTT jumelle, la plupart du bruit du marché latéral peut être filtré pour éviter les mauvais signaux.

Les avantages

  • La conception de lignes OTT jumelles peut filtrer efficacement les faux signaux et améliorer la stabilité de la stratégie
  • Le coefficient supplémentaire aide les lignes OTT à mieux répondre au marché
  • L'auteur Anıl Özekşi explique clairement la logique de la stratégie dans ses tutoriels vidéo, ce qui est facile à comprendre
  • Il combine plusieurs indicateurs techniques tels que EMA, lignes de stop-loss pour déterminer les tendances du marché
  • L'auteur, Anıl Özekşi, est un négociant turc bien connu, ce qui ajoute à la crédibilité de l'article.

Les risques

  • L'indicateur OTT lui-même a tendance à effectuer des tests de piqûre et de rétractation.
  • Avec des fluctuations violentes, les lignes de stop-loss peuvent être déclenchées fréquemment, ce qui provoque une survente.
  • Le coefficient de coefficients doit être soigneusement testé pour obtenir une valeur optimale, sinon son efficacité est compromise.
  • Les tutoriels sont en turc. La barrière de la langue peut entraîner des malentendus de la logique.
  • Les tests de retour sont insuffisants, il faut plus de temps et de marchés pour vérifier la stratégie.

Les contre-mesures:

  • Ajouter un tampon entre les lignes de stop loss et le double OTT pour éviter une sursensibilité
  • Optimiser les paramètres de coefficient en fonction des résultats des backtests
  • Traduire les tutoriels pour assurer une bonne compréhension de la logique
  • Effectuer des backtests sur plusieurs périodes historiques pour vérifier la fiabilité

Directions d'optimisation

  • Faire des paramètres tels que la longueur de la période des entrées réglables
  • Essayez d'autres types de moyennes mobiles qui correspondent mieux aux principes OTT
  • Optimiser le coefficient pour les différents instruments de négociation séparément
  • Ajouter des filtres pour éviter les mauvais signaux pendant les sessions de trading mineures
  • Rendre les lignes de stop loss dynamiques selon la volatilité
  • Introduire l'apprentissage automatique pour optimiser automatiquement les paramètres

En résumé, la stratégie Twin OTT utilise pleinement l'expérience OTT d'Anıl Özekşi et apporte des innovations. Elle a le potentiel de devenir un cadre de suivi des tendances fiable et personnalisable.

Conclusion

La stratégie Twin OTT gère efficacement les faux signaux lors des marchés latéraux en utilisant des lignes de suivi de tendance optimisées et un coefficient de réglage fin. Elle utilise de manière raisonnable les concepts de moyenne mobile et les lignes de stop loss dynamiques pour suivre les tendances. Cette stratégie concise et pratique découle de l'expérience de première main d'un trader de renom, ce qui la rend utile pour la recherche et l'application en profondeur. Mais nous devons également être conscients de ses limites et éviter la complaisance. Ce n'est qu'à travers des optimisations continues et des tests rigoureux qu'elle peut devenir une stratégie de suivi de tendance robuste.


/*backtest
start: 2023-09-07 00:00:00
end: 2023-10-07 00:00:00
period: 4h
basePeriod: 15m
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("Twin Optimized Trend Tracker","TOTT", overlay=true)
src = input(close, title="Source")
length=input(40, "OTT Period", minval=1)
percent=input(1, "Optimization Constant", type=input.float, step=0.1, minval=0)
coeff=input(0.001, "Twin OTT Coefficient", type=input.float, step=0.001, minval=0)
showsupport = input(title="Show Support Line?", type=input.bool, defval=true)
showsignalsk = input(title="Show Signals?", type=input.bool, defval=true)
mav = input(title="Moving Average Type", defval="VAR", options=["SMA", "EMA", "WMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF"])
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
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)
Wwma_Func(src,length)=>
    wwalpha = 1/ length
    WWMA = 0.0
    WWMA := wwalpha*src + (1-wwalpha)*nz(WWMA[1])
WWMA=Wwma_Func(src,length)
Zlema_Func(src,length)=>
    zxLag = length/2==round(length/2) ? length/2 : (length - 1) / 2
    zxEMAData = (src + (src - src[zxLag]))
    ZLEMA = ema(zxEMAData, length)
ZLEMA=Zlema_Func(src,length)
Tsf_Func(src,length)=>
    lrc = linreg(src, length, 0)
    lrc1 = linreg(src,length,1)
    lrs = (lrc-lrc1)
    TSF = linreg(src, length, 0)+lrs
TSF=Tsf_Func(src,length)
getMA(src, length) =>
    ma = 0.0
    if mav == "SMA"
        ma := sma(src, length)
        ma

    if mav == "EMA"
        ma := ema(src, length)
        ma

    if mav == "WMA"
        ma := wma(src, length)
        ma

    if mav == "TMA"
        ma := sma(sma(src, ceil(length / 2)), floor(length / 2) + 1)
        ma

    if mav == "VAR"
        ma := VAR
        ma

    if mav == "WWMA"
        ma := WWMA
        ma

    if mav == "ZLEMA"
        ma := ZLEMA
        ma

    if mav == "TSF"
        ma := TSF
        ma
    ma
    
MAvg=getMA(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 
OTTup=OTT*(1+coeff)
OTTdn=OTT*(1-coeff)

PPLOT=plot(showsupport ? MAvg : na, color=#0585E1, linewidth=2, title="Support Line")

pALLup=plot(nz(OTTup[2]), color=color.green, linewidth=2, title="OTTup", transp=0)
pALLdn=plot(nz(OTTdn[2]), color=color.red, linewidth=2, title="OTTdown", transp=0)

buySignalk = crossover(MAvg, OTTup[2])
sellSignalk = crossunder(MAvg, OTTdn[2])
K1=barssince(buySignalk)
K2=barssince(sellSignalk)
O1=barssince(buySignalk[1])
O2=barssince(sellSignalk[1])

plotshape(buySignalk and showsignalsk and O1>K2 ? min(low-abs(roc(low,1)),OTTdn-abs(roc(low,1))) : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
plotshape(sellSignalk and showsignalsk and O2>K1 ? max(high+abs(roc(high,1)),OTTup+abs(roc(high,1))) : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0,display=display.none)
longFillColor = highlighting ? (O2>K1 ? color.green : na) : na
shortFillColor = highlighting ? (O1>K2 ? color.red : na) : na
fill(mPlot, PPLOT, title="UpTrend Highligter", color=longFillColor,transp=90)
fill(mPlot, PPLOT, title="DownTrend Highligter", color=shortFillColor,transp=90)
fill(pALLup, pALLdn, title="Flat Zone Highligter", color=color.blue,transp=90)



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 buySignalk
    strategy.entry("Long", strategy.long)
if sellSignalk
    strategy.entry("Short", strategy.short)

Plus de