Stratégie de trading quantitative basée sur le double MACD


Date de création: 2024-01-30 16:43:29 Dernière modification: 2024-01-30 16:43:29
Copier: 0 Nombre de clics: 900
1
Suivre
1617
Abonnés

Stratégie de trading quantitative basée sur le double MACD

Aperçu

La stratégie de trading quantitatif double MACD est une stratégie de trading quantitatif réalisée en utilisant les indices MACD de deux périodes. La stratégie consiste à ouvrir une position plus élevée lorsque l’indicateur MACD de la ligne circulaire forme un forfait d’or et à fermer une position plus basse lorsque l’indicateur MACD de la ligne solaire forme un forfait mort.

Principe de stratégie

La stratégie de trading quantitatif double MACD utilise une combinaison d’indicateurs hebdomadaires MACD et quotidiens MACD pour juger des signaux d’entrée et de sortie.

Tout d’abord, un signal d’achat est généré lorsque le MACD de la semaine traverse la ligne de signal, ce qui ouvre une position plus élevée; puis un signal de vente est généré lorsque le MACD de la journée traverse la ligne de signal, ce qui est la position de vente.

Lorsque la position est vide, si la ligne MACD de l’indicateur MACD est à nouveau sur la ligne de signal, la position est à nouveau ouverte. C’est-à-dire que la fourchette d’or de l’indicateur MACD est la condition pour ouvrir à nouveau la position.

Il est à noter que la fourchette morte du MACD quotidien est levée, mais qu’une nouvelle ouverture de position est autorisée dans la fenêtre de négociation de la courbe où la ligne MACD hebdomadaire est supérieure à la ligne de signal.

Avantages stratégiques

La stratégie de négociation quantitative double MACD, combinée à l’analyse de deux périodes, permet de filtrer efficacement les faux signaux et d’améliorer la qualité des signaux. Plus précisément, il existe principalement les avantages suivants:

  1. Les cadres horaires hebdomadaires permettent d’évaluer les principales tendances et d’éviter les échanges à contre-courant.

  2. Les cadres horaires permettent de déterminer les heures d’entrée et de sortie et de saisir les opportunités de trading à court terme.

  3. Le mécanisme de clôture de la fenêtre de négociation permet d’éviter que les positions soient trop souvent ouvertes et nettoyées en raison d’ajustements à court terme.

  4. Les paramètres de l’indicateur MACD sont réglables et peuvent être optimisés en fonction des variétés et des conditions du marché.

  5. L’intégration des fonctions Stop, Stop Loss et Stop Loss Mobile permet de contrôler efficacement le risque.

Risque stratégique

Les stratégies de trading quantitatif à double MACD comportent également des risques, notamment:

  1. Les indicateurs MACD sont sujets à de faux signaux et à des croisements fréquents, nécessitant une combinaison d’autres indicateurs pour la confirmation.

  2. Les principales tendances de l’analyse du calendrier hebdomadaire peuvent être inversées et doivent être stoppées à temps.

  3. Les paramètres doivent être constamment optimisés et adaptés en fonction des variétés et des conditions de marché.

  4. Ne vous fiez pas trop aux résultats de la rétro-analyse, car les disques fixes peuvent être différents de ceux de la rétro-analyse.

La réponse:

  1. Utilisé avec d’autres combinaisons d’indicateurs pour construire un système de stratégies d’optimisation logique.

  2. Il est recommandé de définir des limites de stop-loss raisonnables pour éviter de dépasser le maximum de pertes acceptables.

  3. Optimiser constamment les paramètres pour trouver la meilleure combinaison de paramètres

  4. Il est important de commencer avec un minimum de capital pour vérifier la stabilité de la stratégie.

Direction d’optimisation

