Cette stratégie est basée sur les caractéristiques statistiques des ralentissements extrêmes du marché. En analysant statistiquement les retraits et en utilisant des écarts types pour mesurer les extrêmes de volatilité du marché, elle lance des positions d'achat lorsque les baisses du marché dépassent les plages normales. L'idée de base est de capturer les opportunités de survente causées par la panique du marché, en identifiant les opportunités d'investissement grâce à des méthodes statistiques mathématiques découlant de l'irrationalité du marché.
La stratégie utilise une fenêtre de temps en rotation pour calculer les baisses de prix maximales et leurs caractéristiques statistiques. Elle calcule d'abord le prix le plus élevé au cours des 50 dernières périodes, puis calcule le pourcentage de baisse du prix de clôture actuel par rapport au prix le plus élevé. Elle calcule ensuite la moyenne et l'écart type des baisses, en définissant -1 écart type comme seuil de déclenchement. Lorsque le baisse de marché dépasse la moyenne moins un ensemble multiple d'écart types, indiquant des conditions de survente potentielles, une position longue est entrée. Les positions sont automatiquement fermées après 35 périodes.
Cette stratégie capture les opportunités de survente du marché grâce à des méthodes statistiques, avec une solide base théorique et une valeur pratique. La logique de la stratégie est simple et claire avec des paramètres réglables, adaptée comme stratégie de base pour l'expansion et l'optimisation. La stabilité et la rentabilité de la stratégie peuvent être encore améliorées en ajoutant des indicateurs techniques et des mesures de contrôle des risques.
/*backtest start: 2019-12-23 08:00:00 end: 2024-11-28 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Buy When There's Blood in the Streets Strategy", overlay=false, shorttitle="BloodInTheStreets") //This strategy identifies opportunities to buy during extreme market drawdowns based on standard deviation thresholds. //It calculates the maximum drawdown over a user-defined lookback period, identifies extreme deviations from the mean, //and triggers long entries when specific conditions are met. The position is exited after a defined number of bars. // User Inputs lookbackPeriod = input.int(50, title="Lookback Period", minval=1, tooltip="Period to calculate the highest high for drawdown") stdDevLength = input.int(50, title="Standard Deviation Length", minval=1, tooltip="Length of the period to calculate standard deviation") stdDevThreshold = input.float(-1.0, title="Standard Deviation Threshold", tooltip="Trigger level for long entry based on deviations") exitBars = input.int(35, title="Exit After (Bars)", minval=1, tooltip="Number of bars after which to exit the trade") // Drawdown Calculation peakHigh = ta.highest(high, lookbackPeriod) drawdown = ((close - peakHigh) / peakHigh) * 100 // Standard Deviation Calculation drawdownStdDev = ta.stdev(drawdown, stdDevLength) meanDrawdown = ta.sma(drawdown, stdDevLength) // Define Standard Deviation Levels stdDev1 = meanDrawdown - drawdownStdDev stdDev2 = meanDrawdown - 2 * drawdownStdDev stdDev3 = meanDrawdown - 3 * drawdownStdDev // Plot Drawdown and Levels plot(drawdown, color=color.red, linewidth=2, title="Drawdown (%)") plot(meanDrawdown, color=color.blue, linewidth=2, title="Mean Drawdown") plot(stdDev1, color=color.green, linewidth=1, title="1st Std Dev") plot(stdDev2, color=color.orange, linewidth=1, title="2nd Std Dev") plot(stdDev3, color=color.purple, linewidth=1, title="3rd Std Dev") // Entry Condition var float entryBar = na goLong = drawdown <= meanDrawdown + stdDevThreshold * drawdownStdDev if (goLong and strategy.position_size == 0) strategy.entry("Long", strategy.long) entryBar := bar_index // Exit Condition if (strategy.position_size > 0 and not na(entryBar) and bar_index - entryBar >= exitBars) strategy.close("Long")