Estrategia dual de media móvil dinámica


Fecha de creación: 2023-12-13 16:37:05 Última modificación: 2023-12-13 16:37:05
Copiar: 2 Número de Visitas: 669
1
Seguir
1621
Seguidores

Estrategia dual de media móvil dinámica

Descripción general

Esta estrategia utiliza la inclinación de la media móvil (MA) y la inclinación del indicador de movimiento para tomar decisiones comerciales. Compara la inclinación de la MA y la inclinación de la dinámica con el umbral establecido y genera una señal de negociación cuando ambas inclinaciones superan el umbral.

Principio de estrategia

El núcleo de esta estrategia consiste en comparar dos curvas de pendiente. En primer lugar, se calcula la pendiente de MA y el indicador de la dinámica. La pendiente refleja la velocidad y la dirección de cambio de la curva.

Por ejemplo, se produce una señal de compra cuando la pendiente MA y la pendiente de la dinámica superan la pendiente de salida; se produce una señal de venta cuando ambas curvas se desvían. Esto puede filtrar algunas señales falsas.

El filtro de baja volatilidad utiliza un MA a largo plazo para determinar la volatilidad del mercado. Cuando la volatilidad es baja, el MA utiliza diferentes parámetros para generar señales de negociación y así adaptarse a diferentes estados del mercado.

Análisis de las ventajas

La estrategia tiene las siguientes ventajas:

  1. El uso de un doble filtro para configurar la señal de transacción puede filtrar parte del ruido y mejorar la calidad de la señal.

  2. Los filtros de baja volatilidad permiten que las estrategias se adapten a diferentes estados de mercado y sean flexibles.

  3. Permite una gran personalización de los diferentes parámetros que se pueden optimizar para diferentes variedades.

  4. Contiene la función de no volver a pintar, lo que reduce el efecto de la curvatura en los resultados.

Análisis de riesgos

La estrategia también tiene sus riesgos:

  1. El doble filtrado puede filtrar parte de la señal real, lo que lleva a oportunidades perdidas. Se puede optimizar ajustando los parámetros.

  2. El filtro de baja oscilación determina el umbral y requiere una prueba cuidadosa. Si los parámetros no son correctos, la señal puede ser desviada.

  3. La configuración de los parámetros de MA y el indicador de potencia requiere optimización para variedades específicas, y es difícil determinar los parámetros generales para todo el mercado.

  4. La función sin pintura no puede evitar por completo el problema de ajuste de la curva de retroalimentación, y el efecto en el disco físico aún debe ser verificado.

  5. Los parámetros altamente personalizados pueden complicar el espacio de los parámetros y aumentar la dificultad de optimización.

Dirección de optimización

Esta estrategia puede ser optimizada en las siguientes direcciones:

  1. Prueba más combinaciones de MA y de indicadores de movimiento para encontrar los indicadores que mejor se corresponden.

  2. Optimización de los parámetros de longitud de la MA y el indicador de movimiento, equilibrando la latencia y el ruido.

  3. Optimizar los parámetros para calcular la pendiente y encontrar una combinación de indicadores más estables.

  4. Prueba de diferentes indicadores y parámetros de baja volatilidad para mejorar la flexibilidad.

  5. Prueba en diferentes variedades y ciclos para encontrar el mejor alcance de aplicación.

  6. Construir un mecanismo de adaptación de parámetros para reducir el trabajo de optimización manual.

Resumir

El conjunto de esta estrategia es una estrategia de doble MA muy flexible y personalizable. Se refiere al precio y la información de movimiento para tomar decisiones al mismo tiempo, y puede filtrar eficazmente las falsas señales. El filtro de baja oscilación también hace que la estrategia sea más flexible y pueda adaptarse a los cambios en el mercado.

Con la optimización de los parámetros y la mejora de la selección de indicadores, esta estrategia puede ser una opción que vale la pena considerar para su aplicación en el mercado real. Ofrece una plantilla de referencia para tomar decisiones de negociación utilizando los indicadores MA y dinámicos.

