Strategi stop-profit dinamis dan filter waktu SuperTrend: sistem perdagangan kuantitatif adaptif volatilitas

supertrend ATR MSK 动态止盈 时间过滤器 价格过滤器 趋势跟踪 波动率自适应
Tanggal Pembuatan: 2025-03-26 13:12:56 Akhirnya memodifikasi: 2025-03-26 13:12:56
menyalin: 0 Jumlah klik: 425
2
fokus pada
319
Pengikut

Strategi stop-profit dinamis dan filter waktu SuperTrend: sistem perdagangan kuantitatif adaptif volatilitas Strategi stop-profit dinamis dan filter waktu SuperTrend: sistem perdagangan kuantitatif adaptif volatilitas

Ringkasan

Strategi SuperTrend Dynamic Stop and Time Filter adalah sistem perdagangan kuantitatif yang didasarkan pada adaptasi volatilitas, yang mengandalkan indikator SuperTrend sebagai alat pelacakan stop loss yang dinamis. Strategi ini menangkap tren pasar dengan mengidentifikasi saat harga menembus garis indikator SuperTrend, dan menggabungkan beberapa mekanisme penyaringan, termasuk filter Moscow Time (MSK), penyaringan tingkat harga, dan fitur stop persentase tetap.

Prinsip Strategi

