Stratégie de prévision du parcours futur de MacD

Auteur:ChaoZhang est là., Date: 2023-12-13 17h21 et 44 min
Les étiquettes:

img

Résumé

L'idée principale de cette stratégie est de prédire les tendances des prix en analysant la tendance future de l'indicateur MacD. La stratégie tire pleinement parti des signaux de trading générés par les croisements des moyennes mobiles rapides et lentes qui composent l'indicateur MacD.

Principe de stratégie

  1. Calculer la différence (valeur historique) de l'indicateur MacD pour déterminer la hausse et la baisse de la ligne MacD et de la ligne de signal.
  2. Utiliser la valeur future de l'indicateur MacD dans un délai de 4 heures en définissant des options d'achat pour juger de la tendance future de l'indicateur MacD et prédire les tendances des prix.
  3. En ce qui concerne les prix à l'exportation, les prix à l'exportation sont les prix à l'exportation, les prix à l'exportation et les prix à la vente.
  4. La stratégie combine à la fois les styles de trading de suivi de tendance et d'inversion de tendance, capturant les tendances tout en saisissant les points d'inversion de tendance.

Analyse des avantages

  1. L'avantage d'utiliser l'indicateur MacD pour juger des tendances du marché est qu'il permet de filtrer efficacement les consolidations et de détecter les tendances à long terme.
  2. Grâce aux prévisions des tendances futures de l'indicateur MacD, les points tournants des prix peuvent être identifiés à un stade précoce afin de renforcer la capacité prospective de la stratégie.
  3. L'intégration des styles de négociation de suivi de tendance et d'inversion de tendance permet d'inverser rapidement la position lors du suivi de tendance afin d'obtenir des rendements plus élevés.
  4. Les paramètres de stratégie réglables permettent aux utilisateurs d'optimiser en fonction de différents délais et environnements de marché pour améliorer la stabilité de la stratégie.

Analyse des risques

  1. S'appuyer sur les prédictions de la tendance future de l'indicateur MacD peut entraîner des échecs commerciaux si les prédictions sont inexactes.
  2. Un mauvais réglage de l'intervalle de stop loss affectera également les performances de la stratégie.
  3. Le décalage de l'indicateur MacD peut faire perdre des opportunités d'inversions rapides des prix.
  4. L'impact des coûts de transaction doit être surveillé.

Directions d'optimisation

  1. Incorporer d'autres indicateurs pour la prédiction afin de réduire la dépendance à l'égard d'un seul indicateur MacD et d'améliorer la précision de la prédiction, comme l'examen des variations du volume des transactions.
  2. Ajouter des algorithmes d'apprentissage automatique, former des modèles pour prédire les tendances futures de l'indicateur MacD.
  3. Optimiser les paramètres pour trouver les meilleures combinaisons.
  4. Différents environnements de marché conviennent à différentes configurations de paramètres, un système adaptatif peut être ajouté pour optimiser automatiquement les paramètres.

Conclusion

Bien que l'indicateur MacD ait l'avantage de déterminer les tendances, cette stratégie intègre également des prédictions des tendances futures de l'indicateur. S'appuyant sur la capture des tendances, elle saisit également des points tournants critiques. Par rapport à la simple poursuite des tendances, cette stratégie présente un potentiel de prospection et de profit plus important. Bien sûr, il existe également certains risques qui nécessitent une optimisation et une amélioration supplémentaires.


/*backtest
start: 2023-12-05 00:00:00
end: 2023-12-12 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © x11joe
strategy(title="MacD (Future Known or Unknown) Strategy", overlay=false, precision=2,commission_value=0.26, initial_capital=10000, currency=currency.USD, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

//OPTIONAL:: Allow only entries in the long or short position
allowOnlyLong = input(title="Allow position ONLY in LONG",type=input.bool, defval=false)
allowOnlyShort = input(title="Allow position ONLY in SHORT",type=input.bool, defval=false)


strategy.risk.allow_entry_in(allowOnlyLong ? strategy.direction.long : allowOnlyShort ? strategy.direction.short : strategy.direction.all) // There will be no short entries, only exits from long.

// Create MacD inputs
fastLen = input(title="MacD Fast Length", type=input.integer, defval=12)
slowLen = input(title="MacD Slow Length", type=input.integer, defval=26)
sigLen  = input(title="MacD Signal Length", type=input.integer, defval=9)

// Get MACD values
[macdLine, signalLine, _] = macd(close, fastLen, slowLen, sigLen)
hist = macdLine - signalLine

useFuture = input(title="Use The Future?",type=input.bool,defval=true)

macDState(resolutionType) =>
    hist_from_resolution = security(syminfo.tickerid, resolutionType, hist,barmerge.gaps_off, barmerge.lookahead_on)
    Green_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution > 0
    Green_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution > 0
    Red_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution <= 0
    Red_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution <= 0
    result=0
    if(Green_IsUp)
        result := 1
    if(Green_IsDown)
        result := 2
    if(Red_IsDown)
        result := 3
    if(Red_IsUp)
        result := 4
    result

macDStateNonFuture(resolutionType) =>
    hist_from_resolution = security(syminfo.tickerid, resolutionType, hist,barmerge.gaps_off, barmerge.lookahead_off)
    Green_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution > 0
    Green_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution > 0
    Red_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution <= 0
    Red_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution <= 0
    result=0
    if(Green_IsUp)
        result := 1
    if(Green_IsDown)
        result := 2
    if(Red_IsDown)
        result := 3
    if(Red_IsUp)
        result := 4
    result

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

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"
// === INPUT BACKTEST RANGE END ===

//Get FUTURE or NON FUTURE data
macDState240=useFuture ? macDState("240") : macDStateNonFuture("240") //1 is green up, 2 if green down, 3 is red, 4 is red up

//Fill in the GAPS
if(macDState240==0)
    macDState240:=macDState240[1]

//Plot Positions
plot(close,color= macDState240==1 ? color.green : macDState240==2 ? color.purple : macDState240==3 ? color.red : color.yellow,linewidth=4,style=plot.style_histogram,transp=50)

if(useFuture)
    strategy.entry("buy_1",long=true,when=window() and (macDState240==4 or macDState240==1))
    strategy.close("buy_1",when=window() and macDState240==3 and macDState240[1]==4)
    strategy.entry("sell_1",long=false,when=window() and macDState240==2)
else
    strategy.entry("buy_1",long=true,when=window() and (macDState240==4 or macDState240==1))//If we are in a red macD trending downwards MacD or in a MacD getting out of Red going upward.
    strategy.close("buy_1",when=window() and macDState240==3 and macDState240[1]==4)//If the state is going upwards from red but we are predicting back to red...
    strategy.entry("sell_1",long=false,when=window() and macDState240==2)//If we are predicting the uptrend to end soon.


Plus de