Strategi terobosan stop loss trailing ATR presisi tinggi dan sistem penyaringan arah ADX

ATR ADX RMA 突破交易 趋势跟踪 动态止损 回撤止盈 方向过滤 自适应风险管理
Tanggal Pembuatan: 2025-07-08 13:53:49 Akhirnya memodifikasi: 2025-07-08 13:53:49
menyalin: 1 Jumlah klik: 284
2
fokus pada
319
Pengikut

Strategi terobosan stop loss trailing ATR presisi tinggi dan sistem penyaringan arah ADX Strategi terobosan stop loss trailing ATR presisi tinggi dan sistem penyaringan arah ADX

Ringkasan

Strategi ini adalah sistem perdagangan terobosan yang dirancang dengan baik, yang menggabungkan manajemen stop loss adaptif ATR (Average True Range) dengan filter arah ADX (Average Directional Index). Strategi ini masuk ke perdagangan setelah konfirmasi high/low break N-cycle, sambil mengacu pada RMA (Rolling Moving Average) filter tren jangka panjang untuk memastikan konsistensi dengan tren utama. Sistem ini menggunakan logika stop loss dua tahap: stop loss tracking yang dinamis setelah stop loss ATR tetap awal dan mencapai margin profit, dan mengunci profit selama periode volatilitas yang lebih besar melalui mekanisme stop loss mundur.

Prinsip Strategi

