Strategi ini adalah sistem perdagangan berdasarkan purata bergerak yang ditimbang kecairan, mengukur kecairan pasaran melalui hubungan antara pergerakan harga dan jumlah dagangan. Ia membina purata bergerak cepat dan perlahan untuk menjana isyarat beli apabila garis cepat melintasi di atas garis perlahan dan isyarat jual apabila melintasi di bawah. Strategi ini terutamanya memberi tumpuan kepada peristiwa kecairan yang tidak normal, merekodkan tahap harga utama dalam array untuk peluang perdagangan yang lebih tepat.
Mekanisme teras bergantung pada pengukuran kecairan pasaran melalui nisbah jumlah ke pergerakan harga. 1. Mengira penunjuk kecairan: Volume dibahagikan dengan perbezaan mutlak antara harga penutupan dan harga terbuka 2. Tetapkan had kecairan: mengenal pasti kecairan yang tidak normal menggunakan EMA dan penyimpangan standard 3. Pertahankan susunan harga: Rekod harga apabila batas kecairan dilanggar 4. Membina purata bergerak: Mengira EMA pantas dan perlahan berdasarkan peristiwa kecairan 5. Membuat isyarat perdagangan: Tentukan titik masuk dan keluar melalui persilangan purata bergerak
Strategi inovatif ini menggabungkan analisis kecairan dengan penunjuk teknikal, mengoptimumkan sistem crossover purata bergerak tradisional dengan memantau anomali kecairan pasaran. Walaupun ia menunjukkan hasil yang menjanjikan dalam keadaan pasaran tertentu, pengoptimuman lanjut diperlukan untuk meningkatkan kestabilan dan penerapan. Pedagang harus menguji dengan teliti sebelum pelaksanaan langsung dan mempertimbangkan untuk menggabungkan dengan penunjuk lain untuk sistem perdagangan yang lebih mantap.
/*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))