Optimasi fluktuasi harga perbedaan jaringan saraf, strategi perdagangan kuantitatif

ATR ANN TANH OHLC4 volatility TIMEFRAME NEURAL NETWORK MACHINE LEARNING
Tanggal Pembuatan: 2025-06-23 11:39:44 Akhirnya memodifikasi: 2025-06-23 11:39:44
menyalin: 5 Jumlah klik: 306
2
fokus pada
319
Pengikut

Optimasi fluktuasi harga perbedaan jaringan saraf, strategi perdagangan kuantitatif Optimasi fluktuasi harga perbedaan jaringan saraf, strategi perdagangan kuantitatif

Ringkasan

Strategi perdagangan kuantitatif yang mengoptimalkan pergerakan harga pada jaringan saraf diferensial adalah sistem perdagangan frekuensi tinggi yang didasarkan pada jaringan saraf buatan (ANN) yang dirancang untuk optimalisasi kerangka waktu pada tingkat 1 detik. Strategi ini menggunakan jaringan saraf untuk menganalisis perbedaan perubahan harga jangka pendek, memprediksi arah harga melalui algoritma transmisi ke depan, dan mengoptimalkan keputusan perdagangan dengan kombinasi penyaringan tingkat fluktuasi dan kontrol waktu sesi.

Prinsip Strategi

