Il s'agit d'une stratégie de suivi de tendance qui identifie les directions haussières et baissières à l'aide de l'indicateur MACD. Il génère la ligne principale MACD en calculant la différence entre les moyennes mobiles rapides et lentes.
Le code définit d'abord le délai de backtesting pour tester la performance historique de la stratégie.
L'indicateur MACD est ensuite calculé, y compris les paramètres de longueur pour la moyenne mobile rapide, la moyenne mobile lente et la moyenne mobile MACD. La ligne rapide réagit plus sensiblement et la ligne lente réagit plus régulièrement. Leur différence forme la ligne principale MACD, qui est ensuite lissée par une moyenne mobile pour former la ligne de signal MACD. Lorsque la différence dépasse la ligne zéro, un signal haussier est généré.
Lorsque les lignes rapides et lentes se croisent, confirmer et enregistrer les signaux d'achat/vente, puis une position peut être ouverte.
Après avoir entré dans une position, suivez continuellement le prix le plus élevé et le plus bas de la position.
L'indicateur MACD peut identifier efficacement les tendances et est l'un des indicateurs techniques classiques.
La différence entre les moyennes mobiles rapides et lentes permet de détecter rapidement l'élan des prix et les changements de direction.
L'effet de filtrage des moyennes mobiles aide à filtrer certains faux signaux.
La stratégie intègre un mécanisme de stop loss pour contrôler les risques.
Le MACD est enclin à générer de faux signaux avec un espace d'optimisation limité.
Le placement de stop loss inapproprié peut être trop actif ou conservateur, nécessitant une optimisation individuelle entre les produits.
Le dimensionnement des positions fixes peut facilement conduire à un effet de levier excessif, considérez le dimensionnement des positions en fonction de la taille du compte.
La justification des délais de backtest doit être validée afin d'éviter un surajustement.
Optimiser les combinaisons de moyennes mobiles rapides et lentes pour trouver les meilleurs paramètres adaptés aux différents produits.
Ajoutez d'autres indicateurs comme les chandeliers, les bandes de Bollinger, le RSI pour filtrer les signaux.
Évaluer les différents niveaux d'arrêt de perte en fonction du taux de réduction, du ratio Sharpe.
Explorez les techniques de stop-loss comme le stop-loss, les ordres limités.
Testez la dimensionnement dynamique des positions basé sur le capital, la volatilité.
La stratégie d'équilibrage de tendance MACD est basée sur l'indicateur classique MACD. Elle a la capacité de capturer de manière sensible la dynamique des prix et peut être bien adaptée à différents produits grâce à l'optimisation des paramètres.
/*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)