Estrategia de cruce de medias móviles y precio de cierre mensual


Fecha de creación: 2023-11-23 17:09:01 Última modificación: 2023-11-23 17:09:01
Copiar: 0 Número de Visitas: 570
1
Seguir
1617
Seguidores

Estrategia de cruce de medias móviles y precio de cierre mensual

Descripción general

Esta estrategia utiliza el cruce entre el cierre de la línea lunar y la media móvil para generar una señal de negociación. Haga más cuando el cierre de la línea lunar cruza la media móvil por encima de la línea lunar; cerrar la posición cuando el cierre de la línea lunar cruza la media móvil por debajo de la línea lunar.

Principio de estrategia

La lógica central de esta estrategia es la siguiente:

  1. Introducir el parámetro de período de la media móvil, se puede elegir entre SMA o EMA
  2. Se puede seleccionar mostrar la media móvil
  3. Se puede elegir el precio de cierre de otra acción como señal
  4. Indicadores de negociación basados en la relación entre el cierre de la línea lunar y la media móvil
    • La media móvil en el cierre de la bolsa, hacer más
    • El precio de cierre se deslizó por debajo de la media móvil y se estabilizó.

La estrategia utiliza la característica de la suavización de la línea media móvil para filtrar parte del ruido de los precios y capturar el giro de la tendencia a medio plazo de las acciones. Cuando el precio de las acciones cruza la línea media, indica que el precio de las acciones está formando una tendencia alcista; cuando el precio de las acciones cruza la línea media, indica que la tendencia de los precios de las acciones se está convirtiendo en un mercado bajista.

Ventajas estratégicas

La estrategia tiene las siguientes ventajas:

  1. El uso de datos de lunas para filtrar el ruido nocturno y capturar tendencias a mediano y largo plazo en las acciones
  2. Se puede personalizar el ciclo de la media móvil, optimizando los parámetros para adaptarse a diferentes acciones
  3. Se puede elegir otra acción como fuente de señales para mejorar la estabilidad
  4. Utiliza tecnología avanzada de anti-repainting para evitar retrocesos
  5. Se puede introducir un período de tiempo de resonancia arbitrario para facilitar la optimización de las pruebas

En general, el marco de la estrategia es sencillo y práctico, y se puede aplicar a la mayoría de las acciones a través de la optimización de parámetros, especialmente para los inversores de línea media y larga.

Riesgo estratégico

La estrategia también tiene algunos riesgos, que se centran en los siguientes aspectos:

  1. Los datos de la línea mensual se actualizan más lentamente y no reflejan cambios en los precios en tiempo real.
  2. Hay un cierto retraso y se puede perder una oportunidad de corto plazo.
  3. La línea media móvil es retrograda y no se puede controlar el momento en que se genera la señal.
  4. La mala selección de los parámetros puede conducir a ser demasiado conservadores o a perder oportunidades

Para reducir el riesgo, se puede optimizar en los siguientes aspectos:

  1. Indicadores técnicos en combinación con marcos de tiempo más bajos para el juicio auxiliar
  2. Ajuste el ciclo de la media móvil para encontrar la combinación óptima de parámetros
  3. Utilizando un indicador más estable como fuente de señal
  4. Ajuste adecuado del tamaño de las posiciones para controlar las pérdidas individuales

Dirección de optimización de la estrategia

La estrategia también tiene un gran margen de optimización, principalmente en los siguientes aspectos:

  1. Aumentar las estrategias de stop loss para bloquear ganancias y controlar el riesgo
  2. En combinación con otros indicadores, como KD, MACD, etc., para mejorar la precisión de las señales de negociación
  3. Optimización dinámica de parámetros de la línea media móvil utilizando tecnología de aprendizaje automático
  4. Agrega un módulo de administración de posiciones para que las posiciones cambien con la tendencia de alocorsize
  5. Funcionalidad de conversión multi-espacio, adaptable a las necesidades del mercado
  6. La línea K de joining con un marco de tiempo más corto permite transacciones más sensibles

