
Strategi perdagangan oscillator ekuilibrium multi-faktor adalah strategi perdagangan kuantitatif yang menggunakan sinyal dari berbagai indikator teknis secara komprehensif. Strategi ini dengan cerdik menggabungkan energi dari indikator Rate of Change (ROC), Relative Strength Index (RSI), Commodity Channel Index (CCI), William Index (%R) dan Average Directional Index (ADX) dengan menghitung indikator fluktuasi komprehensif untuk menilai tren pasar yang lebih banyak dan menghasilkan sinyal perdagangan.
Keuntungan terbesar dari strategi ini adalah kemampuan untuk menilai pasar secara obyektif dan sistematis, mencari waktu masuk dan keluar yang optimal. Ketika garis indikator bergelombang melewati garis overbuy 0,75, menghasilkan sinyal beli; Ketika garis indikator bergelombang melewati garis oversell 0,25, menghasilkan sinyal posisi kosong.
Inti dari strategi perdagangan oscillator ekuilibrium multi-faktor adalah perhitungan indikator fluktuasi komprehensif. Langkah-langkah perhitungan indikator adalah sebagai berikut:
Hitung nilai dari masing-masing indikator teknis tunggal: termasuk Rate of Change (ROC), Relative Strength (RSI), Commodity Channel (CCI), William (%R) dan Average Directional Index (ADX)
Standarisasi nilai dari masing-masing indikator teknis menjadi nilai dalam kisaran 0-1 untuk membandingkan
Menggunakan pemikiran rata-rata tertimbang, menghitung nilai indikator fluktuasi komposit ❚ Setiap indikator teknis memiliki bobot yang dapat disesuaikan, dengan asumsi ROC 2, RSI 0,5, CCI 2,% R 0,5, ADX 0,5. Menghitung nilai masing-masing indikator standar dengan bobot yang sesuai, kemudian menambahkan, kemudian dibagi dengan jumlah bobot, untuk mendapatkan nilai fluktuasi komposit dalam kisaran 0-1
Ketika nilai fluktuasi komposit melewati garis overbought dan oversold yang disetel dengan benar, sinyal perdagangan yang sesuai dihasilkan
Dapat dilihat bahwa strategi ini menggunakan energi dari beberapa indikator teknis secara fleksibel untuk menilai keterbukaan pasar dan membuat keputusan perdagangan melalui metode yang sistematis. Ini menghindari kebisingan pasar yang disebabkan oleh satu indikator teknis dan dapat menjaga stabilitas keputusan perdagangan dalam berbagai situasi.
Strategi perdagangan oscillator ekuilibrator multifaktor memiliki beberapa keuntungan:
Memberikan metode analisis pasar yang objektif dan sistematis. Menggunakan berbagai indikator teknis untuk menghindari kekurangan dari satu alat, dan menghasilkan sinyal perdagangan yang praktis melalui metode kuantitatif.
Strategi untuk mengoptimalkan masuk dan keluar dari pasar. Pengukuran yang tepat dan pengolahan standar dari indikator fluktuasi memberikan dasar kuantitatif untuk menilai pasar.
Tingginya dapat disesuaikan. Berat dan parameter masing-masing indikator dapat disesuaikan sesuai dengan gaya perdagangan individu, sesuai dengan kondisi pasar yang berbeda.
Pemberitahuan sinyal real-time. Anda dapat mengatur alarm untuk sinyal beli, sinyal keluar, dan memastikan Anda mendapatkan informasi terkini tentang pasar.
Pemantauan dan pengoptimalan yang ketat. Dengan pemantauan penuh data sejarah, parameter strategi dapat dinilai dan dioptimalkan, meningkatkan efektivitas pertempuran nyata sebelum siaran langsung.
Meskipun ada banyak keuntungan dari strategi perdagangan oscillator ekuilibrator multi-faktor, ada juga risiko tertentu dalam penerapan praktis, terutama dalam:
Risiko pengoptimalan parameter. Jika berat indikator dan parameter yang tidak tepat, dapat mempengaruhi efek hard disk. Pada saat ini perlu melalui banyak pengujian ulang untuk mencari parameter terbaik.
Setup risiko overbought overbought. Pertimbangan untuk overbought dan oversold berbeda dalam situasi yang berbeda. Setup interval perlu mempertimbangkan situasi besar.
Indikator risiko penyebaran. Ketika beberapa indikator penyebaran, akan mempengaruhi penilaian indikator komposit. Pada saat ini dapat dipertimbangkan untuk menghapus indikator atau menurunkan berat badan.
Keterbatasan model kuantitatif. Setiap model kuantitatif dapat gagal dalam beberapa situasi. Operator masih perlu untuk menjaga kesadaran risiko yang cukup.
Untuk menghindari risiko, sebelum real-time, harus dilakukan pengembalian dan optimasi parameter yang memadai, memahami keterbatasan strategi, melacak efek real-time, menyesuaikan parameter atau pengaturan berat secara fleksibel sesuai dengan situasi. Intervensi manusia juga sangat penting jika diperlukan.
Strategi perdagangan oscillator dapat dioptimalkan lebih lanjut dari beberapa aspek berikut:
Terus memperkaya model multi faktor. Anda dapat mempertimbangkan untuk menambahkan lebih banyak jenis indikator teknis untuk meningkatkan penilaian model.
Cobalah metode pembelajaran mesin. Model canggih seperti jaringan saraf dapat dilatih untuk memprediksi setiap indikator individu dan mengekstrak lebih banyak karakteristik yang tersirat.
Menggabungkan dasar dan makro. Menambahkan faktor dasar seperti data ekonomi, laporan kinerja untuk menilai kondisi pasar.
Adaptasi parameter. Adaptasi parameter. Adaptasi parameter. Adaptasi parameter.
Memperkenalkan mekanisme stop loss. Menetapkan stop loss yang masuk akal dan mengontrol kerugian individu secara aktif.
Pengelolaan dana yang terintegrasi. Menyesuaikan ukuran posisi sesuai dengan ukuran kepemilikan, untuk mencapai pengelolaan dana yang kuantitatif.
Strategi perdagangan oscillator ekuilibrium multi-faktor adalah strategi perdagangan kuantitatif yang sangat baik. Ini menyatukan keunggulan berbagai indikator teknis untuk menilai pasar melalui metode kuantitatif yang ketat. Namun, strategi kuantitatif memiliki fleksibilitas kustomisasi yang tinggi dan dapat disesuaikan dengan gaya pribadi.
/*backtest
start: 2023-01-05 00:00:00
end: 2024-01-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// © Julien_Eche
//@version=5
strategy("Ultimate Balance Oscillator Strategy", overlay=true)
// Indicator Weights
weightROC = input.float(2, "Rate of Change (ROC) Weight", group="Weightings")
weightRSI = input.float(0.5, "Relative Strength Index (RSI) Weight", group="Weightings")
weightCCI = input.float(2, "Commodity Channel Index (CCI) Weight", group="Weightings")
weightWilliamsR = input.float(0.5, "Williams %R Weight", group="Weightings")
weightADX = input.float(0.5, "Average Directional Index (ADX) Weight", group="Weightings")
// ROC Settings
rocLength = input.int(20, "Length", minval=1, group="ROC")
// RSI Settings
rsiLength = input.int(14, "Length", minval=1, group="RSI")
// CCI Settings
cciLength = input.int(20, "Length", minval=1, group="CCI")
// Williams %R Settings
williamsRLength = input.int(14, "Length", minval=1, group="Williams %R")
// ADX Settings
adxLength = input.int(14, "ADX Length", minval=1, group="ADX")
adxDiLength = input.int(14, "DI Length", minval=1, group="ADX")
// Source
source_options = input.string("hlc3", "Source", options=["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"])
price_open = request.security(syminfo.tickerid, "D", open)
price_high = request.security(syminfo.tickerid, "D", high)
price_low = request.security(syminfo.tickerid, "D", low)
price_close = request.security(syminfo.tickerid, "D", close)
price_hl2 = request.security(syminfo.tickerid, "D", hl2)
price_hlc3 = request.security(syminfo.tickerid, "D", hlc3)
price_ohlc4 = request.security(syminfo.tickerid, "D", ohlc4)
get_source(source_option) =>
price = price_close
if source_option == "open"
price := price_open
else if source_option == "high"
price := price_high
else if source_option == "low"
price := price_low
else if source_option == "close"
price := price_close
else if source_option == "hl2"
price := price_hl2
else if source_option == "hlc3"
price := price_hlc3
else
price := price_ohlc4
price
src = get_source(source_options)
// Overbought/Oversold Levels
obLevel = input.float(0.75, "Overbought Level")
osLevel = input.float(0.25, "Oversold Level")
// Calculating the indicators
rocValue = ta.change(close, rocLength)
rsiValue = ta.rsi(close, rsiLength)
cciValue = (src - ta.sma(src, cciLength)) / (0.015 * ta.dev(src, cciLength))
williamsRValue = -100 * (ta.highest(high, williamsRLength) - close) / (ta.highest(high, williamsRLength) - ta.lowest(low, williamsRLength))
dirmov(len) =>
up = ta.change(high)
down = -ta.change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
truerange = ta.rma(ta.tr, len)
plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
[plus, minus]
adx(dilen, adxlen) =>
[plus, minus] = dirmov(dilen)
sum = plus + minus
adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
adxValue = adx(adxDiLength, adxLength)
// Normalizing the values
normalize(value, min, max) =>
(value - min) / (max - min)
normalizedROC = normalize(rocValue, ta.lowest(rocValue, rocLength), ta.highest(rocValue, rocLength))
normalizedRSI = normalize(rsiValue, 0, 100)
normalizedCCI = normalize(cciValue, ta.lowest(cciValue, cciLength), ta.highest(cciValue, cciLength))
normalizedWilliamsR = normalize(williamsRValue, ta.lowest(williamsRValue, williamsRLength), ta.highest(williamsRValue, williamsRLength))
normalizedADX = normalize(adxValue, 0, 50)
// Calculating the combined oscillator line
oscillatorLine = (normalizedROC * weightROC + normalizedRSI * weightRSI + normalizedCCI * weightCCI + normalizedWilliamsR * weightWilliamsR + normalizedADX * weightADX) / (weightROC + weightRSI + weightCCI + weightWilliamsR + weightADX)
// Strategy conditions
enterLong = ta.crossover(oscillatorLine, obLevel)
exitLong = ta.crossunder(oscillatorLine, osLevel)
// Strategy orders
if (enterLong)
strategy.entry("Buy", strategy.long)
if (exitLong)
strategy.close("Buy")
// Alert conditions
if (enterLong)
alert("Buy signal")
if (exitLong)
alert("Exit signal")