
Strategi ini ialah sistem perdagangan berdasarkan purata bergerak wajaran kecairan Ia mengukur kecairan pasaran dengan memantau hubungan antara turun naik harga dan volum dagangan, dan membina purata bergerak pantas dan perlahan atas dasar ini. Isyarat beli dijana apabila garisan pantas melintasi garisan perlahan, dan isyarat jual dijana apabila ia melintasi di bawah. Strategi ini memberi perhatian khusus kepada peristiwa kecairan yang tidak normal dan merekodkan mata harga utama melalui tatasusunan, sekali gus menyediakan peluang dagangan yang lebih tepat.
Teras strategi adalah untuk mengukur kecairan pasaran melalui nisbah volum dagangan kepada perubahan harga. Langkah-langkah pelaksanaan khusus adalah seperti berikut:
Ini ialah strategi inovatif yang menggabungkan analisis kecairan dengan penunjuk teknikal, mengoptimumkan sistem pindah silang purata bergerak tradisional dengan memantau anomali kecairan pasaran. Walaupun ia berprestasi baik dalam persekitaran pasaran tertentu, ia masih memerlukan pengoptimuman lanjut untuk meningkatkan kestabilan dan kebolehgunaan. Adalah disyorkan bahawa pedagang menjalankan ujian yang mencukupi sebelum penggunaan masa nyata dan menggabungkannya dengan penunjuk lain untuk membina sistem perdagangan yang lebih lengkap.
/*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))