Código Fuente de la Estrategia
/*backtest
start: 2023-11-12 00:00:00
end: 2023-12-12 00:00:00
period: 1h
basePeriod: 15m
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/
// © Allenlk
//@version=4
strategy("DRSI DMA Scalping Strategy", shorttitle="DRSIDMA", overlay=false, initial_capital=1000, pyramiding=2, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

//Inputs
matype             = input(7, minval=1, maxval=8, title="1=SMA, 2=EMA, 3=WMA, 4=HullMA, 5=VWMA, 6=RMA, 7=TEMA, 8=Tilson T3", group="Moving Average")
masrc              = input(close, title="MA Source", group="Moving Average")
malen              = input(5, title="Moving Average Length - LookBack Period", group="Moving Average")
factorT3           = input(defval=7, title="Tilson T3 Factor - *.10 - so 7 = .7 etc.", minval=0, group="Moving Average")
maderiv            = input(3, title="MA Slope Lookback", minval=1, group="Moving Average")
masmooth           = input(5, title="MA Slope Smoothing", minval=1, group="Moving Average")
momtype            = input(3, minval=1, maxval=3, title="1=RSI, 2=CCI, 3=RSI/ROC", group="Momentum Moving Average")
momsrc             = input(close, title="Momentum Source", group="Momentum Moving Average")
momlen             = input(3, title="Momentum Length", minval=1, group="Momentum Moving Average")
momderiv           = input(8, title="Momentum Slope Lookback", minval=1, group="Momentum Moving Average")
momsmooth          = input(7, title="Momentum Slope Smoothing", minval=1, group="Momentum Moving Average")
higherTf           = input("1", title="Higher timeframe?", type = input.resolution, group="Time Resolution")
higherTfmult       = input(130, title="MA Slope multiplier for Alternate Resolutions (Make the waves of the blue line similar size as the orange line)", group="Time Resolution")
buffup             = input(0.02, title="Buy when both slopes cross this line", step=0.01, group="Buy and Sell Threshold")
bufflow            = input(-0.03, title="Sell when both slopes cross this line", step=0.01, group="Buy and Sell Threshold")
lowVolMALength     = input(28, title="Big MA Length", minval=1, group="Low Volatility Function")
MAlength           = input(10, title="Low Volatility Moving Average Length", minval=1, group="Low Volatility Function")
MAThresh           = input(0.05, title="Low Volatility Buy and Sell Threshold", step=0.01, group="Low Volatility Function")
Volminimum         = input(2.5, title="Minimum volatility to trade", minval=0, step=0.01, group="Low Volatility Function")

//Low Volatility Function
//When Volatility is low refer to the slope of a long moving average
low_vol_MA         = sma(close, lowVolMALength)
low_vol_down       = (low_vol_MA[3] - low_vol_MA[1]) > MAThresh
low_vol_up         = (low_vol_MA[3] - low_vol_MA[1]) < MAThresh * -1
percent_volatility = (1 - (low / high)) * 100
chng_MA            = sma(percent_volatility, MAlength)
bad_vol            = chng_MA < Volminimum

//No repaint function
nrp_funct(_symbol, _res, _src) => security(_symbol, _res, _src[barstate.isrealtime ? 1 : 0])

//hull ma definition
hullma = wma(2*wma(masrc, malen/2)-wma(masrc, malen), round(sqrt(malen)))

//TEMA definition
ema1 = ema(masrc, malen)
ema2 = ema(ema1, malen)
ema3 = ema(ema2, malen)
tema = 3 * (ema1 - ema2) + ema3

//Tilson T3
factor = factorT3 *.10
gd(masrc, malen, factor) => ema(masrc, malen) * (1 + factor) - ema(ema(masrc, malen), malen) * factor 
t3(masrc, malen, factor) => gd(gd(gd(masrc, malen, factor), malen, factor), malen, factor) 
tilT3 = t3(masrc, malen, factor) 
 
//MA Type 
avg = matype == 1 ? sma(masrc,malen) : matype == 2 ? ema(masrc,malen) : matype == 3 ? wma(masrc,malen) : matype == 4 ? hullma : matype == 5 ? vwma(masrc, malen) : matype == 6 ? rma(masrc,malen) : matype == 7 ? 3 * (ema1 - ema2) + ema3 : tilT3

//MA Slope Percentage
DeltaAvg      = (avg / avg[maderiv]) - 1
SmoothedAvg   = sma(DeltaAvg, masmooth) 
MAout         = nrp_funct(syminfo.tickerid, higherTf, SmoothedAvg) * higherTfmult

//Momentum indicators
Momentum = momtype == 1 ? rsi(momsrc, momlen) : momtype == 2 ? cci(momsrc, momlen) : momtype == 3 ? rsi(roc(momsrc,momlen),momlen) : na

//Momentum Slope Percentage
Deltamom = (Momentum / Momentum[momderiv]) - 1
SmoothedMom = sma(Deltamom, momsmooth) 
Momout   = nrp_funct(syminfo.tickerid, higherTf, SmoothedMom)

//Plottings
plot(buffup, color=color.green, title="Buy line")
plot(bufflow, color=color.red, title="Sell line")
plot(MAout, color=color.blue, linewidth=2, title="MA Slope")
plot(Momout, color=color.orange, linewidth=2, title="Momentum Slope")

longCondition = bad_vol ? low_vol_up : MAout > buffup and Momout > buffup
if (longCondition)
    strategy.entry("Buy", strategy.long)

shortCondition = bad_vol ? low_vol_down : MAout < bufflow and Momout < bufflow
if (shortCondition)
    strategy.entry("Sell", strategy.short)