Strategi ini menggunakan arsitektur jaringan saraf tiga tingkat untuk memproses data perbedaan harga melalui algoritma transmisi ke depan:

  1. Lapisan Input (L0): Persentase perbedaan antara OHLC4 saat ini (OHLC4) dengan kerangka waktu referensi (OHLC4) sebagai satu input neuron.

  2. Layer pertama yang tersembunyi (L1): terdiri dari 5 neuron, menggunakan dua kurva orthogonal ((tanh) sebagai fungsi aktivasi, untuk transformasi non-linear terhadap data input. Setiap neuron memiliki berat yang dilatih sebelumnya, untuk menangkap pola tertentu dari perbedaan harga.

  3. Layer kedua yang tersembunyi (L2): terdiri dari 33 neuron, juga menggunakan fungsi aktivasi tanh, untuk memproses lebih lanjut output dari lapisan tersembunyi pertama melalui matriks berat yang lebih kompleks.

  4. Lapisan Keluaran L3: Neuron tunggal menghasilkan sinyal prediksi akhir, yang nilainya dibalikkan untuk memodifikasi arah sinyal.

Logika transaksi berkisar pada nilai output jaringan saraf ((L3_0)):

  • Bila L3_0 lebih besar dari batas masuk ((default 0.003), memicu sinyal multitasking
  • Bila L3_0 lebih kecil dari batas masuk negatif ((-0.003), memicu sinyal kosong
  • Bila L3_0 lebih kecil dari batas keluar ((default 0.001), posisi kosong
  • Bila L3_0 lebih besar dari batas keluar negatif ((−0.001), posisi kosong kosong

Strategi ini juga mengimplementasikan tiga mekanisme penyaringan:

  • Filter periode pendinginan: Setelah melakukan transaksi, sistem harus menunggu periode pendinginan yang ditentukan (default 60 detik)
  • Filter fluktuasi: Melalui indikator ATR (Average True Range), hanya diperdagangkan jika volatilitas pasar melebihi tipping minimum (default 0.02)
  • Filter waktu transaksiOpsional membatasi perdagangan hanya pada jam pasar tertentu (default 9:00-16:00)

Keunggulan Strategis

  1. Prediksi AkuratStruktur multi-lapisan dari jaringan saraf mampu menangkap hubungan non-linear yang kompleks dalam pergerakan harga, yang sulit dilakukan oleh indikator teknologi tradisional. Struktur ini dapat mengenali pola harga jangka pendek, terutama di lingkungan frekuensi tinggi, dan memberikan sinyal masuk dan keluar yang lebih akurat.

  2. Rasio risiko-pengembalian yang luar biasaStrategi ini mencapai faktor keuntungan 3.754, yang berarti bahwa jumlah transaksi yang menguntungkan adalah 3.754 kali jumlah transaksi yang merugikan, yang merupakan kinerja yang sangat baik dalam strategi kuantitatif.

  3. Optimasi parameter yang fleksibelStrategi menawarkan beberapa parameter yang dapat disesuaikan, termasuk batas masuk / keluar, panjang periode pendinginan, kerangka waktu referensi, dan persyaratan volatilitas minimum, yang memungkinkan pedagang untuk mengoptimalkannya sesuai dengan berbagai kondisi pasar dan jenis perdagangan.

  4. Mekanisme multi-filterStrategi ini efektif mengurangi transaksi yang tidak perlu dan sinyal palsu, meningkatkan kualitas transaksi, dengan mengintegrasikan periode pendinginan, volatilitas, dan tiga kali penyaringan pada waktu transaksi.

  5. Beradaptasi dengan lingkungan perdagangan frekuensi tinggi: Optimasi untuk kerangka waktu 1 detik yang memungkinkan untuk memanfaatkan fitur perdagangan frekuensi tinggi untuk menangkap peluang keuntungan dari fluktuasi harga jangka pendek.

  6. Implementasi dengan latensi rendahStruktur kode strategi yang jelas dan efisien, bagian jaringan saraf menggunakan bobot pra-pelatihan yang dihitung secara langsung, tanpa perlu pelatihan real-time, untuk memastikan eksekusi latensi rendah dalam lingkungan frekuensi tinggi.

Risiko Strategis

  1. Risiko overadaptasi: Model jaringan saraf mengandung banyak parameter berat yang telah ditetapkan, dan ada risiko over-fitting terhadap data historis. Hal ini dapat menyebabkan strategi berkinerja kurang baik dalam perdagangan langsung, terutama ketika kondisi pasar berubah secara signifikan.

  2. Parameter SensitivitasKinerja strategi sangat bergantung pada pengaturan beberapa parameter, seperti batas masuk / keluar, panjang periode pendinginan, dll. Perubahan kecil pada parameter dapat menyebabkan perubahan besar dalam kinerja strategi. Disarankan untuk menemukan kombinasi parameter yang stabil melalui pemindaian parameter dan pengujian langkah demi langkah, dan menghindari optimasi berlebihan.

  3. Risiko perdagangan frekuensi tinggiPada kerangka waktu 1 detik, biaya transaksi (misalnya spread dan slippage) dapat secara signifikan mempengaruhi profitabilitas strategi. Biaya-biaya ini harus dipertimbangkan sebelum melakukan perdagangan langsung, dan kondisi biaya transaksi yang sebenarnya harus dimodelkan dalam pengembalian.

  4. Tantangan untuk Mencapai TeknologiStrategi frekuensi tinggi membutuhkan sistem perdagangan dengan latensi yang sangat rendah dan keandalan yang tinggi. Setiap keterlambatan jaringan, keterlambatan data, atau keterlambatan eksekusi dapat menyebabkan kegagalan strategi. Pastikan untuk menggunakan infrastruktur perdagangan tingkat profesional dan sumber data latensi rendah.

  5. Risiko fluktuasi pasarDalam kondisi pasar yang ekstrim (misalnya berita yang tiba-tiba atau kehabisan likuiditas), model jaringan saraf mungkin tidak dapat memprediksi pergerakan harga dengan akurat, menyebabkan kerugian besar. Disarankan untuk menetapkan langkah-langkah stop loss dan batas kerugian maksimum harian, dan menangguhkan operasi strategi selama fluktuasi ekstrem.

Arah optimasi strategi

  1. Arsitektur jaringan saraf yang dioptimalkan:

    • Pertimbangkan untuk memperkenalkan lebih banyak fitur input, seperti volume transaksi, indikator volatilitas, dan indikator dinamika harga, untuk meningkatkan kemampuan model untuk memprediksi
    • Mencoba berbagai struktur lapisan tersembunyi dan jumlah neuron untuk menemukan keseimbangan terbaik antara kompleksitas dan kemampuan generalisasi
    • Menjelajahi efek dari fungsi aktivasi lain (seperti ReLU atau Leaky ReLU) yang lebih baik daripada tanh dalam beberapa aplikasi jaringan saraf
  2. Mekanisme penyesuaian parameter dinamis:

    • Mencapai threshold entry/output yang disesuaikan berdasarkan kondisi pasar, misalnya meningkatkan threshold dalam lingkungan yang bergejolak tinggi dan menurunkan threshold dalam lingkungan yang bergejolak rendah
    • Mengembangkan algoritma penyesuaian periode pendinginan yang sensitif terhadap fluktuasi, sehingga strategi dapat mempertahankan frekuensi perdagangan yang optimal pada fase pasar yang berbeda
  3. Kerangka Prediksi Terpadu:

    • Model jaringan saraf yang digabungkan dengan beberapa kerangka waktu untuk membentuk sinyal prediksi komprehensif
    • Masukkan meta model pembelajaran mesin, dan secara dinamis menyesuaikan bobot model prediksi yang berbeda
    • Metode ini dapat mengurangi keterbatasan dari satu model dan meningkatkan stabilitas prediksi.
  4. Peningkatan manajemen risiko:

    • Mengembangkan sistem manajemen posisi dinamis untuk menyesuaikan skala perdagangan berdasarkan kepercayaan model dan kondisi pasar
    • Memperkenalkan strategi stop loss berbasis pembelajaran mesin untuk mengoptimalkan rasio risiko-pengembalian untuk setiap perdagangan
    • Untuk mencapai optimasi waktu dalam sehari, identifikasi strategi yang bekerja paling baik dalam satu hari
  5. Pembelajaran dan adaptasi secara real time:

    • Desain mekanisme pembelajaran online yang memungkinkan jaringan saraf untuk terus belajar dari data baru dan beradaptasi dengan perubahan pasar
    • Menerapkan pemicu pelatihan ulang otomatis berdasarkan pemantauan kinerja, yang secara proaktif memperbarui model ketika kinerja strategi menurun
    • Metode ini dapat secara signifikan meningkatkan umur dan stabilitas strategi.

Meringkaskan

Strategi perdagangan kuantitatif yang mengoptimalkan pergerakan harga diferensial jaringan saraf mewakili praktik terdepan dalam perdagangan kuantitatif modern, berhasil menerapkan teknologi jaringan saraf buatan di bidang perdagangan frekuensi tinggi. Dengan struktur jaringan saraf multi-lapisan yang dirancang dengan cermat, strategi ini mampu menangkap pola-pola halus dalam perubahan harga jangka pendek dan meningkatkan kualitas perdagangan melalui mekanisme penyaringan ganda.

Faktor keuntungan 3.754 membuktikan bahwa strategi ini berkinerja baik dalam lingkungan pengujian, tetapi dalam praktiknya, risiko yang terkait dengan overfit, sensitivitas parameter, dan perdagangan frekuensi tinggi masih harus dipertimbangkan dengan hati-hati. Dengan terus-menerus mengoptimalkan arsitektur jaringan saraf, melakukan penyesuaian parameter dinamis, dan meningkatkan manajemen risiko, strategi ini memiliki potensi untuk tetap kompetitif dalam jangka panjang di bidang perdagangan kuantitatif yang sangat kompetitif.

Faktor kunci keberhasilan strategi ini adalah menggabungkan teknologi jaringan saraf yang kompleks dengan logika perdagangan yang praktis, memanfaatkan kemampuan prediksi pembelajaran mesin sekaligus mempertimbangkan kelayakan perdagangan nyata. Bagi pedagang kuantitatif yang berpengalaman, ini memberikan kerangka kerja yang dapat diskalakan dan dioptimalkan lebih lanjut sesuai dengan pasar yang berbeda dan preferensi risiko pribadi.

Kode Sumber Strategi
/*backtest
start: 2024-06-23 00:00:00
end: 2025-06-21 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy("ANN Strategy v2 (Optimized for 1s)", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// === INPUTS ===
entryThreshold = input.float(0.003, title="Entry Threshold")
exitThreshold  = input.float(0.001, title="Exit Threshold")
cooldownBars   = input.int(60, title="Cooldown (bars)")  // 60 seconds cooldown
timeframe      = input.timeframe("1", title="Reference Timeframe")  // 1-minute diff reference
minVolatility  = input.float(0.02, title="Min ATR (Volatility Filter)")
useSession     = input.bool(true, title="Use Session Filter")

// === UTILITY FUNCTIONS ===
getDiff() =>
    prev = request.security(syminfo.tickerid, timeframe, ohlc4[1])
    now = ohlc4
    (now - prev) / prev

linear(v) => v
tanh(v) => (math.exp(v) - math.exp(-v)) / (math.exp(v) + math.exp(-v))

// === ANN FORWARD PROPAGATION ===
l0_0 = linear(getDiff())

l1 = array.new_float()
array.push(l1, tanh(l0_0 * 0.8446488687))
array.push(l1, tanh(l0_0 * -0.5674069006))
array.push(l1, tanh(l0_0 * 0.8676766445))
array.push(l1, tanh(l0_0 * 0.5200611473))
array.push(l1, tanh(l0_0 * -0.2215499554))

// === Layer 2 weights ===
w2 = array.from(    0.3341657935, -2.0060003664, 0.8606354375, 0.9184846912, -0.8531172267,    -0.0394076437, -0.4720374911, 0.2900968524, 1.0653326022, 0.3000188806,    -0.559307785, -0.9353655177, 1.2133832962, 0.1952686024, 0.8552068166,    -0.4293220754, 0.8484259409, -0.7154087313, 0.1102971055, 0.2279392724,    0.9111779155, 0.2801691115, 0.0039982713, -0.5648257117, 0.3281705155,    -0.2963954503, 0.4046532178, 0.2460580977, 0.6608675819, -0.8732022547,    0.8810811932, 0.6903706878, -0.5953059103, -0.3084040686, -0.4038498853,    -0.5687101164, 0.2736758588, -0.2217360382, 0.8742950972, 0.2997583987,    0.0708459913, 0.8221730616, -0.7213265567, -0.3810462836, 0.0503867753,    0.4880140595, 0.9466627196, 1.0163097961, -0.9500386514, -0.6341709382,    1.3402207103, 0.0013395288, 3.4813009133, -0.8636814677, 41.3171047132,    1.2388217292, -0.6520886912, 0.3508321737, 0.6640560714, 1.5936220597,    -0.1800525171, -0.2620989752, 0.056675277, -0.5045395315, 0.2732553554,    -0.7776331454, 0.1895231137, 0.5384918862, 0.093711904, -0.3725627758,    -0.3181583022, 0.2467979854, 0.4341718676, -0.7277619935, 0.1799381758,    -0.5558227731, 0.3666152536, 0.1538243225, -0.8915928174, -0.7659355684,    0.6111516061, -0.5459495224, -0.5724238425, -0.8553500765, -0.8696190472,    0.6843667454, 0.408652181, -0.8830470112, -0.8602324935, 0.1135462621,    -0.1569048216, -1.4643247888, 0.5557152813, 1.0482791924, 1.4523116833,    0.5207514017, -0.2734444192, -0.3328660936, -0.7941515963, -0.3536051491,    -0.4097807954, 0.3198619826, 0.461681627, -0.1135575498, 0.7103339851,    -0.8725014237, -1.0312091401, 0.2267643037, -0.6814258121, 0.7524828703,    -0.3986855003, 0.4962556631, -0.7330224516, 0.7355772164, 0.3180141739,    -1.083080442, 1.8752543187, 0.3623326265, -0.348145191, 0.1977935038,    -0.0291290625, 0.0612906199, 0.1219696687, -1.0273685429, 0.0872219768,    0.931791094, -0.313753684, -0.3028724837, 0.7387076712, 0.3806140391,    0.2630619402, -1.9827996702, -0.7741413496, 0.1262957444, 0.2248777886,    -0.2666322362, -1.124654664, 0.7288282621, -0.1384289204, 0.2395966188,    0.6611845175, 0.0466048937, -0.1980999993, 0.8152350927, 0.0032723211,    -0.3150344751, 0.1391754608, 0.5462816249, -0.7952302364, -0.7520712378,    -0.0576916066, 0.3678415302, 0.6802537378, 1.1437036331, -0.8637405666,    0.7016273068, 0.3978601709, 0.3157049654, -0.2528455662, -0.8614146703,    1.1741126834, -1.4046408959, 1.2914477803, 0.9904052964, -0.6980155826)


l2 = array.new_float()
for i = 0 to 32
    sum = 0.0
    for j = 0 to 4
        weight = array.get(w2, i * 5 + j)
        sum += weight * array.get(l1, j)
    array.push(l2, tanh(sum))

// === Output layer weights ===
weights_out = array.from(    -0.1366382003, 0.8161960822, -0.9458773183, 0.4692969576, 0.0126710629,    -0.0403001012, -0.0116244898, -0.4874816289, -0.6392241448, -0.410338398,    -0.1181027081, 0.1075562037, -0.5948728252, 0.5593677345, -0.3642935247,    -0.2867603217, 0.142250271, -0.0535698019, -0.034007685, -0.3594532426,    0.2551095195, 0.4214344983, 0.8941621336, 0.6283377368, -0.7138020667,    -0.1426738249, 0.172671223, 0.0714824385, -0.3268182144, -0.0078989755,    -0.2032828145, -0.0260631534, 0.4918037012)


sum_out = 0.0
for i = 0 to array.size(l2) - 1
    sum_out += array.get(weights_out, i) * array.get(l2, i)

// === Final ANN output (inverted for signal correction) ===
l3_0 = -tanh(sum_out)

// === TRADE FILTERS ===
volatility = ta.atr(14)
isVolOkay = volatility > minVolatility

isSession = (hour >= 9 and hour < 16)  // Adjust to your market hours
sessionOkay = useSession ? isSession : true

// === SIGNAL LOGIC ===
var string activeTrade = "none"
var int lastTradeBar = na
canTrade = (na(lastTradeBar) or (bar_index - lastTradeBar > cooldownBars)) and isVolOkay and sessionOkay

enterLong  = l3_0 > entryThreshold  and activeTrade != "long"  and canTrade
exitLong   = l3_0 < exitThreshold   and activeTrade == "long"
enterShort = l3_0 < -entryThreshold and activeTrade != "short" and canTrade
exitShort  = l3_0 > -exitThreshold  and activeTrade == "short"

// === STRATEGY EXECUTION ===
if barstate.isrealtime
    if enterLong
        strategy.entry("Long", strategy.short)
        activeTrade := "long"
        lastTradeBar := bar_index

    if exitLong
        strategy.close("Long")
        activeTrade := "none"

    if enterShort
        strategy.entry("Short", strategy.long)
        activeTrade := "short"
        lastTradeBar := bar_index

    if exitShort
        strategy.close("Short")
        activeTrade := "none"

// === PLOTTING ===
bgcolor(activeTrade == "long" ? color.new(color.green, 85) : activeTrade == "short" ? color.new(color.red, 85) : na)
plot(l3_0, title="ANN Output (Inverted)", color=color.aqua, linewidth=2)