Canal de media móvil doble con estrategia de seguimiento de tendencias

El autor:¿ Qué pasa?, Fecha: 2023-11-06 15:41:23
Las etiquetas:

img

Resumen general

Esta estrategia utiliza promedios móviles rápidos y lentos para construir un sistema de doble carril, combinado con el índice de tendencia ADX para juzgar la tendencia y el índice direccional DMI para determinar la dirección de la tendencia, para rastrear la tendencia después de que se establezca y salir a tiempo cuando la tendencia se invierta, evitando perseguir los tops y vender los fondos. También incorpora pruebas de rango de tiempo para probar la efectividad de la estrategia en diferentes períodos de tiempo.

La lógica de la negociación

  1. Los promedios móviles rápidos y lentos construyen un sistema de canal de doble vía. Cuando el MA rápido cruza sobre el MA lento, es una señal de entrada de cruz dorada durante mucho tiempo. Cuando el MA rápido cruza por debajo del MA lento, es una señal de salida de cruz de muerte.

  2. El ADX juzga la existencia y la fuerza de una tendencia. Cuando el ADX está por encima del nivel clave, indica que existe una tendencia y es fuerte. Las señales comerciales solo se generan cuando la tendencia es fuerte.

  3. El DI+ de DMI determina la dirección de la tendencia. Cuando el DI+ es positivo, indica una tendencia al alza. Cuando el DI+ es negativo, indica una tendencia a la baja. Las señales comerciales solo se generan cuando la dirección de la tendencia coincide.

  4. Las pruebas de intervalo de tiempo hacen pruebas de retroceso de la eficacia de la estrategia en diferentes períodos de tiempo para su verificación.

Análisis de ventajas

  1. El sistema de doble carril filtra las escapadas para evitar señales falsas.

  2. El ADX evita el comercio excesivo durante la consolidación al exigir una tendencia.

  3. El DMI asegura que las operaciones coincidan con la dirección de la tendencia, evitando operaciones contrarias a la tendencia.

  4. Las pruebas de rango de tiempo verifican los parámetros y optimizan la configuración.

Análisis de riesgos

  1. Los canales pueden formar trampas, lo que requiere paradas para evitar los latigazos.

  2. Los retrasos de ADX pueden perder oportunidades tempranas, lo que requiere un nivel clave más bajo.

  3. Los retrasos en la dirección del DMI también pueden pasar por alto las tendencias iniciales, necesitando períodos más cortos.

  4. Los parámetros pueden necesitar ajustes en intervalos de tiempo.

Optimización

  1. Prueba las combinaciones de parámetros para encontrar los ajustes óptimos.

  2. Añadir filtros como Bandas de Bollinger para la calidad de la señal.

  3. Incorporar el stop loss para limitar las pérdidas.

  4. Optimiza los parámetros automáticamente con el aprendizaje automático.

  5. Incorpore más factores como sentimientos y noticias.

Conclusión

Esta estrategia combina las fortalezas de los promedios móviles, índices de tendencia e índices direccionales para identificar y rastrear tendencias. Mientras se verifica la validez de los parámetros, se necesita una optimización continua para adaptarse a más condiciones del mercado ajustando parámetros, agregando paradas, sintetizando más factores, etc., para mejorar la robustez y la rentabilidad. En general, proporciona una tendencia confiable siguiendo la metodología para la negociación cuantitativa.


/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 23:59:59
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// author: codachang0726
strategy(title = "(S)MA+ADX+DI+time", shorttitle = "(S)MA+ADX+DI+time", overlay = true)

// === INPUT MA LENGTHS ===
fastMA    = input(defval = 7,   title = "FastMA",          minval = 1, step = 1)
slowMA    = input(defval = 14,   title = "SlowMA",          minval = 1, step = 1)

// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 9,    title = "From Month",      minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        minval = 1, maxval = 31)
fromYear  = input(defval = 2020, title = "From Year",       minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        minval = 1, maxval = 31)
thruYear  = input(defval = 2022, title = "Thru Year",       minval = 1970)

// === INPUT SHOW PLOT ===
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

// === FUNCTION EXAMPLE ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true       // create function "within window of time"

// === MA LOGIC ===
crossOv   =  sma(close, fastMA) > sma(close, slowMA)     // true when fastMA over slowMA
crossUn   =  sma(close, fastMA) < sma(close, slowMA)     // true when fastMA under slowMA

// DI+ADX
adxlen      = input(14, title="ADX Smoothing")
dilen       = input(14, title="DI Period")
keyLevel    = input(20, title="Keylevel for ADX")
[diplus, diminus, adx] = dmi(dilen, adxlen)
di = (diplus - diminus)

buy = di > 0 and crossOv and adx > keyLevel
sell = di < 0 and crossUn and adx > keyLevel

buy_time = buy and not buy[1]
sell_time = sell and not sell[1]

// === EXECUTION ===
strategy.entry("L", strategy.long, when = window() and buy_time)    // enter long when "within window of time" AND crossover
strategy.close("L", when = window() and sell_time)                   // exit long when "within window of time" AND crossunder         

// === PLOTTING ===
bgcolor(color = showDate and window() ? color.gray : na, transp = 90)                                     // plot "within window of time"
plot(sma(close, fastMA), title = 'FastMA', color = color.yellow, linewidth = 2, style = plot.style_line)  // plot FastMA
plot(sma(close, slowMA), title = 'SlowMA', color = color.aqua,   linewidth = 2, style = plot.style_line)  // plot SlowMA


Más.