Estrategia dual de seguimiento de tendencias OTT


Fecha de creación: 2023-10-08 15:10:31 Última modificación: 2023-10-08 15:10:31
Copiar: 0 Número de Visitas: 912
1
Seguir
1617
Seguidores

Descripción general

La estrategia de seguimiento de tendencias de doble OTT es una versión mejorada de la estrategia de OTT, que combina líneas y coeficientes de doble OTT para responder mejor a las falsas señales cuando se corre el mercado. La estrategia fue desarrollada por el comerciante turco Anıl Özekşi, quien explica en detalle el diseño de la estrategia en su propio tutorial de video.

El principio

El núcleo de la estrategia de doble OTT es el uso de dos líneas de seguimiento de tendencias optimizadas OTT para determinar la dirección de la tendencia. Primero calcula el MAvg de la media móvil, y luego obtiene la línea de parada larga longStop y la línea de parada corta shortStop en función del porcentaje de los valores de MAvg.

Para combatir las falsas señales de corrección, la estrategia ha mejorado en dos aspectos:

  1. Se han añadido dos líneas OTT de desplazamiento vertical, OTTup y OTTdn, que son ligeros desplazamientos de OTT hacia arriba y hacia abajo. La verdadera señal de negociación solo se produce cuando el precio rompe estas dos líneas de desplazamiento.

  2. Se introdujo un pequeño coeficiente de coefficientes para ajustar las dos líneas OTT de los bits para adaptarlas al mercado con mayor precisión.

Con este diseño doble OTT, se puede filtrar la mayor parte del ruido del mercado de liquidación y evitar la generación de señales erróneas. De este modo, se puede capturar mejor los puntos de cambio de tendencia y cambiar de posición a tiempo. Esta es la mayor ventaja de la estrategia doble OTT.

Las ventajas

  • El uso de diseño de doble línea OTT puede filtrar las señales falsas y aumentar la estabilidad de la estrategia.
  • El aumento del coeficiente de ajuste hace que las líneas OTT estén más cerca de la respuesta del mercado
  • Anıl Özekşi, autor de este video, explica en detalle la estrategia para que sea fácil de entender y dominar.
  • Indicadores técnicos como el EMA integrado, la línea de parada y otros para determinar la tendencia del mercado
  • El autor Anıl Özekşi es un conocido trader turco con cierta notoriedad profesional.

El riesgo

  • Los indicadores OTT por sí mismos son propensos a generar riesgos de retracción de las pruebas, y el diseño de doble OTT reduce este problema.
  • En situaciones de gran volatilidad, la línea de stop loss puede ser activada con frecuencia y existe el riesgo de sobrecomercio.
  • coefficientes necesitan ser cuidadosamente probados para obtener un valor óptimo, o el efecto será reducido
  • El video es un tutorial en turco, donde los problemas de lenguaje pueden afectar la comprensión correcta de los algoritmos.
  • Los datos de retroalimentación son insuficientes, por lo que es necesario comprobar la eficacia de las estrategias en períodos más largos y en más mercados.

Respuesta:

  • Aumentar la banda de amortiguamiento entre la línea de parada y la doble OTT para evitar la hipersensibilidad
  • Optimización de la configuración del coeficiente para que sea más acorde con los resultados de la retroalimentación
  • Traducir los tutoriales de los autores para asegurar que la lógica de los algoritmos se entiende correctamente
  • Revisar en más contextos históricos para verificar la fiabilidad de los parámetros de la estrategia

Dirección de optimización

  • Se puede considerar la configuración de parámetros como la longitud del ciclo como valores de entrada ajustables
  • Intentar otros tipos de promedios móviles para encontrar un algoritmo de promedio que se ajuste mejor al principio de OTP
  • Tamaño del coeficiente optimizado según la variedad de la transacción
  • Mecanismo de filtración adicional para evitar señales erróneas en períodos de tiempo no primarios
  • Cambiar la línea de parada a un seguimiento dinámico, ajustado en tiempo real según la fluctuación
  • Aumentar los algoritmos de aprendizaje automático para optimizar la configuración de los parámetros utilizando la IA

En resumen, la estrategia de doble OTT aprovecha la experiencia de Anıl Özekşi en OTTP e innova. Se espera que sea un marco estratégico de seguimiento de tendencias fiable y personalizable. Sin embargo, se necesita una prueba de optimización continua para adaptarse a los cambios en el mercado.

Resumir

La estrategia de doble OTT, a través de la doble optimización de la línea de seguimiento de tendencias y el coeficiente de ajuste, responde eficazmente al problema de las señales falsas de la liquidación del mercado. Utiliza razonablemente el pensamiento de las medias móviles, complementado con la línea de parada para el seguimiento dinámico de la tendencia. La estrategia es sencilla y práctica, proviene de la experiencia personal de comerciantes conocidos, y vale la pena un estudio profundo.

Código Fuente de la Estrategia
/*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)