Strategi ini adalah sistem perdagangan yang didasarkan pada rata-rata bergerak tertimbang likuiditas, mengukur likuiditas pasar melalui hubungan antara pergerakan harga dan volume perdagangan. Ini membangun rata-rata bergerak cepat dan lambat untuk menghasilkan sinyal beli ketika garis cepat melintasi di atas garis lambat dan sinyal jual ketika melintasi di bawahnya. Strategi ini terutama berfokus pada peristiwa likuiditas abnormal, mencatat tingkat harga kunci dalam array untuk peluang perdagangan yang lebih tepat.
Mekanisme inti didasarkan pada pengukuran likuiditas pasar melalui rasio volume terhadap pergerakan harga. 1. Menghitung indikator likuiditas: Volume dibagi dengan perbedaan absolut antara harga tutup dan harga buka 2. Tetapkan batas likuiditas: Identifikasi likuiditas abnormal menggunakan EMA dan standar deviasi 3. Mempertahankan array harga: Mencatat harga ketika batas likuiditas dilanggar 4. Membangun rata-rata bergerak: Menghitung EMA cepat dan lambat berdasarkan peristiwa likuiditas 5. Membuat sinyal perdagangan: Menentukan titik masuk dan keluar melalui crossover rata-rata bergerak
Strategi inovatif ini menggabungkan analisis likuiditas dengan indikator teknis, mengoptimalkan sistem crossover rata-rata bergerak tradisional dengan memantau anomali likuiditas pasar. Meskipun menunjukkan hasil yang menjanjikan dalam kondisi pasar tertentu, pengoptimalan lebih lanjut diperlukan untuk meningkatkan stabilitas dan penerapan. Pedagang harus menguji secara menyeluruh sebelum implementasi langsung dan mempertimbangkan untuk menggabungkan dengan indikator lain untuk sistem perdagangan yang lebih kuat.
/*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))