Estrategia de ruptura de cruce de medias móviles


Fecha de creación: 2024-02-06 15:02:33 Última modificación: 2024-02-06 15:02:33
Copiar: 1 Número de Visitas: 671
1
Seguir
1617
Seguidores

Estrategia de ruptura de cruce de medias móviles

Descripción general

Esta estrategia utiliza tres promedios móviles de diferentes períodos para identificar la dirección de la tendencia del mercado. Cuando las tres promedios móviles coinciden en la dirección, se entra en una posición. Al mismo tiempo, se establece un stop loss en combinación con el precio más alto o más bajo de la línea N-K más reciente.

Principio de estrategia

  1. Calcula tres promedios móviles a largo, mediano y corto plazo. El usuario puede configurar el ciclo por sí mismo. Default: 20, 10 y 5 días.

  2. Comparación de las direcciones de los tres promedios móviles. Cuando los promedios móviles de corto plazo se mueven a mediano plazo, los promedios de largo plazo se mueven a mediano plazo, se juzga que es un mercado de múltiples cabezas. Cuando los promedios móviles de corto plazo se mueven a mediano plazo, los promedios de largo plazo se mueven a mediano plazo, se juzga que es un mercado de cabeza vacía.

  3. En el mercado de múltiples cabezas, si el precio supera el precio más alto dentro de la línea K de la raíz N más reciente, haga más; en el mercado de cabezas vacías, si el precio supera el precio más bajo dentro de la línea K de la raíz N más reciente, haga vacío. N también es un parámetro personalizado para el usuario.

  4. Después de entrar en la posición, configure el Stop Loss. El Stop Loss del Mercado Multi-Head es el precio más bajo dentro de la línea N-K más reciente, y el Stop Loss del Mercado Vacío es el precio más alto dentro de la línea N-K más reciente.

Análisis de las ventajas

Esta estrategia, combinada con un indicador de media móvil y un gráfico de la línea K, ayuda a determinar mejor el movimiento del mercado. Al mismo tiempo, la configuración del Stop Loss Stop es razonable y es útil para evitar grandes pérdidas.

La estrategia utiliza tres medias móviles para juzgar la fiabilidad de los movimientos del mercado, en comparación con un solo indicador como el promedio móvil. Al mismo tiempo, romper el precio más alto o más bajo de la línea N-K más reciente para entrar en una posición es una estrategia de ruptura más común. En general, la estrategia es clara y fácil de implementar.

Análisis de riesgos

Los principales riesgos que podría tener esta estrategia son:

  1. La probabilidad de error en la determinación de la dirección de las tres medias móviles. Si las medias móviles de corto y medio plazo producen una señal errónea, puede causar pérdidas innecesarias.

  2. La elección de la hora de entrada a la brecha es incorrecta y es fácil de enganchar. Se debe optimizar adecuadamente la elección de la hora de entrada.

  3. El set de stop loss es demasiado pequeño, y ampliar el stop loss ayuda a dar más Running Room.

Dirección de optimización

Esta estrategia puede ser optimizada en las siguientes direcciones:

  1. Se añaden filtros de otros indicadores para asegurar la fiabilidad de la señal de la media móvil. Por ejemplo, se añade el juicio de la falta de espacio en el volumen de transacciones.

  2. Optimización de los parámetros periódicos de las medias móviles para adaptarlas mejor a las diferentes variedades.

  3. Se añaden algoritmos de aprendizaje automático para optimizar los parámetros.

  4. Prueba de la eficacia de la estrategia en datos de alta frecuencia.

Resumir

En general, esta estrategia es sencilla, general, clara y viable. Como ejemplo de un sistema de cruzamiento de medias móviles, es una opción común para los principiantes.

Código Fuente de la Estrategia
/*backtest
start: 2023-01-30 00:00:00
end: 2024-02-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_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/
// © hobbiecode

//@version=5
strategy("Cross Breakout - Hobbiecode", shorttitle="Cross - HOBBIE", overlay=true)

// User-defined input for moving averages
long_period = input(20, title="Long Period")
medium_period =  input(10, title = "Medium Period")
short_period = input(5, title="Short Period")
type_ma = input.string("SMA", title = "MA type", options = ["SMA", "EMA"])
candles_back = input(10, title = "Candles Back")
bars_valid = input(3, title = "Bars to Exit")

// Calculating moving averages
long_ma = 0.0
medium_ma = 0.0
short_ma = 0.0

if type_ma == "SMA"
    long_ma := ta.sma(close, long_period)
    medium_ma := ta.sma(close, medium_period)
    short_ma := ta.sma(close, short_period)
else
    long_ma := ta.ema(close, long_period)
    medium_ma := ta.ema(close, medium_period)
    short_ma := ta.ema(close, short_period)

// Plot moving averages
plot(long_ma, title="Long Moving Average", color=color.red)
plot(medium_ma, title = "Medium Moving Average", color = color.yellow)
plot(short_ma, title="Short Moving Average", color=color.green)

// Check last min/max
last_min = ta.lowest(candles_back)
last_max = ta.highest(candles_back)

// Strategy logic for crossing of moving averages
longCondition = short_ma > medium_ma and medium_ma > long_ma and high == last_max
shortCondition = short_ma < medium_ma and medium_ma < long_ma and low == last_min

longCondition_entry = longCondition and strategy.position_size == 0
shortCondition_entry = shortCondition and strategy.position_size == 0

// Check last min/max for operation
last_min_op = ta.lowest(candles_back)[1]
last_max_op = ta.highest(candles_back)[1]

// Plot lines
var line r1Line = na

// Entry orders
// if (longCondition)
//     from_line = chart.point.now(high)
//     to_line = chart.point.from_index(bar_index + candles_back, high)
//     r1Line := line.new(from_line, to_line, color = color.green, width = 2)

if longCondition_entry and ta.crossover(close,last_max_op)
    strategy.entry("Long", strategy.long)
    strategy.exit("Exit Long", from_entry="Long", stop=low)

// if (shortCondition)
//     from_line = chart.point.now(low)
//     to_line = chart.point.from_index(bar_index + candles_back, low)
//     r1Line := line.new(from_line, to_line, color = color.red, width = 2)

if shortCondition_entry and ta.crossunder(close,last_min_op)
    strategy.entry("Short", strategy.short)
    strategy.exit("Exit Short", from_entry="Short", stop=high)

if ta.barssince(longCondition_entry) >= bars_valid
    strategy.close("Long")

if ta.barssince(shortCondition_entry) >= bars_valid
    strategy.close("Short")