Estrategia de seguimiento de tendencia de promedios móviles de cruce de apertura y cierre


Fecha de creación: 2024-01-15 14:24:27 Última modificación: 2024-01-15 14:24:27
Copiar: 0 Número de Visitas: 857
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencia de promedios móviles de cruce de apertura y cierre

Descripción general

La estrategia de seguimiento de tendencias de medias móviles cruzadas de cierre abierto es una estrategia de seguimiento de tendencias basada en medias móviles. La estrategia determina la tendencia actual del mercado calculando las medias móviles del precio de apertura y cierre; hace más cuando cruza la media móvil del precio de apertura sobre la media móvil del precio de cierre; hace vacío cuando cruza la media móvil del precio de apertura por debajo de la media móvil del precio de cierre.

Principio de estrategia

La lógica central de esta estrategia se basa en la relación entre el precio de apertura y el precio de cierre para juzgar la tendencia actual. El precio de apertura refleja la relación entre la oferta y la demanda en el mercado actual y la psicología de la transacción, y el precio de cierre refleja el resultado de las transacciones del día. En general, si el precio de cierre es superior al precio de apertura, el clima de la tendencia es fuerte ese día, y el clima de la tendencia es más pesado si el precio de cierre es inferior al precio de apertura, el clima de la tendencia es débil ese día y el clima de la tendencia es más pesado.

La estrategia utiliza esta lógica para determinar la dirección de la tendencia actual mediante el cálculo de las medias móviles de los precios de apertura y cierre. En concreto, sus reglas de decisión son las siguientes:

  1. Cuando la media móvil del cierre de la apertura se cruza con la media móvil del cierre de la apertura, se hace más. Esto indica que el clima de múltiples cabezas está aumentando y se puede entrar en múltiples órdenes.

  2. Cuando la media móvil del precio de apertura se cruza por debajo de la media móvil del precio de cierre, queda vacío. Esto indica que el clima de vacío actual se está intensificando y que se puede ingresar a la carta vacía.

  3. Cuando se produce la señal de reversión, la posición original se detiene.

La estrategia también establece un stop loss de seguimiento para bloquear las ganancias. Después de la entrada, se calcula en tiempo real la diferencia de puntos entre el precio de entrada y el precio actual. Cuando el precio se ejecuta más allá del número de puntos de parada establecidos, la línea de parada se eleva para bloquear parte de las ganancias.

En general, la estrategia determina la tendencia en un período de tiempo de longitud de ciclo de las medias móviles; las posiciones se mantienen en una sola dirección a la vez; el stop original de la posición es un método inverso directo y no tiene una configuración similar a la de los stops de ATR; hay una configuración de seguimiento de stop para bloquear las ganancias.

Análisis de las ventajas

La estrategia tiene las siguientes ventajas:

  1. Las reglas de decisión son claras y simples。 Basado en la relación de apertura y cierre para juzgar la tendencia, es fácil de entender, y también es fácil de optimizar los parámetros。

  2. Flexible para elegir las clases de media móvilHay más de una docena de promedios móviles a elegir, que se pueden combinar con flexibilidad para encontrar los mejores parámetros.

  3. Resolución de uso flexiblePara que la señal sea más sensible y oportuna, la resolución de la estrategia puede ser de 3 a 4 veces la de la gráfica.

  4. Hay un mecanismo de amortización.La estrategia tiene un stop loss de seguimiento, lo que permite un control efectivo de las pérdidas y retiros individuales.

  5. Se puede personalizar el tiempo de mantenimientoLa volatilidad y el período de tenencia se pueden controlar ajustando los parámetros de la media móvil.

  6. Flexible ajuste de las ganancias por riesgoEl riesgo puede ser controlado mediante ajustes en el número de puntos de parada y desviación.

