Estrategia de ruptura de la media móvil de cruce

El autor:¿ Qué pasa?, Fecha: 2024-02-06 15:02:33
Las etiquetas:

img

Resumen general

Esta estrategia utiliza tres promedios móviles de diferentes períodos para identificar la dirección de la tendencia del mercado. Entra en una posición cuando los tres promedios móviles se mueven en la misma dirección. Al mismo tiempo, combinado con el precio más alto o más bajo de las velas N más recientes, establece stop loss y take profit.

Estrategia lógica

  1. Calcular las medias móviles a largo, mediano y corto plazo. Los usuarios pueden establecer los períodos por sí mismos. Los valores predeterminados son 20, 10 y 5.

  2. Compare las direcciones de los tres promedios móviles. Cuando el promedio móvil a corto plazo cruza por encima del medio plazo y el mediano plazo cruza por encima del largo plazo, se juzga como un mercado alcista. Cuando el corto plazo cruza por debajo del mediano plazo y el mediano plazo cruza por debajo del largo plazo, se juzga como un mercado bajista.

  3. En un mercado alcista, si el precio rompe el precio más alto de las N velas más recientes, ir largo; en un mercado bajista, si el precio rompe el precio más bajo de las N velas más recientes, ir corto.

  4. Después de entrar en una posición, establece el stop loss y toma ganancias.

Análisis de ventajas

Esta estrategia combina el indicador de promedio móvil y los gráficos de velas, que pueden determinar mejor la tendencia del mercado.

En comparación con un solo promedio móvil y otros indicadores, esta estrategia utiliza tres promedios móviles para juzgar la tendencia del mercado de manera más confiable. Mientras tanto, entrar en una posición al romper el precio más alto o más bajo de las velas N más recientes es una estrategia de ruptura común. En general, la idea de la estrategia es clara y fácil de implementar.

Análisis de riesgos

Los principales riesgos potenciales de esta estrategia son:

  1. Si las medias móviles a medio corto plazo producen señales erróneas, pueden producirse pérdidas innecesarias.

  2. Selección incorrecta del momento de entrada en la posición, en la que es fácil quedar atrapado.

  3. La distancia de stop loss se establece demasiado pequeña. La ampliación de la distancia de stop loss ayuda a permitir más espacio para el precio.

Direcciones de optimización

Las direcciones para optimizar esta estrategia incluyen:

  1. Añadir otros indicadores de filtración para garantizar la fiabilidad de las señales de media móvil, por ejemplo, añadir el juicio largo/corto del volumen de operaciones.

  2. Optimizar los períodos de media móvil para adaptarlos mejor a los diferentes productos.

  3. Añadir algoritmos de aprendizaje automático para lograr la optimización automática de parámetros.

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

Resumen de las actividades

Esta estrategia es relativamente simple y universal. La idea es clara con una gran viabilidad. Como ejemplo de un sistema de cruce de promedios móviles, es una opción común para los principiantes. A través de la optimización adecuada, el sistema se puede aplicar a más productos y marcos de tiempo para obtener retornos constantes.


/*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")

Más.