Estrategia de seguimiento de tendencias optimizada para gemelos

El autor:¿ Qué pasa?, Fecha: 2023-10-08 15:10:31
Las etiquetas:

Resumen general

La estrategia Twin Optimized Trend Tracker es una versión mejorada de la estrategia OTT que combina líneas OTT duales y un coeficiente para manejar mejor las señales falsas durante el mercado lateral.

Principios

El núcleo de la estrategia Twin OTT es determinar la dirección de la tendencia utilizando dos líneas de seguimiento de tendencia optimizadas - OTT. Primero calcula el promedio móvil MAvg, luego obtiene la línea de stop loss larga longStop y la línea de stop loss corta shortStop basada en un porcentaje del valor de MAvg. Cuando el precio cruza por encima de la línea de longStop, es una señal larga, y cuando cruza por debajo de la línea de shortStop, es una señal corta.

Para manejar las señales falsas durante el mercado lateral, la estrategia mejora los dos aspectos siguientes:

  1. Se agregan dos líneas OTT desplazadas verticalmente, OTTup y OTTdn. Son ligeros cambios hacia arriba y hacia abajo de la OTT original.

  2. Se introduce un pequeño coeficiente para afinar las dos líneas OTT desplazadas para una mayor precisión.

Con este diseño de OTT gemelo, la mayor parte del ruido del mercado lateral se puede filtrar para evitar señales erróneas. Ayuda a capturar los puntos de inflexión de tendencia y cambiar de posición de manera oportuna. Esta es la mayor ventaja de la estrategia Twin OTT.

Ventajas

  • El diseño de líneas OTT gemelas puede filtrar eficazmente las señales falsas y mejorar la estabilidad de la estrategia
  • El coeficiente adicional ayuda a las líneas OTT a responder mejor al mercado
  • El autor Anıl Özekşi explica la lógica de la estrategia claramente en sus tutoriales de video, que es fácil de entender
  • Combina múltiples indicadores técnicos como EMA, líneas de stop loss para determinar las tendencias del mercado
  • El autor, Anıl Özekşi, es un conocido comerciante turco, lo que añade credibilidad a la

Los riesgos

  • El indicador OTT en sí tiende a las pruebas de freno y retroceso.
  • Con violentas fluctuaciones, las líneas de stop loss pueden activarse con frecuencia, causando un exceso de operaciones.
  • El coeficiente de coeficientes debe ser sometido a un examen cuidadoso para obtener el valor óptimo, de lo contrario, socava su eficacia.
  • Los tutoriales están en turco. La barrera del idioma puede conducir a malentendidos de la lógica.
  • Las pruebas de retroceso son insuficientes, se necesitan más períodos y mercados para verificar la estrategia.

Las medidas de contramedida:

  • Añadir un amortiguador entre las líneas de stop loss y la OTT doble para evitar la sobresensibilidad
  • Optimizar los ajustes de coeficientes de acuerdo con los resultados de las pruebas de retroceso
  • Traducir los tutoriales para garantizar la comprensión correcta de la lógica
  • Realizar pruebas de retroceso a través de más períodos históricos para verificar la fiabilidad

Direcciones de optimización

  • Hacer que los parámetros como la longitud del período de entradas ajustables
  • Pruebe otros tipos de promedios móviles que se adapten mejor a los principios de OTT
  • Optimizar el coeficiente para los diferentes instrumentos de negociación por separado
  • Añadir filtros para evitar señales erróneas durante sesiones comerciales menores
  • Hacer dinámicas las líneas de stop loss basadas en la volatilidad
  • Introduzca el aprendizaje automático para optimizar automáticamente los parámetros

En resumen, la estrategia Twin OTT utiliza plenamente la experiencia OTT de Anıl Özekşi y hace innovaciones. Tiene el potencial de convertirse en un marco de seguimiento de tendencias confiable y personalizable.

Conclusión

La estrategia Twin OTT maneja eficazmente las señales falsas durante los mercados laterales utilizando líneas de seguimiento de tendencias optimizadas duales y un coeficiente de ajuste fino. Hace un uso sensato de los conceptos de promedio móvil y líneas de stop loss dinámicas para rastrear las tendencias. Esta estrategia concisa y práctica proviene de la experiencia de primera mano de un comerciante de renombre, por lo que vale la pena una investigación y aplicación en profundidad. Pero también debemos ser conscientes de sus limitaciones y evitar la complacencia. Solo a través de optimizaciones continuas y pruebas rigurosas puede convertirse en una estrategia de seguimiento de tendencias sólida.


/*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)

Más.