Análisis de riesgos

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

  1. El punto de inflexión perdidoLa salida de la estrategia puede ser un poco más tardía que la reversión de los precios, lo que lleva al cierre de la cola. Se puede mitigar mediante la reducción adecuada del ciclo de la media móvil.

  2. No es adecuado para una ciudad con fuertes temblores.En situaciones de gran agitación, la estrategia se abre con frecuencia para cerrar posiciones y cargar con cargos administrativos. En este caso, se puede relajar adecuadamente el número de puntos de parada o extender el ciclo de la media móvil.

  3. Un solo indicador para juzgarLa estrategia se basa solo en un conjunto de indicadores y es susceptible a fallas. Se puede considerar la introducción de otros indicadores similares, como MACD, para enriquecer la lógica de la estrategia.

  4. Los parámetros son muy fáciles de optimizar.Los parámetros de las medias móviles y los parámetros de los estancamientos son susceptibles a la optimización excesiva, y el rendimiento real puede ser inferior al de la retroalimentación. La selección de los parámetros debe considerarse con precaución.

Dirección de optimización

La estrategia se puede optimizar en las siguientes direcciones:

  1. Combinación con otros indicadoresSe puede intentar introducir indicadores incrementales, indicadores de volatilidad, etc., para enriquecer la lógica de la estrategia y mejorar la estabilidad.

  2. Ajuste de parámetros por periodicidadSe puede combinar con el tipo de mercado y ajustar dinámicamente los parámetros de las medias móviles, alargando el ciclo en situaciones de tendencia y acortando el ciclo en situaciones de crisis.

  3. Ajuste dinámico de las mediciones de riesgo│ se puede ajustar dinámicamente el número de puntos de parada y la desviación en función de la fluctuación real en el tiempo reciente. │

  4. Mejora de la lógica de stop loss│ │ │ │ │ │ │ │ │ │ │ │ │ │ │

Resumir

La estrategia de seguimiento de tendencias de medias móviles cruzadas de apertura y cierre abierto es una estrategia más típica para determinar la dirección de la tendencia en función de la relación de cierre y cierre abierto. Tiene ventajas como la claridad y la flexibilidad de las reglas de decisión y el riesgo controlable, pero también tiene problemas como los puntos de reversión erróneos y la inadecuación de las violentas sacudidas. La estrategia se puede optimizar en términos de una base rica en indicadores, ajustes de parámetros dinámicos y la mejora de la lógica de stop loss, para que pueda aprovechar mejor las oportunidades de tendencia y responder a los cambios en el mercado.

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

//@version=4

strategy(title = "Open Close Cross Strategy (PineScript=v4)", shorttitle = "OCC Strategy", overlay = true )

// Revision:        1
// Author:          @JayRogers
//
// Description:
//  - Strategy based around Open-Close Crossovers.
// Setup:
//  - I have generally found that setting the strategy resolution to 3-4x that of the chart you are viewing
//    tends to yield the best results, regardless of which MA option you may choose (if any)
//  - Don't aim for perfection. Just aim to get a reasonably snug fit with the O-C band, with good runs of
//    green and red.
//  - Option to either use basic open and close series data, or pick your poison with a wide array of MA types.
//  - Optional trailing stop for damage mitigation if desired (can be toggled on/off)
//  - Positions get taken automagically following a crossover - which is why it's better to set the resolution
//    of the script greater than that of your chart, so that the trades get taken sooner rather than later.
//  - If you make use of the trailing stops, be sure to take your time tweaking the values. Cutting it too fine
//    will cost you profits but keep you safer, while letting them loose could lead to more drawdown than you
//    can handle.

// === INPUTS ===
useRes = input(defval=true, title="Use Alternate Resolution? ( recommended )")
stratRes = input(defval="120", title="Set Resolution ( should not be lower than chart )", type=input.resolution)
useMA = input(defval=true, title="Use MA? ( otherwise use simple Open/Close data )")
basisType = input(defval="DEMA", title="MA Type: SMA, EMA, DEMA, TEMA, WMA, VWMA, SMMA, HullMA, LSMA, ALMA ( case sensitive )", type=input.string)
basisLen = input(defval=14, title="MA Period", minval=1)
offsetSigma = input(defval=6, title="Offset for LSMA / Sigma for ALMA", minval=0)
offsetALMA = input(defval=0.85, title="Offset for ALMA", minval=0, step=0.01)
useStop = input(defval=true, title="Use Trailing Stop?")
slPoints = input(defval=200, title="Stop Loss Trail Points", minval=1)
slOffset = input(defval=400, title="Stop Loss Trail Offset", minval=1)
// === /INPUTS ===

