Strategi Perdagangan Osilator Saldo Ultimate

Penulis:ChaoZhang, Tanggal: 2024-01-12 14:08:33
Tag:

img

Gambaran umum

Strategi perdagangan Ultimate Balance Oscillator adalah strategi perdagangan kuantitatif yang dengan cerdas menggabungkan sinyal dari beberapa indikator teknis. Dengan memanfaatkan kekuatan indikator seperti Rate of Change (ROC), Relative Strength Index (RSI), Commodity Channel Index (CCI), Williams %R dan Average Directional Index (ADX), ia menghitung osilator komposit untuk menentukan tren pasar dan menghasilkan sinyal perdagangan.

Keuntungan terbesar dari strategi ini terletak pada kemampuannya untuk secara obyektif dan sistematis menilai pasar untuk mengidentifikasi titik masuk dan keluar yang optimal.

Logika Strategi

Inti dari strategi perdagangan Ultimate Balance Oscillator adalah perhitungan indikator osilator komposit. Langkah-langkah untuk menghitung indikator ini adalah:

  1. Menghitung nilai dari indikator teknis individu: ROC, RSI, CCI, Williams %R, dan ADX

  2. Standarisasi nilai indikator ini ke kisaran 0-1 untuk memungkinkan perbandingan

  3. Gunakan metode rata-rata tertimbang untuk menghitung nilai osilator komposit. Setiap indikator memiliki bobot yang dapat disesuaikan, dengan nilai default 2 untuk ROC, 0.5 untuk RSI, 2 untuk CCI, 0.5 untuk %R, dan 0.5 untuk ADX. Kalikan setiap indikator standar dengan beratnya, jumlahkan, dan bagi dengan total berat untuk mendapatkan nilai komposit 0-1.

  4. Trigger sinyal perdagangan ketika osilator komposit ini melintasi tingkat overbought dan oversold yang ditetapkan dengan tepat.

Seperti yang jelas, strategi ini menggunakan sinyal dari beberapa indikator secara fleksibel dan memprosesnya secara sistematis untuk menentukan tren pasar dan membuat keputusan perdagangan.

Keuntungan

Strategi perdagangan Ultimate Balance Oscillator memiliki beberapa keuntungan utama:

  1. Menyediakan metode analisis pasar yang objektif dan sistematis dengan memanfaatkan beberapa indikator untuk mengatasi keterbatasan alat tunggal dan menghasilkan sinyal yang dapat ditindaklanjuti, yang didorong oleh kuantitas.

  2. Mengoptimalkan waktu masuk dan keluar / presisi melalui nilai yang tepat dan standarisasi osilator.

  3. Sangat disesuaikan dan dapat disesuaikan untuk menyesuaikan gaya perdagangan individu dan kondisi pasar melalui penimbangan dan parameter indikator yang dapat disesuaikan.

  4. Sistem peringatan waktu nyata untuk memberi tahu pedagang tentang sinyal beli/keluar baru dan memastikan kesadaran akan perkembangan pasar terbaru.

  5. Pengujian backtesting yang ketat dan optimalisasi pra-live trading untuk mengevaluasi kinerja atas data historis dan fine-tune parameter untuk peningkatan strategi.

Risiko

Meskipun manfaatnya, beberapa risiko utama dalam penerapan praktis meliputi:

  1. Risiko optimasi parameter dari bobot indikator suboptimal dan pengaturan yang merusak kinerja langsung.

  2. Risiko tingkat oversold/overbought dari pengaturan kisaran yang tidak tepat relatif terhadap kondisi dan sentimen pasar yang lebih luas.

  3. Indikator yang berbeda berisiko menyimpang nilai osilator komposit. Pertimbangkan untuk menghapus atau menurunkan bobot indikator yang salah.

  4. Keterbatasan model kuantitatif di mana kondisi pasar tertentu dapat menurunkan kinerja.

Untuk mengurangi risiko, pengujian balik yang komprehensif, kalibrasi untuk memahami keterbatasan model, pelacakan kinerja langsung, dan fleksibilitas dalam menyesuaikan parameter atau bobot berdasarkan kondisi yang berkembang sangat disarankan.

Peluang Peningkatan

Beberapa cara untuk lebih mengoptimalkan strategi meliputi:

  1. Memperluas model multi-faktor dengan indikator teknis yang lebih beragam untuk meningkatkan akurasi prediksi.

  2. Menerapkan teknik pembelajaran mesin seperti jaringan saraf untuk menemukan sinyal laten dan memprediksi nilai indikator.

  3. Menggabungkan data dasar seperti laporan pendapatan dan indikator ekonomi untuk meningkatkan faktor kuantitatif.

  4. Memperkenalkan penyesuaian parameter adaptif untuk memodifikasi bobot dan pengaturan secara dinamis berdasarkan perubahan lanskap pasar.

  5. Membangun mekanisme stop loss untuk secara aktif mengendalikan penurunan pada perdagangan individu.

  6. Mengintegrasikan model ukuran posisi berdasarkan ukuran akun untuk manajemen modal yang dikuantifikasi.

Kesimpulan

Strategi perdagangan Ultimate Balance Oscillator adalah pendekatan kuantitas yang luar biasa, mensintesis esensi dari beberapa indikator teknis ke dalam metodologi yang ketat untuk penilaian pasar. Dengan kemampuan kustomisasi yang luar biasa untuk memenuhi kebutuhan individu, ini memberikan pedagang sistematis ritel cetak biru untuk berkembang. Seperti halnya strategi kuantitas lainnya, peningkatan tanpa henti melalui backtesting, optimalisasi dan inovasi untuk memperluas ketahanan model di seluruh lingkungan pasar tetap menjadi tujuan utama. Secara keseluruhan, strategi ini menawarkan panduan dan pembelajaran yang tak ternilai bagi kuantitas yang ingin meningkatkan toolkit perdagangan mereka.


/*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")


Lebih banyak