La Golden Cross Keltner Channel Trend Following Strategy est une stratégie qui ne négocie que dans la direction de la tendance.
Cette stratégie utilise deux moyennes mobiles, une moyenne mobile à court terme et une moyenne mobile à long terme, pour former des croix d'or et des croix de mort pour déterminer la direction de la tendance.
Plus précisément, la stratégie vérifie d'abord si la moyenne mobile à long terme est supérieure à la moyenne mobile à court terme, ce qui indique une croix dorée et une tendance à la hausse.
En fonction de la détermination de la tendance, si le prix dépasse le rail supérieur, un signal long est généré. Si le prix dépasse le rail inférieur, un signal court est généré.
Après l'entrée, la stratégie utilise des multiples ATR définis par l'utilisateur pour le profit et le stop-loss.
Cette stratégie combine les avantages du suivi des tendances et de la rupture des canaux, permettant une identification efficace des tendances et la saisie des opportunités.
La croix d'or filtre les faux signaux qui ne correspondent pas à la tendance principale.
La rupture de canal avec direction de tendance améliore la précision d'entrée.
Le "take profit" et le "stop loss" préservent les bénéfices et contrôlent les risques.
Les réglages de paramètres flexibles conviennent à différents produits et environnements.
Il est à la fois long et court, ce qui élargit l'applicabilité.
Malgré les avantages, certains risques nécessitent une attention particulière:
Des occasions manquées de revenir en arrière.
Les changements de tendance peuvent entraîner des pertes.
Les paramètres incorrects peuvent entraîner une sur-échange ou une échange rare.
Il y a un risque du jour au lendemain
Risque de mise en forme de courbe.
Les solutions comprennent l'optimisation des paramètres, l'ajustement rapide de la période de MA et le contrôle du dimensionnement de la position.
Des améliorations supplémentaires sont possibles:
Ajout d'autres indicateurs pour construire un modèle multifactoriel et améliorer la précision. par exemple MACD, RSI.
Optimisation des paramètres par apprentissage automatique pour une adaptabilité au marché.
Des règles dynamiques de prise de profit et de stop-loss pour équilibrer la rentabilité et la récompense.
La taille dynamique des positions basée sur la volatilité.
Rechercher des paramètres optimaux pour différents produits.
Réduire la fréquence des transactions pour réduire les frais.
La stratégie de suivi des tendances du canal Golden Cross Keltner est généralement un système de suivi des tendances stable et fiable.
/*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")