
Strategi SuperTrend Dynamic Stop and Time Filter adalah sistem perdagangan kuantitatif yang berasaskan penyesuaian diri terhadap kadar turun naik, yang berpusat pada indikator SuperTrend sebagai alat pengesanan berhenti yang dinamik. Strategi ini menangkap trend pasaran dengan mengenal pasti saat harga menembusi garis petunjuk SuperTrend, dan menggabungkan pelbagai mekanisme penapisan, termasuk penapis Moscow (waktu MSK), penapisan tahap harga dan penapisan peratusan yang tetap.
Strategi ini adalah berdasarkan kepada beberapa mekanisme utama:
Pengiraan Indeks SuperTrendStrategi menggunakan penunjuk ATR ((kelayakan kitaran 23) dan faktor pengganda ((kelayakan 1.8) untuk mengira garis SuperTrend, yang secara automatik menyesuaikan kedudukannya mengikut turun naik pasaran, membentuk sokongan dan rintangan dinamik.
Sinyal dagangan dihasilkan:
Pilihan mod daganganStrategi ini menawarkan tiga mod dagangan:
Sistem penapisan berbilang:
Mekanisme penangguhan dinamikStrategi mewujudkan peratusan penangguhan tetap berdasarkan harga masuk ((1.5% secara lalai), apabila harga mencapai tahap penangguhan, strategi secara automatik menutup, mengunci keuntungan. Tahap penangguhan boleh ditunjukkan secara intuitif pada carta, pengguna boleh menghidupkan atau mematikan ciri visual ini mengikut keperluan.
Dari analisis yang mendalam mengenai kod ini, saya dapat menyimpulkan kelebihan yang ketara:
Kebolehan beradaptasi kadarIndikator SuperTrend berdasarkan pengiraan ATR, dapat menyesuaikan jarak pengesanan secara automatik mengikut keadaan turun naik pasaran, meningkatkan jarak perlindungan di pasaran turun naik yang tinggi, mengikuti harga dengan lebih rapat di pasaran turun naik yang rendah, meningkatkan kemampuan strategi untuk menyesuaikan diri dengan keadaan pasaran yang berbeza.
Kawalan risiko bergandaStrategi ini mengintegrasikan tiga lapisan pengurusan risiko: penapis masa, penapis harga, dan tetapan penangguhan, mekanisme kawalan risiko pelbagai dimensi ini meningkatkan keselamatan dagangan.
Fleksibiliti perdaganganPilihan: Berdagang hanya dengan mata wang, hanya dengan mata wang kosong atau dua arah, membolehkan strategi menyesuaikan diri dengan keutamaan pasaran dan sekatan perdagangan yang berbeza.
Pengoptimuman MasaPenapis waktu Moscow yang unik membolehkan perdagangan pada tempoh masa tertentu, membantu mengelakkan masa-masa pasaran yang tidak cekap, menangkap jendela perdagangan yang cekap secara sasaran, terutama sesuai untuk peniaga yang perlu mempertimbangkan masa perdagangan antarabangsa.
Kelebihan visualDengan perubahan warna latar belakang, warna garisan SuperTrend dan penanda tahap stop, rujukan perdagangan visual yang intuitif disediakan, mengurangkan kerumitan analisis.
Reka bentuk optimum komisenStrategi ini mengambil kira komisen dalaman (<0.06%) untuk menjadikan keputusan pengesanan balik lebih dekat dengan keadaan perdagangan sebenar.
Mekanisme penguatkuasaan harga penutupanStrategi: Menggunakan pesanan pelaksanaan harga penutupan {process_orders_on_close=true}, mengurangkan kesan titik slippage, meningkatkan kebolehpercayaan pengesanan semula.
Walaupun strategi ini direka dengan baik, terdapat risiko yang berpotensi:
Keadaan bertukarIndikator SuperTrend pada dasarnya adalah penunjuk lag, yang boleh menghasilkan isyarat kelewatan apabila pasaran berbalik secara mendadak, yang menyebabkan masuk atau keluar tidak tepat pada masanya, meningkatkan risiko penarikan balik. Penyelesaian adalah dengan menyesuaikan kitaran ATR dan faktor pengganda untuk mengimbangi kepekaan dan kestabilan.
Batasan penghalang tetap: Menggunakan peratusan berhenti tetap mungkin mengunci keuntungan terlalu awal dan kehilangan lebih banyak keuntungan dalam trend yang kuat. Adalah disyorkan untuk menyesuaikan peratusan berhenti mengikut dinamik pasaran yang tidak menentu atau mengoptimumkan strategi berhenti dengan gabungan petunjuk teknikal lain.
Kepekaan ParameterPrestasi strategi sangat bergantung pada parameter yang ditetapkan (seperti kitaran ATR, faktor pengganda, peratusan penghentian, dan lain-lain), parameter yang tidak betul boleh menyebabkan perdagangan berlebihan atau isyarat yang salah. Kombinasi parameter yang optimum harus dicari melalui pengesanan data sejarah.
Penapis terlalu ketat: Penapisan masa dan harga yang terlalu ketat boleh menyebabkan peluang perdagangan yang berkesan terlepas. Disarankan untuk menyesuaikan syarat penapisan mengikut jenis perdagangan sebenar dan ciri-ciri pasaran.
Keperluan pasaranStrategi ini berfungsi dengan baik di pasaran yang jelas bercenderungan, tetapi mungkin sering menghasilkan isyarat palsu di pasaran yang bergolak. Anda boleh mempertimbangkan untuk menambah mekanisme pengenalan keadaan pasaran, dan hanya mengaktifkan strategi di pasaran yang bercenderungan.
Kekurangan mekanisme kawalan kerugianWalaupun SuperTrend boleh digunakan sebagai rujukan berhenti dinamik, kod tidak menetapkan syarat berhenti secara jelas, dan mungkin menghadapi kerugian yang lebih besar dalam keadaan pasaran yang melampau. Disarankan untuk menambah mekanisme berhenti keras.
Berdasarkan analisis kod, saya mencadangkan optimasi berikut:
Parameter dinamik menyesuaikan diriFungsi yang boleh ditulis untuk menyesuaikan secara automatik kitaran ATR dan faktor pengganda SuperTrend mengikut keadaan pasaran (kelembapan, jumlah transaksi, dan lain-lain), meningkatkan kebolehpasaran strategi. Manfaatnya adalah dapat mencari kombinasi parameter yang optimum secara automatik pada tahap pasaran yang berbeza.
Pengesahan pelbagai kitaran masaMemperkenalkan mekanisme pengesahan tempoh masa yang berbilang, yang hanya menjalankan perdagangan apabila tempoh masa yang lebih besar dan arah SuperTrend tempoh masa semasa sesuai, mengurangkan isyarat palsu. Ini dapat meningkatkan kualiti isyarat dengan ketara.
Sistem penangguhan kecerdasan: mengubah peratusan berhenti tetap menjadi berhenti dinamik atau berhenti berselang berdasarkan ATR (sebahagian kedudukan berakhir dengan keuntungan pada sasaran yang lebih rendah, beberapa kedudukan mencari keuntungan yang lebih besar), mengoptimumkan strategi pengurusan wang.
Pengiktirafan status pasaranMenambah indikator kekuatan trend (seperti ADX) atau indikator turun naik, hanya melakukan perdagangan apabila pasaran memenuhi keadaan tertentu, dan mengelakkan perdagangan dalam keadaan pasaran yang tidak cekap.
Pengurusan risiko yang lebih baik: Tambah had risiko per urus niaga dan logik pengurusan risiko akaun, memastikan risiko tunggal dan keseluruhan berada dalam kawalan.
Perpaduan pelbagai indikatorBerkongsi dengan petunjuk teknikal lain (seperti MACD, RSI atau Brinband) sebagai pengesahan tambahan, perdagangan hanya dijalankan apabila terdapat resonansi pelbagai petunjuk, meningkatkan kebolehpercayaan isyarat.
Jumlah transaksi mengikut logikMengubah skala dagangan mengikut kebolehan pasaran dan pergerakan turun naik, mengurangkan kedudukan apabila turun naik lebih besar, dan meningkatkan kedudukan apabila trend stabil.
Peningkatan kitaran pengesananKaedah: Melakukan pengesanan semula secara meluas dalam kitaran dan keadaan pasaran yang berbeza, memastikan strategi stabil dalam pelbagai keadaan pasaran.
Strategi SuperTrend Dynamic Stop and Time Filter adalah sistem perdagangan kuantitatif yang komprehensif yang menggabungkan analisis teknikal dan pengurusan risiko. Ia menangkap trend melalui indikator SuperTrend dan meningkatkan kualiti isyarat menggunakan mekanisme penapisan berganda.
Strategi ini dapat meningkatkan lagi kesesuaian dan keuntungan dengan melaksanakan langkah-langkah pengoptimuman yang disyorkan, seperti penyesuaian parameter dinamik, pengesahan kitaran masa berbilang dan sistem penangguhan pintar. Yang paling penting, peniaga harus memahami prinsip dan batasan reka bentuk strategi ini, dan menyesuaikan parameter secara peribadi dengan pilihan risiko dan persepsi pasaran mereka sendiri, untuk mencapai kesan perdagangan yang optimum.
Secara keseluruhannya, ini adalah strategi perdagangan yang jelas dan logik, dengan nilai yang tinggi dan potensi penyesuaian yang sesuai untuk digunakan oleh pelabur 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)