
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.
Strategi ini didasarkan pada beberapa mekanisme utama:
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.
Sinyal perdagangan dihasilkan:
Pilihan Modus TransaksiStrategi ini menawarkan tiga model transaksi:
Sistem Filtrasi Berbagai:
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.
Dari analisis yang lebih mendalam, saya menyimpulkan beberapa keuntungan yang menonjol:
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.
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.
Fleksibilitas dalam perdaganganOpsi perdagangan multi-head, kosong-head, atau dua arah memungkinkan strategi untuk menyesuaikan dengan preferensi pasar dan batasan perdagangan yang berbeda.
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.
Keunggulan visualisasiDengan perubahan warna latar belakang, warna garis SuperTrend, dan level stop, memberikan referensi perdagangan visual yang intuitif, mengurangi kompleksitas analisis.
Desain Optimasi KomisiStrategi ini mempertimbangkan komisi internal (0,06%), yang membuat hasil pengujian lebih dekat dengan situasi perdagangan yang sebenarnya.
Mekanisme pelaksanaan harga penutupanStrategi: Menggunakan proses_order_on_close=true, mengurangi dampak slippage dan meningkatkan keandalan pengukuran.
Meskipun strategi ini dirancang dengan baik, ada beberapa risiko potensial:
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.
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.
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.
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.
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.
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.
Berdasarkan analisis kode, saya sarankan optimasi sebagai berikut:
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.
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.
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.
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.
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.
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.
Volume transaksi beradaptasi dengan logikaAdaptasi skala perdagangan sesuai dengan likuiditas pasar dan dinamika fluktuasi, mengurangi posisi saat fluktuasi besar, meningkatkan posisi saat tren stabil.
Perpanjangan siklus pengamatan: Melakukan pengembalian yang luas dalam berbagai siklus dan kondisi pasar, memastikan bahwa strategi memiliki stabilitas dalam berbagai lingkungan pasar.
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.
/*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)