La stratégie de négociation des moyennes mobiles gaussiennes

Auteur:ChaoZhang est là., Date: 2024-01-03 16h06:45 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie applique l'idée de la distribution gaussienne et calcule le score Z sur la base de la moyenne mobile exponentielle de 10 périodes des prix de clôture des bougies Heikin-Ashi.

La logique de la stratégie

  1. Calculez la moyenne mobile exponentielle sur 10 périodes des prix de clôture des chandeliers Heikin-Ashi.

  2. Sur la base des données de moyenne mobile ci-dessus, calculez le score Z sur une fenêtre de rétrospective de 25 périodes. Le score Z reflète le nombre d'écart types d'un point de données par rapport à la moyenne, ce qui peut juger si les données sont normales ou anormales.

  3. Prenez la moyenne mobile exponentielle de 20 périodes sur le score Z pour obtenir une courbe appelée emaScore.

  4. Définir des seuils supérieurs et inférieurs en fonction de la répartition des données emaScore.

  5. Longue lorsque l'emaScore franchit la ligne médiane ou le seuil inférieur vers le haut. courte lorsque l'emaScore franchit le seuil supérieur, le seuil inférieur ou le seuil le plus élevé de 100 périodes vers le bas.

Analyse des avantages

  1. Appliquer l'idée de la distribution gaussienne à travers le score Z pour juger de la normalité et filtrer les fausses éruptions.

  2. La moyenne mobile exponentielle double a un effet de filtrage pour déterminer la tendance à long terme.

  3. La fixation d'un seuil raisonnable réduit les probabilités d'une transaction incorrecte.

  4. L'inclusion des points les plus élevés/les plus bas de 100 périodes permet de saisir les opportunités d'inversion.

Analyse des risques

  1. La combinaison de Z-score et MAs est sensible aux paramètres.

  2. Les niveaux de seuil appropriés sont directement liés à la validité de la stratégie.

  3. Les points les plus élevés/les plus bas de 100 périodes peuvent facilement générer de faux signaux.

  4. Heikin-Ashi lui-même est un peu en retard.

Directions d'optimisation

  1. Testez différentes périodes de moyennes mobiles, fenêtres de repérage Z-score.

  2. Utilisez l'analyse de marche pour optimiser automatiquement les paramètres.

  3. Essayez différentes méthodes de fixation des seuils, par exemple les multiples des MST.

  4. Améliorer la logique des points les plus élevés/les plus bas pour éviter les signaux erronés.

  5. Testez d'autres types de bougies ou des prix typiques pour remplacer Heikin-Ashi.

Résumé

Cette stratégie juge l'anomalie des prix et génère des signaux de trading basés sur l'idée de la distribution gaussienne, des moyennes mobiles exponentielles doubles et du réglage dynamique des seuils. Les principaux avantages sont le filtrage des fausses ruptures et la capture des renversements. Cependant, un impact énorme existe en ce qui concerne la sélection et la combinaison des paramètres. Des tests et une optimisation supplémentaires sont nécessaires pour trouver les meilleurs paramètres et combinaisons.


/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-02 00:00:00
period: 5m
basePeriod: 1m
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/
// © jensenvilhelm

// Here is an attempt to create a robust strategy for BTCUSD on a 5 minute chart
// I can't seem to get this code to work the way i want.... if you want to give it a try, please let me know -
// how it goes in comment section. 

//@version=5
// Define the strategy settings
strategy("The Z-score", shorttitle="TZS", overlay=true)

// User can set the start date for the strategy
startDate = timestamp("2023 06 01")

// Heikin-Ashi Open, Close, High and Low calculation
haClose = ohlc4
var float haOpen = na
haOpen := na(haOpen[1]) ? (open + close) / 2 : (haOpen[1] + haClose[1]) / 2
haHigh = math.max(nz(haOpen, high), nz(haClose, high), high)
haLow = math.min(nz(haOpen, low), nz(haClose, low), low)

// Function to calculate the Z-Score
z_score(_series, _length) =>
    _mean = ta.sma(_series, _length)
    _stddev = ta.stdev(_series, _length)
    (_series - _mean) / _stddev

// Compute the score and its EMA
score = z_score(ta.ema(haClose, 10), 25)
emaScore = ta.ema(score, 20)

// Calculate lower and upper thresholds using percentiles of EMA
lowerBlue = ta.percentile_linear_interpolation(emaScore, 50, 10)
upperBlue = ta.percentile_linear_interpolation(emaScore, 50, 90)

// Calculate the middle line as 50th percentile
middleLine = ta.percentile_linear_interpolation(emaScore, 50, 50) 

// Plot the EMA of the score and the thresholds
plot(emaScore,"The White Line", color=color.white, linewidth=2)
plot(lowerBlue,"Lower Blue Line", linewidth=2)
plot(upperBlue, "Upper Blue Line", linewidth=2)
plot(middleLine, "Middle Yellow Line", linewidth=2, color=color.yellow)
plot(score,"The Z-Score Mixed With EMA 10", color=color.green)

// Calculate highest and lowest EMA score over 100 bars period
highest = ta.highest(emaScore, 100)
lowest = ta.lowest(emaScore, 100)

// Plot highest and lowest EMA score lines 
plot(highest, "Highest of emaScore", color=color.red, linewidth=2)
plot(lowest, "Lowest of emaScore", color=color.red, linewidth=2)

// Define entry and exit conditions for long and short positions
longCon = ta.crossover(score, lowerBlue) or ta.crossover(emaScore, middleLine)
addOn = ta.crossover(score, highest)
shortCon = ta.crossunder(emaScore, upperBlue) or ta.crossunder(emaScore, lowerBlue) or ta.crossunder(emaScore, highest)

// Execute trading logic based on conditions and after the start date
if (time >= startDate)
    if longCon
        strategy.entry("Long", strategy.long)
        if shortCon
            strategy.close("Long")
    if addOn
        strategy.entry("LongNR2", strategy.long)
        if shortCon
            strategy.close("LongNR2")
    
    if shortCon
        strategy.entry("Short", strategy.short)
        if longCon
            strategy.close("Short")


Plus de