Cette stratégie génère l'indicateur MACD en calculant la différence entre les lignes moyennes mobiles rapides et lentes, et juge la tendance et les zones de surachat / survente des marchés financiers avec la ligne de signal.
La logique de base est d'utiliser l'indicateur MACD généré à partir de la différence de MA rapide et lente pour déterminer la direction de la tendance du marché, et la ligne de signal pour juger des niveaux de surachat / survente. Lorsque le MACD et la ligne de signal forment une croix dorée, c'est un signal long pour aller long. Lorsqu'il se forme une croix morte, c'est un signal court pour aller court. Pendant ce temps, il utilise la relation de prix
La méthode de calcul spécifique est la suivante:
Lorsque le MACD traverse au-dessus de la ligne de signal alors qu'ils sont tous les deux en dessous de 0, c'est un signal long de croix dorée. Lorsque le MACD traverse au-dessous de la ligne de signal alors qu'ils sont tous deux au-dessus de 0, c'est un signal court de croix morte. Pendant ce temps, il ne prend longtemps que lorsque le prix est au-dessus de 200 jours MA, et court lorsque le prix est en dessous de 200 jours MA.
Les risques peuvent être réduits en raccourcissant les périodes de mise en marché, en ajoutant d'autres indicateurs et en ajoutant un stop loss.
1.Testé sur différentes périodes de temps allant de 15m à 1D, résultats optimaux sur 4H en rendements ajustés au risque
2. Optimiser les MA rapides et lents afin que le MACD capture les cycles, 7-21 bon pour 15m
3.L'AMH de Hull pour le MACD a donné de bons résultats
4.L'arrêt de la perte par retard améliore la gestion des risques
Il s'agit globalement d'une stratégie très simple et pratique, générant des signaux de trading à haute probabilité grâce à un système à deux indicateurs et à un filtrage des prix. Il a une marge de profit relativement élevée, utilise la combinaison classique de paramètres MACD pour éviter une sur-optimisation. Il y a encore beaucoup de marge d'optimisation en ajustant les paramètres MA, en ajoutant d'autres indicateurs et des mécanismes de stop loss pour améliorer encore la performance.
/*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)