Stratégie de filtre croisé MA de momentum Jupiter et Saturne


Date de création: 2023-11-03 16:13:20 Dernière modification: 2023-11-03 16:13:20
Copier: 0 Nombre de clics: 655
1
Suivre
1617
Abonnés

Stratégie de filtre croisé MA de momentum Jupiter et Saturne

Aperçu

Cette stratégie utilise le croisement de deux moyennes mobiles comme signal de transaction et filtre en combinaison avec l’indicateur d’amplitude BB et l’indicateur d’énergie dynamique personnalisé afin d’améliorer la fiabilité du signal de croisement MA et de réduire les faux signaux.

Le principe

  1. Il utilise une EMA de 50 cycles et une SMA de 200 cycles pour former un signal de mort de fourche.

  2. Lorsqu’il y a une tendance à la hausse, il faut que le prix soit supérieur à la ligne de 200 et que la valeur de l’indicateur d’énergie dynamique personnalisée soit inférieure à 25 pour générer un signal d’achat.

  3. Lorsqu’un prix est en baisse, il faut qu’il soit inférieur à la ligne de 200 jours et que l’indicateur d’énergie dynamique personnalisé soit supérieur à 75 pour générer un signal de vente.

  4. L’indicateur d’énergie motrice personnalisé est cartographié dans la plage de 0 à 100 en fonction de la distance entre la ligne médiane BB et les voies ascendantes et descendantes. Le traitement de l’uniformité est effectué par la régression de la valeur maximale et minimale de la distance statistique.

  5. L’indicateur d’énergie dynamique peut refléter l’information sur la position relative de l’amplitude d’onde du prix, en réglant les seuils pour filtrer, ce qui réduit efficacement les faux croisements.

Analyse des avantages

  1. Les EMA et les SMA sont utilisés pour capturer les tendances de la moyenne et de la longueur.

  2. Augmentation de l’indicateur d’énergie cinétique pour filtrer, plus de fiabilité et moins de faux signaux.

  3. BB La distance entre le haut et le bas de la voie reflète la dynamique et est traitée de manière standardisée en combinaison avec les statistiques de rétroaction, évitant ainsi la dépendance des paramètres.

  4. Il est possible de personnaliser les périodes EMA et SMA ainsi que les valeurs d’indicateur de dynamique pour s’adapter à différents environnements de marché.

  5. Les stratégies sont claires et compréhensibles, les paramètres sont faciles à régler, et la pratique est forte.

Analyse des risques

  1. L’EMA et l’SMA elles-mêmes sont à la traîne et risquent de manquer une opportunité de raccourcissement.

  2. Le croisement des deux lignes est essentiellement une stratégie de suivi des tendances et n’est pas adapté aux chocs.

  3. Le seuil de l’indicateur d’énergie dynamique nécessite une analyse répétée pour déterminer les paramètres appropriés, il existe un risque d’optimisation de la courbe.

  4. La stratégie de la grande moyenne périodique, les gains sont relativement stables mais les gains absolus peuvent être limités.

  5. Il est possible de raccourcir le cycle de la moyenne, ou d’ajouter d’autres indicateurs d’aide au jugement, pour améliorer l’adaptabilité de la stratégie.

Direction d’optimisation

  1. Testez différentes combinaisons homogènes pour trouver le paramètre optimal.

  2. Ajout d’autres indicateurs de jugement, tels que les jugements auxiliaires MACD, KD, etc.

  3. Optimiser les paramètres de l’indicateur de dynamique, tels que le cycle de rétroaction, la portée de la carte, etc.

  4. Le risque est maîtrisé par l’ajout d’un mécanisme de stop-loss.

  5. L’extraction des caractéristiques de l’apprentissage automatique peut être envisagée si les paramètres des différentes variétés ne sont pas cohérents.

  6. Ajout d’indicateurs quantitatifs pour éviter des signaux croisés déraisonnables.

Résumer

Cette stratégie intègre le suivi des tendances cycliques et le double filtrage des indicateurs d’énergie dynamiques personnalisés. Elle est très fiable et a une grande valeur en temps réel.

Code source de la stratégie
/*backtest
start: 2023-10-26 00:00:00
end: 2023-10-27 13:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="EMA Difference Mapping with Trades", shorttitle="EMA Diff Map", overlay=false)

// Inputs
emaLength = input(20, "EMA Length")
stdDevLength = input(2, "Standard Deviation Length")
priceSource = close
takeProfitPoints = input(1000, title="Take Profit (in Points)")
stopLossPoints = input(2500, title="Stop Loss (in Points)")

// Calculate EMA
ema = ema(priceSource, emaLength)

// Calculate Standard Deviation
stdDev = stdev(priceSource, stdDevLength)

// Calculate differences
diff1 = (ema + stdDev) - ema
diff2 = ema - (ema - stdDev)

// Calculate min and max differences from last year
lookbackPeriod = 504 // Number of trading days in a year
minDiff1 = lowest(diff1, lookbackPeriod)
maxDiff1 = highest(diff1, lookbackPeriod)
minDiff2 = lowest(diff2, lookbackPeriod)
maxDiff2 = highest(diff2, lookbackPeriod)

// Map differences based on requirements
mappedDiff1 = 50 + 50 * ((diff1 - minDiff1) / (maxDiff1 - minDiff1))
mappedDiff2 = 50 - 50 * ((diff2 - minDiff2) / (maxDiff2 - minDiff2))

// Combine mapped differences into a single line
mappedLine = if close > ema
    mappedDiff1
else
    mappedDiff2

// Plot 'mappedLine' in the main chart area conditionally
plot(mappedLine, title="EMA Difference Mapping", color=(close > ema ? color.blue : na), style=plot.style_line, linewidth=2)

// Calculate the 50EMA and 200SMA
ema50 = ema(close, 50)
sma200 = sma(close, 200)

// Plot the 50EMA and 200SMA on the main chart
plot(ema50, color=color.blue, title="50 SMA", linewidth=2)
plot(sma200, color=color.red, title="200 SMA", linewidth=2)

// Initialize trade variables
var bool waitingForBuy = na
var bool waitingForSell = na
var bool buyConditionMet = false
var bool sellConditionMet = false

if not sellConditionMet and crossunder(ema50, sma200)
    sellConditionMet := true
    waitingForBuy := false

if sellConditionMet 
    waitingForSell := true
    sellConditionMet := false

if waitingForSell and close < sma200 and mappedLine > 75
    strategy.entry("Sell", strategy.short)
    strategy.exit("Sell Exit", "Sell", profit=takeProfitPoints, loss=stopLossPoints)
    waitingForSell := false

// Define the strategy conditions and execute trades
if not buyConditionMet  and crossover(ema50, sma200)
    buyConditionMet := true
    waitingForSell := false

if buyConditionMet 
    waitingForBuy := true
    buyConditionMet := false

if waitingForBuy and close > sma200 and mappedLine < 25
    strategy.entry("Buy", strategy.long)
    strategy.exit("Buy Exit", "Buy", profit=takeProfitPoints, loss=stopLossPoints)
    waitingForBuy := false