Stratégie hybride tortue médiane de clôture MACD


Date de création: 2023-10-30 12:16:20 Dernière modification: 2023-10-30 12:16:20
Copier: 1 Nombre de clics: 630
1
Suivre
1617
Abonnés

Stratégie hybride tortue médiane de clôture MACD

Aperçu

Cette stratégie utilise les signaux de forfait doré de l’indicateur MACD, la relation entre le prix de clôture de la ligne K et la ligne médiane et les caractéristiques de la volatilité des prix pour déterminer le moment d’entrée et de sortie, tout en définissant des mécanismes de réentrée et de correction d’entrée, dans le but d’obtenir plus d’opportunités de négociation tout en contrôlant les risques et de réaliser des gains stables.

Principe de stratégie

Cette stratégie est basée sur les principes suivants:

  1. L’analyse du MACD des lignes rapides et des lignes lentes permet d’évaluer les marchés à capitaux multiples et à capitaux vides, ainsi que les points d’entrée spécifiques.

  2. Utilisez la relation entre le prix de clôture de la ligne K et la ligne médiane pour déterminer si la tendance à la hausse est terminée et son point de départ.

  3. La mise en place d’un mécanisme de réintégration permettant une réintégration après la fin de la MACD si la tendance se poursuit, ce qui augmente les chances de profit.

  4. La mise en place d’un mécanisme de correction d’entrée qui permet d’ajouter des positions si le prix est partiellement ajusté mais n’a pas encore été inversé, ce qui fait partie de l’ajustement de la tendance interne.

  5. Pour résumer les points ci-dessus, il faut ajuster dynamiquement la position pour obtenir le plus de profit possible dans la tendance et partir rapidement à la fin de la tendance.

En particulier, la stratégie détermine d’abord si la ligne rapide et la ligne lente de la MACD sont en forcage ou en forcage mort, si la forcage est en plus, si la forcage est vide; puis détermine si la ligne K touche la ligne médiane de la clôture, si elle touche la fin de la tendance et la mise en équilibre.

En outre, la stratégie dispose également d’un mécanisme de réentrée, c’est-à-dire qu’après la fin de la tendance dans la direction initiale, la stratégie ouvrira à nouveau la tendance de suivi de la tendance si le MACD continue à afficher le même signal de direction. Il existe également un mécanisme de révision d’entrée, si le prix a une légère correction mais n’a pas encore complètement inversé, la stratégie augmentera la position de manière appropriée, ce qui fait partie du comportement normal de réajustement dans la tendance.

Grâce à ces réglages, la stratégie peut ajuster dynamiquement sa position dans la tendance, effectuer plus d’entrées et de sorties, et obtenir des rendements plus élevés en contrôlant les risques.

Avantages stratégiques

Cette stratégie, combinant plusieurs indicateurs, présente les principaux avantages suivants:

  1. Le MACD peut identifier les tendances et les points de retournement pour déterminer les points d’entrée spécifiques.

  2. Le prix de clôture et la ligne médiane permettent de déterminer la fin de la tendance.

  3. Le mécanisme de réintégration a permis d’augmenter le nombre d’ouvertures de positions et d’améliorer l’efficacité de l’utilisation des fonds.

  4. Le mécanisme d’admission a été modifié afin de permettre une réapprovisionnement en temps opportun afin de mieux saisir les tendances.

  5. Les stratégies sont souvent utilisées à des fins commerciales, mais les risques sont maîtrisés et les facteurs de rentabilité sont plus élevés.

  6. Les paramètres sont réglables et peuvent être optimisés pour différentes variétés et situations.

  7. Les stratégies sont claires et faciles à comprendre, le code est écrit de manière concise, et le disque dur est facile à utiliser.

  8. Les données de détection sont abondantes, fiables et faciles à vérifier sur disque.

Risque stratégique

