La tendance du canal Golden Cross Keltner à la suite de la stratégie

Auteur:ChaoZhang est là., Date: 2023-11-02 14h31 et 10h
Les étiquettes:

img

Résumé

La Golden Cross Keltner Channel Trend Following Strategy est une stratégie qui ne négocie que dans la direction de la tendance.

Principe

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.

Analyse des avantages

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.

  1. La croix d'or filtre les faux signaux qui ne correspondent pas à la tendance principale.

  2. La rupture de canal avec direction de tendance améliore la précision d'entrée.

  3. Le "take profit" et le "stop loss" préservent les bénéfices et contrôlent les risques.

  4. Les réglages de paramètres flexibles conviennent à différents produits et environnements.

  5. Il est à la fois long et court, ce qui élargit l'applicabilité.

Analyse des risques

Malgré les avantages, certains risques nécessitent une attention particulière:

  1. Des occasions manquées de revenir en arrière.

  2. Les changements de tendance peuvent entraîner des pertes.

  3. Les paramètres incorrects peuvent entraîner une sur-échange ou une échange rare.

  4. Il y a un risque du jour au lendemain

  5. 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.

Directions d'optimisation

Des améliorations supplémentaires sont possibles:

  1. Ajout d'autres indicateurs pour construire un modèle multifactoriel et améliorer la précision. par exemple MACD, RSI.

  2. Optimisation des paramètres par apprentissage automatique pour une adaptabilité au marché.

  3. Des règles dynamiques de prise de profit et de stop-loss pour équilibrer la rentabilité et la récompense.

  4. La taille dynamique des positions basée sur la volatilité.

  5. Rechercher des paramètres optimaux pour différents produits.

  6. Réduire la fréquence des transactions pour réduire les frais.

Conclusion

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")


Plus de