
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.
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.
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.
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.
La estrategia puede seguir mejorando en los siguientes aspectos:
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.
/*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()