
Strategi persilangan pengayun OBV adalah sistem perdagangan kuantitatif berdasarkan Indeks Keseimbangan Tenaga Persaingan (On Balance Volume, OBV), yang menangkap momen-momen penting perubahan dinamik pasaran dengan memantau perbezaan antara Indeks OBV dan garis rata-rata EMA-nya. Strategi ini berpusat pada pengenalan isyarat persilangan pengayun OBV dan garis sifar, sambil melaksanakan mekanisme penarikan diri yang sama, mengelakkan penarikan diri awal yang disebabkan oleh turun naik harga yang cepat, meningkatkan kualiti pelaksanaan perdagangan.
Strategi ini menghasilkan isyarat dagangan berdasarkan penggetar yang dibentuk oleh perbezaan antara indikator keseimbangan tenaga kuantiti berdagang (OBV) dan purata bergerak indeksnya (EMA). Proses pengiraan teras strategi adalah seperti berikut:
Satu inovasi utama dalam strategi ini adalah untuk mewujudkan “mekanisme keluar dari bar yang sama”, iaitu untuk merekodkan indeks bar yang masuk, dan memastikan bahawa keluar dari strategi hanya dibenarkan selepas bar baru terbentuk. Mekanisme ini berkesan untuk mengelakkan penangguhan atau penutupan yang terlalu awal yang disebabkan oleh pergerakan harga yang cepat dalam satu unit masa yang sama, meningkatkan kestabilan strategi.
Dari segi pengurusan risiko, strategi ini mempunyai tiga mekanisme perlindungan:
Keupayaan untuk merakamkan pergerakan dengan tepat: Menggunakan OBV oscillator dan garis nol untuk mengenal pasti titik-titik perubahan dinamika pasaran, dapat memasuki tahap awal trend dan menangkap sebahagian besar trend.
Pengesahan pesananIndeks OBV sendiri mengintegrasikan perubahan harga dengan maklumat jumlah transaksi, membolehkan isyarat perdagangan mendapat pengesahan jumlah transaksi yang berkesan, mengurangkan risiko penembusan palsu.
Mencegah tiang homolog keluar dari perlindunganDengan mencatatkan indeks bar masuk dan melarang penarikan bar yang sama, ia berkesan mengelakkan kerugian awal yang disebabkan oleh turun naik jangka pendek, meningkatkan kestabilan dan kesempurnaan perdagangan.
Sistem pengurusan risiko yang baikStrategi ini mengintegrasikan tiga mekanisme perlindungan untuk menghentikan kerugian tetap, keuntungan sasaran dan menjejaki kerugian, mengawal risiko dengan berkesan sambil memastikan keuntungan.
Kebolehan beradaptasi tinggiDengan reka bentuk parameter (OBV EMA, Stop Loss Ratio, Target Profit Ratio, Tracking Stop Loss Ratio), strategi boleh disesuaikan secara fleksibel mengikut keadaan pasaran dan jenis perdagangan yang berbeza.
Pelaksanaan dan amaran automatik: Strategi ini mempunyai rentetan amaran dalam format JSON, yang dapat disambungkan dengan lancar ke sistem perdagangan automatik, untuk mencapai perdagangan automatik sepenuhnya.
Pembantu visual: Strategi memetakan pengayun OBV dan label dagangan mereka pada carta, memberikan maklum balas visual yang intuitif, memudahkan pengesanan dan pemantauan strategi dalam masa nyata.
Perdagangan berlebihan di pasaran yang bergolakDalam pasaran yang bergolak, penggolak OBV mungkin sering melintasi garis nol, menyebabkan terlalu banyak isyarat perdagangan dan kos perdagangan yang tidak perlu. Penyelesaian adalah dengan menambah syarat penapisan tambahan, seperti menggunakan strategi hanya dalam keadaan trend yang jelas, atau menambah mekanisme pengesahan isyarat.
Kepekaan ParameterPengaturan kitaran OBV EMA mempunyai kesan yang ketara terhadap prestasi strategi, dan keadaan pasaran yang berbeza mungkin memerlukan tetapan parameter yang berbeza. Disarankan untuk mencari kombinasi parameter yang optimum untuk keadaan pasaran tertentu dengan mengoptimumkan pengulangan.
Titik tergelincir dan risiko bersalinStrategi: Melakukan perdagangan dengan harga pasaran, mungkin menghadapi penurunan yang lebih besar dalam keadaan pasaran yang kurang likuid. Penyelesaian adalah dengan mempertimbangkan untuk menggunakan harga terhad atau berdagang pada masa likuid.
Keseimbangan tetapan stop lossPeratusan pegangan tetap mungkin terlalu ketat di pasaran yang bergelombang tinggi atau terlalu longgar di pasaran yang bergelombang rendah. Adalah disyorkan untuk menyesuaikan kadar pegangan secara dinamik mengikut kadar turun naik sejarah aset yang ditetapkan.
Ketergantungan isyaratStrategi bergantung sepenuhnya pada isyarat silang oscillator OBV, yang mungkin bereaksi lambat dalam keadaan pasaran tertentu. Anda boleh mempertimbangkan untuk menambah petunjuk teknikal lain sebagai pengesahan dan meningkatkan kualiti isyarat.
Faktor asas tidak dipertimbangkanSebagai strategi analisis teknikal semata-mata, ia tidak mengambil kira faktor asas yang mungkin mempengaruhi pasaran, seperti data ekonomi, perubahan dasar dan sebagainya. Strategi penurunan atau penangguhan harus dipertimbangkan sebelum peristiwa asas utama.
Tambah penapis trend: boleh memperkenalkan ADX atau petunjuk kekuatan trend lain, melakukan perdagangan hanya dalam keadaan trend yang disahkan, dan mengelakkan perdagangan yang kerap dalam pasaran yang bergolak.
Pengaturan parameter dinamik: boleh menyesuaikan secara automatik kitaran EMA OBV, stop loss dan peratusan keuntungan sasaran berdasarkan turun naik pasaran. Sebagai contoh, menggunakan kitaran EMA yang lebih lama dan jangkauan stop loss yang lebih luas dalam persekitaran turun naik yang tinggi, menggunakan tetapan sebaliknya dalam persekitaran turun naik yang rendah.
Pengesahan pelbagai kerangka masa: Menambah analisis untuk jangka masa yang lebih tinggi, hanya menjalankan perdagangan apabila isyarat jangka masa yang sama, meningkatkan kualiti isyarat dan kebolehpercayaan.
Penapis kualiti kuantitiPeningkatan penilaian kualiti jumlah transaksi, contohnya, mengesahkan isyarat hanya apabila jumlah transaksi lebih tinggi daripada purata jumlah transaksi N hari, untuk mengelakkan penembusan palsu dalam persekitaran jumlah transaksi rendah.
Optimumkan masa kemasukan: boleh menunggu harga kembali ke titik sokongan / rintangan yang kritikal untuk masuk semula, meningkatkan kelebihan harga masuk selepas pengayun OBV melintasi garis nol.
Bergabung dengan algoritma pembelajaran mesinIa menggunakan teknologi pembelajaran mesin untuk mengenal pasti secara automatik parameter perdagangan terbaik untuk OBV oscillator dalam keadaan pasaran yang berbeza, untuk mencapai pengoptimuman strategi penyesuaian.
Menambah penapis masaMengelakkan dagangan pada masa turun naik yang tinggi sebelum pembukaan dan penutupan pasaran, atau menangguhkan strategi sebelum dan selepas pengumuman data ekonomi penting, mengurangkan risiko yang tidak dapat diramalkan.
Strategi persilangan pengayun OBV adalah sistem perdagangan kuantitatif yang menggabungkan indikator klasik analisis teknikal dengan teknologi pengurusan risiko moden. Dengan menangkap isyarat persilangan pengayun OBV dengan garis nol, dan pada masa yang sama mewujudkan mekanisme perlindungan penarikan diri dari tiang yang sama, strategi ini dapat mengawal risiko perdagangan dengan berkesan sambil mengenal pasti perubahan dinamik pasaran.
Kelebihan utama strategi ini adalah memasukkan faktor kuantiti transaksi ke dalam proses membuat keputusan perdagangan, supaya isyarat mendapat pengesahan kuantiti transaksi yang berkesan, dan meningkatkan kualiti pelaksanaan perdagangan melalui mekanisme keluar dari tiang yang sama. Sistem pengurusan risiko yang baik dan reka bentuk parameter menjadikan strategi ini mempunyai daya serap dan kestabilan yang tinggi.
Walaupun terdapat risiko yang berpotensi seperti overtrading pasaran yang bergolak, sensitiviti parameter, tetapi dengan menambah penapis trend, penyesuaian parameter dinamik, pengesahan pelbagai bingkai masa, arah pengoptimuman, prestasi strategi masih mempunyai ruang untuk peningkatan yang lebih besar. Terutama, pengenalan teknologi pembelajaran mesin untuk mengoptimumkan parameter yang beradaptasi, diharapkan dapat meningkatkan lagi prestasi strategi dalam keadaan pasaran yang berbeza.
Secara keseluruhannya, strategi persilangan pengayun OBV menyediakan kerangka kerja yang berkesan untuk perdagangan kuantitatif berdasarkan analisis kuantitatif, dengan set parameter yang munasabah dan pengoptimuman berterusan, diharapkan untuk mencapai pulangan yang disesuaikan dengan risiko yang stabil dalam pelbagai keadaan pasaran.
/*backtest
start: 2024-07-04 00:00:00
end: 2025-07-02 08:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("OBV Osc (No Same-Bar Exit)", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// === JSON ALERT STRINGS ===
callBuyJSON = 'ANSHUL \n[{"TT":"BUY","E":"NFO","TS":"NIFTY2570326200CE","Q":"75","OT":"MARKET","P":"NRML","VL":"DAY","AT":"DHANHQ"}]'
callExtJSON = 'ANSHUL \n[{"TT":"SELL","E":"NFO","TS":"NIFTY2570326200CE","Q":"75","OT":"MARKET","P":"NRML","VL":"DAY","AT":"DHANHQ"}]'
putBuyJSON = 'ANSHUL \n[{"TT":"BUY","E":"NFO","TS":"NIFTY2570325000PE","Q":"75","OT":"MARKET","P":"NRML","VL":"DAY","AT":"DHANHQ"}]'
putExtJSON = 'ANSHUL \n[{"TT":"SELL","E":"NFO","TS":"NIFTY2570325000PE","Q":"75","OT":"MARKET","P":"NRML","VL":"DAY","AT":"DHANHQ"}]'
// === INPUTS ===
length = input.int(20, title="OBV EMA Length")
sl_pct = input.float(1.0, title="Stop Loss %", minval=0.1)
tp_pct = input.float(2.0, title="Take Profit %", minval=0.1)
trail_pct = input.float(0.5, title="Trailing Stop %", minval=0.1)
// === OBV OSCILLATOR CALC ===
src = close
obv = ta.cum(ta.change(src) > 0 ? volume : ta.change(src) < 0 ? -volume : 0)
obv_ema = ta.ema(obv, length)
obv_osc = obv - obv_ema
// === SIGNALS ===
longCondition = ta.crossover(obv_osc, 0) and strategy.position_size == 0
shortCondition = ta.crossunder(obv_osc, 0) and strategy.position_size == 0
// === RISK SETTINGS ===
longStop = close * (1 - sl_pct / 100)
longTarget = close * (1 + tp_pct / 100)
shortStop = close * (1 + sl_pct / 100)
shortTarget = close * (1 - tp_pct / 100)
trailPoints = close * trail_pct / 100
// === ENTRY BAR TRACKING TO PREVENT SAME-BAR EXIT ===
var int entryBar = na
// === STRATEGY ENTRY ===
if longCondition
strategy.entry("Long", strategy.long)
entryBar := bar_index
alert(callBuyJSON, alert.freq_all)
label.new(bar_index, low, text="BUY CALL", style=label.style_label_up, color=color.new(color.green, 85), textcolor=color.black)
if shortCondition
strategy.entry("Short", strategy.short)
entryBar := bar_index
alert(putBuyJSON, alert.freq_all)
label.new(bar_index, high, text="BUY PUT", style=label.style_label_down, color=color.new(color.red, 85), textcolor=color.black)
// === EXIT ONLY IF BAR_INDEX > entryBar (NO SAME-BAR EXIT) ===
canExitLong = strategy.position_size > 0 and bar_index > entryBar
canExitShort = strategy.position_size < 0 and bar_index > entryBar
if canExitLong
strategy.exit("Exit Long", from_entry="Long", stop=longStop, limit=longTarget, trail_points=trailPoints, trail_offset=trailPoints)
if canExitShort
strategy.exit("Exit Short", from_entry="Short", stop=shortStop, limit=shortTarget, trail_points=trailPoints, trail_offset=trailPoints)
// === TRACK ENTRY/EXIT FOR ALERTS ===
posNow = strategy.position_size
posPrev = nz(strategy.position_size[1])
longExit = posPrev == 1 and posNow == 0
shortExit = posPrev == -1 and posNow == 0
if longExit
alert(callExtJSON, alert.freq_all)
label.new(bar_index, high, text="EXIT CALL", style=label.style_label_down, color=color.new(color.blue, 85), textcolor=color.black)
if shortExit
alert(putExtJSON, alert.freq_all)
label.new(bar_index, low, text="EXIT PUT", style=label.style_label_up, color=color.new(color.orange, 85), textcolor=color.black)
// === PLOTS ===
plot(obv_osc, title="OBV Oscillator", color=obv_osc > 0 ? color.green : color.red, linewidth=2)
hline(0, color=color.gray)