Stratégie de suivi du solde long-short MACD


Date de création: 2023-10-17 16:15:53 Dernière modification: 2023-10-17 16:15:53
Copier: 0 Nombre de clics: 704
1
Suivre
1617
Abonnés

Stratégie de suivi du solde long-short MACD

Aperçu

Cette stratégie est une stratégie de suivi de tendance qui utilise l’indicateur MACD pour identifier la direction de la polyvalence. Elle génère une ligne principale MACD en calculant la différence entre les moyennes mobiles rapides et les moyennes mobiles lentes. La stratégie utilise une croix dorée de la ligne principale MACD et de la ligne de signal pour générer un signal d’achat et une croix morte pour générer un signal de vente, permettant un suivi d’équilibre polyvalent.

Principe de stratégie

Le code définit d’abord l’heure de début de la rétroanalyse pour tester la performance historique de la stratégie.

Ensuite, le calcul des indicateurs MACD, y compris les réglages de longueur des moyennes mobiles rapides, des moyennes mobiles lentes et des moyennes MACD. Les lignes rapides sont plus sensibles et les lignes lentes sont plus stables. Leurs différences forment la ligne principale du MACD, puis la ligne moyenne forme la ligne de signal du MACD.

En fonction des signaux à plusieurs têtes et à vide, la dernière fois que le signal a été généré est enregistrée. Le signal d’achat/vente est confirmé et enregistré lorsque la ligne rapide et la ligne lente se croisent, ce qui permet d’ouvrir la position.

Après l’entrée en bourse, suivez en permanence le prix le plus élevé et le prix le plus bas de la position. Définissez un pourcentage de stop-loss et arrêtez-vous lorsque la perte atteint ce pourcentage.

Avantages stratégiques

  1. L’indicateur MACD est l’un des indicateurs classiques de l’analyse technique, car il permet d’identifier les tendances.

  2. La conception de la différence entre les moyennes rapides et les moyennes lentes permet de saisir plus tôt la dynamique et la direction des variations de prix.

  3. Le filtrage de la ligne uniforme peut être utilisé pour filtrer certains faux signaux.

  4. La stratégie a ajouté un mécanisme de stop-loss pour contrôler les risques.

Risque stratégique

  1. L’indicateur MACD est sujet à de faux signaux, et il n’a pas beaucoup de place pour l’optimisation.

  2. Les paramètres de point d’arrêt inappropriés peuvent être trop actifs ou conservateurs et doivent être optimisés individuellement pour les différentes variétés.

  3. Les positions à nombre fixe sont susceptibles d’entraîner un effet de levier excessif et il est possible de définir un seuil de risque en fonction de la taille du capital.

  4. La validité du choix de la fenêtre de temps de rétroaction doit être vérifiée afin d’éviter une suradaptation.

Optimisation de la stratégie

  1. Optimiser les combinaisons de paramètres pour trouver les meilleurs paramètres pour les différentes variétés.

  2. Ajouter des filtres sur d’autres indicateurs, tels que la forme de la ligne K, les bandes de Brin, le RSI, etc. pour vérifier le signal.

  3. L’efficacité des différents points de rupture peut être évaluée en fonction d’indicateurs tels que les retraits et le Sharpe ratio.

  4. Optimiser les stratégies de stop loss, par exemple en déplaçant le stop loss ou en suspendant le stop loss.

  5. Essayez de définir des positions dynamiques en fonction des variations des fonds, de la volatilité, etc.

Résumer

La stratégie d’équilibre polyvalent MACD est une stratégie de suivi de tendance basée sur des indicateurs techniques classiques. Elle a la capacité de capter la dynamique des changements de prix et peut être bien adaptée aux différentes variétés grâce à l’optimisation des paramètres. Combinée à plus d’indicateurs de volatilité, de modes de stop loss et de gestion de position dynamique, la stabilité et la rentabilité de la stratégie peuvent être améliorées.

Code source de la stratégie
/*backtest
start: 2023-09-16 00:00:00
end: 2023-10-16 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("MACD BF", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Component Code Start ///////////////
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true

///////////////  MACD Component - Default settings for one day. /////////////// 
fastLength = input(12) // 72 for 4hr
slowlength = input(26) // 156 for 4 hr
MACDLength = input(12)  // 12 for 4hr

MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD

long = crossover(delta, 0) 
short = crossunder(delta, 0) 

last_long = long ? time : nz(last_long[1])
last_short = short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal = short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = long_signal ? time : nz(last_long_signal[1])
last_short_signal = short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low = not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

sl_inp = input(5.0, title='Stop Loss %', type=float)/100

/////////////// Strategy Component /////////////// 
// Strategy Entry
if testPeriod()
    strategy.entry("Long Entry",  strategy.long, when=long_signal)
    strategy.entry("Short Entry", strategy.short, when=short_signal)

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) // LONG SL
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) // SHORT SL

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

// Strategy SL Exit
if testPeriod()
    strategy.exit("Long SL", "Long Entry", stop=long_sl, when=since_longEntry > 1)
    strategy.exit("Short SL", "Short Entry", stop=short_sl, when=since_shortEntry > 1)

//plot(strategy.equity, title="equity", color=blue, linewidth=2, style=areabr)