Resumir

La idea general de la estrategia de cruce de la línea de cierre mensual y la línea de movimiento es clara y fácil de implementar, y puede aplicarse a diferentes acciones mediante el ajuste de los parámetros, especialmente para los inversores de línea media y larga. Con el aumento constante de módulos como el stop loss y los parámetros de optimización, se espera que la estrategia produzca un rendimiento aún mejor.

Código Fuente de la Estrategia
/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © universique

//@version=4
strategy("Monthly MA Close ", shorttitle="MMAC", overlay=true, default_qty_type =  strategy.percent_of_equity, default_qty_value = 100)
//MAY 6 2020 18:00

// No repaint function 
// Function to securely and simply call `security()` so that it never repaints and never looks ahead.
f_secureSecurity(_symbol, _res, _src) => security(_symbol, _res, _src[1], lookahead = barmerge.lookahead_on)
//sec10 = f_secureSecurity(syminfo.tickerid, higherTf, data)

// ————— Converts current chart resolution into a float minutes value.
f_resInMinutes() => 
    _resInMinutes = timeframe.multiplier * (
      timeframe.isseconds ? 1. / 60             :
      timeframe.isminutes ? 1.                  :
      timeframe.isdaily   ? 60. * 24            :
      timeframe.isweekly  ? 60. * 24 * 7        :
      timeframe.ismonthly ? 60. * 24 * 30.4375  : na)
// ————— Returns the float minutes value of the string _res.
f_tfResInMinutes(_res) =>
    // _res: resolution of any TF (in "timeframe.period" string format).
    // Dependency: f_resInMinutes().
    security(syminfo.tickerid, _res, f_resInMinutes())

// —————————— Determine if current timeframe is smaller that higher timeframe selected in Inputs.
// Get higher timeframe in minutes.
//higherTfInMinutes = f_tfResInMinutes(higherTf)
// Get current timeframe in minutes.
currentTfInMinutes = f_resInMinutes()
// Compare current TF to higher TF to make sure it is smaller, otherwise our plots don't make sense.
//chartOnLowerTf = currentTfInMinutes < higherTfInMinutes

// Input
switch1=input(true, title="Show MA")
exponential = input(true, title="Exponential MA")
ticker = input(false, title="Other ticker MA")

tic_ma = input(title="Ticker MA", type=input.symbol, defval="BTC_USDT:swap")
res_ma = input(title="Time MA (W, D, [min])", type=input.string, defval="M")
len_ma = input(8, minval=1, title="Period MA")

ma_cus = exponential?f_secureSecurity(tic_ma, res_ma, ema(close,len_ma)) : f_secureSecurity(tic_ma, res_ma, sma(close,len_ma))
ma_long = exponential?f_secureSecurity(syminfo.tickerid, res_ma, ema(close,len_ma)) : f_secureSecurity(syminfo.tickerid, res_ma, sma(close,len_ma))

cl1 = f_secureSecurity(syminfo.tickerid, 'M', close)
cl2 = f_secureSecurity(tic_ma, 'M', close)

// Input Backtest Range
showDate  = input(defval = false, title = "Show Date Range", type = input.bool)
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 1995, title = "From Year",       type = input.integer, minval = 1850)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1850)

// Funcion Example
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"

// Calculation
bullish_cross = ticker?cl2>ma_cus : cl1>ma_long
bearish_cross = ticker?cl2<ma_cus : cl1<ma_long

MAColor = bullish_cross ? color.green : bearish_cross ? color.red : color.orange

// Strategy
strategy.entry("long", strategy.long, when = window() and bullish_cross)
strategy.close("long", when = window() and bearish_cross)

// Output
plot(switch1?ma_long:na,color = MAColor,linewidth=4)

// Alerts
alertcondition(bullish_cross, title='Bullish', message='Bullish')
alertcondition(bearish_cross, title='Bearish', message='Bearish')