Il y a encore de la place pour optimiser davantage la stratégie de trading quantitatif à double MACD:

  1. Il est possible d’introduire d’autres indicateurs tels que les lignes de Brin, les KDJ, etc. pour construire une stratégie de combinaison de plusieurs indicateurs et améliorer la qualité du signal.

  2. Le nombre de transactions peut être combiné avec l’indicateur de volume pour éviter les faux rebond qui entraînent une hausse des prix mais un volume insuffisant.

  3. Les paramètres peuvent être optimisés automatiquement en utilisant des méthodes d’apprentissage automatique, permettant un ajustement dynamique des paramètres.

  4. Des ajustements de risque supplémentaires peuvent être apportés à la stratégie, par exemple l’ajout d’une méthode de stop-loss avancée telle que le ratio profit/perte.

  5. Tests d’adéquation des stratégies et ajustements d’optimisation pour éviter les problèmes d’adéquation excessive

Résumer

Les stratégies de négociation quantifiées à double MACD intègrent l’analyse des deux périodes pour juger des tendances dominantes et secondaires afin de tirer parti des avantages de leurs indicateurs respectifs. Il y a encore beaucoup de place pour l’optimisation des stratégies. Il est probable que l’efficacité des stratégies soit encore améliorée par l’introduction d’autres indicateurs et l’optimisation des paramètres à l’aide de l’apprentissage automatique. La vérification en direct est une étape indispensable et constitue un fondement important pour améliorer davantage les stratégies.

