Strategi Dagangan Pengayun Imbangan Pelbagai Faktor


Tarikh penciptaan: 2024-01-12 14:08:33 Akhirnya diubah suai: 2024-01-12 14:08:33
Salin: 0 Bilangan klik: 663
1
fokus pada
1617
Pengikut

Strategi Dagangan Pengayun Imbangan Pelbagai Faktor

Gambaran keseluruhan

Strategi perdagangan oscillator ekuilibrium berbilang faktor adalah strategi perdagangan kuantitatif yang menggunakan pelbagai isyarat petunjuk teknikal. Strategi ini menggabungkan dengan bijak tenaga Rate of Change (ROC), RSI, Commodity Channel Index (CCI), William Index (%R) dan Indeks Arah Rata-rata (ADX) untuk menilai pergerakan pasaran dan menghasilkan isyarat perdagangan.

Kelebihan terbesar strategi ini adalah dapat menilai pasaran secara objektif dan sistematik, mencari masa masuk dan keluar yang terbaik. Apabila garis penunjuk pergerakan melintasi garis beli 0.75, menghasilkan isyarat beli; apabila garis penunjuk pergerakan melintasi garis jual beli 0.25, menghasilkan isyarat kosong.

Prinsip Strategi

Inti strategi perdagangan oscillator ekuilibrisan pelbagai faktor adalah pengiraan indikator pergerakan komprehensif. Langkah pengiraan indikator adalah seperti berikut:

  1. Hitung nilai bagi setiap petunjuk teknikal tunggal: termasuk petunjuk kadar perubahan ((ROC), petunjuk kekuatan relatif ((RSI), petunjuk saluran komoditi ((CCI), petunjuk William ((%R) dan petunjuk arah purata ((ADX))

  2. Menyenaraikan nilai bagi setiap petunjuk teknikal dalam julat 0-1 untuk perbandingan

  3. Menggunakan idea purata bertimbangan, mengira nilai indikator pergerakan komposit ❚ Setiap indikator teknikal mempunyai berat yang boleh disesuaikan, dengan asumsi ROC 2, RSI 0.5, CCI 2, % R 0.5, ADX 0.5. Berkalikan nilai setiap indikator standard dengan berat yang sesuai, kemudian tambah, dan kemudian bahagi dengan jumlah berat, untuk mendapatkan nilai pergerakan komposit dalam julat 0-1

  4. Isyarat dagangan yang sesuai dihasilkan apabila nilai pergerakan komposit itu melintasi garis overbuy dan oversell yang ditetapkan dengan betul

Ia boleh dilihat bahawa strategi ini menggunakan tenaga pelbagai petunjuk teknikal secara fleksibel untuk menilai pasaran kosong dan membuat keputusan perdagangan melalui kaedah yang sistematik. Ia mengelakkan bunyi pasaran yang dibawa oleh satu petunjuk teknikal dan dapat mengekalkan keputusan perdagangan yang stabil dalam pelbagai keadaan.

Kelebihan Strategik

Strategi dagangan oscillator penyeimbang pelbagai faktor mempunyai beberapa kelebihan:

  1. Memberi kaedah analisis pasaran yang objektif dan sistematik. Menggunakan pelbagai petunjuk teknikal untuk mengelakkan kekurangan satu alat, dan menghasilkan isyarat perdagangan yang praktikal melalui kaedah kuantitatif.

  2. Strategi untuk mengoptimumkan kemasukan dan keluar dari pasaran. Pengambilan nilai yang tepat dan pemprosesan piawaian indikator turun naik menyediakan asas kuantitatif untuk menilai pasaran.

  3. Ketinggian boleh disesuaikan. Berat dan parameter setiap petunjuk boleh disesuaikan mengikut gaya perdagangan individu, menyesuaikan diri dengan keadaan pasaran yang berbeza.

  4. Isyarat isyarat masa nyata. Ia boleh menetapkan amaran isyarat membeli, isyarat keluar, memastikan mendapat maklumat terkini mengenai pasaran.

  5. Pengembalian dan pengoptimuman yang ketat. Dengan pengembalian yang mencukupi terhadap data sejarah, parameter strategi dapat dinilai dan dioptimumkan, meningkatkan keberkesanan pertempuran sebenar sebelum permainan.

Risiko Strategik

Walaupun terdapat banyak kelebihan dalam strategi perdagangan oscillator penyeimbang pelbagai faktor, terdapat juga risiko tertentu dalam penggunaan praktikal, terutamanya dalam:

  1. Risiko pengoptimuman parameter. Jika berat penunjuk dan parameter yang tidak betul, ia akan menjejaskan kesan cakera keras. Pada masa ini perlu mencari parameter terbaik melalui banyak pengulangan.

  2. Seting risiko antara overbuy dan oversell. Pertimbangan antara overbuy dan oversell berbeza mengikut keadaan. Seting mesti mempertimbangkan keadaan yang lebih besar.

  3. Risiko penyebaran indikator. Apabila sebahagian daripada indikator menyebar, ia akan mempengaruhi penilaian indikator komposit. Pada masa ini, ia boleh dipertimbangkan untuk menghilangkan atau menurunkan berat badan.

  4. Kekurangan model kuantitatif. Mana-mana model kuantitatif boleh gagal dalam keadaan tertentu. Pengendali masih perlu mengekalkan kesedaran risiko yang mencukupi.

Untuk mengelakkan risiko, pengembalian dan pengoptimuman parameter yang mencukupi mesti dilakukan sebelum operasi, memahami batasan strategi, menjejaki kesan operasi, menyesuaikan parameter atau tetapan berat secara fleksibel mengikut keadaan.

Arah pengoptimuman

Strategi dagangan oscillator penyeimbang faktor boleh dioptimumkan lagi dalam beberapa aspek:

  1. Melanjutkan pengayaan model pelbagai faktor. Anda boleh mempertimbangkan untuk menambah lebih banyak jenis petunjuk teknikal untuk meningkatkan penilaian model.

  2. Cuba kaedah pembelajaran mesin. Model canggih seperti rangkaian saraf boleh dilatih untuk meramalkan setiap indikator tunggal dan mengekstrak lebih banyak ciri tersembunyi.

  3. Menggabungkan asas dan makro. Menambah faktor asas seperti data ekonomi, laporan prestasi untuk menilai keadaan pasaran.

  4. Menggunakan parameter penyesuaian yang menyesuaikan diri. Sesuai dengan perubahan persekitaran pasaran, penyesuaian dinamik berat dan parameter penunjuk dapat dicapai.

  5. Memperkenalkan mekanisme hentikan kerugian. Tetapkan tahap hentikan kerugian yang munasabah dan mengawal kerugian individu secara aktif.

  6. Pengurusan dana bersepadu. Menyesuaikan saiz kedudukan mengikut saiz pegangan, untuk menguruskan dana kuantitatif.

ringkaskan

Strategi perdagangan oscillator ekuilibrium faktor adalah strategi perdagangan kuantitatif yang sangat baik. Ia menyatukan pelbagai petunjuk teknikal untuk membuat penilaian pasaran melalui kaedah kuantitatif yang ketat. Ia juga mempunyai fleksibiliti penyesuaian yang tinggi yang boleh disesuaikan dengan gaya individu.

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