
Strategi perdagangan konsensus multi-indikator adalah sistem perdagangan kuantitatif yang menggabungkan tiga indikator teknis yang berbeda untuk mengkonfirmasi sinyal perdagangan dengan saling memverifikasi antara indikator. Strategi ini mengintegrasikan supertrend berbobot likuiditas (LWST), sistem sinyal tren, dan oscillator tren gelombang bertenaga (WT), yang melakukan pembelian atau penjualan hanya ketika setidaknya dua indikator memberikan sinyal ke arah yang sama.
Prinsip inti dari strategi perdagangan konsensus multi-indikator adalah untuk mengkonfirmasi arah perdagangan melalui analisis multi-dimensi dari keadaan pasar:
Tren super berat likuiditas (LWST): Menggabungkan ATR dan informasi lalu lintas untuk menciptakan resistance band yang mendukung secara dinamis. Indikator ini menggabungkan indikator supertrend tradisional dengan bobot lalu lintas untuk membuat bandwidth lebih sensitif di daerah dengan lalu lintas tinggi. Proses perhitungan meliputi:
Sistem sinyal tren: Menggunakan sistem EMA ganda untuk mendeteksi tren harga. Untuk menilai kekuatan tren pasar dengan membandingkan perbedaan persentase antara rata-rata bergerak cepat dan lambat.
Oscillator tren gelombang yang diperkuat (WT)Indikator ini menghasilkan sinyal melalui langkah-langkah berikut:
Mekanisme sinyalStrategi: Hanya melakukan perdagangan jika setidaknya dua indikator setuju. Hal ini dilakukan dengan menghitung jumlah indikator multihead (rentang 3 hingga 3), menghasilkan sinyal beli ketika nilai lebih besar dari 2 dan menghasilkan sinyal jual ketika nilai lebih kecil dari 2
Manajemen RisikoStop Loss (default 2%) dan Stop Loss (default 4%) untuk setiap transaksi, yang secara otomatis akan keluar jika salah satu dari kedua kondisi tersebut tercapai.
Penguatan filter sinyal: Memerlukan konsensus beberapa indikator untuk melakukan perdagangan, mengurangi sinyal yang menyesatkan yang mungkin dihasilkan oleh satu indikator, meningkatkan akurasi perdagangan.
Beradaptasi dengan kondisi pasar yang berbedaKetiga indikator tersebut berfokus pada sifat pasar yang berbeda (trend, momentum, dan volatilitas) sehingga strategi dapat tetap efektif dalam lingkungan pasar yang berbeda.
Adaptasi sensitif likuiditas: Supertrend dengan bobot likuiditas menyesuaikan sensitivitas berdasarkan dinamika volume transaksi, sehingga strategi menangkap perubahan tren lebih cepat di area likuiditas tinggi dan lebih konservatif di area likuiditas rendah.
Manajemen risiko internalStop loss dan stop-loss yang diimplementasikan memberikan rasio risiko-pengembalian yang jelas untuk setiap transaksi, mengendalikan risiko per transaksi dalam kisaran yang dapat diterima.
Alat visualisasi intuitifStrategi menyediakan tabel sinyal dan grafik real-time untuk membantu trader memahami kondisi pasar saat ini dan sinyal indikator.
Integrasi Manajemen Dana• Menghindari risiko yang berlebihan dengan mengatur ukuran posisi berdasarkan kepentingan akun.
Parameter SensitivitasStrategi: Menggunakan beberapa parameter yang dapat disesuaikan, pengaturan parameter yang tidak tepat dapat menyebabkan overoptimasi atau kurangnya sinyal. Solusi: Melakukan analisis sensitivitas parameter yang komprehensif, memilih kombinasi parameter yang menunjukkan kinerja yang stabil di beberapa kondisi pasar.
Penundaan sinyalSolusi: Anda dapat mempertimbangkan untuk mengatur kombinasi parameter yang berbeda untuk periode waktu yang berbeda, atau menambahkan indikator jangka pendek yang lebih sensitif.
Pasar horizontal tidak efektifDalam pasar tanpa tren yang jelas, beberapa indikator tren dapat memberikan sinyal campuran, yang menyebabkan perdagangan yang sering atau tidak ada. Solusi: Tambahkan filter yang secara khusus mengidentifikasi pasar horizontal, berhenti berdagang saat diidentifikasi, atau beralih ke strategi yang dirancang khusus untuk horizontal.
Stop loss tetap: Menggunakan Stop loss persentase tetap yang mungkin tidak dapat disesuaikan dengan karakteristik fluktuasi dari berbagai aset. Solusi: Mengatur jarak stop loss berdasarkan ATR atau fluktuasi tingkat historis secara dinamis.
Manajemen risikoSolusi: Mengatur ukuran posisi berdasarkan kondisi pasar dan dinamika intensitas sinyal, menerapkan strategi perdagangan terdesentralisasi.
Pengaturan parameter dinamis:
Tambahkan filter lingkungan pasar:
Optimalkan mekanisme stop/stop loss:
Tingkat intensitas sinyal:
Filter waktu:
Strategi perdagangan konsensus multi-indikator menciptakan sistem perdagangan yang kuat dengan mengintegrasikan supertrend berbobot likuiditas, sistem sinyal tren, dan osilator tren gelombang yang diperkuat. Keunggulan utamanya adalah bahwa mekanisme konsensus multi-indikator secara signifikan meningkatkan keandalan sinyal, sementara komponen berbobot likuiditas menambah sensitivitas strategi terhadap kedalaman pasar.
Meskipun demikian, strategi masih memiliki ruang untuk pengoptimalan, terutama dalam hal parameter adaptasi, identifikasi status pasar, dan stop loss dinamis. Dengan mengimplementasikan arah optimasi yang disarankan, terutama dengan membangun filter lingkungan pasar dan sistem gradasi intensitas sinyal, strategi dapat meningkatkan lebih lanjut adaptasi dan stabilitas dalam berbagai kondisi pasar.
Secara keseluruhan, ini adalah sistem perdagangan kuantitatif yang dirancang dengan baik, cocok untuk pedagang berpengalaman untuk melakukan pengembalian dan optimasi parameter sebelum perdagangan. Desain modular strategi juga membuatnya mudah untuk dimodifikasi dan diperluas sesuai dengan kebutuhan pribadi.
/*backtest
start: 2024-03-25 00:00:00
end: 2025-03-24 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("Multi-Indicator Consensus Strategy", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// =================== Input Parameters ===================
// Liquidity Weighted Supertrend
lwst_period = input.int(10, "LWST Period", minval=1, tooltip="Period for ATR calculation")
lwst_multiplier = input.float(3.0, "LWST Multiplier", minval=0.1, tooltip="Multiplier for ATR bands")
lwst_length = input.int(20, "Volume SMA Length", minval=1, tooltip="Length for volume SMA")
// Trend Signals
trend_length = input.int(14, "Trend Length", minval=1, tooltip="Length for EMA calculation")
trend_threshold = input.float(0.5, "Trend Threshold", minval=0.1, tooltip="Percentage threshold for trend signals")
// Enhanced Wavetrend
wt_channel_length = input.int(9, "WT Channel Length", minval=1, tooltip="Smoothing period for initial calculations")
wt_average_length = input.int(12, "WT Average Length", minval=1, tooltip="Smoothing period for final signal")
wt_ma_length = input.int(3, "WT MA Length", minval=1, tooltip="Moving average length for signal line")
wt_overbought = input.float(53, "WT Overbought", minval=0, tooltip="Level to identify overbought conditions")
wt_oversold = input.float(-53, "WT Oversold", minval=-100, tooltip="Level to identify oversold conditions")
// Risk Management
sl_percent = input.float(2.0, "Stop Loss %", minval=0.1, tooltip="Stop loss percentage from entry")
tp_percent = input.float(4.0, "Take Profit %", minval=0.1, tooltip="Take profit percentage from entry")
// =================== Indicator 1: Liquidity Weighted Supertrend ===================
// Volume-weighted component for dynamic sensitivity
vol_sma = ta.sma(volume, lwst_length)
vol_weight = volume / vol_sma
// ATR-based bands with volume weighting
atr = ta.atr(lwst_period)
upperBand = hl2 + lwst_multiplier * atr * vol_weight
lowerBand = hl2 - lwst_multiplier * atr * vol_weight
// Trend determination based on price action
var float lwst_trend = 0.0
lwst_trend := close > lwst_trend[1] ? 1 : close < lwst_trend[1] ? -1 : lwst_trend[1]
// =================== Indicator 2: Trend Signals ===================
// Dual EMA system for trend detection
fast_ema = ta.ema(close, trend_length)
slow_ema = ta.ema(close, trend_length * 2)
trend_diff = (fast_ema - slow_ema) / slow_ema * 100
trend_signal = trend_diff > trend_threshold ? 1 : trend_diff < -trend_threshold ? -1 : 0
// =================== Indicator 3: Enhanced Wavetrend ===================
// Calculate Wavetrend components
ap = hlc3 // Typical price
esa = ta.ema(ap, wt_channel_length) // Smoothed price
d = ta.ema(math.abs(ap - esa), wt_channel_length) // Average volatility
ci = (ap - esa) / (0.015 * d) // Base oscillator
tci = ta.ema(ci, wt_average_length) // Smoothed oscillator
// Generate main and signal lines
wt1 = tci
wt2 = ta.sma(wt1, wt_ma_length)
// Generate Wavetrend Signal based on overbought/oversold conditions
wt_signal = 0
wt_signal := wt1 > wt_overbought and wt2 > wt_overbought ? -1 :
wt1 < wt_oversold and wt2 < wt_oversold ? 1 :
wt_signal[1]
// =================== Consensus Signal Generation ===================
// Count bullish signals (1 point for each bullish indicator)
var int consensus_count = 0
consensus_count := (lwst_trend == 1 ? 1 : 0) +
(trend_signal == 1 ? 1 : 0) +
(wt_signal == 1 ? 1 : 0)
// Generate trading signals when majority (2+ indicators) agree
bool buy_signal = consensus_count >= 2
bool sell_signal = consensus_count <= -2
// =================== Trade Execution ===================
// Long position entry and exit with risk management
if (buy_signal and strategy.position_size <= 0)
strategy.entry("Long", strategy.long)
strategy.exit("Long TP/SL", "Long",
profit = close * tp_percent / 100,
loss = close * sl_percent / 100)
// Short position entry and exit with risk management
if (sell_signal and strategy.position_size >= 0)
strategy.entry("Short", strategy.short)
strategy.exit("Short TP/SL", "Short",
profit = close * tp_percent / 100,
loss = close * sl_percent / 100)
// =================== Visualization ===================
// Signal markers for entry points
plotshape(buy_signal ? low : na, "Buy Signal", shape.triangleup, location.belowbar, color.green, size=size.small)
plotshape(sell_signal ? high : na, "Sell Signal", shape.triangledown, location.abovebar, color.red, size=size.small)
// Indicator lines
plot(wt1, "Wavetrend 1", color.blue, linewidth=1)
plot(wt2, "Wavetrend 2", color.orange, linewidth=1)
plot(wt_overbought, "Overbought", color.red, linewidth=1)
plot(wt_oversold, "Oversold", color.green, linewidth=1)
plot(fast_ema, "Fast EMA", color.yellow, linewidth=1)
plot(slow_ema, "Slow EMA", color.white, linewidth=1)
plot(lwst_trend == 1 ? upperBand : na, "Upper Band", color.green, linewidth=2)
plot(lwst_trend == -1 ? lowerBand : na, "Lower Band", color.red, linewidth=2)
// =================== Information Table ===================
// Real-time display of indicator signals
var table info = table.new(position.top_right, 2, 4)
table.cell(info, 0, 0, "Indicator", bgcolor=color.gray, text_color=color.white)
table.cell(info, 1, 0, "Signal", bgcolor=color.gray, text_color=color.white)
table.cell(info, 0, 1, "LWST", text_color=color.white)
table.cell(info, 1, 1, str.tostring(lwst_trend), text_color=lwst_trend == 1 ? color.green : color.red)
table.cell(info, 0, 2, "Trend", text_color=color.white)
table.cell(info, 1, 2, str.tostring(trend_signal), text_color=trend_signal == 1 ? color.green : color.red)
table.cell(info, 0, 3, "Wavetrend", text_color=color.white)
table.cell(info, 1, 3, str.tostring(wt_signal), text_color=wt_signal == 1 ? color.green : color.red)