この戦略は,流動性重度の移動平均値に基づいた取引システムで,価格動きと取引量との関係を通じて市場の流動性を測定する. 速い線がスローラインを越えたときに買い信号,下を越えたときに売り信号を生成するために,速い線と遅い移動平均値を構築する. 戦略は特に異常な流動性イベントに焦点を当て,より正確な取引機会のための配列で主要な価格レベルを記録する.
基本メカニズムは,市場流動性を価格動向の量量比で測定することに基づいています.実装は以下のステップに従います: 1. 流動性指標を計算する: 閉店価格と開店価格の絶対差で割った量 2. 流動性の限界を設定する: EMA と標準偏差を使用して異常流動性を特定する 3. 価格配列を維持する: 流動性の限界が破られたときに価格を記録する 4. 移動平均を構成する: 流動性イベントに基づいて,高速および遅いEMAを計算する 5. 取引信号を生成する: 移動平均クロスオーバーを通じてエントリーと出口点を決定する
この革新的な戦略は,流動性分析と技術指標を組み合わせ,市場の流動性異常をモニタリングすることによって伝統的な移動平均クロスオーバーシステムを最適化しています.特定の市場状況で有望な結果を示していますが,安定性と適用性を向上させるためにさらなる最適化が必要です.トレーダーは,ライブ実装前に徹底的にテストし,より堅牢な取引システムのために他の指標と組み合わせることを検討する必要があります.
/*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))