Strategi ini didasarkan pada beberapa mekanisme utama:

  1. Perhitungan indikator SuperTrendStrategi menggunakan indikator ATR (default cycle 23) dan faktor perkalian (default 1.8) untuk menghitung garis SuperTrend, yang secara otomatis menyesuaikan posisinya sesuai dengan volatilitas pasar, membentuk dukungan dan resistensi dinamis.

  2. Sinyal perdagangan dihasilkan

    • Sinyal masuk multihead: dipicu ketika harga close out menembus garis SuperTrend ke atas (dir berubah dari positif menjadi negatif) dan memenuhi kondisi waktu dan harga filter.
    • Sinyal masuk kosong: dipicu ketika harga penutupan jatuh dari garis SuperTrend ke bawah (dir berubah dari negatif menjadi positif) dan memenuhi kondisi filter.
  3. Pilihan Modus TransaksiStrategi ini menawarkan tiga model transaksi:

    • Long Only: Hanya melakukan perdagangan multihead, dan posisi kosong jika ada sinyal kosong.
    • Hanya Short Only: Hanya melakukan perdagangan short, dan jika ada sinyal multi head, maka posisi kosong.
    • Bilateral ((Both): Memungkinkan untuk melakukan transaksi bilateral multifungsi.
  4. Sistem Filtrasi Berbagai

    • Filter waktu Moskow ((MSK, UTC+3): memungkinkan pengguna untuk mengatur waktu transaksi tertentu dan hanya melakukan transaksi dalam waktu tersebut.
    • Filter tingkat harga: Anda dapat mengatur harga terendah, melakukan multihead hanya jika harga lebih tinggi dari terendah, dan melakukan head kosong jika lebih rendah dari terendah.
  5. Mekanisme penghentian dinamisStrategi: Strategi menerapkan stop loss persentase tetap berdasarkan harga masuk (default 1.5%), setelah harga mencapai level stop loss, strategi secara otomatis menutup posisi, mengunci keuntungan. Tingkat stop loss dapat ditampilkan secara intuitif di grafik, dan pengguna dapat mengaktifkan atau mematikan fitur visual ini sesuai kebutuhan.

Keunggulan Strategis

Dari analisis yang lebih mendalam, saya menyimpulkan beberapa keuntungan yang menonjol:

  1. Adaptasi fluktuasiIndikator SuperTrend didasarkan pada perhitungan ATR, dapat secara otomatis menyesuaikan jarak pelacakan sesuai dengan kondisi pasar yang bergejolak, meningkatkan jarak perlindungan di pasar yang bergejolak tinggi, dan lebih erat melacak harga di pasar yang bergejolak rendah, meningkatkan kemampuan strategi untuk beradaptasi dengan lingkungan pasar yang berbeda.

  2. Pengendalian risiko gandaStrategi ini mengintegrasikan tiga tingkat manajemen risiko: penyaringan waktu, penyaringan harga, dan pengaturan stop loss, mekanisme kontrol risiko multidimensi ini secara signifikan meningkatkan keamanan perdagangan.

  3. Fleksibilitas dalam perdaganganOpsi perdagangan multi-head, kosong-head, atau dua arah memungkinkan strategi untuk menyesuaikan dengan preferensi pasar dan batasan perdagangan yang berbeda.

  4. Optimalisasi Kecerdasan WaktuFilter waktu Moskow yang unik memungkinkan perdagangan pada periode waktu tertentu, membantu menghindari waktu pasar yang tidak efisien, menangkap jendela perdagangan yang efisien secara tertarget, terutama cocok untuk pedagang yang perlu mempertimbangkan waktu perdagangan internasional.

  5. Keunggulan visualisasiDengan perubahan warna latar belakang, warna garis SuperTrend, dan level stop, memberikan referensi perdagangan visual yang intuitif, mengurangi kompleksitas analisis.

  6. Desain Optimasi KomisiStrategi ini mempertimbangkan komisi internal (0,06%), yang membuat hasil pengujian lebih dekat dengan situasi perdagangan yang sebenarnya.

  7. Mekanisme pelaksanaan harga penutupanStrategi: Menggunakan proses_order_on_close=true, mengurangi dampak slippage dan meningkatkan keandalan pengukuran.

Risiko Strategis

Meskipun strategi ini dirancang dengan baik, ada beberapa risiko potensial:

  1. Kecepatan PeningkatanIndikator SuperTrend pada dasarnya adalah indikator yang tertinggal, yang dapat menghasilkan sinyal tertunda ketika pasar berbalik secara tiba-tiba, yang menyebabkan masuk atau keluar yang tidak tepat waktu, meningkatkan risiko penarikan balik. Solusinya adalah dengan menyesuaikan siklus ATR dan faktor perkalian untuk menyeimbangkan sensitivitas dan stabilitas.

  2. Pembatasan penghentian tetap: Mengadopsi stop loss persentase tetap dapat mengunci keuntungan terlalu dini dan kehilangan lebih banyak keuntungan dalam tren yang kuat. Disarankan untuk menyesuaikan stop loss persentase sesuai dengan dinamika pasar yang berfluktuasi atau mengoptimalkan strategi stop loss dalam kombinasi dengan indikator teknis lainnya.

  3. Parameter SensitivitasPerforma strategi sangat bergantung pada pengaturan parameter (seperti siklus ATR, faktor perkalian, persentase stop, dll.), Parameter yang tidak tepat dapat menyebabkan overtrading atau kesalahan sinyal. Kombinasi optimal parameter harus dicari melalui retrospeksi data historis.

  4. Terlalu banyak filterFilter waktu dan harga yang terlalu ketat dapat menyebabkan kehilangan peluang perdagangan yang efektif. Disarankan untuk menyesuaikan kondisi filter berdasarkan varietas perdagangan dan karakteristik pasar yang sebenarnya.

  5. Kondisi pasar tergantungStrategi ini bekerja dengan baik di pasar yang jelas tren, tetapi dapat sering menghasilkan sinyal palsu di pasar yang bergolak. Dapat dipertimbangkan untuk menambahkan mekanisme identifikasi status pasar, hanya pada pasar tren untuk mengaktifkan strategi.

  6. Kurangnya pengendalian kerugian: Meskipun SuperTrend dapat digunakan sebagai referensi stop loss dinamis, namun kode tidak secara eksplisit menetapkan kondisi stop loss, yang dapat menyebabkan kerugian yang lebih besar dalam kondisi pasar yang ekstrim. Disarankan untuk menambahkan mekanisme stop loss yang keras.

Arah optimasi strategi

Berdasarkan analisis kode, saya sarankan optimasi sebagai berikut:

  1. Parameter dinamis beradaptasiFungsi yang dapat ditulis untuk secara otomatis menyesuaikan siklus ATR dan faktor perkalian SuperTrend sesuai dengan kondisi pasar (fluktuasi, volume transaksi, dll), meningkatkan fleksibilitas strategi. Manfaat dari hal ini adalah kemampuan untuk secara otomatis menemukan kombinasi parameter yang optimal pada fase pasar yang berbeda.

  2. Konfirmasi multi-periodeMenggunakan mekanisme konfirmasi multi-siklus waktu, hanya melakukan perdagangan ketika siklus waktu yang lebih besar dan siklus waktu saat ini berlawanan arah dengan SuperTrend, mengurangi sinyal palsu. Hal ini dapat meningkatkan kualitas sinyal secara signifikan.

  3. Sistem Penangkal Smart: mengubah stop-loss persentase tetap menjadi stop-loss dinamis atau stop-loss intermiten berdasarkan ATR (sebagian posisi berakhir dengan keuntungan pada target yang lebih rendah, sebagian posisi mencari keuntungan yang lebih besar), strategi pengelolaan dana yang dioptimalkan.

  4. Identifikasi status pasarMeningkatkan indikator kekuatan tren (seperti ADX) atau indikator volatilitas, melakukan perdagangan hanya ketika pasar memenuhi kondisi tertentu, menghindari perdagangan di lingkungan pasar yang tidak efisien.

  5. Peningkatan manajemen risiko: Tambahkan batasan risiko per transaksi dan logika manajemen risiko akun untuk memastikan bahwa risiko tunggal dan keseluruhan berada dalam batas yang dapat dikendalikan.

  6. Integrasi multi-indikatorDalam kombinasi dengan indikator teknis lainnya (seperti MACD, RSI, atau Bollinger Bands) sebagai konfirmasi tambahan, perdagangan dilakukan hanya ketika resonansi multi-indikator, meningkatkan keandalan sinyal.

  7. Volume transaksi beradaptasi dengan logikaAdaptasi skala perdagangan sesuai dengan likuiditas pasar dan dinamika fluktuasi, mengurangi posisi saat fluktuasi besar, meningkatkan posisi saat tren stabil.

  8. Perpanjangan siklus pengamatan: Melakukan pengembalian yang luas dalam berbagai siklus dan kondisi pasar, memastikan bahwa strategi memiliki stabilitas dalam berbagai lingkungan pasar.

Meringkaskan

Strategi SuperTrend Dynamic Stop and Time Filter adalah sistem perdagangan kuantitatif yang komprehensif yang menggabungkan analisis teknis dan manajemen risiko. Ini menangkap tren melalui indikator SuperTrend dan meningkatkan kualitas sinyal menggunakan mekanisme pemfilteran ganda. Keuntungan utama dari strategi ini adalah kemampuan beradaptasi dengan tingkat fluktuasi dan pengendalian risiko berlapis, sedangkan risiko potensial berasal dari keterlambatan indikator dan sensitivitas parameter.

Strategi ini dapat lebih meningkatkan adaptasi dan profitabilitasnya dengan menerapkan langkah-langkah optimasi yang disarankan, seperti penyesuaian parameter dinamis, konfirmasi siklus waktu ganda, dan sistem stop-loss cerdas. Yang terpenting, pedagang harus memahami prinsip-prinsip desain dan keterbatasan strategi ini, menggabungkan preferensi risiko mereka sendiri dan persepsi pasar, untuk menyesuaikan parameter secara individual untuk mencapai efek perdagangan yang optimal.

Secara keseluruhan, ini adalah strategi perdagangan yang terstruktur dengan jelas dan logis, dengan nilai praktis yang tinggi dan potensi kustomisasi yang cocok untuk digunakan oleh investor kuantitatif dengan pengalaman perdagangan tertentu.

Kode Sumber Strategi
/*backtest
start: 2024-03-26 00:00:00
end: 2024-07-11 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Supertrend Fixed TP Unified with Time Filter (MSK)", overlay=true,
     default_qty_value=0.01,
     commission_type=strategy.commission.percent,
     commission_value=0.06,
     pyramiding=0,
     process_orders_on_close=true)

// Настройки индикатора
atrPeriod = input(23, "ATR Length")
factor = input.float(1.8, "Factor", step=0.1, minval=0.1)
tradeMode = input.string("Both", "Trade Mode", options=["Long Only", "Short Only", "Both"])

// Общий параметр тейк-профита
takeProfitPercent = input.float(1.5, "Take Profit (%)", minval=0.01)
showTP = input.bool(true, "▲▼ Показывать ТП") // Добавлен переключатель

// Фильтр цены
price_param = input.float(10000.0, "Цена фильтра", step=1.0)
use_price_filter = input.bool(false, "Использовать фильтр цены")

// Фильтр по времени (Московское время)
useTimeFilter = input.bool(true, "▲▼ Использовать фильтр по времени") // Переключатель фильтра времени
timeFrom = input.int(0, "Время С (часы MSK)", minval=0, maxval=23, step=1)
timeTo = input.int(23, "Время ДО (часы MSK)", minval=0, maxval=23, step=1)

// Функция проверки времени (с учетом Московского времени UTC+3)
isTimeInRange() =>
    if not useTimeFilter
        true // Фильтр отключен
    else
        // Переводим время сервера (UTC) в Московское время (UTC+3)
        mskHour = (hour(time) + 3) % 24 // Добавляем 3 часа для MSK
        if timeFrom <= timeTo
            mskHour >= timeFrom and mskHour < timeTo // До timeTo (не включая timeTo)
        else
            mskHour >= timeFrom or mskHour < timeTo // До timeTo (не включая timeTo)

// Расчет Supertrend
[supertrend, dir] = ta.supertrend(factor, atrPeriod)

// Визуализация Supertrend
plot(supertrend, "Supertrend", 
     color = dir < 0 ? color.green : color.red,
     linewidth = 2,
     style = plot.style_linebr)

bgcolor(dir < 0 ? color.new(color.green, 90) : color.new(color.red, 90))

// Сигналы входа с фильтром по времени
longEntry = (dir < 0 and dir[1] > 0) and (use_price_filter ? close > price_param : true) and isTimeInRange()
shortEntry = (dir > 0 and dir[1] < 0) and (use_price_filter ? close < price_param : true) and isTimeInRange()

// Логика стратегии
if tradeMode == "Both"
    if longEntry
        strategy.close("Short", comment="Close Short")
        strategy.entry("Long", strategy.long)
    if shortEntry
        strategy.close("Long", comment="Close Long")
        strategy.entry("Short", strategy.short)
else if tradeMode == "Long Only"
    if longEntry
        strategy.entry("Long", strategy.long)
    if shortEntry
        strategy.close("Long", comment="Close Long")
else if tradeMode == "Short Only"
    if shortEntry
        strategy.entry("Short", strategy.short)
    if longEntry
        strategy.close("Short", comment="Close Short")

// Управление тейк-профитом
var color tpColor = na
var float tpLevel = na
var label tpLabel = na

// Сброс при закрытии позиции
if strategy.position_size == 0 and strategy.position_size[1] != 0
    tpLevel := na
    tpColor := na
    label.delete(tpLabel)
    tpLabel := na

// Обновление ТП при открытии позиции
if strategy.position_size > 0
    entryPrice = strategy.opentrades.entry_price(0)
    tpLevel := entryPrice * (1 + takeProfitPercent/100)
    tpColor := color.green
    // Закрытие лонга по TP на закрытии бара
    if close >= tpLevel
        strategy.close("Long", comment="TP Long")
    // Обновление метки
    if showTP
        label.delete(tpLabel)
        tpLabel := label.new(
             bar_index, tpLevel, 
             text = str.tostring(tpLevel, "#.##"), 
             color = color.green, 
             textcolor = color.white,
             style = label.style_label_down,
             yloc = yloc.price)
    
if strategy.position_size < 0
    entryPrice = strategy.opentrades.entry_price(0)
    tpLevel := entryPrice * (1 - takeProfitPercent/100)
    tpColor := color.red
    // Закрытие шорта по TP на закрытии бара
    if close <= tpLevel
        strategy.close("Short", comment="TP Short")
    // Обновление метки
    if showTP
        label.delete(tpLabel)
        tpLabel := label.new(
             bar_index, tpLevel, 
             text = str.tostring(tpLevel, "#.##"), 
             color = color.red, 
             textcolor = color.white,
             style = label.style_label_up,
             yloc = yloc.price)

// Визуализация ТП
plot(showTP ? tpLevel : na, "Take Profit", 
     color = tpColor,
     linewidth = 1,
     style = plot.style_circles)

// Обновление позиции метки
if showTP and not na(tpLevel)
    label.set_xy(tpLabel, bar_index, tpLevel)