La stratégie présente également les principaux risques suivants:

  1. La probabilité que le MACD envoie un faux signal doit être vérifiée en combinaison avec d’autres indicateurs.

  2. Un arrêt de perte trop faible au niveau majeur peut être évité par un choc majeur.

  3. La réadmission et l’admission corrective augmentent la fréquence des opérations et nécessitent un contrôle de l’utilisation des fonds.

  4. La correction de l’entrée en bourse pourrait entraîner de lourdes pertes dans un contexte de rebond.

  5. Les variétés de négociation et les paramètres doivent être optimisés et ne sont pas applicables à toutes les variétés.

  6. Il est nécessaire d’effectuer un suivi et une optimisation continuels, en ajustant les paramètres en fonction du marché.

  7. L’impact sur le coût des points de glissement doit être pris en compte dans le disque dur.

Les mesures de gestion des risques correspondantes comprennent: la mise en place d’un stop-loss pour limiter les pertes individuelles; l’évaluation du taux d’utilisation des fonds et le maintien d’une réserve de trésorerie raisonnable; le retestement de la combinaison de paramètres appropriée pour la sélection des variétés; l’attention constante sur les changements de caractéristiques du marché pour optimiser les paramètres; l’impact des coûts de dérapage dans le retestement et la simulation.

Orientation de l’optimisation de la stratégie

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Combiner d’autres indicateurs pour vérifier le signal et améliorer l’exactitude du signal.

  2. Les paramètres d’arrêt de dommages dynamiques adaptatifs.

  3. Optimiser la logique des conditions de réadmission et de modification de l’admission.

  4. Optimisation des paramètres de la sous-variété, en définissant une combinaison optimale de paramètres.

  5. Optimiser le taux d’utilisation des fonds et fixer des limites de fonds pour la réadmission et la révision des admissions.

  6. La combinaison de ces indicateurs permet d’éviter les pertes de rétention dans un contexte de rebond.

  7. Ajout de mécanismes d’évacuation, tels que la mise en place d’un stop mobile.

  8. Envisagez d’envelopper la stratégie en un robot de trading pour automatiser les transactions.

  9. Ajout de facteurs de prise en compte du disque dur, tels que le coût des points de glissement.

Grâce à ces optimisations, la stabilité, l’adaptabilité, l’automatisation et l’efficacité de la stratégie peuvent être encore améliorées.

Résumer

Cette stratégie intègre des signaux de négociation utilisant les indicateurs MACD, l’analyse des prix de clôture de la ligne K et le mécanisme d’entrée multiple, est une stratégie de trading quantitatif plus efficace. Elle présente les avantages d’une fréquence d’opération élevée, d’une bonne utilisation des fonds et d’une faible difficulté à réaliser, mais nécessite également une attention au contrôle des risques et à l’optimisation de la stratégie.

Code source de la stratégie
/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-29 00:00:00
period: 2h
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/
// © Puckapao

//@version=4
// strategy(title="MACD", shorttitle="MACD", overlay=true, initial_capital=10000.00, currency="USD", default_qty_type=strategy.cash, default_qty_value=10000.00)
// Getting inputs
reenter_delay = input(title="Re-enter Delay", type=input.integer, defval=2)
sculp_delay = input(title="Sculp Delay", type=input.integer, defval=4)
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=true)
ema_period = input(title="EMA Period", type=input.integer, defval=21)

// Get date
startDate = input(title="Start Date", type=input.integer,
     defval=19, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer,
     defval=09, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer,
     defval=2017, minval=1800, maxval=2100)

endDate = input(title="End Date", type=input.integer,
     defval=31, minval=1, maxval=31)
endMonth = input(title="End Month", type=input.integer,
     defval=3, minval=1, maxval=12)
endYear = input(title="End Year", type=input.integer,
     defval=2021, minval=1800, maxval=2100)
     
// STEP 2:
// Look if the close time of the current bar
// falls inside the date range
inDateRange =  true

reenter_cnt = 0
reenter_cnt := nz(reenter_cnt[1])

