Stratégie quantitative MACD - stratégie de percée de la moyenne mobile à double croisement


Date de création: 2024-02-22 15:32:42 Dernière modification: 2024-02-22 15:32:42
Copier: 0 Nombre de clics: 679
1
Suivre
1617
Abonnés

Stratégie quantitative MACD - stratégie de percée de la moyenne mobile à double croisement

Aperçu

Cette stratégie consiste à calculer la différence entre les moyennes rapides et les moyennes lentes pour former l’indicateur MACD, puis à combiner les lignes de signaux pour déterminer la tendance des marchés financiers et les zones de survente et de survente. La stratégie consiste à faire plus lorsque le MACD et la ligne de signal forment des fourches à plusieurs têtes et que le prix est supérieur à la moyenne à 200 jours, et à former des fourches à vide lorsque le prix est inférieur à la moyenne à 200 jours.

Principe de stratégie

Le principe de base est de calculer la différence entre la moyenne mobile rapide et la moyenne mobile lente pour déterminer la direction de la tendance du marché, puis d’utiliser les lignes de signal pour déterminer les zones de survente et de survente. Lorsque le MACD et la ligne de signal forment un forfait d’or, le signal est en hausse.

Les méthodes de calcul sont les suivantes:

  1. La moyenne rapide ((EMA du 12e jour) moins la moyenne lente ((EMA du 26e jour) donne MACD
  2. L’EMA du 9e jour du MACD a reçu une ligne de signal
  3. Le MACD moins la ligne de signal est obtenu par le rectangle MACD

Lorsque le MACD est au-dessus de la ligne de signal et que le MACD et la ligne de signal sont à la fois en dessous de 0, le signal de forcage est plus fort que le signal de forcage lorsque le MACD est au-dessous de la ligne de signal et que le MACD et la ligne de signal sont à la fois au-dessus de 0, le signal de forcage est vide. De plus, le prix est supérieur à la moyenne des 200 jours.

Avantages stratégiques

  1. L’utilisation d’un double indicateur de jugement évite les limites d’un seul indicateur de jugement et améliore la précision du signal
  2. Un double filtrage combiné à une relation de prix et de ligne moyenne pour éviter de confondre les signaux de tendances fortes
  3. L’espace d’optimisation des paramètres est large et peut être adapté à différents environnements de marché en ajustant les paramètres de la ligne moyenne
  4. Les paramètres conservateurs permettent moins de signaux mais une plus grande précision
  5. Des stratégies faciles à comprendre et à mettre en œuvre

Risque stratégique

  1. Les indicateurs peuvent être affectés par de fortes fluctuations du marché et générer de faux signaux.
  2. La lenteur du système de régularisation affecte la rapidité de la stratégie
  3. Les signaux sont moins nombreux et les opportunités de tendance sont plus faciles à manquer
  4. Paramètres optimisés avec un risque de sur-optimisation
  5. Le contrôle de retrait et le mécanisme de retrait sans perte doivent être améliorés

Le risque peut être réduit par une réduction appropriée du cycle de la moyenne, l’ajout d’autres indicateurs de jugement et l’ajout de mesures de freinage.

Orientation de l’optimisation de la stratégie

1.tested on different timeframes from 15m upto 1D, where optimal results where on 4H timeframe in terms of risk adjusted returns

2.optimize fast ma and slow ma so that macd represents cycle, I found 7-21 performs good for 15m chart

3.also tested hull moving average for MACD which gave good results

4.stoploss can also be trailed for better risk management

Résumer

Cette stratégie est très simple et pratique dans l’ensemble, elle génère des signaux de trading à haute probabilité grâce à un double jugement d’indicateurs et un filtrage des prix, un taux de profit marginal élevé, une combinaison de paramètres classiques utilisant le MACD, sans optimisation excessive. Il y a encore beaucoup de place pour l’optimisation, et la performance de la stratégie peut être encore améliorée par l’ajustement de la combinaison de paramètres moyens, l’ajout d’autres mesures de jugement et de stop-loss.

Code source de la stratégie
/*backtest
start: 2024-02-14 00:00:00
end: 2024-02-21 00:00:00
period: 1h
basePeriod: 15m
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/
// © Hurmun

//@version=4
strategy("Simple MACD strategy ", overlay=true, margin_long=100, margin_short=100)


fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA (Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=false)
// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00
// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal


movinga2 = input(title="movinga 2", type=input.integer, defval=200)

movinga200 = sma(close, movinga2)

plot(movinga200, "MA", color.orange)
longCondition = crossover(macd, signal) and macd < 0 and signal < 0 and close > movinga200
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = crossunder(macd, signal) and macd > 0 and signal > 0 and close < movinga200
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)
    
shortProfitPerc = input(title="Short Take Profit (%)", minval=0.0, step=0.1, defval=2) / 100
longProfitPerc = input(title="Long Take Profit (%)", minval=0.0, step=0.1, defval=2) / 100
    
stoploss = input(title="stoploss in %", minval = 0.0, step=1, defval=2) /100

longStoploss = strategy.position_avg_price * (1 - stoploss)
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)

shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)
shortStoploss = strategy.position_avg_price * (1 + stoploss)
    
if (strategy.position_size > 0 )
    strategy.exit(id="XL TP", limit=longExitPrice, stop=longStoploss)






if (strategy.position_size < 0 )
    strategy.exit(id="XS TP", limit=shortExitPrice, stop=shortStoploss)