
Esta estrategia es una estrategia de negociación basada en el indicador de medias no dinámicas de McKinsey. El indicador de medias no dinámicas de McKinsey es una versión mejorada del indicador de medias móviles que captura mejor los cambios en las tendencias del mercado.
La estrategia utiliza principalmente dos medias, la media móvil de 21 días y la media móvil de 42 días. Cuando se cruza la media larga en la media corta, se considera una señal de compra; cuando se cruza la media larga debajo de la media corta, se considera una señal de venta.
Además, la estrategia también requiere que se cumplan las condiciones de que el precio esté por encima de la media dinámica no-McKinsey y que el precio rompa la media a corto plazo para generar una señal de compra. Para una señal de venta, también se requiere que se cumplan las condiciones de que el precio esté por debajo de la media no-McKinsey y que el precio baje la media a corto plazo.
Concretamente, la señal de compra se activa cuando el precio de cierre cruza la media larga por debajo de la media corta y la media corta por encima de la media de McKinsey. La señal de venta se activa cuando el precio de cierre cruza la media corta por debajo de la media corta y la media corta por debajo de la media de McKinsey y la media corta por encima de la media.
La fórmula de cálculo de la media no dinámica de McKinsey es: MDIt = MDIt-1 + (Close - MDIt-1) / Max(k * Period * (Close / MDIt-1) ^ 4, 1) ∞, donde MDIt representa el valor actual, MDIt-1 representa el valor del día anterior, Close representa el precio de cierre del día, k representa la constante de fluctuación, y Period representa el cálculo. La fórmula de la media permite el seguimiento en tiempo real de los cambios en los precios.
El indicador de la línea media de McKinsey mejora el atraso de la línea media tradicional para capturar más rápidamente los cambios en la tendencia de los precios.
La combinación de las dos líneas equiláteros forma una señal de transacción que puede filtrar eficazmente las brechas falsas.
Añadir condiciones de precios por encima/por debajo de la línea media de McKinsey para evitar el comercio frecuente en zonas de crisis.
El uso de índices de medias móviles hace que la media sea más sensible a los cambios recientes en los precios.
En los mercados de oscilación horizontal, puede generar falsas señales, lo que genera pérdidas. Se pueden ajustar adecuadamente los parámetros y filtrar las señales.
La brecha de salto en alto de gran magnitud puede causar la imposibilidad de construir el almacén a tiempo, y las condiciones de entrada deben ser adecuadamente relajadas.
La configuración incorrecta de los parámetros también puede afectar la eficacia de la estrategia, y los parámetros deben ser probados para optimizarlos.
El riesgo sistémico de la tenencia a largo plazo debe tenerse en cuenta y se puede establecer un punto de parada.
Se puede probar el parámetro de la línea media de diferentes longitudes para encontrar la combinación más adecuada.
Se pueden agregar otros indicadores técnicos, como KD, MACD, etc., para optimizar la selección de puntos de compra y venta.
Se pueden ajustar los valores de los parámetros k para diferentes variedades y mercados, optimizando el cálculo de la línea no promedio de McKinsey.
Se puede combinar con el índice de volatilidad para lograr el tamaño de posición dinámica y controlar el riesgo individual.
Se puede establecer un punto de parada para controlar el riesgo de pérdidas, o se puede experimentar con el movimiento de la parada para bloquear los beneficios.
Esta estrategia utiliza la capacidad de seguimiento rápido del indicador no uniforme de McKinsey, junto con las señales de negociación que se forman al romper la línea media de los precios, para seguir la tendencia de manera eficiente y cambiar de posición a tiempo cuando la tendencia se convierte. En comparación con la estrategia tradicional de doble línea media, esta estrategia puede capturar los cambios en la tendencia de los precios más rápidamente.
/*backtest
start: 2022-11-07 00:00:00
end: 2023-11-13 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/
// © LucasZancheta
//@version=4
strategy(shorttitle="Maguila", title="McGinley Dynamic Indicator", overlay=true)
//Médias móveis
MA1Period=input(21, title="MA1")
MA2Period=input(42, title="MA2")
MA1 = ema(close, MA1Period)
MA2 = ema(close, MA2Period)
aboveAverage = MA1 >= MA2
hunderAverage = MA2 >= MA1
//Período do backtest
startDate = input(title="Start Date", type=input.integer, defval=28, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer, defval=5, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer, defval=2019, minval=1800, maxval=2100)
endDate = input(title="End Date", type=input.integer, defval=28, minval=1, maxval=31)
endMonth = input(title="End Month", type=input.integer, defval=5, minval=1, maxval=12)
endYear = input(title="End Year", type=input.integer, defval=2030, minval=1800, maxval=2100)
//Verifica se o candle está dentro do período do backtest
inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0))
//Número de periodos da média móvel
period = input(title="Períodos", type=input.integer, defval=20)
//Constante K (0.6)
k = input(title="Constante K", type=input.float, defval=0.6)
//Preço de fechamento
closePrice = input(title="Preço", type=input.source, defval=close)
mdi = 0.0
//Fórmula de McGinley
mdi := na(mdi[1]) ? closePrice : mdi[1] + (closePrice - mdi[1]) / max((k * period * pow(closePrice / mdi[1], 4)), 1)
//Regra de coloração
mdiColor = closePrice > mdi ? color.green : closePrice < mdi ? color.red : color.black
//Inserindo as informações no gráfico
plot(MA1, color=color.blue, linewidth=2)
plot(MA2, color=color.purple, linewidth=2)
barcolor(mdiColor)
//Estratégia
buySignal = aboveAverage and closePrice > mdi and crossunder(low, MA1) and close > MA1
buyLoss = closePrice < mdi and close < MA1 and close < MA2
if (inDateRange)
strategy.entry("Compra", strategy.long, qty=1, when= buySignal)
strategy.exit("Gain da compra", "Compra", qty=1, profit=20)
strategy.close("Compra", qty=1, when= buyLoss, comment="Loss na operação")
sellSignal = hunderAverage and closePrice < mdi and crossover(high, MA1) and close < MA1
sellLoss = closePrice > mdi and close > MA1 and close > MA2
if (inDateRange)
strategy.entry("Venda", strategy.short, qty=1, when= sellSignal)
strategy.exit("Gain da venda", "Venda", qty=1, profit=20)
strategy.close("Venda", qty=1, when= sellLoss, comment="Loss na operação")
if (not inDateRange)
strategy.close_all()