sculp_cnt = 0
sculp_cnt := nz(sculp_cnt[1])

close_cnt = 0
close_cnt := nz(close_cnt[1])

on_long = false
on_long := nz(on_long[1])

on_short = false
on_short := nz(on_short[1])

sculp = false
reenter = false
slowdown = false

ema = ema(close, ema_period)

// 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
// plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
// plot(macd, title="MACD", color=col_macd, transp=0)
// plot(signal, title="Signal", color=col_signal, transp=0)

cross_up = crossover(macd, signal)
cross_down = crossunder(macd, signal)

if (inDateRange)

    over_macd = macd > 0 and signal > 0 ? true : false
    under_macd = macd < 0 and signal < 0 ? true : false
    over_water = close > ema ? true : false
    under_water = close < ema ? true : false
    slowdown := hist >= 0 ? (hist[1] > hist ? true : false) : (hist[1] > hist ? false : true)
    reenter := hist >= 0 ? (hist[1] < hist ? true : false) : (hist[1] > hist ? true : false)
    sculp := (hist >= 0 ? (hist[1] > hist ? true : false) : (hist[1] < hist ? true : false))
    
    if(reenter == true)
        if(reenter_cnt < reenter_delay)
            reenter_cnt := reenter_cnt + 1
    else
        if(reenter_cnt > 0)
            reenter_cnt := reenter_cnt - 1
                    
    if(sculp == true)
        if(sculp_cnt < sculp_delay)
            sculp_cnt := sculp_cnt + 1
    else
        if(sculp_cnt > 0)
            sculp_cnt := sculp_cnt - 1
        
    if(slowdown == false)
        if(close_cnt < 2)
            close_cnt := close_cnt + 1
        else
            close_cnt := 0
    
    // plotchar(fork_cnt, "fork count", "")
    // plotchar(spoon_cnt, "spoon count", "")

    // Entry
    if (cross_up == true)
        strategy.entry("long", strategy.long, comment = "long", alert_message = "long")
        on_long := true
        on_short := false
    if (cross_down == true)
        strategy.entry("short", strategy.short, comment = "short", alert_message = "short")
        on_short := true
        on_long := false
        
    // Sculp bottom / top
    if (sculp == true and sculp_cnt >= sculp_delay)
        if (hist >= 0)
            strategy.entry("sculp-short", strategy.short, comment = "sculp-short", alert_message = "sculp-short")
        else
            strategy.entry("sculp-long", strategy.long, comment = "sculp-long", alert_message = "sculp-long")
        
        sculp_cnt := 0
        sculp := false
            
    // Re-Entry
    if (reenter == true and reenter_cnt >= reenter_delay)
        if (hist >= 0)
            strategy.entry("re-long", strategy.long, comment = "re-long", alert_message = "re-long")
        else
            strategy.entry("re-short", strategy.short, comment = "re-short", alert_message = "re-short")
            
        reenter_cnt := 0
        reenter := false
            
    // Close
    strategy.close("long", when = slowdown, comment = "close long", alert_message = "close long")
    strategy.close("short", when = slowdown, comment = "close short", alert_message = "close short")
    strategy.close("re-long", when = slowdown, comment = "close re-long", alert_message = "close re-long")
    strategy.close("re-short", when = slowdown, comment = "close re-short", alert_message = "close re-short")
    strategy.close("sculp-long", when = slowdown, comment = "close sculp-long", alert_message = "close sculp-long")
    strategy.close("sculp-short", when = slowdown, comment = "close sculp-short", alert_message = "close sculp-short")
    
    if (slowdown)
        if (hist >= 0)
            on_long := false
        else
            on_short := false


plotchar(slowdown, "close", "")
plotchar(reenter, "reenter", "")
plotchar(reenter_cnt, "reenter count", "")
plotchar(sculp, "sculp", "")
plotchar(sculp_cnt, "sculp count", "")