Stratégie de moyenne mobile Momentum Breakout


Date de création: 2023-11-27 16:25:54 Dernière modification: 2023-11-27 16:25:54
Copier: 0 Nombre de clics: 608
1
Suivre
1617
Abonnés

Stratégie de moyenne mobile Momentum Breakout

Aperçu

La stratégie de rupture de la moyenne dynamique est une stratégie de négociation d’actions qui utilise un signal de croisement de la moyenne combiné à un indicateur dynamique. La stratégie utilise des indicateurs techniques multiples tels que les moyennes mobiles des indices (EMA), les moyennes mobiles simples (SMA), les moyennes mobiles de dispersion (MACD) et les indices relativement faibles modifiés (RSI) pour former un signal d’achat en confirmant que la tendance à long terme est à la hausse.

Principe de stratégie

La stratégie est composée principalement de:

  1. EMA/SMA à l’intersection de la même ligne: Configurer une ligne rapide EMA de 9 cycles et une ligne lente SMA de 21 cycles, générant un signal d’achat lorsque la ligne rapide traverse la ligne lente.

  2. Indicateur MACD: L’indicateur MACD comprend des lignes MACD, des lignes de signal et des colonnes MACD. Comme confirmation supplémentaire, lorsque les colonnes sont positives et synchronisées avec le signal d’achat généré par l’EMA/SMA.

  3. Indicateur StockRSI: StockRSI est une version améliorée de l’indicateur RSI. Un signal d’achat est généré lorsque la ligne de l’indicateur est supérieure à la ligne OVERBOUGHT ((80) ou inférieure à la ligne OVERSOLD ((20).

  4. La ceinture de Brin: Le milieu de la courbe de Brin est le SMA de 20 jours, la bande passante est la différence entre les deux normes ci-dessus. Le signal de négociation est généré lorsque le prix est dans la zone de Brin.

  5. Arrêt de perte et arrêt de positionLe prix d’arrêt est calculé sur la base de l’ATR pour les 14 derniers jours.

La stratégie exige qu’au moins 2 des indicateurs ci-dessus émettent simultanément des signaux d’achat et que le prix de l’action soit dans la zone de Brin et que la tendance à la hausse à long terme produise un signal d’achat final. Lorsque l’indicateur MACD est inversé à la baisse, le StockRSI génère un signal de vente après être entré dans la zone de survente.

Analyse des avantages

Cette stratégie combine les avantages de l’indicateur de la transversalité, de l’indicateur de la dynamique et de l’indicateur de la volatilité, avec les principaux avantages suivants:

  1. Les résultats sont excellents.: Indicateurs multiples et matures, les résultats stratégiques sont meilleurs que ceux des indices majeurs et des indices simples.

  2. Paramètres optimisésLes paramètres principaux tels que la période EMA, le passage de la ceinture de Brin ont été optimisés pour améliorer la stabilité du système.

  3. Arrêt automatiqueLe Brin Belt et l’ATR permettent d’ajuster le stop loss en temps réel, ce qui favorise la maîtrise du risque.

  4. La mise en œuvre n’est pas difficileLe code est simple, les indicateurs sont faciles d’accès et les opérations sont simples.

Analyse des risques

Malgré les bons résultats de cette stratégie, les principaux risques sont les suivants:

  1. L’indicateur émet un mauvais signal: Des signaux erronés peuvent apparaître lorsque le marché fluctue de manière anormale ou lorsque l’indicateur est défaillant.

  2. Paramètre incorrect: Une mauvaise configuration des paramètres peut entraîner des échanges trop fréquents ou une insensibilité. Il convient d’adapter les paramètres en fonction des variétés et des conditions du marché.

  3. Trop faible ou trop élevé: trop petit est facile à couper, trop grand est trop grand. Il faut équilibrer le stop loss et le stop stop.

Les mesures suivantes peuvent être prises pour contrer ces risques:

  1. Intervention et modification: En cas d’anomalie, le signal peut être confirmé manuellement, les paramètres modifiés ou la stratégie suspendue.

  2. Optimiser les paramètres: Optimiser les paramètres par des méthodes plus scientifiques et plus objectives telles que les algorithmes génétiques.

  3. Stop-loss combiné à fluctuationLe stop loss peut être automatiquement ajusté en fonction de la volatilité, par exemple 1 à 3 ATR.

Direction d’optimisation

La stratégie peut être optimisée de la manière suivante:

  1. Accroître la stabilité des mécanismes de prévention des pertesIl est possible d’ajouter un stop tracking ou une moyenne mobile indicielle pour un stop loss.

  2. Filtrage du volume des transactions combinéL’indicateur de volume de transactions a été ajouté pour éviter une rupture inefficace.

  3. Paramètres d’ajustement dynamique: optimisation automatique du cycle de la ligne moyenne en fonction de l’environnement du marché, de la largeur du canal, etc.

  4. Les algorithmes d’apprentissage automatique sont introduits: Optimisation dynamique des paramètres réalisés à l’aide d’algorithmes tels que RNN, LSTM.

Résumer

L’avantage de l’utilisation intégrée des indicateurs techniques de la stratégie de rupture de la dynamique uniforme, dans le cas d’une combinaison de courses courtes et longues, a permis d’obtenir de bons gains. La stratégie de contrôle des pertes est en place et la mise en œuvre n’est pas très difficile. La prochaine étape sera de perfectionner davantage le mécanisme d’arrêt des pertes et d’utiliser des méthodes plus intelligentes pour optimiser les paramètres et filtrer les signaux, afin d’obtenir des gains supplémentaires plus stables.

Code source de la stratégie
/*backtest
start: 2022-11-20 00:00:00
end: 2023-11-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Improved Custom Strategy", shorttitle="ICS", overlay=true)

// Volatility
volatility = ta.atr(14)

// EMA/MA Crossover
fast_length = 9
slow_length = 21
fast_ma = ta.ema(close, fast_length)
slow_ma = ta.sma(close, slow_length)
crossover_signal = ta.crossover(fast_ma, slow_ma)

// MACD
[macdLine, signalLine, macdHistogram] = ta.macd(close, 12, 26, 9)
macd_signal = crossover_signal and (macdHistogram > 0)

// Bollinger Bands
source = close
basis = ta.sma(source, 20)
upper = basis + 2 * ta.stdev(source, 20)
lower = basis - 2 * ta.stdev(source, 20)

// Fractal-based Support and Resistance levels
isFractalHigh = high[2] < high[1] and high[1] > high[0]
isFractalLow = low[2] > low[1] and low[1] < low[0]
resistance = ta.valuewhen(isFractalHigh, high[1], 0)
support = ta.valuewhen(isFractalLow, low[1], 0)

// StockRSI
length = 14
K = 100 * (close - ta.lowest(close, length)) / (ta.highest(close, length) - ta.lowest(close, length))
D = ta.sma(K, 3)
overbought = 80
oversold = 20
stockrsi_signal = ((K < D) and (K < oversold)) or ((K > D) and (K > overbought))

// Buy and sell conditions
mandatory_buy_conditions = (crossover_signal ? 1 : 0) + (macd_signal ? 1 : 0) + (stockrsi_signal ? 1 : 0)

// Long-term Trend Check
long_term_ma = ta.sma(close, 200)
long_term_bullish = close > long_term_ma
long_term_bearish = close < long_term_ma

// Plot the long-term MA for visual clarity
plot(long_term_ma, color=color.gray, title="200-Day MA", linewidth=1)

// Simplified Buy and Sell conditions
buy_condition = long_term_bullish and (mandatory_buy_conditions >= 2) and (close > lower) and (close < upper)
sell_condition = (macdHistogram < 0) and (K > D) and (K > overbought)


// Potential SL and TP based on volatility
potential_SL = close - volatility
potential_TP = close + 2 * volatility

plot(potential_SL, title="SL Level", color=color.red, linewidth=1, style=plot.style_linebr)
plot(potential_TP, title="TP Level", color=color.green, linewidth=1, style=plot.style_linebr)

// ... (rest of your code above)

// State variable to track if we're in a position, a counter for trades, and a delayed counter for plotting
var bool inPosition = false
var tradeCounter = 0
var tradeCounterDelayed = 0 // Declaration of the variable

// Buy logic: Check if tradeCounter is 0 and the buy condition is met
if tradeCounter == 0 and buy_condition
    strategy.entry("BUY", strategy.long, stop=potential_SL, limit=potential_TP)
    inPosition := true
    tradeCounter := tradeCounter + 1

// Sell logic: Check if tradeCounter is 1, the sell condition is met, and we are in a position
if tradeCounter == 1 and inPosition and sell_condition
    strategy.close("BUY")
    inPosition := false
    tradeCounter := tradeCounter - 1

// Update the delayed trade counter:
tradeCounterDelayed := tradeCounter

// Plotting
bgcolor(buy_condition ? color.new(color.green, 90) : sell_condition ? color.new(color.red, 90) : na)
plotshape(series=buy_condition and tradeCounterDelayed == 0, style=shape.labelup, location=location.belowbar, color=color.green, text="BUY", size=size.small)
plotshape(series=sell_condition and tradeCounterDelayed == 1, style=shape.labeldown, location=location.abovebar, color=color.red, text="SELL", size=size.small)

// ... (rest of your code if any)