Estrategia de media móvil dinámica


Fecha de creación: 2023-11-23 11:39:24 Última modificación: 2023-11-23 11:39:24
Copiar: 0 Número de Visitas: 657
1
Seguir
1621
Seguidores

Estrategia de media móvil dinámica

Descripción general

Esta estrategia se llama la estrategia de la línea media móvil dinámica de la curva. La idea principal es utilizar la dirección de la línea media móvil y la relación de los precios para determinar la tendencia, entrar en el campo en la dirección de la tendencia y cerrar la posición en ausencia de tendencia.

Principio de estrategia

La estrategia utiliza el precio de origen de un período de longitud para calcular la media móvil, el precio de origen puede elegir OHLC4, HLC3, precio de cierre, etc. La media móvil calculada se define como sma. Luego, se traza una línea larga y una línea corta en función de la proporción de los valores de la media móvil y se determina si la línea larga y la línea corta están en una tendencia alcista o bajista a través de la relación de posición de la línea larga y la línea corta.

Concretamente, la fórmula de cálculo de la línea corta es: shortline = sma * ((100 + shortlevel) / 100), donde shortlevel es un número positivo que puede ser configurado por el usuario para representar la proporción de la línea media móvil a la distancia de la línea corta. Similarmente, la fórmula de cálculo de la línea larga es: longline = sma * ((100 + longlevel) / 100), donde longlevel es un número negativo que puede ser configurado por el usuario para representar la proporción de la línea media móvil a la distancia de la línea larga.

De esta manera, el valor de la línea corta siempre es mayor que el promedio móvil y el valor de la línea larga siempre es menor que el promedio móvil. Cuando el precio cruza la línea corta, representa una tendencia ascendente, y si el needlong permite hacer más, hace más en el nivel del precio de la línea larga; cuando el precio cruza la línea larga, representa una tendencia descendente, y si el needshort permite hacer hueco, hace hueco en el nivel del precio de la línea corta.

Cuando el precio vuelve a la media móvil, el final de la tendencia es representado, ya sea en una posición baja o en una posición alta, y se borran todas las posiciones anteriores.

De esta manera, se puede determinar la dirección de la tendencia a través de la relación dinámica entre la línea larga y la línea corta y la línea media móvil y, de acuerdo con esto, entrar y salir.

Ventajas estratégicas

La mayor ventaja de esta estrategia es que se pueden establecer puntos de compra y venta a través de líneas largas y cortas, lo que permite una mayor flexibilidad para capturar la dirección de las principales tendencias. Esta estrategia es más avanzada e inteligente que la estrategia que simplemente dispara puntos de compra y venta en niveles fijos.

En segundo lugar, el movimiento de la línea media tiene un efecto de filtración en sí mismo, evitando en cierta medida ser bloqueado por la oscilación de alta frecuencia. Al mismo tiempo, es muy importante que el movimiento de la línea media sea a tiempo para determinar si la tendencia termina o no.

Riesgo estratégico

El mayor riesgo de esta estrategia reside en que las medias móviles se muestran de manera diferente en diferentes períodos. En condiciones normales, las medias móviles son suficientes para representar la dirección de la tendencia, pero en algunos casos extremos, las medias móviles pueden ser perforadas en el corto plazo, lo que provoca entradas erróneas o desviaciones de la cima. En este caso, es necesario usar medias móviles de períodos más largos para garantizar la precisión de la evaluación de la tendencia.

El otro aspecto del riesgo es que las medias móviles son muy lentas en sí mismas. Para algunas fluctuaciones cortas y agudas de los precios, las medias móviles son difíciles de seguir y en el momento, cuando se puede perder el punto de entrada o el punto de salida.

Optimización de la estrategia

La estrategia puede seguir mejorando en los siguientes aspectos:

  1. La adición de la lógica de stop loss. La línea media móvil tiene un retraso en el juicio de la tendencia y no puede evitarse completamente el encaje, por lo que la adición adecuada de stop loss móvil puede reducir aún más el riesgo.
  2. Los parámetros para optimizar la media larga y corta. Actualmente, la proporción de la media larga y corta a la media móvil es un valor fijo y se pueden probar diferentes conjuntos de datos para encontrar los parámetros óptimos.
  3. Aumentar la determinación de la intensidad de la tendencia. Además de la posición de la línea media larga y corta, también se puede determinar la intensidad de la tendencia a través de un determinado algoritmo para evitar señales erróneas en una tendencia débil.
  4. Se puede probar la aplicación de la línea media móvil a otras variedades de comercio para la verificación entre variedades.

Resumir

Esta estrategia determina las tendencias y las operaciones multi-espacio correspondientes a través de la configuración dinámica de puntos de compra y venta. Esta estrategia, basada en la configuración dinámica de señales de negociación de la línea media móvil, capta las tendencias de precios de manera más flexible e inteligente en comparación con los puntos de activación estáticos. Al mismo tiempo, soluciona la falta de actualidad de la línea media móvil en sí misma.

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"}]
*/

//Noro
//2018

//@version=3
strategy(title = "Noro's ShiftMA Strategy v1.1", shorttitle = "ShiftMA str 1.1", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 100)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
per = input(3, title = "Length")
src = input(ohlc4, title = "Source")
shortlevel = input(10.0, title = "Short line (red)")
longlevel = input(-5.0, title = "Long line (lime)")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//SMAs
sma = sma(src, per) 
//sma = lowest(low, per)
shortline = sma * ((100 + shortlevel) / 100)
longline = sma * ((100 + longlevel) / 100)
plot(shortline, linewidth = 2, color = red, title = "Short line")
plot(sma, linewidth = 2, color = blue, title = "SMA line")
plot(longline, linewidth = 2, color = lime, title = "Long line")

//plot(round(buy * 100000000), linewidth = 2, color = lime)
//plot(round(sell * 100000000), linewidth = 2, color = red)

//Trading
size = strategy.position_size
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]

if (not na(close[per])) and size == 0 and needlong
    strategy.entry("L", strategy.long, lot, limit = longline, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if (not na(close[per])) and size == 0 and needshort
    strategy.entry("S", strategy.short, lot, limit = shortline, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if (not na(close[per])) and size > 0 
    strategy.entry("Close", strategy.short, 0, limit = sma, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if (not na(close[per])) and size < 0 
    strategy.entry("Close", strategy.long, 0, limit = sma, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()