La stratégie de suivi des tendances basée sur la valeur Z utilise l'indicateur statistique de la valeur Z pour capturer les opportunités de tendance en mesurant la déviation des prix par rapport à leurs moyennes mobiles et en utilisant le décalage standard comme échelle d'unification. Cette stratégie est connue pour sa concision et son efficacité, en particulier dans les marchés où les mouvements de prix reviennent souvent à l'équilibre. Contrairement à des systèmes complexes qui reposent sur plusieurs indicateurs, la stratégie de suivi des tendances de la valeur Z se concentre sur des variations de prix claires et statistiquement significatives, ce qui convient parfaitement aux traders qui préfèrent des approches simples et basées sur les données.
Au cœur de cette stratégie se trouve le calcul de la valeur Z. La valeur Z est obtenue en calculant la différence entre le prix actuel et l'EMA (l'indice moteur de l'indice de prix défini par l'utilisateur) de la même longueur, puis en divisant la différence par le prix standard de la même longueur:
z = (x - μ) / σ
Dans ce cas, x est le prix actuel, μ est l'EMA moyen et σ est le décalage type.
Les signaux de transaction sont générés en fonction de la valeur Z traversant le seuil prévu:
- Entrée multi-tête: lorsque la valeur Z dépasse le seuil positif.
- Plusieurs sorties: lorsque la valeur de Z traverse le seuil négatif vers le bas.
- Entrée vide: lorsque la valeur Z traverse le seuil négatif vers le bas.
- Sortie à vide: lorsque la valeur de Z dépasse le seuil positif.
Ces risques peuvent être contrôlés et atténués par une analyse continue du marché, l'optimisation des paramètres et une mise en œuvre prudente sur la base d'une réévaluation.
La stratégie de suivi des tendances basée sur la valeur Z offre une perspective unique pour capturer les opportunités tendancielles grâce à sa simplicité, sa solidité et sa flexibilité. Grâce à un paramétrage raisonnable, une gestion prudente des risques et une optimisation continue, la stratégie est susceptible d'aider les traders quantifiés à avancer solidement dans un marché multi-variable.
/*backtest start: 2023-04-23 00:00:00 end: 2024-04-28 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © PresentTrading // This strategy employs a statistical approach by using a Z-score, which measures the deviation of the price from its moving average normalized by the standard deviation. // Very simple and effective approach //@version=5 strategy('Price Based Z-Trend - strategy [presentTrading]',shorttitle = 'Price Based Z-Trend - strategy [presentTrading]', overlay=false, precision=3, commission_value=0.1, commission_type=strategy.commission.percent, slippage=1, currency=currency.USD, default_qty_type=strategy.percent_of_equity, default_qty_value=10, initial_capital=10000) // User-definable parameters for the Z-score calculation and bar coloring tradeDirection = input.string("Both", "Trading Direction", options=["Long", "Short", "Both"]) // User selects trading direction priceDeviationLength = input.int(100, "Standard Deviation Length", step=1) // Length for standard deviation calculation priceAverageLength = input.int(100, "Average Length", step=1) // Length for moving average calculation Threshold = input.float(1, "Threshold", step=0.1) // Number of standard deviations for Z-score threshold priceBar = input(title='Bar Color', defval=true) // Toggle for coloring price bars based on Z-score // Z-score calculation based on user input for the price source (typically the closing price) priceSource = input(close, title="Source") priceZScore = (priceSource - ta.ema(priceSource, priceAverageLength)) / ta.stdev(priceSource, priceDeviationLength) // Z-score calculation // Conditions for entering and exiting trades based on Z-score crossovers priceLongCondition = ta.crossover(priceZScore, Threshold) // Condition to enter long positions priceExitLongCondition = ta.crossunder(priceZScore, -Threshold) // Condition to exit long positions longEntryCondition = ta.crossover(priceZScore, Threshold) longExitCondition = ta.crossunder(priceZScore, -Threshold) shortEntryCondition = ta.crossunder(priceZScore, -Threshold) shortExitCondition = ta.crossover(priceZScore, Threshold) // Strategy conditions and execution based on Z-score crossovers and trading direction if (tradeDirection == "Long" or tradeDirection == "Both") and longEntryCondition strategy.entry("Long", strategy.long) // Enter a long position if (tradeDirection == "Long" or tradeDirection == "Both") and longExitCondition strategy.close("Long") // Close the long position if (tradeDirection == "Short" or tradeDirection == "Both") and shortEntryCondition strategy.entry("Short", strategy.short) // Enter a short position if (tradeDirection == "Short" or tradeDirection == "Both") and shortExitCondition strategy.close("Short") // Close the short position // Dynamic Thresholds Visualization using 'plot' plot(Threshold, "Dynamic Entry Threshold", color=color.new(color.green, 50)) plot(-Threshold, "Dynamic Short Entry Threshold", color=color.new(color.red, 50)) // Color-coding Z-Score priceZScoreColor = priceZScore > Threshold ? color.green : priceZScore < -Threshold ? color.red : color.blue plot(priceZScore, "Z-Score", color=priceZScoreColor) // Lines hline(0, color=color.rgb(255, 255, 255, 50), linestyle=hline.style_dotted) // Bar Color priceBarColor = priceZScore > Threshold ? color.green : priceZScore > 0 ? color.lime : priceZScore < Threshold ? color.maroon : priceZScore < 0 ? color.red : color.black barcolor(priceBar ? priceBarColor : na)