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.
Calculez la moyenne mobile exponentielle sur 10 périodes des prix de clôture des chandeliers Heikin-Ashi.
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.
Prenez la moyenne mobile exponentielle de 20 périodes sur le score Z pour obtenir une courbe appelée emaScore.
Définir des seuils supérieurs et inférieurs en fonction de la répartition des données emaScore.
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.
Appliquer l'idée de la distribution gaussienne à travers le score Z pour juger de la normalité et filtrer les fausses éruptions.
La moyenne mobile exponentielle double a un effet de filtrage pour déterminer la tendance à long terme.
La fixation d'un seuil raisonnable réduit les probabilités d'une transaction incorrecte.
L'inclusion des points les plus élevés/les plus bas de 100 périodes permet de saisir les opportunités d'inversion.
La combinaison de Z-score et MAs est sensible aux paramètres.
Les niveaux de seuil appropriés sont directement liés à la validité de la stratégie.
Les points les plus élevés/les plus bas de 100 périodes peuvent facilement générer de faux signaux.
Heikin-Ashi lui-même est un peu en retard.
Testez différentes périodes de moyennes mobiles, fenêtres de repérage Z-score.
Utilisez l'analyse de marche pour optimiser automatiquement les paramètres.
Essayez différentes méthodes de fixation des seuils, par exemple les multiples des MST.
Améliorer la logique des points les plus élevés/les plus bas pour éviter les signaux erronés.
Testez d'autres types de bougies ou des prix typiques pour remplacer Heikin-Ashi.
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")