El núcleo de esta estrategia se basa en el indicador desarrollado en el artículo
La estrategia primero calcula el promedio móvil ponderado de 21 días del rango verdadero medio (ATR) como un rango de volatilidad de línea de base. Luego calcula los precios más altos y más bajos en los últimos 21 días. Al comparar el precio de cierre actual con los límites superiores e inferiores del rango de línea de base, juzga si el precio rompe el canal para determinar la dirección de la tendencia.
Específicamente, el límite superior del canal se define como el precio más alto en los últimos 21 días menos 3 veces la ATR de referencia, y el límite inferior del canal es el precio más bajo en los últimos 21 días más 3 veces la ATR de referencia. Cuando el precio de cierre es superior al límite superior, indica una tendencia alcista. Cuando el precio de cierre es inferior al límite inferior, indica una tendencia bajista.
Al mismo tiempo que determina la dirección de la tendencia, esta estrategia también introduce el indicador MACD para filtrar.
Esta estrategia combina la determinación de tendencias y el filtrado de indicadores, que pueden identificar eficazmente la dirección de la tendencia del mercado a medio y largo plazo sin ser engañados por las fluctuaciones a corto plazo.
La estrategia también presenta algunos riesgos, principalmente en los siguientes aspectos:
Estos riesgos pueden reducirse optimizando los parámetros, ajustando estrictamente el tamaño de las posiciones y deteniendo las pérdidas oportunamente.
La estrategia se puede optimizar en los siguientes aspectos principales:
Prueba diferentes combinaciones de longitud o multiplicador para encontrar la combinación de parámetros que produzca el mayor rendimiento basado en backtest.
Prueba que incorpora RSI, KDJ y otros indicadores para filtrar las señales y mejorar la rentabilidad.
Adaptar los parámetros dinámicamente en función de las condiciones del mercado, como ampliar adecuadamente el rango de canales cuando la tendencia es fuerte o reducir el rango cuando el mercado está más limitado.
En resumen, esta es una estrategia general de seguimiento de tendencias robusta. Al combinar la determinación de la tendencia del canal de precios y el filtrado MACD, puede identificar efectivamente las tendencias a medio y largo plazo y generar rendimientos constantes. Con la optimización de parámetros, la gestión de riesgos y los ajustes apropiados, esta estrategia puede convertirse en una parte integral de un sistema de negociación.
/*backtest start: 2023-01-26 00:00:00 end: 2024-02-01 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/ // © melihtuna //@version=1 strategy("Trend Trader Strategy with MACD", overlay=true) // === Trend Trader Strategy === Length = input(21), Multiplier = input(3, minval=1) MacdControl = input(true, title="Control 'MACD Histogram is positive?' when Buy condition") avgTR = wma(atr(1), Length) highestC = highest(Length) lowestC = lowest(Length) hiLimit = highestC[1]-(avgTR[1] * Multiplier) loLimit = lowestC[1]+(avgTR[1] * Multiplier) ret = iff(close > hiLimit and close > loLimit, hiLimit, iff(close < loLimit and close < hiLimit, loLimit, nz(ret[1], 0))) pos = iff(close > ret, 1, iff(close < ret, -1, nz(pos[1], 0))) barcolor(pos == -1 ? red: pos == 1 ? green : blue ) plot(ret, color= blue , title="Trend Trader Strategy with MACD") // === INPUT BACKTEST RANGE === FromMonth = input(defval = 1, 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 = 2017) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2017) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true // === MACD === [macdLine, signalLine, histLine] = macd(close, 12, 26, 9) macdCond= MacdControl ? histLine[0] > 0 ? true : false : true strategy.entry("BUY", strategy.long, when = window() and pos == 1 and macdCond) strategy.entry("SELL", strategy.short, when = window() and pos == -1)