
Strategi penembusan rintangan sokongan dan trend - Sistem perdagangan kuantitatif penapis ADX adalah strategi perdagangan komprehensif yang menggabungkan pengenalan rintangan sokongan, pengesahan trend dan pengesahan kekuatan pasaran dalam analisis teknikal. Strategi ini berdasarkan pada tindakan penembusan harga pasaran ke tahap harga kritikal dan meningkatkan kebolehpercayaan isyarat perdagangan dengan menggunakan purata bergerak dan indeks arah rata-rata ((ADX) sebagai penapis. Sistem menggunakan rangka masa 1 jam untuk membina zon penembusan rintangan sokongan dinamik dengan mengenal pasti titik tinggi dan rendah aksen, dan menetapkan mekanisme stop loss peratusan tetap untuk mengawal risiko apabila isyarat perdagangan keluar di kawasan harga ini.
Prinsip-prinsip utama strategi ini adalah berdasarkan kepada tindakan harga yang menembusi di titik-titik penyokong rintangan yang penting, yang digabungkan dengan penapisan arah trend dan kekuatan pasaran untuk membentuk sistem perdagangan yang lengkap. Prinsip-prinsip pelaksanaan termasuk:
Pengiktirafan bit rintangan sokonganSistem menggunakan Pivot Points untuk mengenal pasti tahap harga penting.ta.pivothighdanta.pivotlowFungsi yang mengira titik-titik yang tinggi dan rendah dengan 5 kitaran sebagai parameter lalai dan mengambil titik-titik ini sebagai titik rintangan dan sokongan yang berpotensi.
Pengurusan kawasan dinamikSistem menggunakan struktur array:supportLevelsdanresistanceLevelsSimpan bit sokongan rintangan dan dengan fungsi tersuaif_add_levelFungsi ini memastikan tahap yang baru ditambahkan mempunyai jarak yang mencukupi dari tahap yang sedia ada (default 2%) untuk mengelakkan kesesakan kawasan, sambil mengehadkan maksimum 5 tahap terkini.
Penapis pengesahan trendStrategi menggunakan purata bergerak sederhana 50 kitaran ((SMA) sebagai penunjuk arah trend. Hanya pertimbangkan untuk melakukan lebih banyak apabila harga berada di atas garis purata, dan pertimbangkan untuk mengambil ruang apabila berada di bawah garis purata, untuk mematuhi trend pasaran keseluruhan.
Pengesahan kekuatan pasaran: menilai kekuatan pasaran melalui fungsi ADX yang disesuaikan. Nilai ADX mestilah lebih tinggi daripada nilai tunjangan yang ditetapkan.
Isyarat masuk dihasilkan:
Mekanisme pengurusan risikoStrategi menggunakan seting stop loss dengan peratusan tetap, seting stop loss dan stop loss dengan peratusan 15%, dan seting stop loss dan stop loss dengan peratusan 10%, dan seting stop loss dan stop loss dengan peratusan 10%. Apabila harga mencapai tahap ini, sistem akan secara automatik melonggarkan kedudukan dan menetapkan semula keadaan perdagangan.
Berdasarkan analisis mendalam kod, strategi ini mempunyai kelebihan yang ketara:
Mekanisme pengesahan berganda: Pengesahan tiga kali dengan menggabungkan penembusan rintangan sokongan, arah trend dan kekuatan ADX, mengurangkan risiko penembusan palsu secara berkesan.
Dinamika sokongan kawasan rintanganSistem secara dinamik mengenal pasti dan menguruskan tahap sokongan dan rintangan yang dapat disesuaikan dengan keadaan pasaran yang berbeza. Mengekalkan sehingga 5 tahap sokongan dan rintangan terkini, memastikan strategi memberi tumpuan kepada tahap harga yang paling relevan.
Pengumpulan Wilayah Cerdas: Dengan parameter peratusan lebar zon maksimum ((maxZoneWidthPct), pengiraan semula bit rintangan sokongan yang terlalu dekat dihindari, mengurangkan isyarat berlebihan.
Pengiraan ADX tersuai: Strategi menggunakan fungsi ADX tersuai untuk memastikan ketepatan dan fleksibiliti pengiraan penunjuk dengan mengira secara langsung lebar gelombang sebenar, pergerakan arah dan pemprosesan yang lancar.
Konfigurasi parameter yang fleksibelStrategi ini menyediakan pelbagai parameter yang boleh disesuaikan, termasuk panjang sumbu pusat, kitaran pengulangan, lebar kawasan maksimum, peratusan stop loss dan ADX threshold, yang boleh dioptimumkan oleh pengguna mengikut keadaan pasaran dan pilihan perdagangan yang berbeza.
Kawalan risiko jelas: Menyediakan kerangka pengurusan risiko yang jelas untuk setiap dagangan dengan peratusan stop loss yang ditetapkan, mencegah kerugian yang berlebihan dalam satu dagangan, sambil mengunci keuntungan yang wajar.
Visualisasi IntuitifStrategi: Menandai sokongan rintangan dan isyarat perdagangan pada carta, memberikan maklum balas visual yang intuitif melalui kod warna ((support berwarna hijau, rintangan berwarna merah) dan label ((LONG, SHORT, EXIT), untuk memudahkan analisis dan pemantauan masa nyata.
Walaupun strategi ini direka dengan baik, terdapat risiko dan batasan yang berpotensi:
Penembusan palsu dalam pasaran yang bergolakDalam keadaan pasaran yang bergelombang tinggi, harga mungkin sering menembusi tahap rintangan sokongan dan kemudian kembali ke kawasan asal, menyebabkan peningkatan isyarat pecah palsu. Penyelesaian: Anda boleh mempertimbangkan untuk menambah kitaran pengesahan, yang memerlukan harga untuk bertahan untuk masa tertentu atau membentuk bentuk tertentu selepas pecah untuk mengesahkan isyarat.
Terlalu banyak bergantung pada tahap rintangan sokongan sejarahStrategi: Berdasarkan kepada penubuhan sokongan dan rintangan yang telah dijumpai dalam sejarah, tahap-tahap sejarah ini mungkin tidak berfungsi apabila struktur pasaran berubah secara mendasar (seperti peristiwa berita utama). Penyelesaian: Anda boleh mempertimbangkan untuk menambah mekanisme penyesuaian dinamik, yang secara automatik menyesuaikan penyokong dan rintangan berdasarkan turun naik pasaran.
Batasan untuk Stop Loss Peratusan TetapStop loss peratusan tetap mungkin tidak sesuai untuk semua keadaan pasaran, mungkin terlalu besar di pasaran dengan kadar turun naik yang rendah, dan mungkin terlalu kecil di pasaran dengan kadar turun naik yang tinggi. Cara penyelesaian: Anda boleh mempertimbangkan untuk menyesuaikan tahap stop loss secara dinamik berdasarkan ATR.
Risiko pembalikan arah aliran: Menggunakan 50 kitaran SMA sebagai indikator trend mungkin menangguhkan tindak balas pada awal trend berbalik, menyebabkan masih masuk dalam trend ketika ia hampir berakhir. . Cara penyelesaian: Anda boleh mempertimbangkan untuk menambah indikator trend jangka pendek yang lebih sensitif atau indikator momentum sebagai penilaian tambahan.
Strategi intensif pengiraanStrategi memerlukan pengiraan dan pemeliharaan pelbagai array dan metrik dalam masa nyata, dan mungkin menghadapi cabaran prestasi dalam persekitaran perdagangan frekuensi tinggi atau sumber yang terhad. Penyelesaian: Optimumkan kecekapan algoritma, kurangkan pengiraan yang tidak perlu, atau pertimbangkan untuk mengurangkan kekerapan kemas kini.
Kepekaan ParameterPerforma strategi sensitif terhadap parameter yang ditetapkan (seperti panjang pivot, nilai ADX), pilihan parameter yang tidak tepat boleh menyebabkan perdagangan berlebihan atau kehilangan peluang. Penyelesaian: Membina kerangka pengoptimuman parameter dengan mengkaji semula prestasi parameter dalam keadaan pasaran yang berbeza.
Berdasarkan analisis yang mendalam mengenai kod strategi, berikut adalah arah yang berpotensi untuk dioptimumkan:
Mekanisme parameter penyesuaianMemperkenalkan mekanisme untuk menyesuaikan parameter utama secara automatik mengikut kadar turun naik pasaran. Sebagai contoh, meningkatkan ADX atau lebar kawasan rintangan sokongan semasa turun naik yang tinggi dan mengurangkan parameter ini semasa turun naik yang rendah, menjadikan strategi lebih sesuai dengan keadaan pasaran yang berbeza. Ini dapat mengurangkan kesalahan perdagangan dalam keadaan pasaran yang tidak sesuai.
Analisis pelbagai kerangka masa: Tambah tahap rintangan sokongan pada bingkai masa yang lebih tinggi. Dengan memeriksa sama ada tahap rintangan sokongan pada carta garis harian atau garis pusingan sama dengan tahap pada carta 1 jam semasa, anda dapat mengenal pasti kawasan harga utama yang lebih kuat yang diiktiraf dalam pelbagai bingkai masa, meningkatkan kualiti isyarat.
Pengesahan jumlah transaksiAnalisis kuantiti dagangan yang digabungkan untuk mengesahkan kesahihan penembusan. Penembusan yang benar-benar berkesan biasanya disertai dengan peningkatan yang ketara dalam jumlah dagangan, dan risiko penembusan palsu yang disebabkan oleh jumlah dagangan yang rendah dapat dikurangkan dengan menambahkan syarat penapisan kuantiti dagangan.
Hentikan Dinamika HentikanBergantung pada kadar turun naik pasaran (seperti ATR), anda boleh menetapkan tahap hentian dan kerugian secara dinamik dan bukannya peratusan tetap. Ini menjadikan pengurusan risiko lebih fleksibel, membolehkan anda menyesuaikan tahap perlindungan secara automatik mengikut keadaan pasaran semasa, menetapkan hentian yang lebih longgar di pasaran yang bergelombang tinggi, dan menetapkan hentian yang lebih ketat di pasaran yang bergelombang rendah.
Mekanisme penguncian keuntungan separa: Memperkenalkan mekanisme keuntungan berpecah-pecah, yang membolehkan untuk memindahkan stop loss ke harga kos atau mengunci sebahagian keuntungan setelah mencapai tahap keuntungan tertentu. Kaedah ini dapat mengurangkan risiko penarikan balik sambil mengekalkan potensi keuntungan yang tinggi.
Penunjuk emosi bersepaduPertimbangkan untuk mengintegrasikan penunjuk sentimen pasaran (seperti VIX atau penunjuk kekuatan relatif) sebagai syarat penapisan tambahan. Sentimen pasaran sering mempengaruhi keberlanjutan penembusan. Dengan menambah dimensi analisis sentimen, anda boleh meningkatkan pemahaman strategi mengenai keadaan pasaran.
Kelas kekuatan rintangan sokongan: Memperkenalkan mekanisme penilaian kekuatan tahap rintangan sokongan, berdasarkan faktor-faktor seperti jumlah ujian sejarah, panjang masa pembentukan dan lain-lain untuk menilai kekuatan setiap tahap. Oleh itu, keutamaan dapat diberikan kepada tahap harga yang lebih kuat dan lebih mungkin menghasilkan tindak balas yang berkesan.
Pengoptimuman Pembelajaran MesinPertimbangkan untuk menggunakan kaedah pembelajaran mesin untuk mengoptimumkan pemilihan parameter dan penjanaan isyarat. Dengan menganalisis corak perdagangan yang berjaya dan gagal dalam data sejarah, algoritma pembelajaran mesin dapat membantu mengenal pasti kombinasi parameter dan keadaan pasaran yang paling berkesan.
Sistem perdagangan kuantitatif penapis ADX adalah sistem perdagangan komprehensif yang direka dengan baik yang menggabungkan beberapa elemen penting dalam analisis teknikal. Strategi ini secara dinamik mengenal pasti dan memantau tahap rintangan sokongan, menggabungkan penapis arah trend dan kekuatan pasaran, untuk mewujudkan mekanisme penjanaan isyarat perdagangan yang agak dipercayai.
Kelebihan utama strategi ini adalah mekanisme pengesahan berganda dan kerangka pengurusan risiko yang baik, yang secara berkesan mengurangkan risiko penembusan palsu dan mengehadkan potensi kerugian dalam satu perdagangan. Strategi ini juga menyediakan banyak pilihan konfigurasi parameter, yang membolehkan pedagang menyesuaikan diri secara fleksibel mengikut keutamaan risiko peribadi dan keadaan pasaran.
Walau bagaimanapun, strategi ini juga menghadapi beberapa cabaran, seperti risiko penembusan palsu di pasaran yang bergelombang tinggi, keterbatasan penghentian berhenti tetap dan kepekaan parameter. Prestasi strategi dijangka meningkat lagi dengan memperkenalkan langkah-langkah pengoptimuman seperti mekanisme parameter yang beradaptasi, analisis jangka masa berbilang, pengesahan jumlah perdagangan dan pengurusan risiko dinamik.
Secara keseluruhannya, ini adalah strategi perdagangan kuantitatif yang jelas dan logik, yang direka untuk digunakan oleh peniaga yang mempunyai pemahaman tentang analisis teknikal dan struktur pasaran. Dengan terus mengoptimumkan dan menyesuaikan diri dengan perubahan pasaran, strategi ini berpotensi untuk mengekalkan prestasi yang stabil dalam pelbagai keadaan pasaran.
/*backtest
start: 2024-05-30 00:00:00
end: 2025-05-29 00:00:00
period: 3d
basePeriod: 3d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("S/R Breakout Strategy (1H) with Trend and ADX Filter", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// ─────────────────────────────────────────────────────────────
// INPUTS
// ─────────────────────────────────────────────────────────────
pivotLen = input.int(5, title="Pivot Length")
lookbackBars = input.int(300, title="Lookback Bars")
maxZoneWidthPct = input.float(2.0, title="Max Zone Width %")
tpLong = input.float(0.15, title="Take Profit % (Long)")
slLong = input.float(0.10, title="Stop Loss % (Long)")
tpShort = input.float(0.10, title="Take Profit % (Short)")
slShort = input.float(0.10, title="Stop Loss % (Short)")
allowLong = input.bool(true, title="Allow Long Trades")
allowShort = input.bool(true, title="Allow Short Trades")
// ADX settings
adxThreshold = input.float(25.0, title="ADX Threshold")
adxLen = input.int(14, title="ADX Length")
// Trend filter: 50-period moving average
ma50 = ta.sma(close, 50)
// ─────────────────────────────────────────────────────────────
// CUSTOM ADX FUNCTION
// ─────────────────────────────────────────────────────────────
// This function calculates ADX using the common method based on true range,
// directional movement and smoothing it with the RMA.
f_adx(len) =>
// true range for the current bar
tr = ta.tr
// Calculate upward and downward moves
upMove = high - high[1]
downMove = low[1] - low
// Determine directional movements
plusDM = (upMove > downMove and upMove > 0) ? upMove : 0.0
minusDM = (downMove > upMove and downMove > 0) ? downMove : 0.0
// Smooth the values using RMA (running moving average)
smPlusDM = ta.rma(plusDM, len)
smMinusDM = ta.rma(minusDM, len)
smTR = ta.rma(tr, len)
// Calculate the directional indicators, avoid division by zero
plusDI = (smTR != 0) ? 100 * smPlusDM / smTR : 0.0
minusDI = (smTR != 0) ? 100 * smMinusDM / smTR : 0.0
diSum = plusDI + minusDI
dx = (diSum != 0) ? 100 * math.abs(plusDI - minusDI) / diSum : 0.0
// Smooth the DX to get ADX
ta.rma(dx, len)
// Compute ADX value using the custom function
adxValue = f_adx(adxLen)
// ─────────────────────────────────────────────────────────────
// PIVOT DETECTION & SUPPORT/RESISTANCE LEVELS
// ─────────────────────────────────────────────────────────────
pivotHigh = ta.pivothigh(high, pivotLen, pivotLen)
pivotLow = ta.pivotlow(low, pivotLen, pivotLen)
// Declare arrays for support and resistance levels
var float[] supportLevels = array.new_float()
var float[] resistanceLevels = array.new_float()
// Function to add a level into the provided array if it meets the criteria.
// Always returns a float (0.0) for consistency.
f_add_level(arr, newLevel) =>
if array.size(arr) == 0
array.push(arr, newLevel)
else
shouldAdd = true
for i = 0 to (array.size(arr) - 1)
existing = array.get(arr, i)
if math.abs(existing - newLevel) / newLevel * 100 <= maxZoneWidthPct
shouldAdd := false
if shouldAdd
array.push(arr, newLevel)
if array.size(arr) > 5
array.shift(arr)
0.0
// Update support and resistance arrays once sufficient bars have formed
if bar_index > pivotLen * 2
if not na(pivotLow)
f_add_level(supportLevels, pivotLow)
if not na(pivotHigh)
f_add_level(resistanceLevels, pivotHigh)
// ─────────────────────────────────────────────────────────────
// TRADE MANAGEMENT VARIABLES
// ─────────────────────────────────────────────────────────────
var bool inTrade = false
var bool isLong = false
var float entryPrice = na
// Signal flags
longSignal = false
shortSignal = false
// Detect long signal: price crosses above support level
if array.size(supportLevels) > 0
for i = 0 to (array.size(supportLevels) - 1)
lvl = array.get(supportLevels, i)
if low < lvl and close > lvl
longSignal := true
// Detect short signal: price crosses below resistance level
if array.size(resistanceLevels) > 0
for i = 0 to (array.size(resistanceLevels) - 1)
lvl = array.get(resistanceLevels, i)
if high > lvl and close < lvl
shortSignal := true
// ─────────────────────────────────────────────────────────────
// ENTRY CONDITIONS & EXECUTION
// ─────────────────────────────────────────────────────────────
if not inTrade
// Long entry: require long signal, price above 50MA, and ADX above threshold
if allowLong and longSignal and close > ma50 and adxValue > adxThreshold
strategy.entry("Long", strategy.long)
label.new(x=bar_index, y=low, text="LONG", xloc=xloc.bar_index, style=label.style_label_up, color=color.green, textcolor=color.white)
entryPrice := close
isLong := true
inTrade := true
// Short entry: require short signal, price below 50MA, and ADX above threshold
else if allowShort and shortSignal and close < ma50 and adxValue > adxThreshold
strategy.entry("Short", strategy.short)
label.new(x=bar_index, y=high, text="SHORT", xloc=xloc.bar_index, style=label.style_label_down, color=color.red, textcolor=color.white)
entryPrice := close
isLong := false
inTrade := true
// ─────────────────────────────────────────────────────────────
// EXIT CONDITIONS
// ─────────────────────────────────────────────────────────────
if inTrade
ret = isLong ? (close - entryPrice) / entryPrice : (entryPrice - close) / entryPrice
tp = isLong ? tpLong : tpShort
sl = isLong ? slLong : slShort
if ret >= tp or ret <= -sl
strategy.close_all()
label.new(x=bar_index, y=close, text="EXIT", xloc=xloc.bar_index, style=label.style_label_left, color=color.orange, textcolor=color.black)
inTrade := false
entryPrice := na
// ─────────────────────────────────────────────────────────────
// ALERT CONDITIONS
// ─────────────────────────────────────────────────────────────
alertcondition(longSignal and allowLong, title="Long Breakout", message="🚀 Long breakout on {{ticker}} at {{close}}")
alertcondition(shortSignal and allowShort, title="Short Breakout", message="🔻 Short breakout on {{ticker}} at {{close}}")