Cette stratégie est un système de négociation basé sur des moyennes mobiles pondérées par la liquidité, mesurant la liquidité du marché par la relation entre le mouvement des prix et le volume des transactions. Elle construit des moyennes mobiles rapides et lentes pour générer des signaux d'achat lorsque la ligne rapide traverse au-dessus de la ligne lente et des signaux de vente lorsqu'elle traverse en dessous.
Le mécanisme de base repose sur la mesure de la liquidité du marché à travers le rapport entre le volume et le mouvement des prix. Calcul de l'indicateur de liquidité: volume divisé par la différence absolue entre les prix de clôture et d'ouverture 2. Définir la limite de liquidité: identifier la liquidité anormale en utilisant l'EMA et l'écart type 3. Maintenir la gamme de prix: enregistrer les prix lorsque la limite de liquidité est dépassée 4. Construire des moyennes mobiles: Calculer des moyennes moyennes moyennes rapides et lentes basées sur des événements de liquidité 5. Générer des signaux de trading: déterminer les points d'entrée et de sortie à travers des croisements de moyennes mobiles
Cette stratégie innovante combine l'analyse de la liquidité avec des indicateurs techniques, optimisant les systèmes de croisement de moyenne mobile traditionnels en surveillant les anomalies de la liquidité du marché. Bien qu'elle montre des résultats prometteurs dans des conditions de marché spécifiques, une optimisation supplémentaire est nécessaire pour améliorer la stabilité et l'applicabilité. Les traders doivent tester en profondeur avant la mise en œuvre et envisager de combiner avec d'autres indicateurs pour un système de trading plus robuste.
/*backtest start: 2019-12-23 08:00:00 end: 2025-01-16 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //Liquidity ignoring price location //@version=6 strategy("Liquidity Weighted Moving Averages [AlgoAlpha]", overlay=true, commission_type=strategy.commission.percent, commission_value=0.1, slippage=3) // Inputs outlierThreshold = input.int(10, "Outlier Threshold Length") fastMovingAverageLength = input.int(50, "Fast MA Length") slowMovingAverageLength = input.int(100, "Slow MA Length") start_date = input(timestamp("2018-01-01 00:00"), title="Start Date") end_date = input(timestamp("2069-12-31 23:59"), title="End Date") // Define liquidity based on volume and price movement priceMovementLiquidity = volume / math.abs(close - open) // Calculate the boundary for liquidity to identify outliers liquidityBoundary = ta.ema(priceMovementLiquidity, outlierThreshold) + ta.stdev(priceMovementLiquidity, outlierThreshold) // Initialize an array to store liquidity values when they cross the boundary var liquidityValues = array.new_float(5) // Check if the liquidity crosses above the boundary and update the array if ta.crossover(priceMovementLiquidity, liquidityBoundary) array.insert(liquidityValues, 0, close) if array.size(liquidityValues) > 5 array.pop(liquidityValues) // Calculate the Exponential Moving Averages for the close price at the last liquidity crossover fastEMA = ta.ema(array.size(liquidityValues) > 0 ? array.get(liquidityValues, 0) : na, fastMovingAverageLength) slowEMA = ta.ema(array.size(liquidityValues) > 0 ? array.get(liquidityValues, 0) : na, slowMovingAverageLength) // Trading Logic in_date_range = true buy_signal = ta.crossover(fastEMA, slowEMA) and in_date_range sell_signal = ta.crossunder(fastEMA, slowEMA) and in_date_range // Strategy Entry and Exit if (buy_signal) strategy.entry("Buy", strategy.long) if (sell_signal) strategy.close("Buy") // Plotting fastPlot = plot(fastEMA, color=fastEMA > slowEMA ? color.new(#00ffbb, 50) : color.new(#ff1100, 50), title="Fast EMA") slowPlot = plot(slowEMA, color=fastEMA > slowEMA ? color.new(#00ffbb, 50) : color.new(#ff1100, 50), title="Slow EMA") // Create a fill between the fast and slow EMA plots with appropriate color based on crossover fill(fastPlot, slowPlot, fastEMA > slowEMA ? color.new(#00ffbb, 50) : color.new(#ff1100, 50))