Stratégie de croisement des moyennes mobiles du MACD

Auteur:ChaoZhang est là., Date: 14 septembre 2023 à 17 h 03 h 47
Les étiquettes:

La logique de la stratégie

Cette stratégie combine l'indicateur MACD avec des moyennes mobiles, et va long lorsque les deux donnent des signaux alignés.

La logique est la suivante:

  1. Calcul du MACD FAST, généralement EMA sur 12 jours

  2. Comptez le MACD lent, généralement l'EMA de 26 jours

  3. Le MACD est FAST moins SLOW

  4. La ligne de signal est typiquement une MA de 9 jours du MACD

  5. Calcul des MAs de 9 et 26 jours

  6. Considérez long lorsque le MACD franchit la ligne de signal

  7. Passer à long lorsque l'AM de 9 jours dépasse l'AM de 26 jours

  8. Fermer long lorsque le MACD franchit la ligne de signal et que le MA à 9 jours franchit la ligne de MA à 26 jours

La stratégie tire parti de l'indicateur MACD suracheté-survendu et de la capacité de suivi de tendance de MA, en combinant les deux pour des transactions à cotes plus élevées.

Les avantages

  • Le MACD estime que les prix ont été surachetés/survendus, la MA détermine la tendance

  • La combinaison fournit des opportunités à long terme à forte probabilité

  • Des règles claires et faciles à appliquer

Les risques

  • Requiert une optimisation pour déterminer les meilleurs paramètres

  • LONGue incapacité à utiliser les opportunités de courte durée

  • Les transactions contre tendance peuvent accroître les pertes

Résumé

Cette stratégie utilise les forces du MACD et du MA pour juger du rythme du marché.


/*backtest
start: 2023-09-06 00:00:00
end: 2023-09-13 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=4
strategy("MACD Cross+MA", overlay=true)
//@version=4
// Getting inputs
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)
// === INPUT BACKTEST RANGE ===
FromYear  = input(defval = 2019, title = "From Year", minval = 2009)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2009)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 31, title = "To Day", minval = 1, maxval = 31)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"


// 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
//plot
plot(sma(close,9),color=color.red)
plot(sma(close,26),color=color.green)
//Condition
BMacdcondition= (macd>signal)
SMacdcondition= (macd<signal)
longCondition = crossover(sma(close, 9), sma(close, 26))
shortCondition = crossunder(sma(close, 9), sma(close, 26))
//entry
if (BMacdcondition) and window()
    (longCondition)
    strategy.entry("LONG", strategy.long)
if (shortCondition) and window()
    (SMacdcondition)
    strategy.close("LONG", qty_percent=100 , comment="หนีตาย")

Plus de