Prinsip-prinsip inti dari strategi ini didasarkan pada sistem penilaian komprehensif yang menggabungkan konfirmasi tren dan penyaringan intensitas arah pada titik-titik resistensi dukungan sejarah yang telah dirobek harga:

  1. Sinyal penembusan dihasilkan: Menggunakan N siklus ((default 96) high/low sebagai titik acuan untuk menembus, memicu sinyal multihead ketika harga menutup melewati high sebelumnya dan berada dalam tren naik; memicu sinyal overhead ketika harga menutup melewati low sebelumnya dan berada dalam tren turun.

  2. Filter tren: Menggunakan RMA rata-rata dengan periode yang lebih panjang ((default 960)) sebagai dasar penilaian tren, harga di atas RMA dianggap sebagai tren naik, harga di bawah RMA dianggap sebagai tren turun, memastikan arah perdagangan sesuai dengan tren utama.

  3. Filter intensitas ADX: Dengan menghitung intensitas arah pasar saat ini (indicator ADX), dan meminta ADX lebih besar dari batas yang ditetapkan (default 12) dan berada pada tahap kenaikan, filter keluar dari kondisi pasar yang tidak jelas arahnya.

  4. Mekanisme Stop Loss Dua Tahap

    • Tahap pertama: Setelah masuk menggunakan ATR perkalian ((default 1.0) untuk mengatur posisi stop loss awal
    • Tahap kedua: Aktifkan tracking stop loss saat profit mencapai ATR ganda (default 3.0) dan set posisi stop loss dinamis dengan ATR ganda yang lebih besar (default 9.0)
  5. Penarikan mekanisme penghentian: Setelah aktivasi tracking stop loss, catat harga tertinggi/terendah di posisi overhead, dan trigger stop loss leveling position apabila harga mundur dari titik ekstrim melebihi ATR set ((13x default di posisi overhead, 4x default di posisi overhead)).

Keunggulan Strategis

  1. Adaptasi Manajemen RisikoATR sebagai indikator volatilitas, dapat secara otomatis menyesuaikan jarak stop loss sesuai dengan kondisi pasar yang sebenarnya berfluktuasi, menghindari masalah yang terlalu lebar atau terlalu sempit dalam hal stop loss dalam kondisi pasar yang berbeda.

  2. Pengendalian risiko bertingkatStrategi ini menggunakan logika stop loss bertingkat ganda yang dikombinasikan dengan stop loss awal dan tracking stop loss, yang memastikan bahwa risiko awal dapat dikendalikan, dan dapat mengunci keuntungan setelah keuntungan meningkat dan memberikan ruang bagi tren untuk berkembang sepenuhnya. Struktur stop loss ini sangat cocok untuk menangkap situasi tren besar.

  3. Filter konfirmasi arahFilter melalui indikator ADX, yang mengharuskan pasar memiliki orientasi yang cukup dan orientasi sedang meningkat[1]), efektif menghindari perdagangan yang sering terjadi di pasar konsolidasi tanpa tren yang jelas, mengurangi kerugian akibat terobosan palsu.

  4. Penjaminan konsistensi tren: Menggunakan RMA rata-rata jangka panjang sebagai filter tren, memastikan hanya berdagang di arah tren utama, menghindari operasi kontra, meningkatkan tingkat keberhasilan perdagangan dan efisiensi dana.

  5. Sistem penghentian cerdasDengan fitur penarikan penangguhan, penguncian keuntungan tepat waktu pada saat terjadi penarikan kembali setelah fluktuasi harga yang besar, menghindari kembalinya keuntungan yang berlebihan, terutama cocok untuk menangkap situasi fluktuasi yang tiba-tiba meluas.

  6. Pemantauan visualStrategi di grafik dengan jelas menandai harga masuk, berbagai garis stop loss, tingkat penembusan, dan warna latar belakang tren, memungkinkan pedagang untuk secara langsung memantau status operasi strategi dan harga kunci.

Risiko Strategis

  1. Risiko Penembusan PalsuMeskipun menggunakan penyaringan ADX dan konfirmasi tren, pasar masih dapat mengalami false breakout, terutama ketika ada siaran pers penting atau perubahan mendadak dalam likuiditas. Solusi adalah dengan meningkatkan ADX threshold secara tepat atau menambahkan persyaratan konfirmasi breakout, seperti dengan meminta beberapa garis K yang berkelanjutan di atas / di bawah tingkat breakout setelah breakout.

  2. Parameter SensitivitasKinerja strategi sangat sensitif terhadap pengaturan parameter, terutama pilihan siklus ATR, perkalian, dan siklus terobosan. Parameter optimal dapat bervariasi dalam lingkungan pasar yang berbeda.

  3. Pelacakan keterlambatan stop lossPada saat terjadi pergeseran harga yang tajam, stop loss yang dilacak mungkin tidak dapat mengikuti perubahan harga secara tepat waktu, sehingga membalikkan sebagian dari keuntungan yang telah diperoleh. Anda dapat mempertimbangkan untuk menyesuaikan perkalian ATR secara dinamis dalam lingkungan yang sangat fluktuatif atau menggabungkan indikator momentum jangka pendek dengan peringatan dini tentang kemungkinan pergeseran tren.

  4. Trends berdurasi panjang terlambat: Menggunakan rata-rata RMA jangka panjang sebagai filter tren dapat menyebabkan sinyal yang hilang atau menghasilkan sinyal yang salah di dekat titik-titik perubahan tren. Solusinya adalah memperkenalkan konfirmasi tren multi-siklus atau menggabungkan indikator tren jangka menengah yang lebih sensitif sebagai penilaian tambahan.

  5. Pengunduran diri terlalu diniPada tren yang kuat, mekanisme penutupan penarikan mundur dapat menyebabkan penarikan awal dari tren yang akan terus berkembang. Anda dapat mempertimbangkan untuk menyesuaikan nilai penarikan mundur secara dinamis sesuai dengan intensitas tren, atau menyesuaikan penarikan mundur multiplier sesuai dengan perubahan volatilitas.

Arah optimasi

  1. Sistem Parameter Adaptif: Membangun mekanisme penyesuaian parameter penyesuaian berdasarkan volatilitas pasar dan intensitas tren, sehingga ATR, ADX dan retracement dapat dioptimalkan secara otomatis sesuai dengan lingkungan pasar saat ini. Misalnya, mengurangi ATR dalam lingkungan yang rendah dan meningkatkan ATR dalam lingkungan yang tinggi.

  2. Konfirmasi multi-frame waktuAnalisis multi-frame diperkenalkan, yang mengharuskan arah tren pada frame waktu yang lebih tinggi untuk konsisten dengan arah perdagangan, dan memasukkan titik resistensi dukungan pada frame waktu yang lebih tinggi ke dalam referensi keputusan, meningkatkan keandalan sinyal terobosan.

  3. Optimalisasi Smart EntryImplementasi mekanisme masuk batch, masuk sebagian setelah sinyal terobosan awal dipicu, dan meningkatkan posisi setelah terobosan dikonfirmasi lebih lanjut, mengurangi risiko terobosan palsu dan memastikan tidak ketinggalan terobosan nyata.

  4. Sensor stop oscillasi: Mengembangkan sistem penutupan cerdas berdasarkan perubahan volatilitas, mengatur kondisi penutupan penarikan yang lebih ketat setelah volatilitas tiba-tiba meluas, memberikan ruang untuk penyesuaian harga yang lebih besar ketika volatilitas stabil, sehingga keputusan penutupan lebih sesuai dengan kondisi pasar yang sebenarnya.

  5. Pembelajaran MesinIntroduksi algoritma pembelajaran mesin untuk menganalisis pola sejarah terobosan, mengidentifikasi kombinasi karakteristik terobosan dengan tingkat keberhasilan yang tinggi, dan secara dinamis menyesuaikan parameter strategi atau mengatur sistem penilaian kualitas terobosan sesuai dengan ini, memprioritaskan perdagangan sinyal terobosan berkualitas tinggi.

  6. Optimalisasi biaya transaksi: Mengoptimalkan waktu masuk dan jenis pesanan untuk karakteristik likuiditas dan struktur biaya transaksi dari berbagai jenis transaksi, seperti menggunakan order limit sebagai pengganti order pasar dalam lingkungan likuiditas rendah, atau menggunakan trailing limit order untuk masuk dalam lingkungan yang berfluktuasi tinggi.

  7. Integrasi indikator emosiMenggabungkan indikator sentimen pasar (seperti indeks volatilitas, indikator luas pasar, dll) sebagai referensi keputusan tambahan, menyesuaikan parameter strategi atau menghentikan perdagangan dalam lingkungan emosional yang ekstrem, untuk menghindari kerugian yang tidak perlu dalam lingkungan pasar yang tidak rasional.

Meringkaskan

ATR High Accuracy Tracking Stop Loss Breakout Strategy and ADX Directional Filtering System adalah sistem perdagangan komprehensif yang menggabungkan beberapa konsep inti analisis teknis. Ini menangkap titik awal tren melalui perdagangan yang terobosan, menggunakan penyaringan tren dan kekuatan arah untuk mengkonfirmasi kualitas sinyal yang lebih baik, dan mencapai manajemen dana yang komprehensif melalui manajemen risiko adaptif dan mekanisme stop loss multi-level.

Keunggulan terbesar dari strategi ini adalah adaptasi terhadap berbagai lingkungan pasar dan kerangka manajemen risiko yang baik. Penyesuaian risiko dinamis yang dicapai melalui indikator ATR memungkinkan strategi untuk mempertahankan tingkat eksposur risiko yang relatif konsisten dalam berbagai lingkungan volatilitas, sementara mekanisme stop loss dan penarikan stop loss dua tahap memberikan solusi yang seimbang untuk melindungi dana dan memaksimalkan keuntungan.

Meskipun strategi memiliki risiko tertentu dalam hal sensitivitas parameter dan keterlambatan penghentian kerugian, risiko ini dapat dikendalikan secara efektif dengan arah optimasi yang disarankan, terutama dengan sistem parameter adaptif dan konfirmasi multi-frame timeframe. Pengenalan lebih lanjut dari pembelajaran mesin dan analisis indikator emosi diharapkan dapat secara signifikan meningkatkan kebugaran strategi dan potensi keuntungan jangka panjang.

Bagi trader kuantitatif, strategi ini memberikan kerangka kerja yang solid, yang dapat disesuaikan dan diperluas secara fleksibel sesuai dengan preferensi risiko pribadi dan pandangan pasar, sistem perdagangan yang memiliki kedalaman teoretis dan nilai praktis.

Kode Sumber Strategi
/*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)