Ciclo de tendencia de Schaff con estrategia de cruce de media móvil doble

El autor:¿ Qué pasa?, Fecha: 2023-12-12 17:43:19
Las etiquetas:

img

Resumen general

Esta estrategia se llama Schaff Trend Cycle con doble Moving Average Crossover Strategy. La idea principal es determinar posiciones largas y cortas basadas en el indicador Schaff Trend Cycle (STC) y el doble crossover de la media móvil. Específicamente, cuando la STC rompe con las áreas de sobrecompra o sobreventa, el precio está por encima del promedio móvil exponencial rápido, y la EMA rápida está por encima de la EMA lenta, se abre una posición larga. Por el contrario, se abre una posición corta.

Estrategia lógica

La estrategia se basa principalmente en dos indicadores técnicos:

  1. Indicador de tendencia: Indicador STC para determinar la dirección de la tendencia. El STC incluye la línea del indicador MACD, Estocástico y STC. Una ruptura ascendente desde la zona 0-25 indica una tendencia alcista, mientras que una ruptura descendente desde la zona 75-100 indica una tendencia bajista.

  2. Crossover de media móvil: media móvil simple rápida (período predeterminado 35) cruza por encima/por debajo de la SMA lenta (período predeterminado 200). Una señal alcista se activa cuando la SMA rápida cruza por encima de la SMA lenta. Una señal bajista se activa en el cruce opuesto.

La lógica de las señales de negociación se define de la siguiente manera:

  1. Señales largas: STC rompe por encima de la línea 25, SMA rápida está por encima de SMA lenta y el precio de cierre está por encima de SMA rápida.

  2. Señal corto: STC rompe por debajo de la línea 75, SMA rápida está por debajo de SMA lenta y el precio de cierre está por debajo de SMA rápida.

Análisis de ventajas

Las ventajas de esta estrategia incluyen:

  1. STC determina la tendencia general, mientras que los MAs dobles generan señales de entrada específicas.

  2. Períodos de media móvil personalizables. Los períodos de media móvil pueden optimizarse para diferentes condiciones de mercado.

  3. El STC identifica los niveles de sobrecompra/sobreventa para evitar comprar los tops y vender los bottoms. Las paradas objetivo establecen un rango de ganancias/pérdidas de 400 puntos.

Análisis de riesgos

Hay algunos riesgos a tener en cuenta:

  1. El potencial de falsas rupturas STC necesita ser confirmado por la acción del precio.

  2. Más señales falsas de cruces de MA. Requiere ajuste de los períodos de MA.

  3. Sólo negocia en una dirección a la vez limita el espacio para las posiciones abiertas considera permitir el comercio bidireccional

  4. No se maneja el riesgo de diferencias en el comercio de divisas de margen.

Optimización

Las posibles vías de optimización incluyen:

  1. Ajustar los parámetros de sobrecompra/sobreventa de STC.

  2. Optimizar los períodos de admisión para mejorar la fiabilidad de la señal cruzada.

  3. Añadir filtros adicionales como Bandas de Bollinger para reducir las operaciones falsas de ruptura.

  4. Implementar una lógica comercial bidireccional para aumentar la capacidad.

  5. Añadir una lógica de stop loss para controlar la pérdida por operación.

Conclusión

En resumen, esta estrategia combina indicadores de tendencia y cruce de promedios móviles para determinar la dirección de la tendencia y el momento de las entradas. Con los controles de riesgo adecuados, puede lograr buenos rendimientos. La lógica sencilla hace que sea fácil de entender y optimizar en diferentes condiciones de mercado, adecuada para principiantes.


/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// Shaff Trend Cycle coded by Alex Orekhov (everget)
// Strategy and its additional conditions provided by greenmask
// Schaff Trend Cycle script may be freely distributed under the MIT license.
strategy("STC", shorttitle="STC")

fastLength = input(title="MACD Fast Length", type=input.integer, defval=23)
slowLength = input(title="MACD Slow Length", type=input.integer, defval=50)
cycleLength = input(title="Cycle Length", type=input.integer, defval=10)
d1Length = input(title="1st %D Length", type=input.integer, defval=3)
d2Length = input(title="2nd %D Length", type=input.integer, defval=3)
src = close
highlightBreakouts = input(title="Highlight Breakouts ?", type=input.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] ? color.green : color.red) : #ff3013
stcPlot = plot(stc, title="STC", color=stcColor, transp=0)
upper = 75
lower = 25
transparent = color.new(color.white, 100)
upperLevel = plot(upper, title="Upper", color=color.gray)
hline(50, title="Middle", linestyle=hline.style_dotted)
lowerLevel = plot(lower, title="Lower", color=color.gray)

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

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

fill(upperLevel, stcPlot, color=upperFillColor, transp=80)
fill(lowerLevel, stcPlot, color=lowerFillColor, transp=80)
strategy.initial_capital = 50000
ordersize=floor(strategy.initial_capital/close)
targetvalue = input(title="Target/stop", type=input.integer, defval=400)

ma1length = input(title="SMA1", type=input.integer, defval=35)
ma2length = input(title="SMA2", type=input.integer, defval=200)
ma1 = ema(close,ma1length)
ma2 = ema(close,ma2length)

bullbuy = crossover(stc, lower) and ma1>ma2 and close>ma1
bearsell = crossunder(stc, upper) and ma1<ma2 and close<ma1

if (bullbuy)
    strategy.entry("Riposte", strategy.long, ordersize)
    strategy.exit( "Riposte close", from_entry="Riposte", qty_percent=100, profit=targetvalue,loss=targetvalue)

if (bearsell)
    strategy.entry("Riposte", strategy.short, ordersize)
    strategy.exit( "Riposte close", from_entry="Riposte", qty_percent=100, profit=targetvalue,loss=targetvalue)

//plotshape(bullbuy,  title= "Purple", location=location.belowbar, color=#006600, transp=0, style=shape.circle, size=size.tiny, text="Riposte")
//plotshape(bearsell,  title= "Purple", location=location.abovebar, color=#006600, transp=0, style=shape.circle, size=size.tiny, text="Riposte")
















Más.