
Strategi penembusan selang masa adalah sistem perdagangan kuantitatif yang direka khusus untuk menangkap peluang momentum yang timbul ketika pasaran beralih dari tempoh turun naik rendah ke tempoh turun naik tinggi. Gagasan utama strategi ini adalah untuk mengenal pasti selang harga pada masa turun naik tertentu (19:15-19:30 IST) dan kemudian berdagang ketika harga menembusi selang itu.
Prinsip teras strategi perdagangan terobosan selang masa adalah berdasarkan kitaran masa pasaran dan dinamik harga terobosan. Logik pelaksanaan adalah seperti berikut:
Takrif selangSistem ini memantau pasaran antara jam 19:15-19:30 waktu India Standard (IST) dan merekodkan harga tertinggi dan terendah dalam tempoh 15 minit, membentuk satu julat harga. Masa ini dipilih kerana ia biasanya merupakan tempoh yang agak rendah perdagangan dan turun naik harga yang agak kecil.
Tetapan sesi perdaganganStrategi ini ditetapkan untuk berdagang pada waktu 19:00 IST hingga 05:30 keesokan harinya, meliputi waktu perdagangan Asia dan perdagangan awal Eropah, yang merupakan tempoh penting bagi banyak aktiviti pasaran.
Isyarat masuk:
Pengurusan Risiko:
Pentadbiran sesi:
Proses pelaksanaan strategi adalah sangat automatik: pertama-tama menentukan julat harga, kemudian berdagang mengikut parameter risiko yang telah ditetapkan semasa penembusan julat, dan akhirnya memastikan semua kedudukan rata pada akhir sesi. Kaedah ini bukan sahaja menangkap pergerakan ketika pasaran beralih dari turun naik rendah ke turun naik tinggi, tetapi juga meminimumkan keputusan subjektif dengan peraturan masuk dan keluar yang jelas.
Dari analisis mendalam mengenai struktur kod dan logik strategi ini, kita dapat menyimpulkan kelebihan yang ketara berikut:
Rangka masa yang jelasStrategi ini memberi tumpuan kepada masa pasaran tertentu (masa perdagangan Asia dan awal Eropah), iaitu masa peralihan penting dari pasaran yang kurang aktif ke pasaran yang lebih aktif, yang memberikan peluang perdagangan yang lebih baik.
Kriteria kemasukan yang objektifPenggunaan julat harga yang jelas sebagai titik rujukan yang memecahkan, menghapuskan faktor subjektif dalam keputusan perdagangan, meningkatkan keserasian dan kebolehulangan sistem.
Pengurusan risiko bersepadu: Setiap perdagangan mempunyai kedudukan hentian yang telah ditentukan (perbatasan di sisi lain dari julat) dan memastikan peraturan pengurusan wang dengan tujuan keuntungan berbanding risiko berbanding pengiraan automatik.
Sistem kawalan sesi: Setiap sesi perdagangan hanya menjalankan satu perdagangan, mengelakkan risiko overtrading dan kerugian berterusan, dan memastikan peluang untuk menilai semula dalam keadaan pasaran baru.
Pelaksanaan automatikDari penentuan selang, pengesahan isyarat hingga pengurusan kedudukan, keseluruhan proses adalah automatik, mengurangkan gangguan emosi dan meningkatkan kecekapan pelaksanaan.
Sistem maklum balas visualStrategi menyediakan ciri-ciri bantuan visual seperti paparan selang, penanda masuk dan petunjuk warna latar belakang untuk membantu peniaga memahami keadaan pasaran dan operasi strategi dengan lebih intuitif.
Fungsi amaran: Menjana isyarat masuk dan keluar secara automatik, memastikan pedagang dapat memahami isyarat perdagangan tepat pada masanya walaupun tidak memantau carta secara langsung.
Rasio ganjaran risiko boleh disesuaikan: Memungkinkan pengguna untuk menyesuaikan nisbah ganjaran risiko mengikut keutamaan risiko peribadi dan keadaan pasaran, meningkatkan fleksibiliti dan kesesuaian strategi.
Walaupun terdapat banyak kelebihan, strategi ini mempunyai risiko dan batasan yang berpotensi:
Risiko penembusan palsuPenyelesaian: Anda boleh mempertimbangkan untuk menambah mekanisme pengesahan, seperti meminta harga untuk bertahan untuk jangka masa tertentu atau mencapai tahap tertentu untuk mencetuskan masuk.
Kurangnya penapis persekitaran pasaranStrategi semasa tidak mengambil kira keadaan pasaran keseluruhan (seperti kekuatan trend, kesamarataan kadar turun naik), dan mungkin masih melakukan perdagangan dalam keadaan pasaran yang tidak sesuai untuk melakukan perdagangan pecah. Penyelesaian: Pengenalan penunjuk keadaan pasaran sebagai syarat penapis perdagangan, seperti ATR (rangkaian sebenar rata-rata) atau penunjuk kekuatan trend.
Batasan pada selang masa tetapMenggunakan tempoh masa tetap ((19:15-19:30 IST) untuk menentukan julat harga, mungkin tidak berlaku untuk semua keadaan pasaran atau perubahan bermusim. Penyelesaian: Pertimbangkan untuk menggunakan julat masa yang dinamik atau menyesuaikan julat masa secara automatik mengikut indikator aktiviti pasaran.
Had Session TunggalPenyelesaian: Anda boleh merancang mekanisme kemasukan semula yang lebih fleksibel, sambil mengekalkan kawalan risiko yang sesuai.
Setup risiko stop loss: Menggunakan sempadan julat sebagai titik hentian, yang boleh menyebabkan jarak hentian yang lebih besar di pasaran yang bergelombang tinggi. . Cara penyelesaian: Pertimbangkan untuk memperkenalkan had jumlah hentian maksimum atau tetapan hentian dinamik berdasarkan ATR.
Sesi penutupan penutupan paksaPenyelesaian: membenarkan kedudukan untuk dilanjutkan ke sesi seterusnya dengan syarat tertentu, atau membuat keputusan sama ada untuk mengekalkan kedudukan berdasarkan keadaan pasaran.
Ketergantungan zon waktuKaedah: Bergantung kepada zon waktu tertentu (IST), mungkin perlu disesuaikan untuk peniaga yang beroperasi di zon waktu yang berbeza. Penyelesaian: Menyediakan fungsi penukaran zon waktu atau pilihan untuk menetapkan parameter berdasarkan waktu tempatan.
Berdasarkan analisis yang mendalam mengenai kod strategi, berikut adalah beberapa kemungkinan arah pengoptimuman:
Menambah mekanisme pengesahan penembusan: memperkenalkan pengesahan tingkah laku harga atau penapisan petunjuk teknikal untuk mengurangkan isyarat pecah palsu. Sebagai contoh, boleh meminta peningkatan jumlah transaksi selepas pecah, atau menggunakan petunjuk seperti RSI untuk mengesahkan arah momentum. Pengoptimuman seperti ini dapat meningkatkan kualiti isyarat dengan ketara dan mengurangkan perdagangan yang salah.
Memperkenalkan penilaian persekitaran pasaran: Sebelum melakukan transaksi terobosan, menilai sama ada keadaan pasaran semasa sesuai untuk perdagangan seperti itu. Indikator berikut boleh digunakan:
Pindaan lebar dinamik: Mengubah lebar julat harga secara automatik mengikut kadar turun naik sejarah. Julat yang lebih luas digunakan dalam persekitaran turun naik yang tinggi, julat yang lebih sempit digunakan dalam persekitaran turun naik yang rendah. Penyesuaian yang beradaptasi ini membolehkan strategi menyesuaikan diri dengan lebih baik dengan keadaan pasaran yang berbeza.
Optimumkan parameter masaAnalisis kadar kejayaan penembusan untuk tempoh masa yang berbeza untuk mencari masa yang paling baik untuk menentukan masa dan sesi perdagangan. Ini mungkin melibatkan kajian semula data sejarah untuk menentukan mana tempoh masa yang paling berjaya untuk penembusan.
Memperkenalkan mekanisme penguncian keuntungan separa: Apabila perdagangan mencapai tahap keuntungan tertentu, bergerak berhenti kepada harga kos atau mengunci sebahagian keuntungan untuk melindungi keuntungan yang telah dicapai. Teknik ini dapat mengimbangi nisbah pulangan risiko dan meningkatkan keuntungan keseluruhan.
Tambah syarat penapisan: Memperkenalkan syarat penapisan teknikal atau asas lain, seperti:
Analisis pelbagai kerangka masaSebelum melakukan perdagangan terobosan dalam jangka masa 15 minit, pertimbangkan struktur pasaran dan arah trend dalam jangka masa yang lebih tinggi (seperti 1 jam atau 4 jam). Kaedah analisis atas ke bawah ini dapat meningkatkan ketepatan arah perdagangan.
Optimumkan parameter pengurusan risikoKaedah pengiraan perbandingan ganjaran risiko dan saiz kedudukan berdasarkan data prestasi sejarah. Anda boleh mempertimbangkan untuk melaksanakan sistem pengurusan risiko dinamik yang menyesuaikan parameter risiko secara automatik berdasarkan prestasi strategi dan keadaan pasaran terkini.
Strategi penembusan masa adalah kaedah perdagangan kuantitatif yang sistematik yang memberi tumpuan kepada menangkap peluang momentum yang timbul ketika pasaran beralih dari tempoh turun naik rendah ke tempoh turun naik tinggi. Dengan menentukan julat harga pada masa tertentu (pada pukul 19:15-19:30 IST) dan melakukan perdagangan ketika harga menembusi julat tersebut, strategi ini dapat memanfaatkan dinamik harga yang dihasilkan oleh kitaran pasaran dan peralihan masa perdagangan dengan berkesan.
Kelebihan utama strategi ini adalah standard kemasukan yang objektif, sistem pengurusan risiko yang bersepadu dan proses pelaksanaan yang sepenuhnya automatik, ciri-ciri ini mengurangkan gangguan emosi dan meningkatkan konsistensi perdagangan. Walau bagaimanapun, strategi ini juga menghadapi cabaran seperti risiko penembusan palsu, keterbatasan parameter masa tetap dan kekurangan penapisan keadaan pasaran.
Strategi ini mempunyai potensi untuk meningkatkan lagi prestasi dan kesesuaian dengan memperkenalkan mekanisme pengesahan terobosan, penilaian persekitaran pasaran, penyesuaian parameter dinamik dan analisis jangka masa berbilang. Secara khusus, penambahan penapisan petunjuk teknikal dan mekanisme pengurusan risiko dinamik mungkin merupakan penambahbaikan yang paling berharga.
Secara keseluruhannya, strategi perdagangan terobosan selang masa memberikan pedagang cara yang tersusun untuk menangkap peluang dinamik pasaran dan menguruskan risiko melalui peraturan yang jelas dan pelaksanaan automatik. Bagi pedagang kuantitatif yang mencari kaedah perdagangan sistematik, strategi ini memberikan kerangka asas yang boleh dipercayai yang dapat disesuaikan dan dioptimumkan lebih lanjut mengikut keperluan individu dan keadaan pasaran.
/*backtest
start: 2025-01-01 00:00:00
end: 2025-03-02 00:00:00
period: 15m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":200000}]
*/
//@version=6
strategy("BTC 15m Range Breakout Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// Input parameters
show_range = input.bool(true, "Show Range Box", group="Display")
range_color = input.color(color.new(color.blue, 80), "Range Box Color", group="Display")
// Session timing inputs
session_start_hour = input.int(19, "Session Start Hour", minval=0, maxval=23, group="Session Timing")
session_start_minute = input.int(0, "Session Start Minute", minval=0, maxval=59, group="Session Timing")
session_end_hour = input.int(5, "Session End Hour", minval=0, maxval=23, group="Session Timing")
session_end_minute = input.int(30, "Session End Minute", minval=0, maxval=59, group="Session Timing")
// Risk-Reward ratio input
rr_ratio = input.float(2.0, "Risk-Reward Ratio", minval=0.5, maxval=10.0, step=0.1, group="Risk Management")
range_start_hour = 19
range_start_minute = 15
range_end_hour = 19
range_end_minute = 30
// Function to check if current time is within session (IST)
is_session_time() =>
current_hour = hour(time, "Asia/Kolkata")
current_minute = minute(time, "Asia/Kolkata")
// Check if within session (19:00 to 05:30 IST next day)
if session_start_hour <= session_end_hour
current_hour >= session_start_hour and current_hour <= session_end_hour
else
current_hour >= session_start_hour or current_hour <= session_end_hour
// Function to check if current time is within range definition period (19:15 to 19:30 IST)
is_range_time() =>
current_hour = hour(time, "Asia/Kolkata")
current_minute = minute(time, "Asia/Kolkata")
(current_hour == range_start_hour and current_minute >= range_start_minute and current_minute <= range_end_minute)
// Variables to store range
var float range_high = na
var float range_low = na
var int range_start_time = na
var bool range_defined = false
var bool position_taken = false
// Reset variables at start of new session
new_session = ta.change(time("D")) != 0
if new_session
range_high := na
range_low := na
range_start_time := na
range_defined := false
position_taken := false
// Define range during 19:15 to 19:30 IST
if is_range_time() and timeframe.period == "15" and is_session_time()
if na(range_high) or na(range_low)
range_high := high
range_low := low
range_start_time := time
range_defined := false
else
range_high := math.max(range_high, high)
range_low := math.min(range_low, low)
// Mark range as defined at 19:30
if hour(time, "Asia/Kolkata") == 19 and minute(time, "Asia/Kolkata") == 30
range_defined := true
// Draw range box
var box range_box = na
if show_range and not na(range_high) and not na(range_low) and not na(range_start_time)
if not na(range_box)
box.delete(range_box)
// Strategy logic
if range_defined and is_session_time() and not position_taken and not na(range_high) and not na(range_low)
// Long entry on breakout above range
if close > range_high and strategy.position_size == 0
entry_price = close
sl_price = range_low
risk = entry_price - sl_price
tp_price = entry_price + (risk * rr_ratio) // User-defined RR target
strategy.entry("Long", strategy.long)
strategy.exit("Long Exit", "Long", stop=sl_price, limit=tp_price)
// Long entry alert
alert("LONG ENTRY: Price " + str.tostring(entry_price, "#.##") + " | SL: " + str.tostring(sl_price, "#.##") + " | TP: " + str.tostring(tp_price, "#.##"), alert.freq_once_per_bar)
// Visual labels
label.new(bar_index, high, "LONG\nEntry: " + str.tostring(entry_price, "#.##") + "\nSL: " + str.tostring(sl_price, "#.##") + "\nTP: " + str.tostring(tp_price, "#.##"),
style=label.style_label_right, color=color.green, textcolor=color.white, size=size.normal)
position_taken := true
// Short entry on breakout below range
else if close < range_low and strategy.position_size == 0
entry_price = close
sl_price = range_high
risk = sl_price - entry_price
tp_price = entry_price - (risk * rr_ratio) // User-defined RR target
strategy.entry("Short", strategy.short)
strategy.exit("Short Exit", "Short", stop=sl_price, limit=tp_price)
// Short entry alert
alert("SHORT ENTRY: Price " + str.tostring(entry_price, "#.##") + " | SL: " + str.tostring(sl_price, "#.##") + " | TP: " + str.tostring(tp_price, "#.##"), alert.freq_once_per_bar)
// Visual labels
label.new(bar_index, low, "SHORT\nEntry: " + str.tostring(entry_price, "#.##") + "\nSL: " + str.tostring(sl_price, "#.##") + "\nTP: " + str.tostring(tp_price, "#.##"),
style=label.style_label_right, color=color.red, textcolor=color.white, size=size.normal)
position_taken := true
// Exit alerts
if strategy.position_size[1] != 0 and strategy.position_size == 0
if strategy.position_size[1] > 0
alert("LONG EXIT: Position closed", alert.freq_once_per_bar)
else
alert("SHORT EXIT: Position closed", alert.freq_once_per_bar)
// Close positions at end of session (05:30 IST)
if not is_session_time() and strategy.position_size != 0
strategy.close_all("Session End")
// Plot range levels
plot(range_defined ? range_high : na, "Range High", color=color.red, linewidth=2, style=plot.style_linebr)
plot(range_defined ? range_low : na, "Range Low", color=color.green, linewidth=2, style=plot.style_linebr)
// Background color for range definition period
bgcolor(is_range_time() and is_session_time() ? color.new(color.teal, 70) : na, title="Range Definition Period")
// Background color for session
//bgcolor(is_session_time() ? color.new(color.blue, 95) : na, title="Trading Session")