
Strategi ini adalah sistem perdagangan terobosan yang dirancang dengan baik yang menggabungkan pengurusan stop loss beradaptasi ATR (Average True Range) dengan penapisan arah ADX (Average Directional Index). Strategi memasuki perdagangan selepas penembusan N-siklus tinggi / rendah disahkan, sambil merujuk kepada RMA jangka panjang (Rolling Moving Average) penapis trend memastikan konsistensi dengan trend utama. Sistem ini menggunakan logik stop loss dua peringkat: stop loss pengesanan ATR tetap awal dan stop loss pemantauan dinamik setelah mencapai nilai margin, dan mengunci keuntungan pada tempoh yang lebih bergolak dengan mekanisme penangguhan stop.
Prinsip-prinsip utama strategi ini adalah berdasarkan sistem penilaian komprehensif yang menggabungkan pengesahan trend dan penyaringan kekuatan arah untuk penembusan harga di tempat rintangan sokongan sejarah:
Signal penembusan dihasilkan: menggunakan N-siklus ((default 96) tinggi / rendah sebagai titik rujukan pecah, apabila harga menutup menembusi tinggi awal dan berada dalam trend naik, mencetuskan isyarat multihead; apabila harga menutup menembusi rendah awal dan berada dalam trend menurun, mencetuskan isyarat kosong.
Penapis trendGaris purata RMA dengan tempoh yang lebih lama ((default 960) digunakan sebagai asas penilaian trend, harga di atas RMA dianggap sebagai trend naik, harga di bawah RMA dianggap sebagai trend menurun, memastikan arah perdagangan selaras dengan trend utama.
Penapis kekuatan arah ADXDengan mengira kekuatan arah pasaran semasa (indikator ADX) dan meminta ADX lebih besar daripada nilai terendah yang ditetapkan (default 12) dan berada dalam tahap kenaikan, saring keadaan pasaran yang tidak jelas dengan arah.
Mekanisme Hentikan Kerosakan Dua Tahap:
Penarikan balik mekanisme penangguhan: Selepas pengaktifan hentian pengekalan, rekod harga tertinggi / harga terendah bermulut, apabila harga mundur dari titik maksimum melebihi kelipatan ATR yang ditetapkan ((13 kali ganda bermulut secara lalai, 4 kali ganda bermulut secara lalai), mencetuskan hentian untuk melonggarkan kedudukan.
Pengurusan risiko penyesuaianDengan ATR, strategi dapat mengawal risiko dengan berkesan dalam keadaan turun naik yang berbeza. Sebagai penunjuk turun naik, ATR dapat menyesuaikan jarak berhenti secara automatik mengikut turun naik pasaran yang sebenarnya, dan mengelakkan masalah terlalu lebar atau terlalu sempit dengan titik berhenti tetap dalam keadaan pasaran yang berbeza.
Kawalan risiko pelbagai peringkatStrategi ini menggunakan logik stop loss bertingkat dua yang digabungkan dengan stop loss awal untuk memastikan risiko awal dapat dikawal, tetapi juga dapat mengunci keuntungan dan memberi ruang kepada trend untuk berkembang sepenuhnya setelah keuntungan meningkat. Struktur stop loss ini sangat sesuai untuk menangkap keadaan trend besar.
Penapis pengesahan arah: Melalui penapisan penunjuk ADX, permintaan pasaran mempunyai arah yang mencukupi dan arah sedang meningkat ((ADX> penurunan dan ADX> ADX[1]), berkesan mengelakkan perdagangan yang kerap dalam pasaran penyusunan yang tidak mempunyai trend yang jelas, mengurangkan kerugian akibat penembusan palsu.
Penjamin Kesesuaian Trend: Menggunakan garis rata-rata RMA jangka panjang sebagai penapis trend, memastikan perdagangan hanya di arah trend utama, mengelakkan operasi berlawanan arah, meningkatkan kejayaan perdagangan dan kecekapan dana.
Penguat kecerdasanDengan fungsi penangguhan penarikan balik, untuk mengunci keuntungan dalam masa yang tepat apabila terdapat penarikan balik selepas turun naik harga yang besar, untuk mengelakkan pulangan balik keuntungan yang berlebihan, terutama untuk menangkap peningkatan kadar turun naik secara tiba-tiba.
Pemantauan visualStrategi di carta dengan jelas menandakan harga masuk, pelbagai garis berhenti, tahap penembusan, dan warna latar belakang trend, membolehkan peniaga memantau keadaan operasi strategi dan harga kritikal secara langsung.
Risiko penembusan palsuWalaupun menggunakan penapisan ADX dan pengesahan trend, pasaran masih boleh mengalami penembusan palsu, terutamanya apabila terdapat siaran berita penting atau perubahan mendadak dalam kecairan. Penyelesaian adalah dengan menaikkan paras ADX atau menambah keperluan pengesahan penembusan, seperti meminta beberapa garis K berterusan di atas / di bawah paras penembusan selepas penembusan.
Kepekaan ParameterPrestasi strategi adalah sensitif kepada tetapan parameter, terutamanya pilihan kitaran ATR, penggandaan dan kitaran penembusan. Parameter optimum mungkin berbeza dalam keadaan pasaran yang berbeza.
Menjejaki kemerosotan: Pada masa pembalikan harga yang teruk, penghentian yang mengesan mungkin tidak dapat mengikuti perubahan harga dalam masa yang tepat, menyebabkan sebahagian keuntungan yang telah diperolehi dikembalikan. Anda boleh mempertimbangkan untuk menyesuaikan ATR secara dinamik dalam keadaan yang sangat tidak menentu atau berpasangan dengan indikator pergerakan jangka pendek untuk memberi amaran lebih awal mengenai kemungkinan pembalikan trend.
Trend jangka panjang yang terlewat: Menggunakan garis rata-rata RMA jangka panjang sebagai penapis trend boleh menyebabkan isyarat yang hilang atau menghasilkan isyarat yang salah berhampiran titik peralihan trend. Penyelesaian adalah dengan memperkenalkan pengesahan trend pelbagai tempoh atau menggabungkan indikator trend jangka pendek dan sederhana yang lebih sensitif sebagai penilaian tambahan.
Mengundurkan diri terlalu awal: Dalam trend yang kuat, mekanisme penangguhan penarikan balik mungkin menyebabkan penarikan balik awal masih akan terus berkembang trend. Anda boleh mempertimbangkan untuk menyesuaikan nilai penangguhan balik mengikut dinamika kekuatan trend, atau menyesuaikan diri dengan perubahan kadar turun naik untuk menyesuaikan kelipatan balik.
Sistem parameter yang beradaptasiMembina mekanisme penyesuaian parameter penyesuaian diri berdasarkan kadar turun naik pasaran dan kekuatan trend, yang membolehkan ATR, ADX dan penarikan balik secara automatik dioptimumkan mengikut keadaan pasaran semasa. Sebagai contoh, mengurangkan ATR dalam keadaan turun naik rendah, meningkatkan ATR dalam keadaan turun naik tinggi; meningkatkan penarikan balik dalam keadaan turun naik kuat, mengurangkan penarikan balik dalam keadaan turun naik lemah.
Pengesahan pelbagai kerangka masa: Pengenalan analisis pelbagai jangka masa, yang memerlukan arah trend pada jangka masa yang lebih tinggi sesuai dengan arah perdagangan, dan memasukkan tahap rintangan sokongan pada jangka masa yang lebih tinggi ke dalam rujukan keputusan, meningkatkan kebolehpercayaan isyarat terobosan.
Pengoptimuman kemasukan pintarMenerapkan mekanisme kemasukan berpelbagai, sebahagian kemasukan selepas isyarat penembusan awal dicetuskan, menambah pertaruhan selepas penembusan disahkan lebih lanjut, mengurangkan risiko yang disebabkan oleh penembusan palsu dan memastikan tidak ketinggalan situasi penembusan sebenar.
Sensor frekuensi turun naikPembangunan sistem penangguhan pintar berdasarkan perubahan kadar turun naik, menetapkan syarat penangguhan penarikan yang lebih ketat setelah turun naik secara tiba-tiba, memberikan ruang penyesuaian harga yang lebih besar apabila turun naik stabil, menjadikan keputusan penangguhan lebih sesuai dengan keadaan sebenar pasaran.
Pembelajaran Mesin: Memperkenalkan algoritma pembelajaran mesin untuk menganalisis corak penembusan sejarah, mengenal pasti kombinasi ciri penembusan dengan kadar kejayaan yang tinggi, dan secara dinamik menyesuaikan parameter strategi atau menetapkan sistem penilaian kualiti penembusan, mengutamakan perdagangan isyarat penembusan berkualiti tinggi.
Pengoptimuman kos urus niaga: Mengoptimumkan masa kemasukan dan jenis pesanan untuk ciri-ciri kecairan dan struktur kos transaksi untuk pelbagai jenis transaksi, seperti penggunaan borang had untuk menggantikan borang harga pasaran dalam persekitaran kecairan rendah, atau penggunaan borang had penjejakan untuk kemasukan dalam persekitaran yang bergelombang tinggi.
Penunjuk emosi bersepaduGabungan dengan penunjuk sentimen pasaran (seperti indeks kadar turun naik, penunjuk keluasan pasaran, dan lain-lain) sebagai rujukan keputusan tambahan, menyesuaikan parameter strategi atau menghentikan perdagangan dalam keadaan emosi yang melampau untuk mengelakkan kerugian yang tidak perlu dalam keadaan pasaran yang tidak rasional.
ATR yang tinggi ketepatan menjejaki strategi penembusan henti dengan sistem penapisan arah ADX adalah sistem perdagangan komprehensif yang menggabungkan beberapa konsep teras analisis teknikal. Ia menangkap titik permulaan trend melalui penembusan perdagangan, menggunakan penapisan trend dan pengesahan kekuatan arah untuk meningkatkan kualiti isyarat, dan mencapai pengurusan wang yang komprehensif melalui pengurusan risiko yang beradaptasi dan mekanisme penembusan henti bertingkat.
Kelebihan terbesar strategi ini adalah kesesuaian dan kerangka pengurusan risiko yang sempurna untuk pelbagai keadaan pasaran. Penyesuaian risiko dinamik yang dicapai melalui indikator ATR membolehkan strategi ini mengekalkan tahap pendedahan risiko yang konsisten dalam pelbagai persekitaran turun naik, manakala mekanisme hentian kerugian dan penarikan semula dua peringkat menyediakan penyelesaian yang seimbang yang mempertimbangkan perlindungan modal dan pengoptimuman keuntungan.
Walaupun terdapat risiko tertentu dalam strategi seperti sensitiviti parameter dan keterlambatan berhenti, risiko ini dapat dikawal dengan baik melalui arah pengoptimuman yang disyorkan, terutamanya sistem parameter yang beradaptasi dan pengesahan jangka masa berbilang. Pengenalan pembelajaran mesin dan analisis indikator emosi lebih lanjut dijangka meningkatkan potensi strategi yang kuat dan jangka panjang.
Bagi peniaga kuantitatif, strategi ini menyediakan kerangka yang kukuh, yang boleh disesuaikan dan diperluaskan secara fleksibel mengikut keutamaan risiko peribadi dan pandangan pasaran, sistem perdagangan yang mempunyai kedalaman teori dan nilai praktikal.
/*backtest
start: 2024-07-08 00:00:00
end: 2025-07-04 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy('YTPBTC1HATRSSADX',
overlay=true,
initial_capital=10000,
commission_value=0.1,
default_qty_value=100,
default_qty_type=strategy.percent_of_equity,
margin_long=10,
margin_short=10,
pyramiding=1)
// ==================== 输入参数 ====================
atr_length = input.int(48, 'ATR周期', minval=1, step=12)
atr_mult_1 = input.float(1.0, 'ATR初始止损乘数', minval=0.1, step=0.1)
atr_mult_2 = input.float(9.0, 'ATR追踪止损乘数', minval=0.1)
// 追踪激活倍数
profit_atr_mult = input.float(3.0, 'ATR追踪激活倍数', minval=0.5, step=0.5)
// 固定回撤止盈设置
long_pullback_atr = input.float(13, '多头回撤止盈倍数', minval=0, step=1)
short_pullback_atr = input.float(4, '空头回撤止盈倍数', minval=0, step=1)
breakout_period = input.int(96, title='突破周期', minval=1, step=24)
rma_length = input.int(500, 'RMA趋势过滤周期', minval=1, step=96)
// ADX设置
enable_adx_filter = input.bool(true, '启用ADX过滤')
adx_length = atr_length//input.int(48, 'ADX周期', minval=1, step=12)
adx_threshold = input.float(12, "ADX阈值", minval=1)
use_breakeven = true // 启动追踪时是否先保本止损
// ==================== ATR计算 ====================
atr_value = ta.atr(atr_length)
// ==================== ADX指标计算 ====================
// 真实波幅计算
tr = math.max(math.max(high - low, math.abs(high - nz(close[1]))),
math.abs(low - nz(close[1])))
// 方向性移动计算
dm_plus = high - nz(high[1]) > nz(low[1]) - low ? math.max(high - nz(high[1]), 0) : 0
dm_minus = nz(low[1]) - low > high - nz(high[1]) ? math.max(nz(low[1]) - low, 0) : 0
// ADX计算
var float sm_tr = na
var float sm_dm_plus = na
var float sm_dm_minus = na
sm_tr := nz(sm_tr[1]) - nz(sm_tr[1]) / adx_length + tr
sm_dm_plus := nz(sm_dm_plus[1]) - nz(sm_dm_plus[1]) / adx_length + dm_plus
sm_dm_minus := nz(sm_dm_minus[1]) - nz(sm_dm_minus[1]) / adx_length + dm_minus
di_plus = sm_dm_plus / sm_tr * 100
di_minus = sm_dm_minus / sm_tr * 100
dx = math.abs(di_plus - di_minus) / (di_plus + di_minus) * 100
adx = ta.sma(dx, adx_length)
// ==================== 趋势过滤 ====================
rma_trend = ta.rma(close, rma_length)
plot(rma_trend, title='RMA趋势线', color=color.black, linewidth=2)
trend_long = close > rma_trend
trend_short = close < rma_trend
// ==================== 突破信号 ====================
// 获取过去N根K线的最高高点和最低低点(避免未来数据)
highest_high = ta.highest(high, breakout_period)[1]
lowest_low = ta.lowest(low, breakout_period)[1]
// 入场条件 - 修改ADX条件,要求ADX上升
adx_condition = not enable_adx_filter or (adx >= adx_threshold and adx > adx[1])
long_condition = close > highest_high and trend_long and strategy.position_size == 0 and adx_condition
short_condition = close < lowest_low and trend_short and strategy.position_size == 0 and adx_condition
// ==================== 入场执行 ====================
if long_condition
strategy.entry('Long', strategy.long)
if short_condition
strategy.entry('Short', strategy.short)
// ==================== ATR止损系统 ====================
// 止损状态变量
var float long_stop_initial = na // 第一段初始止损
var float long_stop_trail = na // 第二段追踪止损
var bool long_trail_active = false
var float short_stop_initial = na // 第一段初始止损
var float short_stop_trail = na // 第二段追踪止损
var bool short_trail_active = false
// 回撤止盈变量
var float long_highest = na // 多头最高价记录
var float short_lowest = na // 空头最低价记录
// ==================== 多头止损计算 ====================
if strategy.position_size > 0
// 新开多头仓位
if strategy.position_size[1] <= 0
long_stop_initial := strategy.position_avg_price - atr_value * atr_mult_1
long_stop_trail := na
long_trail_active := false
long_highest := na // 重置最高价记录
else
// 计算当前浮动盈亏
float current_profit = close - strategy.position_avg_price
// 检查是否激活追踪止损
if not long_trail_active and current_profit >= atr_value * profit_atr_mult
long_trail_active := true
long_highest := high // 开始记录最高价
// 保本处理
if use_breakeven
long_stop_trail := strategy.position_avg_price
else
long_stop_trail := close - atr_value * atr_mult_2
// 更新追踪止损和最高价记录
if long_trail_active
// 更新最高价记录
long_highest := math.max(long_highest, high)
// 传统追踪止损更新
float new_stop = close - atr_value * atr_mult_2
long_stop_trail := math.max(long_stop_trail, new_stop)
// ==================== 空头止损计算 ====================
if strategy.position_size < 0
// 新开空头仓位
if strategy.position_size[1] >= 0
short_stop_initial := strategy.position_avg_price + atr_value * atr_mult_1
short_stop_trail := na
short_trail_active := false
short_lowest := na // 重置最低价记录
else
// 计算当前浮动盈亏
float current_profit = strategy.position_avg_price - close
// 检查是否激活追踪止损
if not short_trail_active and current_profit >= atr_value * profit_atr_mult
short_trail_active := true
short_lowest := low // 开始记录最低价
// 保本处理
if use_breakeven
short_stop_trail := strategy.position_avg_price
else
short_stop_trail := close + atr_value * atr_mult_2
// 更新追踪止损和最低价记录
if short_trail_active
// 更新最低价记录
short_lowest := math.min(short_lowest, low)
// 传统追踪止损更新
float new_stop = close + atr_value * atr_mult_2
short_stop_trail := math.min(short_stop_trail, new_stop)
// ==================== 止损执行 ====================
// 第一段止损:收盘价止损(未激活追踪时)
if strategy.position_size > 0 and not long_trail_active
// 检查收盘价是否触及初始止损线
if close <= long_stop_initial
strategy.close('Long', comment='初始止损')
if strategy.position_size < 0 and not short_trail_active
// 检查收盘价是否触及初始止损线
if close >= short_stop_initial
strategy.close('Short', comment='初始止损')
// 第二段止损:实时止损(激活追踪后)
if strategy.position_size > 0 and long_trail_active
strategy.exit('Long Trail Stop', from_entry='Long', stop=long_stop_trail)
if strategy.position_size < 0 and short_trail_active
strategy.exit('Short Trail Stop', from_entry='Short', stop=short_stop_trail)
// 动态回撤止盈检查
if strategy.position_size > 0 and long_trail_active and not na(long_highest)
// 计算从最高点回撤幅度
pullback_amount = long_highest - close
pullback_threshold = atr_value * long_pullback_atr
if pullback_amount >= pullback_threshold
strategy.close('Long', comment='回撤止盈')
if strategy.position_size < 0 and short_trail_active and not na(short_lowest)
// 计算从最低点反弹幅度
pullback_amount = close - short_lowest
pullback_threshold = atr_value * short_pullback_atr
if pullback_amount >= pullback_threshold
strategy.close('Short', comment='回撤止盈')
// ==================== 变量重置 ====================
if strategy.position_size[1] != 0 and strategy.position_size == 0
long_stop_initial := na
long_stop_trail := na
long_trail_active := false
short_stop_initial := na
short_stop_trail := na
short_trail_active := false
// 重置回撤止盈变量
long_highest := na
short_lowest := na
// ==================== 图表绘制 ====================
plot(strategy.position_avg_price, color=color.new(color.yellow, 44), title="入场均价", linewidth=1)
plot(long_stop_initial, color=color.new(color.blue, 44), title='多头初始止损线', linewidth=1)
plot(short_stop_initial, color=color.new(color.blue, 44), title='空头初始止损线', linewidth=1)
plot(long_stop_trail, color=color.new(color.fuchsia, 44), title='多头追踪止损线', linewidth=1)
plot(short_stop_trail, color=color.new(color.fuchsia, 44), title='空头追踪止损线', linewidth=1)
// 最高/最低价记录线
plot(long_highest, color=color.new(color.green, 70), title='多头最高价', linewidth=1, style=plot.style_stepline)
plot(short_lowest, color=color.new(color.red, 70), title='空头最低价', linewidth=1, style=plot.style_stepline)
// 绘制突破线
plot(highest_high, color=color.new(color.green, 70), title='突破上线')
plot(lowest_low, color=color.new(color.red, 70), title='突破下线')
// 背景颜色显示趋势
bgcolor(trend_long ? color.new(color.green, 95) : trend_short ? color.new(color.red, 95) : na, title="趋势背景")
// ==================== 信息显示 ====================
// 在图表上显示当前策略信息
base_rows = enable_adx_filter ? 3 : 2
var table info_table = table.new(position.top_right, 2, base_rows, bgcolor=color.white, border_width=1)
var int row_index = 0
row_index := 0 // 重置行索引
table.cell(info_table, 0, row_index, "ATR周期", text_color=color.black, text_size=size.small)
table.cell(info_table, 1, row_index, str.tostring(atr_length), text_color=color.black, text_size=size.small)
row_index := row_index + 1
// 只在启用ADX时显示
if enable_adx_filter
table.cell(info_table, 0, row_index, "ADX", text_color=color.black, text_size=size.small)
table.cell(info_table, 1, row_index, str.tostring(math.round(adx, 1)), text_color=color.black, text_size=size.small)
row_index := row_index + 1
table.cell(info_table, 0, row_index, "追踪倍数", text_color=color.black, text_size=size.small)
table.cell(info_table, 1, row_index, str.tostring(profit_atr_mult), text_color=color.black, text_size=size.small)