
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.
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:
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.
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.
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
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.
/*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)