Impulso del ciclo de la tendencia de Schaff siguiendo la estrategia

El autor:¿ Qué pasa?, Fecha: 2023-11-01 16:08:35
Las etiquetas:

img

Resumen general

Esta estrategia se basa en el indicador del ciclo de tendencia de Schaff, combinado con los principios de sobrecompra y sobreventa del Stoch RSI, para determinar y seguir las tendencias utilizando métricas de impulso.

Estrategia lógica

    1. Calcule el MACD, donde la longitud rápida predeterminada es 23 y la longitud lenta es 50. El MACD refleja la diferencia entre los promedios móviles a corto y largo plazo para juzgar el impulso del precio.
    1. Aplicar el RSI de Stoch al MACD para formar el valor K, donde la longitud del ciclo predeterminada es 10, que refleja los niveles de sobrecompra/sobreventa de la métrica de impulso del MACD.
    1. Tome la media móvil ponderada de K para formar D, donde el 1er %D de longitud predeterminado es 3, para eliminar el ruido de K.
    1. Aplicar de nuevo el RSI de Stoch a D para formar el valor inicial STC, donde el segundo %D de longitud predeterminado es 3, para crear señales precisas de sobrecompra/sobreventa.
    1. Tomemos el promedio móvil ponderado del STC inicial para obtener el valor final del STC, que oscila entre 0-100.
    1. Ir largo cuando el STC cruza por encima de 25 hacia arriba, y corto cuando el STC cruza hacia abajo más allá de 75.

Ventajas

    1. El diseño de STC que combina el índice de rentabilidad de las acciones identifica claramente las regiones de sobrecompra/sobreventa, formando fuertes señales de tendencia.
    1. El doble filtro de Stoch RSI elimina efectivamente las fallas.
    1. El rango estandarizado de 0-100 de STC permite señales comerciales mecanizadas sencillas.
    1. La prueba de retroceso implementa marcas de fuga visuales y alertas emergentes de texto para una captura de señal clara e intuitiva.
    1. Los parámetros predeterminados optimizados evitan señales demasiado sensibles y operaciones innecesarias.

Los riesgos

    1. El STC es sensible a los parámetros. Las diferentes monedas y marcos de tiempo requieren ajustes de parámetros para adaptarse a las características del mercado.
    1. Las estrategias de escape son propensas a trampas, que requieren paradas para controlar el riesgo.
    1. Las falsas rupturas de baja liquidez pueden generar malas señales, lo que requiere un filtro de volumen.
    1. El STC por sí solo corre el riesgo de reversión. Se necesita confirmación utilizando otros factores.
    1. Los niveles clave de soporte/resistencia deben ser vigilados para evitar señales negativas.

Oportunidades de mejora

    1. Optimizar los parámetros MACD para diferentes períodos y monedas.
    1. Refine los valores de Stoch RSI K y D para suavizar la curva STC.
    1. Añadir un filtro de volumen para evitar falsas rupturas de baja liquidez.
    1. Incorporar indicadores adicionales para confirmar las señales, por ejemplo, bandas de Bollinger.
    1. Añadir mecanismos de detención como movimiento / ATR paradas.
    1. El valor de la posición de la entidad en el mercado de valores de mercado se calculará en función de la posición de la entidad en el mercado de valores.

Conclusión

La estrategia del ciclo de tendencias de Schaff identifica sobrecomprado/sobrevendido a través de métricas de impulso para determinar los cambios de tendencia de precios a corto plazo. Aunque simple y ajustable, corre el riesgo de trampas.


/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
// Copyright (c) 2018-present, Alex Orekhov (everget)
// Schaff Trend Cycle script may be freely distributed under the MIT license.
strategy("Schaff Trend Cycle", shorttitle="STC Backtest", overlay=true)

fastLength = input(title="MACD Fast Length",  defval=23)
slowLength = input(title="MACD Slow Length",  defval=50)
cycleLength = input(title="Cycle Length",  defval=10)
d1Length = input(title="1st %D Length",  defval=3)
d2Length = input(title="2nd %D Length",  defval=3)
src = input(title="Source",  defval=close)
highlightBreakouts = input(title="Highlight Breakouts ?", type=bool, defval=true)

macd = ema(src, fastLength) - ema(src, slowLength)

k = nz(fixnan(stoch(macd, macd, macd, cycleLength)))

d = ema(k, d1Length)

kd = nz(fixnan(stoch(d, d, d, cycleLength)))

stc = ema(kd, d2Length)
stc := 	stc > 100 ? 100 : stc < 0 ? 0 : stc

//stcColor = not highlightBreakouts ? (stc > stc[1] ? green : red) : #ff3013
//stcPlot = plot(stc, title="STC", color=stcColor, transp=0)

upper = input(75, defval=75)
lower = input(25, defval=25)

transparent = color(white, 100)

upperLevel = plot(upper, title="Upper", color=gray)
// hline(50, title="Middle", linestyle=dotted)
lowerLevel = plot(lower, title="Lower", color=gray)

fill(upperLevel, lowerLevel, color=#f9cb9c, transp=90)

upperFillColor = stc > upper and highlightBreakouts ? green : transparent
lowerFillColor = stc < lower and highlightBreakouts ? red : transparent

//fill(upperLevel, stcPlot, color=upperFillColor, transp=80)
//fill(lowerLevel, stcPlot, color=lowerFillColor, transp=80)

long =  crossover(stc, lower) ? lower : na
short = crossunder(stc, upper) ? upper : na

long_filt = long and not short
short_filt = short and not long

prev = 0
prev := long_filt ? 1 : short_filt ? -1 : prev[1]

long_final = long_filt and prev[1] == -1
short_final = short_filt and prev[1] == 1

strategy.entry("long", strategy.long, when = long )
strategy.entry("short", strategy.short, when = short)

plotshape(crossover(stc, lower) ? lower : na, title="Crossover", location=location.absolute, style=shape.circle, size=size.tiny, color=green, transp=0)
plotshape(crossunder(stc, upper) ? upper : na, title="Crossunder", location=location.absolute, style=shape.circle, size=size.tiny, color=red, transp=0)

alertcondition(long_final, "Long", message="Long")
alertcondition(short_final,"Short", message="Short")

plotshape(long_final, style=shape.arrowup, text="Long", color=green, location=location.belowbar)
plotshape(short_final, style=shape.arrowdown, text="Short", color=red, location=location.abovebar)


Más.