
Strategi perdagangan kuantitatif terobosan jalur sempit pergerakan rata-rata berliku adalah sistem perdagangan lanjutan yang berdasarkan prinsip pengajaran Oliver Velez, menggabungkan unsur-unsur teras analisis teknikal dan perdagangan dinamik. Strategi ini menggunakan hubungan antara jangka pendek (20 kitaran) dan jangka panjang (200 kitaran) rata-rata bergerak sederhana (SMA), menggabungkan dinamika harga, kelembapan dan bentuk kejatuhan, mencari peluang perdagangan terobosan dengan kebarangkalian tinggi di kawasan jalur sempit.
Prinsip-prinsip utama strategi ini adalah berdasarkan kepada beberapa faktor utama berikut:
Sistem purata bergerak bergandaStrategi: Menggunakan 20 kitaran SMA dan 200 kitaran SMA untuk mewujudkan rangka kerja perdagangan. Sistem mencari isyarat perdagangan yang berpotensi apabila jarak antara kedua-dua garis rata-rata adalah kecil ((keadaan jalur sempit, perbezaan kurang dari 1.5%).
Pengesahan salin rataStrategi: Memastikan pasaran mempunyai cukup momentum dengan mengira sudut 20 kitaran SMA (dengan menggunakan fungsi pemutus balik), dan hanya mempertimbangkan masuk apabila sudut lebih besar daripada 30 darjah.
Jenis isyarat masuk:
Rangka Kerja Pengurusan Risiko:
Penghakiman keadaan pasaranStrategi untuk menilai keadaan pasaran dengan mengira jarak relatif antara dua garis rata:
Keperluan kemasukan berbilang kepala: Keadaan jalur sempit + Kemiringan berkesan + Harga penutupan lebih tinggi daripada SMA20 + SMA20 lebih tinggi daripada SMA200 + Bentuk tiang gajah. Keperluan kemasukan kosong: Keadaan jalur sempit + Kemiringan berkesan + Harga penutupan di bawah SMA20 + SMA20 di bawah SMA200 + Bentuk tiang gajah.
Dengan analisis kod yang mendalam, strategi ini mempunyai kelebihan yang ketara:
Mekanisme pengesahan bergandaStrategi ini menggabungkan faktor pengesahan pelbagai dimensi seperti perbandingan garis rata, kemerosotan garis rata, kedudukan harga dan bentuk kejatuhan khas, dengan berkesan menapis isyarat berkualiti rendah dan meningkatkan kualiti perdagangan.
Memperbaiki keadaan pasaranDengan membezakan antara keadaan jalur sempit dan jalur lebar, strategi ini dapat mencari peluang dalam keadaan pasaran yang paling sesuai dan mengelakkan mengejar tinggi dan rendah dalam trend yang telah berkembang.
Pengurusan risiko dinamik: Menggunakan ATR sebagai alat untuk mengukur kadar turun naik, memastikan matlamat berhenti dan keuntungan boleh disesuaikan dengan dinamik turun naik pasaran semasa, dan bukannya menggunakan mata tetap.
Strategi keuntungan bertingkatMenggunakan strategi dua peringkat, sebahagian keuntungan dan keuntungan akhir, ia menjamin untuk mengunci sebahagian keuntungan dalam keadaan yang baik, dan tidak akan kehilangan trend besar dengan meninggalkan semua terlalu awal.
Mekanisme Peningkatan Taruhan Pintar: Memberi peluang kenaikan kedudukan melalui isyarat perubahan warna, membenarkan maksimum dua kenaikan kedudukan dalam trend yang sama, mengoptimumkan kecekapan penggunaan modal.
Perlindungan Hentikan Kerosakan Bergerak: Apabila harga mencapai sasaran keuntungan pertama, stop loss akan dipindahkan secara automatik ke titik keseimbangan keuntungan dan kerugian, mewujudkan perdagangan “nol risiko” dan melindungi keuntungan yang telah diperoleh.
Pembantu visualStrategi menyediakan petunjuk visual yang jelas dan dashboard yang membantu peniaga mengenali isyarat dan keadaan pasaran secara intuitif, memudahkan proses membuat keputusan.
Integrasi tingkah laku harga dengan petunjuk teknikalIa menggabungkan teori Oliver Velez mengenai tingkah laku harga dengan petunjuk teknologi tradisional untuk mewujudkan sistem perdagangan yang lebih kukuh.
Walaupun strategi ini direka dengan baik, terdapat risiko dan cabaran yang berpotensi:
Kepekaan ParameterPrestasi strategi sangat bergantung pada parameter utama seperti kitaran SMA, panjang ATR dan nisbah pulangan risiko. Pasaran dan jangka masa yang berbeza mungkin memerlukan kombinasi parameter yang berbeza, yang memerlukan pengesanan dan pengoptimuman sejarah yang mencukupi.
Risiko penembusan palsuPenembusan di kawasan yang sempit kadang-kadang menjadi penembusan palsu, terutamanya dalam persekitaran pasaran yang rendah. Walaupun strategi menggunakan “tiang gajah” diperlukan untuk mengurangkan penembusan palsu, ia tidak dapat dielakkan sepenuhnya.
Titik tergelincir dan risiko pelaksanaanDalam perdagangan dalam talian, terutamanya apabila turun naik yang besar, mungkin menghadapi masalah titik tergelincir, yang menyebabkan harga masuk sebenar tidak sesuai dengan harga yang ideal, yang menjejaskan keseluruhan struktur ganjaran risiko.
Cabaran Pengurusan Dana: penggunaan 10% dana tetap dan membenarkan dua kali kenaikan, yang boleh menyebabkan risiko yang terlalu besar jika kerugian berturut-turut atau turun naik pasaran yang teruk.
Terlalu bergantung pada garis purataStrategi ini bergantung kepada arah trend yang ditentukan oleh SMA, tetapi dalam pasaran yang bergolak, garis purata mungkin sering bersilang dan menghasilkan terlalu banyak isyarat palsu.
Kurangnya penapis persekitaran pasaranStrategi tidak disesuaikan dengan keadaan pasaran makro yang berbeza (seperti turun naik atau turun naik, bull market atau bear market) dan mungkin tidak berfungsi dengan baik pada tahap pasaran tertentu.
Pengecutan pada kurva kewanganOleh kerana strategi ini membenarkan penambahan kedudukan, ia boleh menyebabkan penarikan balik akaun yang lebih besar jika trend berbalik secara tiba-tiba, terutamanya apabila pasaran berbalik selepas dua kali penambahan kedudukan.
Penyelesaian termasuk: menambah penapis persekitaran pasaran tambahan, menyesuaikan nisbah pengurusan dana, menyesuaikan parameter secara dinamik mengikut keadaan pasaran yang berbeza, dan pertimbangkan untuk menambah petunjuk teknikal lain untuk mengesahkan isyarat.
Berdasarkan analisis kod, strategi ini boleh dioptimumkan dalam beberapa arah:
Dinamik NarrowbandStrategi semasa menggunakan 1.5% dan 2% yang tetap sebagai had penilaian untuk jalur sempit dan lebar. Anda boleh mempertimbangkan untuk menyesuaikan had ini mengikut pergerakan kadar turun naik sejarah, supaya strategi lebih sesuai dengan keadaan pasaran yang berbeza. Sebab pengoptimuman: Pasar dan jangka masa yang berbeza mempunyai ciri-ciri turun naik yang berbeza, dan had tetap mungkin tidak cukup fleksibel.
Peningkatan sistem garis rataAnda boleh mempertimbangkan untuk menambah garis purata pertengahan (seperti SMA 50 kitaran) untuk membentuk sistem tiga garis purata, atau cuba menggantikan SMA dengan purata bergerak indeks (EMA) untuk meningkatkan kepekaan terhadap perubahan harga. Sebab pengoptimuman: Menambah titik rujukan pertengahan dapat memberikan pandangan pasaran yang lebih menyeluruh, dan EMA lebih sensitif terhadap tindak balas perubahan harga terkini.
Peningkatan dalam pengiraan kemerosotanPengiraan cerun semasa agak mudah, anda boleh mempertimbangkan untuk menggunakan cerun regresi linear atau perubahan cerun berkala untuk mendapatkan petunjuk arah yang lebih stabil. Sebab pengoptimuman: Pengiraan cerun satu titik mudah dipengaruhi oleh turun naik jangka pendek, dan peningkatan dapat meningkatkan kestabilan penilaian arah.
Tambah pengesahan jumlah: Tambah syarat kuantiti transaksi dalam isyarat masuk, seperti menuntut “tiang gajah” yang disertai dengan penembusan yang lebih tinggi daripada kuantiti transaksi rata-rata. Sebab pengoptimuman: kuantiti transaksi adalah faktor pengesahan yang penting untuk keberkesanan perubahan harga, yang dapat mengurangkan penembusan palsu secara signifikan.
Tahap risiko dan ganjaran dinamikBergantung kepada turun naik pasaran atau peratusan ATR, kadar pulangan risiko disesuaikan secara dinamik. Rasio RR yang lebih tinggi digunakan dalam pasaran turun naik yang rendah, dan tetapan yang lebih konservatif digunakan dalam pasaran turun naik yang tinggi. Sebab pengoptimuman: Potensi keuntungan berbeza dalam persekitaran turun naik yang berbeza, penyesuaian dinamik dapat mengoptimumkan pendapatan yang diharapkan untuk setiap perdagangan.
Optimumkan syarat-syarat penambahanSyarat pelepasan sekarang lebih longgar, anda boleh mempertimbangkan untuk menambah pengesahan kekuatan trend atau hanya mengambil kedudukan apabila harga kembali ke titik sokongan / rintangan utama. Sebab pengoptimuman: Syarat pelepasan yang lebih ketat dapat meningkatkan peluang untuk menambah kedudukan dan mengurangkan risiko keseluruhan.
Penapisan persekitaran pasaran: Tambah penapis persekitaran pasaran makro, seperti penunjuk kadar turun naik (seperti VIX) atau penunjuk kekuatan trend, untuk mengurangkan atau menangguhkan perdagangan dalam keadaan pasaran yang tidak menguntungkan. Sebab pengoptimuman: Performa strategi sangat berbeza di peringkat pasaran yang berbeza, penapis persekitaran dapat mengelakkan perdagangan dalam keadaan yang tidak menguntungkan.
Strategi penangguhan kerugian beradaptasiPenyelesaian: Mengembangkan strategi penutupan kerugian yang beradaptasi berdasarkan struktur pasaran, seperti menggunakan tahap tinggi dan rendah, peratusan turun naik, atau struktur harga sebagai titik rujukan penutupan kerugian yang dinamik. Sebab pengoptimuman: Penutupan kerugian dengan kelipatan ATR tetap kadang-kadang tidak sesuai dengan struktur pasaran, dan kaedah penyesuaian lebih sesuai dengan tingkah laku harga sebenar.
Strategi dagangan kuantitatif terobosan jalur sempit dinamik adalah sistem perdagangan komprehensif yang menggabungkan pelbagai elemen analisis teknikal, yang menyediakan pedagang dengan cara yang terstruktur untuk mengambil bahagian dalam pasaran melalui syarat kemasukan yang jelas, mekanisme pengesahan bertingkat, dan kerangka pengurusan risiko yang baik. Strategi ini berdasarkan konsep analisis teknikal asas seperti SMA, ATR, dan tingkah laku harga, tetapi menggabungkan unsur-unsur ini ke dalam sistem perdagangan yang jelas melalui metodologi Oliver Velez.
Kelebihan utama strategi ini adalah keupayaannya untuk mengenal pasti peluang penembusan yang berkemungkinan tinggi di kawasan yang sempit dengan purata bergerak dan mengesahkan keberkesanan isyarat melalui corak harga tertentu seperti “tiang gajah” dan “perubahan warna”. Di samping itu, struktur pengurusan risiko yang baik memastikan keselamatan dana dan perlindungan keuntungan.
Walau bagaimanapun, strategi ini juga menghadapi isu-isu seperti sensitiviti parameter, risiko penembusan palsu dan cabaran pengurusan wang. Ketahanan dan kebolehpasaran strategi dapat ditingkatkan lagi dengan mengoptimumkan nilai terhad jalur sempit, meningkatkan sistem garis rata-rata, meningkatkan pengiraan kemiringan, menambah pengesahan jumlah transaksi, melaksanakan nisbah pulangan risiko dinamik, mengoptimumkan syarat kenaikan, menambah penapisan keadaan pasaran dan mengembangkan strategi penangguhan kerugian yang beradaptasi.
Secara keseluruhannya, ini adalah strategi perdagangan kuantitatif yang dirancang dengan logik yang jelas dan logik yang sesuai untuk pelabur yang mempunyai pengalaman perdagangan tertentu, terutamanya mereka yang lebih suka analisis teknikal dan kaedah perdagangan sistematik. Dengan pengoptimuman parameter dan pengurusan risiko yang sesuai, strategi ini berpotensi untuk mencapai prestasi perdagangan yang stabil dalam pelbagai persekitaran pasaran.
/*backtest
start: 2024-05-13 00:00:00
end: 2025-05-12 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("Oliver Velez Advanced Strategy v2", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10, pyramiding=2, calc_on_order_fills=true, calc_on_every_tick=true)
// === INPUTS ===
smaLen1 = input.int(20, title="SMA Short")
smaLen2 = input.int(200, title="SMA Long")
atrLen = input.int(14, title="ATR Length")
rr1 = input.float(2.5, title="RR for Partial Profit", step=0.1)
rr2 = input.float(4.0, title="RR for Final Profit", step=0.1)
// === INDICATORS ===
sma20 = ta.sma(close, smaLen1)
sma200 = ta.sma(close, smaLen2)
atr = ta.atr(atrLen)
angle = math.atan(sma20 - sma20[1]) * 180 / math.pi
// === STATES ===
isNarrow = math.abs(sma20 - sma200) / sma200 < 0.015
isWide = math.abs(sma20 - sma200) / sma200 >= 0.02
validSlope = angle > 30
// === CANDLE PATTERNS ===
elephant_long = close > open and (close - open) > 1.5 * atr and high > high[1]
elephant_short = close < open and (open - close) > 1.5 * atr and low < low[1]
color_change_long = close > open and close[1] < open[1]
color_change_short = close < open and close[1] > open[1]
// === LONG ENTRY ===
long_primary = isNarrow and validSlope and close > sma20 and sma20 > sma200 and elephant_long
long_add = isNarrow and color_change_long and close > sma20
long_entry_price = close
long_stop = math.min(low, close - 2 * atr)
long_risk = long_entry_price - long_stop
long_tp1 = long_entry_price + rr1 * long_risk
long_tp2 = long_entry_price + rr2 * long_risk
// === SHORT ENTRY ===
short_primary = isNarrow and validSlope and close < sma20 and sma20 < sma200 and elephant_short
short_add = isNarrow and color_change_short and close < sma20
short_entry_price = close
short_stop = math.max(high, close + 2 * atr)
short_risk = short_stop - short_entry_price
short_tp1 = short_entry_price - rr1 * short_risk
short_tp2 = short_entry_price - rr2 * short_risk
// === LONG EXECUTION ===
if (long_primary)
strategy.entry("Long Entry", strategy.long, comment="Elephant Bar Long")
strategy.exit("Long TP1", from_entry="Long Entry", limit=long_tp1, stop=long_stop)
strategy.exit("Long TP2", from_entry="Long Entry", qty_percent=50, limit=long_tp2)
if (long_add)
strategy.entry("Long Add", strategy.long, comment="Color Change Long")
strategy.exit("Add TP1", from_entry="Long Add", limit=long_tp1, stop=long_stop)
strategy.exit("Add TP2", from_entry="Long Add", qty_percent=50, limit=long_tp2)
// === SHORT EXECUTION ===
if (short_primary)
strategy.entry("Short Entry", strategy.short, comment="Elephant Bar Short")
strategy.exit("Short TP1", from_entry="Short Entry", limit=short_tp1, stop=short_stop)
strategy.exit("Short TP2", from_entry="Short Entry", qty_percent=50, limit=short_tp2)
if (short_add)
strategy.entry("Short Add", strategy.short, comment="Color Change Short")
strategy.exit("Short TP1 Add", from_entry="Short Add", limit=short_tp1, stop=short_stop)
strategy.exit("Short TP2 Add", from_entry="Short Add", qty_percent=50, limit=short_tp2)
// === BREAKEVEN CHECK ===
var float breakeven_price = na
long_breakeven_trigger = high >= long_tp1
short_breakeven_trigger = low <= short_tp1
breakeven_price := long_breakeven_trigger or short_breakeven_trigger ? close : breakeven_price
// === ALERTS ===
alertcondition(long_primary, title="Long Elephant", message="Elephant Bar Long Entry Triggered!")
alertcondition(long_add, title="Color Change Long", message="Color Change Long Entry Triggered!")
alertcondition(long_breakeven_trigger, title="Long Breakeven", message="Move SL to Breakeven for Long")
alertcondition(short_primary, title="Short Elephant", message="Elephant Bar Short Entry Triggered!")
alertcondition(short_add, title="Color Change Short", message="Color Change Short Entry Triggered!")
alertcondition(short_breakeven_trigger, title="Short Breakeven", message="Move SL to Breakeven for Short")
// === PLOTTING ===
plot(sma20, color=color.orange, title="SMA 20")
plot(sma200, color=color.blue, title="SMA 200")
bgcolor(isNarrow ? color.new(color.green, 85) : na)
plotshape(long_primary, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small, text="E")
plotshape(long_add, style=shape.circle, location=location.belowbar, color=color.lime, size=size.tiny, text="A")
plotshape(short_primary, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small, text="E")
plotshape(short_add, style=shape.circle, location=location.abovebar, color=color.maroon, size=size.tiny, text="A")
// === DASHBOARD ===
var label dash = na
label.delete(dash)
dash := label.new(x=bar_index, y=high, text=
"Oliver Velez Strategy\n" +
"SMA 20 Slope: " + str.tostring(angle, "#.##") + "°\n" +
"State: " + (isNarrow ? "NARROW" : "WIDE") + "\n" +
"Last Entry: " + (long_primary ? "Long E-Bar" : long_add ? "Long Add" : short_primary ? "Short E-Bar" : short_add ? "Short Add" : "None") + "\n" +
"Breakeven: " + (breakeven_price != na ? str.tostring(breakeven_price, "#.##") : "No"), style=label.style_label_left, color=color.new(color.black, 85), textcolor=color.white)