// === BASE FUNCTIONS ===
// Returns MA input selection variant, default to SMA if blank or typo.
variant(type, src, len, offSig, offALMA) =>
    v1 = sma(src, len)  // Simple
    v2 = ema(src, len)  // Exponential
    v3 = 2 * v2 - ema(v2, len)  // Double Exponential
    v4 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len)  // Triple Exponential
    v5 = wma(src, len)  // Weighted
    v6 = vwma(src, len)  // Volume Weighted
    sma_1 = sma(src, len)  // Smoothed
    v7 = na(v5[1]) ? sma_1 : (v5[1] * (len - 1) + src) / len
    v8 = wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len)))  // Hull
    v9 = linreg(src, len, offSig)  // Least Squares
    v10 = alma(src, len, offALMA, offSig)  // Arnaud Legoux
    type == "EMA" ? v2 : type == "DEMA" ? v3 : type == "TEMA" ? v4 : 
       type == "WMA" ? v5 : type == "VWMA" ? v6 : type == "SMMA" ? v7 : 
       type == "HullMA" ? v8 : type == "LSMA" ? v9 : type == "ALMA" ? v10 : v1
// security wrapper for repeat calls
reso(exp, use, res) =>
    security_1 = security(syminfo.tickerid, res, exp)
    use ? security_1 : exp
// === /BASE FUNCTIONS ===

// === SERIES SETUP ===
// open/close
variant__1 = variant(basisType, close, basisLen, offsetSigma, offsetALMA)
reso__1 = reso(variant__1, useRes, stratRes)
reso__2 = reso(close, useRes, stratRes)
closeSeries = useMA ? reso__1 : reso__2
variant__2 = variant(basisType, open, basisLen, offsetSigma, offsetALMA)
reso__3 = reso(variant__2, useRes, stratRes)
reso__4 = reso(open, useRes, stratRes)
openSeries = useMA ? reso__3 : reso__4
trendState = bool(na)
trendState := closeSeries > openSeries ? true : 
   closeSeries < openSeries ? false : trendState[1]
// === /SERIES ===

// === PLOTTING ===
barcolor(color=closeSeries > openSeries ? #006600 : #990000, title="Bar Colours")
// channel outline
closePlot = plot(closeSeries, title="Close Line", color=#009900, linewidth=2, style=plot.style_line, transp=90)
openPlot = plot(openSeries, title="Open Line", color=#CC0000, linewidth=2, style=plot.style_line, transp=90)
// channel fill
closePlotU = plot(trendState ? closeSeries : na, transp=100, editable=false)
openPlotU = plot(trendState ? openSeries : na, transp=100, editable=false)
closePlotD = plot(trendState ? na : closeSeries, transp=100, editable=false)
openPlotD = plot(trendState ? na : openSeries, transp=100, editable=false)
fill(openPlotU, closePlotU, title="Up Trend Fill", color=#009900, transp=40)
fill(openPlotD, closePlotD, title="Down Trend Fill", color=#CC0000, transp=40)
// === /PLOTTING ===

// === STRATEGY ===
// conditions
longCond = crossover(closeSeries, openSeries)
shortCond = crossunder(closeSeries, openSeries)
// entries and base exit
strategy.entry("long", strategy.long, when=longCond)
strategy.entry("short", strategy.short, when=shortCond)
// if we're using the trailing stop
if useStop
    strategy.exit("XL", from_entry="long", trail_points=slPoints, trail_offset=slOffset)
    strategy.exit("XS", from_entry="short", trail_points=slPoints, trail_offset=slOffset)
// not sure needed, but just incase..
strategy.exit("XL", from_entry="long", when=shortCond)
strategy.exit("XS", from_entry="short", when=longCond)
// === /STRATEGY ===