Stratégie de trading de cassure de l'indicateur MACD


Date de création: 2023-09-12 15:32:12 Dernière modification: 2023-09-12 15:32:12
Copier: 1 Nombre de clics: 789
1
Suivre
1617
Abonnés

Cette stratégie utilise la rupture de la courbe différentielle de l’indicateur MACD pour prendre des décisions de négociation. La MACD est composée d’EMA rapides et lents, qui génèrent un signal de négociation lorsque la courbe différentielle franchit l’axe zéro.

Le principe de la stratégie:

  1. Calculer l’EMA de la ligne rapide et l’EMA de la ligne lente, dont la différence forme la courbe MACD.

  2. Un alignement EMA sur la courbe MACD donne une ligne de signal MACD.

  3. Le MACD est plus actif quand il traverse la ligne et moins actif quand il traverse la ligne.

  4. Il est important de mettre en place un point de freinage pour les pertes en pourcentage et de gérer les risques.

Les avantages de cette stratégie:

  1. L’indicateur MACD est plus efficace qu’une seule EMA et permet de mieux juger les tendances.

  2. La première étape consiste à trouver des opportunités de conversion en temps opportun.

  3. Le blocage des pertes aide à contrôler le risque de transaction.

Le risque de cette stratégie:

  1. Les signaux de fausse rupture sont plus susceptibles de se produire près de l’axe zéro de la courbe MACD.

  2. Les paramètres doivent être optimisés pour correspondre aux différentes variétés de transactions.

  3. Le trading tendanciel est vulnérable aux événements imprévus, il faut mettre en place un stop loss.

En résumé, la stratégie utilise la relation de rupture de la courbe de décalage MACD pour juger. Les avantages de l’indicateur MACD sont favorables à l’amélioration de l’efficacité, mais il faut être vigilant contre le risque de fausse rupture et adopter des mesures de gestion des risques appropriées pour obtenir des rendements stables à long terme.

Code source de la stratégie
/*backtest
start: 2023-01-01 00:00:00
end: 2023-09-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3 
strategy("uray MACD", overlay=false, pyramiding = 0, calc_on_every_tick=true, precision=2, currency="USD", default_qty_value=10, default_qty_type=strategy.cash,initial_capital=100,commission_type=strategy.commission.percent,commission_value=0.1) 

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 6, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2017)
ToMonth   = input(defval = 6, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2020, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
inTimeframe()  => true


isPosLong    = strategy.position_size > 0
isPosShort   = strategy.position_size < 0
isNoMarginPos= strategy.position_size == 0

fastLength    = input(12, minval = 1, title = "MACD fast")
slowlength    = input(26, minval = 1, title = "MACD slow")
MACDLength    = input( 9, minval = 1, title = "MACD length")
stopLoss      = input( 10, minval = 1, title = "Stop Loss (price %)", type=float)
takeProfit    = input( 50, minval = 1, title = "Take Profit (price %)", type=float)
src           = close   // Source of Calculations (Close of Bar)

MACD  = ta.ema(src, fastLength) - ta.ema(src, slowlength)
aMACD = ta.ema(MACD, MACDLength)
delta = MACD - aMACD
stopLossValue      = close*(stopLoss/100)/syminfo.mintick
takeProfitValue    = close*(takeProfit/100)/syminfo.mintick
switchLongTrigger  = ta.crossover(delta, 0)
switchShortTrigger = ta.crossunder(delta, 0)
closeLongTrigger   = ta.crossunder(delta, 0)
closeShortTrigger  = ta.crossover(delta, 0)
entryLongTrigger   = ta.crossover(delta, 0)
entryShortTrigger  = ta.crossunder(delta, 0)

// if inTimeframe()
//     if isNoMarginPos
//         if entryLongTrigger
//             strategy.entry("Long", strategy.long,  comment="Entry Long")
//             strategy.exit("Stop (long SL/TP)", loss=stopLossValue, profit=takeProfitValue)   
//         if entryShortTrigger
//             strategy.entry("Short", strategy.short, comment="Entry Short")  
//             strategy.exit("Stop (short SL/TP)", loss=stopLossValue, profit=takeProfitValue)   
//     if isPosShort
//         if switchLongTrigger
//             strategy.close_all()    
//             strategy.entry("Long", strategy.long, comment="switch Long")
//             strategy.exit("Stop (long SL/TP)", loss=stopLossValue, profit=takeProfitValue)   
//         if closeLongTrigger
//             strategy.close_all()    
//     if isPosLong 
//         if switchShortTrigger
//             strategy.close_all()   
//             strategy.entry("Short", strategy.short, comment="switch Short")
//             strategy.exit("Stop (short SL/TP)", loss=stopLossValue, profit=takeProfitValue) 
//         if closeShortTrigger
//             strategy.close_all()   

if inTimeframe()
    strategy.entry("Long", strategy.long,  comment="Entry Long", when=entryLongTrigger)
    strategy.close("Long", when=entryShortTrigger)
    strategy.entry("Short", strategy.short,  comment="Entry Short", when=entryShortTrigger)
    strategy.close("Short", when=entryLongTrigger)
    strategy.exit("Stop (short SL/TP)", loss=stopLossValue, profit=takeProfitValue, when=entryShortTrigger) 
    strategy.exit("Stop (long SL/TP)", loss=stopLossValue, profit=takeProfitValue, when=entryLongTrigger)