Estrategia de doble oscilador estocástico

El autor:¿ Qué pasa?, Fecha: 2023-09-17 18:26:16
Las etiquetas:

Resumen general

Esta estrategia utiliza dos osciladores estocásticos con diferentes parámetros para determinar las condiciones alcista/baja. Es un típico sistema de cruce de promedios móviles. El oscilador más rápido juzga las tendencias a corto plazo y las señales de entrada, mientras que el más lento confirma la dirección general de la tendencia. Las señales se generan a partir de la combinación.

Estrategia lógica

  1. El rápido %K muestra la dirección de la tendencia a corto plazo.

  2. Cuando el oscilador rápido da una señal de reversión, compruebe la validez de la tendencia del oscilador lento.

  3. El cruce rápido de %K por encima de SM1 indica una señal alcista.

  4. El cruce rápido de %K por debajo de SM1 indica una señal bajista.

  5. Establecer puntos de toma de ganancias y stop-loss en porcentajes fijos.

Análisis de ventajas

  1. El doble filtro estocástico filtra el ruido y mejora la precisión.

  2. El parámetro SM1 más pequeño hace que el %K sea sensible para captar oportunidades a corto plazo.

  3. Los ciclos más largos juzgan la tendencia general, los ciclos más pequeños capturan las reversiones.

  4. Los puntos fijos de toma de ganancias y stop loss hacen que el riesgo sea controlado sin grandes oscilaciones.

Análisis de riesgos

  1. La divergencia entre los indicadores puede causar operaciones perdidas o señales incorrectas.

  2. Los puntos fijos de toma de ganancias y de stop loss carecen de flexibilidad para adaptarse a los mercados.

  3. Los parámetros estocásticos necesitan optimización repetitiva, ajustes incorrectos conducen al fracaso.

  4. La alta frecuencia de negociación de las operaciones a corto plazo aumenta los costes de transacción.

Direcciones de optimización

  1. Añadir otros indicadores o filtros para garantizar la calidad de la señal.

  2. Prueba diferentes combinaciones de parámetros para encontrar la configuración óptima.

  3. Incorporar medidas de volatilidad para hacer dinámicos los niveles de toma de ganancias y stop loss.

  4. Utilice filtros de tiempo para evitar eventos clave y fluctuaciones irracionales de precios.

  5. Optimizar las estrategias de gestión de capital como el tamaño de la posición para mejorar la eficiencia del capital.

Resumen de las actividades

Esta estrategia integra osciladores estocásticos rápidos y lentos en un sistema bidireccional. La optimización de parámetros adicionales y la adición de filtros como indicadores de tendencia y volatilidad pueden mejorarlo. Con un control adecuado del riesgo, esta estrategia puede lograr rendimientos excedentes relativamente constantes.


/*backtest
start: 2023-08-17 00:00:00
end: 2023-09-16 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Double Stochastic", overlay=true)

//-----------------------Stochastics------------------------//

c= security(syminfo.tickerid,timeframe.period , close)  
h= security(syminfo.tickerid, timeframe.period, high)  
l= security(syminfo.tickerid, timeframe.period, low)  

c1= security(syminfo.tickerid, timeframe.period, close)  
h2= security(syminfo.tickerid, timeframe.period, high)  
l1= security(syminfo.tickerid, timeframe.period, low)  

K1 = input(5, title="K", minval=1, title="Leading K")
SM1 = input(2, title="Smooth", minval=1, title="Leading Smooth ")
k = ema(stoch(c, h, l, K1), SM1)

K2 = input(97, title="K", minval=1, title="Lagging K")
D2 = input(3, title="D", minval=1, title="Lagging D")
SM2 = input(1, title="Smooth", minval=1, title="Lagging Smooth")
k1 = ema(stoch(c1, h2, l1, K2), SM2)

// buy ((k[2] < 40 and k > 40) and bars_up > 0 and k1 > 50) 
// sell (k[2] > 60 and k < 60) and bars_down > 0 and k1 < 50

//-----------------------Mechanics------------------------//

buy = k1 > 50 and k < 30 and k > k[1] ? 1 : 0
sell = k1 < 50 and k > 70 and k < k[1] ? 1 : 0

buy_val = valuewhen(buy == 1, close, 1)
sell_val = valuewhen(sell == 1, close, 1)

buy_close = buy_val * input(1.20, minval=0.1)
sell_close = sell_val / input(1.20, minval=0.1)

//------------------------Buy/Sell-------------------------//

longCondition = buy == 1
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

close_long = close >= buy_close
if (close_long)
    strategy.close("My Long Entry Id")
    
sellCondition = sell == 1
if (sellCondition)
    strategy.entry("My Short Entry Id", strategy.short)

close_short = close <= sell_close
if (close_short)
    strategy.close("My Short Entry Id")    

Más.