
Strategi perdagangan dalam hari yang dinamik adalah sistem perdagangan kuantitatif berdasarkan teori struktur pasaran yang memberi tumpuan kepada pengenalan dan perdagangan jurang nilai yang adil dalam harga (Fair Value Gap, atau FVG). Strategi ini menggunakan tiga bentuk garis untuk mengesan ketidakseimbangan bekalan dan permintaan dalam tingkah laku harga, dan melakukan perdagangan masuk ketika harga memantau kawasan tersebut. Strategi ini menggunakan perbandingan risiko dan ganjaran yang ditetapkan untuk pengurusan risiko, dan menetapkan mekanisme penempatan paksa pada waktu tertentu setiap hari untuk mengelakkan risiko malam.
Prinsip-prinsip utama strategi perdagangan jurang nilai adil adalah berdasarkan pada “kawasan yang tidak ditukar” atau “lubang” yang ditinggalkan oleh harga ketika bergerak dengan cepat. Kawasan-kawasan ini mewakili ketidakseimbangan permintaan dan bekalan yang serius, yang biasanya akan “diisi” atau “diuji semula” pada masa akan datang. Secara khusus, strategi ini berfungsi dengan cara berikut:
Mekanisme pengesanan celahStrategi menggunakan tiga corak garisan untuk mengenal pasti dua jenis FVG:
Logik input pengulanganStrategi ini adalah untuk tidak memasuki pasaran dengan segera apabila FVG terbentuk, tetapi menunggu harga kembali ke kawasan-kawasan berikut:
Pengurusan Risiko:
Hujung hari kedudukan kosongStrategi: Setiap hari pada jam 3:15 petang (waktu India) secara automatik melonggarkan semua pegangan dan membersihkan semua array FVG untuk bersiap sedia untuk hari dagangan seterusnya.
Pertukaran Tumpang TindihStrategi ini membenarkan maksimum 5 dagangan berlapis (pyramiding), yang bermaksud bahawa anda boleh memegang lebih banyak kedudukan dalam arah yang sama, dan dengan itu meningkatkan keuntungan anda dalam pasaran yang kuat.
Kaedah ini menggunakan teori ketidakterusunan dalam struktur pasaran dan tingkah laku harga untuk cuba menangkap tingkah laku harga yang boleh diramalkan ketika mengisi kawasan yang tidak seimbang.
Setelah mengkaji kod dengan mendalam, strategi ini menunjukkan beberapa kelebihan:
Kriteria Objektif PerdaganganStrategi menggunakan syarat matematik yang jelas untuk mengenal pasti FVG dan titik masuk, menghilangkan penilaian subjektif dan meningkatkan disiplin dan kesesuaian perdagangan.
Perdagangan berdasarkan struktur pasaranStrategi ini memberi tumpuan kepada kawasan di mana terdapat ketidakseimbangan bekalan dan permintaan yang sebenar di pasaran, dan bukannya bergantung kepada isyarat dari penunjuk tradisional, yang sering tertinggal daripada tindakan harga.
Mekanisme kawalan risiko:
Potensi pendapatan kompositDengan membenarkan perdagangan berlapis (maksimum 5 kedudukan), strategi ini dapat meningkatkan keuntungan dengan ketara dalam pasaran trend yang kuat, sambil mengawal risiko setiap kedudukan melalui hentian.
Kebolehan beradaptasiStrategi ini tidak bergantung pada tahap harga tetap, tetapi secara dinamik mengenal pasti kawasan-kawasan penting dalam keadaan pasaran semasa, menjadikannya sesuai dalam pelbagai persekitaran dan instrumen pasaran.
Kecekapan pengaturcaraan: Kod menggunakan maklumat FVG yang disimpan secara berturut-turut dan menguruskan pelbagai peluang perdagangan yang berpotensi dengan berkesan, memastikan sistem dapat mengesan dan bertindak balas terhadap pelbagai tahap harga.
Pembantu visualStrategi: Memaparkan kawasan FVG secara intuitif di carta ((hijau untuk FVG bullish, merah untuk FVG bearish), membantu peniaga memahami proses keputusan sistem.
Walaupun strategi ini mempunyai asas teori yang kukuh dan banyak kelebihan, terdapat beberapa faktor risiko yang perlu diperhatikan:
Risiko penembusan palsu: Dalam pasaran yang menyusun, harga mungkin berulang kali menyentuh sempadan FVG tanpa membentuk trend yang berterusan, menyebabkan beberapa stop loss. Penyelesaian boleh termasuk menambahkan penapis persekitaran pasaran tambahan atau penunjuk pengesahan trend.
Risiko perdagangan berlapis: membenarkan sehingga 5 kedudukan arah yang sama yang boleh menyebabkan pendedahan berlebihan ke arah yang salah, terutamanya apabila trend tiba-tiba berbalik. Disyorkan untuk melaksanakan had risiko keseluruhan, seperti risiko maksimum untuk semua kedudukan tidak melebihi peratusan tertentu akaun.
Batasan bagi nisbah ganjaran risiko tetapMenggunakan nisbah ganjaran risiko 1: 2 yang tetap mungkin tidak sesuai untuk semua keadaan pasaran. Dalam pasaran yang kurang turun naik, matlamat seperti itu mungkin sukar dicapai. Dalam pasaran yang tinggi turun naik, mungkin terlalu awal untuk keluar dari perdagangan yang menguntungkan.
Kurangnya penapis persekitaran pasaranStrategi menghasilkan isyarat dalam semua keadaan pasaran, tanpa mempertimbangkan trend keseluruhan atau keadaan turun naik. Dalam persekitaran yang kuat trend, FVG boleh menyebabkan kerugian berturut-turut. Tambahan penapis trend dapat meningkatkan prestasi dengan ketara.
Kekurangan pengesahan jumlah transaksiStrategi hanya berdasarkan tindakan harga, tanpa mempertimbangkan pengesahan jumlah transaksi, yang boleh menyebabkan isyarat palsu di kawasan dengan jumlah transaksi rendah.
Masalah yang mungkin timbul dengan penarikan diri pada waktu tetap: Keluar pada waktu tertentu setiap hari boleh menyebabkan keluar terlalu awal di kedudukan yang menguntungkan atau kehilangan peluang keluar yang lebih baik di kedudukan yang tidak menguntungkan. Pertimbangkan syarat keluar yang digabungkan berdasarkan tindakan harga.
Bergantung kepada hipotesis pengesanan sejarah: Strategi mengandaikan bahawa FVG akan bertindak seperti yang telah dilihat pada masa lalu. Keadaan pasaran mungkin berubah dan mengurangkan keberkesanan model ini. Adalah penting untuk mengoptimumkan semula parameter dan mengesahkan hipotesis secara berkala.
Berdasarkan analisis yang mendalam mengenai kod, berikut adalah beberapa arah pengoptimuman yang mungkin:
Penapis struktur pasaran:
Penyesuaian Volatiliti:
Pengesahan jumlah transaksi:
Menyesuaikan saiz kedudukan:
Analisis pelbagai kerangka masa:
Transaksi berlapis pintar:
Pembelajaran Mesin:
Rangka kerja tinjauan statistik:
Strategi dagangan dalam masa sehari dengan jurang nilai wajar dinamik menyediakan kaedah sistematik untuk mengenal pasti dan berdagang kawasan ketidakseimbangan bekalan dan permintaan di pasaran. Dengan menggunakan model FVG tiga baris dan peraturan kemasukan yang jelas, strategi ini mempunyai keberkesanan teori dan kebolehgunaan praktikal. Kerangka kerja pengurusan risiko yang kuat, termasuk stop loss yang ditakrifkan, nisbah pulangan risiko tetap dan mekanisme kedudukan akhir hari, memberikan asas yang kuat untuk disiplin perdagangan.
Kelebihan utama strategi ini adalah pendekatan yang objektif dan berdasarkan struktur pasaran, yang membolehkan ia kekal relevan dalam pelbagai persekitaran pasaran. Walau bagaimanapun, keberkesanan strategi mungkin meningkat dengan ketara dengan melaksanakan arah pengoptimuman yang disyorkan, terutamanya dengan menambahkan penapis persekitaran pasaran, penyesuaian berdasarkan turun naik dan pengesahan jumlah transaksi.
Perlu diperhatikan bahawa tidak ada strategi perdagangan, tidak kira seberapa sempurna, yang menjamin kejayaan. Perdagangan yang berjaya memerlukan bukan sahaja strategi yang baik, tetapi juga disiplin pelaksanaan yang ketat, pengurusan dana yang betul, dan pemahaman yang mendalam tentang pasaran.
/*backtest
start: 2024-03-26 00:00:00
end: 2025-03-25 00:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("Intraday FVG", overlay=true, pyramiding=5, max_bars_back=500, default_qty_type=strategy.percent_of_equity, commission_type=strategy.commission.percent)
// 2. FVG Detection (Three-Candle Pattern)
var bullFVGHigh = array.new_float()
var bullFVGLow = array.new_float()
var bullFVGIndex = array.new_int()
var bearFVGHigh = array.new_float()
var bearFVGLow = array.new_float()
var bearFVGIndex = array.new_int()
detectFVG() =>
// Bullish FVG: Current low > prior high AND next high < current low
bullCondition = low > high[2] and close[1] > high[2]
// Bearish FVG: Current high < prior low AND next low > current high
bearCondition = high < low[2] and close[1] < low[2]
if bullCondition
// log.info("bull condition met: {0} {0} {0}", high[2], close[1], low)
array.push(bullFVGHigh, low)
array.push(bullFVGLow, low[2])
array.push(bullFVGIndex, bar_index)
if bearCondition
// log.info("bear condition met: {0} {0} {0}", low[2], close[1], high)
array.push(bearFVGHigh, high[2])
array.push(bearFVGLow, high)
array.push(bearFVGIndex, bar_index)
detectFVG()
// 3. Retest Execution Logic
checkRetests(arrayHigh, arrayLow, barIndex, direction) =>
// log.info("{0} : {1}", bar_index, time)
i = array.size(arrayHigh) - 1
while i >= 0
// log.info("barIndex : {0}" , array.get(barIndex, i))
// log.info("bar_index : {0}" , bar_index)
if array.get(barIndex, i) < bar_index
fvgHigh = array.get(arrayHigh, i)
fvgLow = array.get(arrayLow, i)
// log.info("visting : {0} : {1} : {2} : {3} ", array.get(barIndex, i), bar_index, fvgHigh, fvgLow)
if direction == "long" and low <= fvgHigh
// log.info("entering long")
sl = array.get(arrayLow, i) // Previous candle's low
entry = close
tp = entry + (entry - sl)*2
strategy.entry("L"+str.tostring(array.get(barIndex, i)), strategy.long)
strategy.exit("XL"+str.tostring(array.get(barIndex, i)), "L"+str.tostring(array.get(barIndex, i)), stop=sl, limit=tp)
array.remove(arrayHigh, i)
array.remove(arrayLow, i)
array.remove(barIndex, i)
if direction == "short" and high >= fvgLow
// log.info("entering short")
sl = array.get(arrayHigh, i) // Previous candle's low
entry = close
tp = entry - (sl - entry)*2
strategy.entry("S"+str.tostring(array.get(barIndex, i)), strategy.short)
strategy.exit("XS"+str.tostring(array.get(barIndex, i)), "S"+str.tostring(array.get(barIndex, i)), stop=sl, limit=tp)
array.remove(arrayHigh, i)
array.remove(arrayLow, i)
array.remove(barIndex, i)
i := i - 1
checkRetests(bullFVGHigh, bullFVGLow, bullFVGIndex, "long")
checkRetests(bearFVGHigh, bearFVGLow, bearFVGIndex,"short")
// 5. Daily Exit at 3:15 PM IST
exitTime = hour == 15 and minute >= 15
if exitTime
strategy.close_all()
array.clear(bullFVGHigh)
array.clear(bullFVGLow)
array.clear(bearFVGHigh)
array.clear(bearFVGLow)
array.clear(bullFVGIndex)
array.clear(bearFVGIndex)