La estrategia de seguimiento de tendencia del canal Golden Cross Keltner es una estrategia que solo opera en la dirección de la tendencia.
Esta estrategia utiliza dos promedios móviles, un promedio móvil a corto plazo y un promedio móvil a largo plazo, para formar cruces de oro y cruces de muerte para determinar la dirección de la tendencia. Al mismo tiempo, utiliza múltiplos definidos por el usuario para trazar los rieles superior e inferior del canal de Keltner y generar señales comerciales cuando los precios rompen el canal.
Específicamente, la estrategia comprueba primero si el promedio móvil a largo plazo está por encima del promedio móvil a corto plazo, lo que indica una cruz dorada y una tendencia al alza.
Si el precio se rompe por debajo del tren inferior, se genera una señal corta. Los usuarios pueden ajustar los períodos de MA y el ancho del canal para personalizar los parámetros de la estrategia.
Después de la entrada, la estrategia utiliza múltiplos ATR definidos por el usuario para tomar ganancias y stop-loss. También proporciona condiciones adicionales de equilibrio y stop-loss para un control de posición más flexible.
Esta estrategia combina las ventajas del seguimiento de tendencias y de las rupturas de canales, lo que permite la identificación efectiva de tendencias y la captura de oportunidades.
La cruz dorada filtra señales falsas que no están alineadas con la tendencia principal.
La ruptura del canal con dirección de tendencia mejora la precisión de entrada.
Las operaciones de toma de ganancias y parada de pérdidas preservan las ganancias y controlan los riesgos.
Los ajustes de parámetros flexibles se adaptan a diferentes productos y entornos.
Va tanto largo como corto, ampliando la aplicabilidad.
A pesar de las ventajas, algunos riesgos requieren atención:
Perdiendo oportunidades de reversión.
Los cambios de tendencia pueden conducir a pérdidas.
Los parámetros inadecuados pueden provocar un exceso de negociación o una negociación escasa.
Existe el riesgo de una noche.
Riesgo de ajuste de la curva.
Las soluciones incluyen la optimización de parámetros, el ajuste oportuno del período de MA y el control del tamaño de la posición.
Hay margen de mejora:
Añadir más indicadores para construir un modelo multifactorial y mejorar la precisión.
Optimización de parámetros mediante aprendizaje automático para la adaptabilidad del mercado.
Reglas dinámicas para obtener ganancias y para detener pérdidas para equilibrar la rentabilidad y la recompensa.
Posicionamiento dinámico basado en la volatilidad.
Investigue los parámetros óptimos para diferentes productos.
Reducir la frecuencia de las operaciones para minimizar las tarifas.
La estrategia de seguimiento de tendencias del canal Golden Cross Keltner es generalmente un sistema de seguimiento de tendencias estable y confiable. Al combinar el filtrado de tendencias y las rupturas del canal, identifica oportunidades de alta probabilidad alineadas con la dirección de la tendencia.
/*backtest start: 2022-10-26 00:00:00 end: 2023-11-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/ // © OversoldPOS //@version=5 // strategy("Keltner Channel Strategy by OversoldPOS", overlay=true,initial_capital = 100000,default_qty_type = strategy.percent_of_equity,default_qty_value = 10, commission_type = strategy.commission.cash_per_order, commission_value = 7) // Parameters length = input(21, title="MA Length") Entrymult = input(1, title="Entry ATR") profit_mult = input(4, title="Profit Taker") exit_mult = input(-1, title="Exit ATR") // Moving Average Type Input ma_type = input.string("SMA", title="Moving Average Type", options=["SMA", "EMA", "WMA"]) // Calculate Keltner Channels for different ATR multiples atr_value = ta.atr(length) basis = switch ma_type "SMA" => ta.sma(close, length) "EMA" => ta.ema(close, length) "WMA" => ta.wma(close, length) // EntryKeltLong = basis + Entrymult * ta.atr(10) EntryKeltShort = basis - Entrymult * ta.atr(10) upper_channel1 = basis + 1 * ta.atr(10) lower_channel1 = basis - 1 * ta.atr(10) upper_channel2 = basis + 2 * ta.atr(10) lower_channel2 = basis - 2 * ta.atr(10) upper_channel3 = basis + 3 * ta.atr(10) lower_channel3 = basis - 3 * ta.atr(10) upper_channel4 = basis + 4 * ta.atr(10) lower_channel4 = basis - 4 * ta.atr(10) // Entry condition parameters long_entry_condition = input(true, title="Long Positions") short_entry_condition = input(true, title="Enable Short Positions") // Additional conditions for long and short entries is_long_entry = ta.ema(close, 20) > ta.ema(close, 50) is_short_entry = ta.ema(close, 20) < ta.ema(close, 50) // Additional conditions for long and short entries MAShort = input(50, title="Short MA for Golden Cross") MALong = input(200, title="Long MA for Golden Cross") is_long_entry2 = ta.ema(close, MAShort) > ta.ema(close, MALong) is_short_entry2 = ta.ema(close, MAShort) < ta.ema(close, MALong) // Exit condition parameters long_exit_condition1_enabled = input(true, title="Enable Long Profit Taker") long_exit_condition2_enabled = input(true, title="Enable Long Stop") short_exit_condition1_enabled = input(true, title="Enable Short Profit Taker") short_exit_condition2_enabled = input(true, title="Enable Short Stop") // Take Profit condition parameters take_profit_enabled = input(true, title="Enable Take Profit Condition") Takeprofit = basis + profit_mult * atr_value STakeprofit = basis - profit_mult * atr_value // Long entry condition long_condition = long_entry_condition and ta.crossover(close, EntryKeltLong) and is_long_entry2 // Short entry condition short_condition = short_entry_condition and ta.crossunder(close, EntryKeltShort) and is_short_entry2 // Exit conditions long_exit_condition1 = long_exit_condition1_enabled and close > Takeprofit long_exit_condition2 = long_exit_condition2_enabled and close < basis + exit_mult * atr_value short_exit_condition1 = short_exit_condition1_enabled and close < STakeprofit short_exit_condition2 = short_exit_condition2_enabled and close > basis - exit_mult * atr_value // Strategy logic if (long_condition) strategy.entry("Long", strategy.long) if (short_condition) strategy.entry("Short", strategy.short) if (long_exit_condition1 or long_exit_condition2) strategy.close("Long") if (short_exit_condition1 or short_exit_condition2) strategy.close("Short") // Moving Averages var float MA1 = na var float MA2 = na if (ma_type == "SMA") MA1 := ta.sma(close, MAShort) MA2 := ta.sma(close, MALong) else if (ma_type == "EMA") MA1 := ta.ema(close, MAShort) MA2 := ta.ema(close, MALong) else if (ma_type == "WMA") MA1 := ta.wma(close, MAShort) MA2 := ta.wma(close, MALong) // Plotting Keltner Channels with adjusted transparency transparentColor = color.rgb(255, 255, 255, 56) plot(upper_channel1, color=transparentColor, title="Upper Channel 1") plot(lower_channel1, color=transparentColor, title="Lower Channel 1") plot(upper_channel2, color=transparentColor, title="Upper Channel 2") plot(lower_channel2, color=transparentColor, title="Lower Channel 2") plot(upper_channel3, color=transparentColor, title="Upper Channel 3") plot(lower_channel3, color=transparentColor, title="Lower Channel 3") plot(upper_channel4, color=transparentColor, title="Upper Channel 4") plot(lower_channel4, color=transparentColor, title="Lower Channel 4") plot(basis, color=color.white, title="Basis") plot(MA1, color=color.rgb(4, 248, 216), linewidth=2, title="Middle MA") plot(MA2, color=color.rgb(220, 7, 248), linewidth=2, title="Long MA")