Estrategia de cruce de medias móviles y oscilador estocástico combinada con stop loss y filtro de oscilador estocástico

MA SMA
Fecha de creación: 2024-04-26 16:10:11 Última modificación: 2024-04-26 16:10:11
Copiar: 0 Número de Visitas: 847
1
Seguir
1617
Seguidores

Estrategia de cruce de medias móviles y oscilador estocástico combinada con stop loss y filtro de oscilador estocástico

Descripción general

La estrategia combina un indicador de oscilación aleatoria (estocástico) con un promedio móvil (moving average) para generar una señal de negociación observando la tendencia de los indicadores aleatorios de sobreventa y sobreventa, así como la tendencia de los promedios móviles. La estrategia también introduce un filtro de indicadores aleatorios, que puede generar una señal de negociación correspondiente cuando la línea K del indicador aleatorio mantiene una cantidad de líneas K por debajo de 50. La estrategia también establece un Stop Loss para controlar el riesgo.

Principio de estrategia

  1. Calcula el índice de oscilación aleatorio y obtienes la línea K y la línea D. Los parámetros se pueden ajustar, incluyendo el ciclo del índice aleatorio, el nivel de K, el nivel de D, las zonas de sobrecompra y sobreventa.

  2. Cálculo de las medias móviles, el precio de cierre por defecto, el ciclo es ajustable.

  3. Calcula el filtro de indicadores aleatorios. Cuando la línea K se mantiene por debajo de 50, se genera una señal de filtración. El ciclo es ajustable.

  4. Las condiciones para generar señales de múltiples cabezas: el indicador aleatorio cruza hacia arriba en la zona de venta excesiva o el indicador aleatorio filtra la señal y la media móvil hacia arriba.

  5. Condiciones para generar una señal de cabeza en blanco: el indicador aleatorio se cruza hacia abajo en la zona de sobrecompra o el indicador aleatorio filtra la señal y la media móvil hacia abajo.

  6. Condición de posición en línea de la mediana móvil en una línea K aleatoria y la mediana se desplaza hacia abajo.

  7. Condición de posición en blanco: el promedio móvil pasa por debajo de la línea K aleatoria y la línea promedio se desplaza hacia arriba.

  8. La administración de posiciones utiliza un porcentaje de capital fijo, el 10% por defecto. Al mismo tiempo, se establece un stop loss, el 2% por defecto.

Análisis de las ventajas

  1. La combinación de las características de sobrecompra y sobreventa y de tendencia permite seguir la tendencia y evitar la caída.

  2. El filtro de indicadores aleatorios evita el comercio frecuente en situaciones de crisis.

  3. La configuración Stop Loss ayuda a controlar la retirada.

  4. La estructura del código es clara, los parámetros son ajustables y se pueden optimizar aún más.

Análisis de riesgos

  1. Los indicadores aleatorios tienen un cierto atraso y pueden perderse los mejores puntos de compra y venta.

  2. La precisión de la carta de agarrar en el punto de cambio de tendencia es pobre, y la frecuencia de stop loss puede ser alta.

  3. La gestión de fondos de proporción fija se retira más en caso de pérdidas continuas.

Dirección de optimización

  1. La introducción de más filtros, como el comportamiento de los precios y otros indicadores auxiliares, mejora la precisión de la señal.

  2. Separar las señales fuertes y débiles, y aumentar la posición cuando aparezca una señal fuerte.

  3. Optimizar el juicio de los puntos de inflexión de tendencias con el fin de captar más información.

  4. Para optimizar la gestión de posiciones, se puede considerar el ajuste de posiciones de pérdidas y ganancias flotantes, etc.

  5. Intentar diferentes combinaciones de parámetros para encontrar el mejor.

Resumir

La estrategia se basa en un indicador de oscilación aleatoria para juzgar la tendencia en combinación con un promedio móvil y, al mismo tiempo, utiliza la función de filtrado del indicador aleatorio en sí mismo para generar una señal de negociación relativamente confiable. La estrategia tiene una idea general clara y es adecuada para su uso en situaciones de tendencia.

Código Fuente de la Estrategia
/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Pablo_2uc

//@version=5
strategy("Estrategia Estocástico + MA con Stop Loss y Filtro Estocástico", overlay=true)

// Parámetros del Estocástico
length = input.int(14, title="Longitud Estocástico")
smoothK = input.int(3, title="Suavizado K")
smoothD = input.int(3, title="Suavizado D")
oversold = input.int(20, title="Sobreventa")
overbought = input.int(80, title="Sobrecompra")

// Parámetros de la Media Móvil
maLength = input.int(9, title="Longitud MA")
maSource = input(close, title="Fuente MA")

// Capital inicial
capital = 5000

// Tamaño de posición (10% del capital)
positionSize = capital * 0.10

// Stop Loss (2% del precio de entrada)
stopLossPercent = input.int(2, title="Stop Loss (%)") / 100

// Número de ruedas para el filtro estocástico
filterPeriods = input.int(12, title="Ruedas de Filtro Estocástico")

// Cálculo del Estocástico
k = ta.sma(ta.stoch(close, high, low, length), smoothK)
d = ta.sma(k, smoothD)

// Cálculo de la Media Móvil
ma = ta.sma(maSource, maLength)

// Filtro estocástico
stochasticFilter = ta.sma(k > 50 ? 1 : 0, filterPeriods)

// Condiciones de entrada en largo y corto
longCondition = (ta.crossunder(k, oversold) or ta.crossover(stochasticFilter, 1)) and ma > ma[1]
shortCondition = (ta.crossover(k, overbought) or ta.crossover(stochasticFilter, 1)) and ma < ma[1]

// Condiciones de salida
exitLongCondition = ta.crossover(k, ma) and ma < ma[1]
exitShortCondition = ta.crossunder(k, ma) and ma > ma[1]

// Estrategia
if (longCondition)
    strategy.entry("Long", strategy.long, qty=positionSize)
    strategy.exit("Exit Long", "Long", stop=close * (1 - stopLossPercent))
if (shortCondition)
    strategy.entry("Short", strategy.short, qty=positionSize)
    strategy.exit("Exit Short", "Short", stop=close * (1 + stopLossPercent))

// Cierre de posiciones
if (exitLongCondition)
    strategy.close("Long")
if (exitShortCondition)
    strategy.close("Short")