Code source de la stratégie
/*backtest
start: 2023-01-29 00:00:00
end: 2024-01-11 05:20:00
period: 1d
basePeriod: 1h
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/
// © maxits

// Long Position: Weekly Macd line crosses above Signal line   
// [Trading Window Macd Line > Signal Line] (Weekly)
// Close Position: Daily Macd Line crosses above Daily Signal line.  
// Re Entry Condition: Macd line crosses above Signal line only if [Trading Window MacdLine > Sgnal Line] (Weekly)

//@version=4
strategy("Dual MACD Strategy",
         shorttitle="Dual Macd Tester",
         overlay=false,
         initial_capital=1000,
         default_qty_value=20,
         default_qty_type=strategy.percent_of_equity,
         commission_value=0.1,
         pyramiding=0)



// Define user inputs
i_time     = input(defval = timestamp("01 May 2018 13:30 +0000"), title = "Start Time", type = input.time) // Starting  time for Backtesting
f_time     = input(defval = timestamp("9 Sep 2021 13:30 +0000"), title = "Finish Time", type = input.time) // Finishing time for Backtesting

sep1          = input(false, title="------ Profit & Loss ------")

enable_TP     = input(true, title="Enable Just a Profit Level?")
enable_SL     = input(false, title="Enable Just a S.Loss Level?")
enable_TS     = input(true, title=" Enable Only Trailing Stop")
long_TP_Input = input(30.0,   title='Take Profit %',      type=input.float, minval=0)/100
long_SL_Input = input(1.0,   title='Stop Loss %',        type=input.float, minval=0)/100
long_TS_Input = input(5.0,   title='Trailing Stop %',    type=input.float, minval=0)/100
cl_low_Input  = input(low,   title="Trailing Stop Source")
long_TP       = strategy.position_avg_price * (1 + long_TP_Input)
long_SL       = strategy.position_avg_price * (1 - long_SL_Input)
long_TS       = cl_low_Input * (1 - long_TS_Input)

sep2       = input(false, title="------ Macd Properties ------")

d_res      = input(title="Short Term TimeFrame", type=input.resolution, defval="D") // Daily Time Frame
w_res      = input(title="Long Term TimeFrame", type=input.resolution, defval="W")  // Weekly Time Frame
src        = input(close, title="Source")                                           // Indicator Price Source
fast_len   = input(title="Fast Length", type=input.integer, defval=12)              // Fast MA Length
slow_len   = input(title="Slow Length", type=input.integer, defval=26)              // Slow MA Length
sign_len   = input(title="Sign Length", type=input.integer, defval=9)               // Sign MA Length
d_w        = input(title="Daily or Weekly?", type=input.bool, defval=true)          // Plot Daily or Weekly MACD

// Color Plot for Macd

col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350

// BG Color

bg_color = color.rgb(127, 232, 34, 75)

// Daily Macd

[d_macdLine, d_singleLine, d_histLine] = security(syminfo.tickerid, d_res, macd(src, fast_len, slow_len, sign_len)) // Funcion Security para poder usar correcta resolución

plot(d_w ? d_macdLine   : na, color=color.blue)
plot(d_w ? d_singleLine : na, color=color.orange)
plot(d_w ? d_histLine   : na, style=plot.style_columns,
     color=(d_histLine>=0 ? (d_histLine[1] < d_histLine ? col_grow_above : col_fall_above) : 
     (d_histLine[1] < d_histLine ? col_grow_below : col_fall_below)))
    
// Weekly Macd

[w_macdLine, w_singleLine, w_histLine] = security(syminfo.tickerid, w_res, macd(src, fast_len, slow_len, sign_len)) // Funcion Security para poder usar correcta resolución

plot(d_w ? na : w_macdLine,   color=color.blue)
plot(d_w ? na : w_singleLine, color=color.orange)
plot(d_w ? na : w_histLine,   style=plot.style_columns,
     color=(w_histLine>=0 ? (w_histLine[1] < w_histLine ? col_grow_above : col_fall_above) : 
     (w_histLine[1] < w_histLine ? col_grow_below : col_fall_below)))

///////////////////////////////// Entry Conditions
inTrade    = strategy.position_size != 0       // Posición abierta
notInTrade = strategy.position_size == 0       // Posición Cerrada
start_time = true

trading_window = w_macdLine > w_singleLine   // Weekly Macd Signal enables a trading window 
bgcolor(trading_window ? bg_color : na)
buy_cond       = crossover (w_macdLine, w_singleLine)
sell_cond      = crossunder(d_macdLine, d_singleLine)
re_entry_cond  = crossover (d_macdLine, d_singleLine) and trading_window

// Entry Exit Conditions

trailing_stop  = 0.0        // Code for calculating Long Positions Trailing Stop Loss
trailing_stop := if (strategy.position_size != 0)
    stopValue = long_TS
    max(trailing_stop[1], stopValue)
else 
    0

if (buy_cond and notInTrade and start_time)
    strategy.entry(id="First Entry", long=strategy.long, comment="First Long")

if (sell_cond and inTrade)
    strategy.close(id="First Entry", comment="Close First Long")
    
if (re_entry_cond and notInTrade and start_time)
    strategy.entry(id="Further Entry", long=strategy.long, comment="Further Entry")

if (sell_cond and inTrade)
    strategy.close(id="Further Entry", comment="Close First Long")

if enable_TP
    if (enable_TS and not enable_SL)
        strategy.exit("Long TP & TS FiEn", "First Entry",   limit = long_TP, stop = trailing_stop)
        strategy.exit("Long TP & TS FuEn", "Further Entry", limit = long_TP, stop = trailing_stop)
    else
        if (enable_SL and not enable_TS)
            strategy.exit("Long TP & TS FiEn", "First Entry",   limit = long_TP, stop = long_SL)
            strategy.exit("Long TP & TS FuEn", "Further Entry", limit = long_TP, stop = long_SL)
        else 
            strategy.exit("Long TP & TS FiEn", "First Entry",   limit = long_TP)
            strategy.exit("Long TP & TS FuEn", "Further Entry", limit = long_TP)
else
    if not enable_TP 
        if (enable_TS and not enable_SL)
            strategy.exit("Long TP & TS FiEn", "First Entry",   stop = trailing_stop)
            strategy.exit("Long TP & TS FuEn", "Further Entry", stop = trailing_stop)
        else
            if (enable_SL and not enable_TS)
                strategy.exit("Long TP & TS FiEn", "First Entry",   stop = long_SL)
                strategy.exit("Long TP & TS FuEn", "Further Entry", stop = long_SL)

plot(enable_TP ? long_TP : na, title="TP Level", color=color.green, style=plot.style_linebr, linewidth=2)
plot(enable_SL ? long_SL : na, title="SL Level", color=color.red,   style=plot.style_linebr, linewidth=2)
plot(enable_TS and trailing_stop ? trailing_stop : na, title="TS Level", color=color.red, style=plot.style_linebr, linewidth=2)