
Strategi lintas SMA bertenaga ADX adalah sistem perdagangan kuantitatif yang menggabungkan indikator lintas SMA dengan filter ADX. Strategi ini mengkonfirmasi kekuatan tren pasar melalui indikator ADX, melakukan sinyal lintas SMA hanya jika ada cukup momentum, dan menggunakan mekanisme stop loss dan tracking stop loss yang dinamis untuk melindungi keuntungan dan membatasi risiko. Strategi ini juga mengatur jam tutup sesi untuk menghindari risiko malam hari.
Logika inti dari strategi ini didasarkan pada beberapa komponen utama:
Sinyal silang SMA: Menggunakan sebuah jangka pendek ((default 3 siklus) Simple Moving Average yang menghasilkan sinyal do lebih ketika harga naik melintasi SMA dan sinyal do lebih ketika harga turun melintasi SMA.
Filter ADXPerhitungan manual indikator ADX (default period 15), memastikan bahwa pasar memiliki kekuatan tren yang cukup untuk melakukan perdagangan hanya jika nilai ADX lebih besar dari set threshold (default 15). Ini efektif memfilter sinyal palsu di pasar yang bergoyang.
Manajemen risiko dinamis:
Manajemen sesi: Memaksa semua pemegang posisi di posisi kosong pada waktu akhir sesi perdagangan yang ditentukan (default 16:00) untuk menghindari risiko overnight.
Sinyal peringatan waktu nyata: Saat sinyal perdagangan dipicu, pesan peringatan berformat JSON yang berisi arah perdagangan, harga masuk, harga stop loss, dan harga stop loss akan dihasilkan.
Fungsi anti pemetaan: menyediakan fungsi reso_no_repaint untuk memastikan bahwa indikator tidak di-repaint, meningkatkan keandalan kebijakan.
Mekanisme pengakuan trenDengan kombinasi antara SMA dan ADX, strategi ini dapat secara efektif mengidentifikasi tren yang kuat dan mengurangi sinyal yang salah di pasar yang bergoyang. Strategi ini meningkatkan probabilitas keberhasilan perdagangan dibandingkan dengan strategi SMA saja.
Manajemen risiko yang fleksibel: Menyediakan langkah-langkah pengendalian risiko yang komprehensif, termasuk stop loss tetap, target stop loss dan tracking stop loss, memungkinkan pedagang untuk menyesuaikan parameter sesuai dengan preferensi risiko mereka.
Fungsi manajemen sesi: Otomatis menutup posisi pada akhir hari perdagangan untuk menghindari risiko malam hari, sangat cocok untuk pedagang intraday atau pedagang yang ingin menghindari berita dan peristiwa ekonomi besar.
Sistem peringatan waktu nyata: Menyediakan format JSON yang terstruktur untuk memberikan peringatan yang mudah diintegrasikan ke dalam sistem perdagangan otomatis atau mekanisme pemberitahuan.
Sederhana dan Berkesan: Strategi logis yang jelas, parameter yang lebih sedikit, mudah dipahami dan disesuaikan, cocok untuk semua tingkat pedagang.
Desain Anti-Repainting: Memastikan keandalan kebijakan dalam lingkungan disk dengan fungsi anti-redrawing.
Volatilitas SMA jangka pendek: 3 siklus SMA yang digunakan secara default mungkin terlalu sensitif, dapat menghasilkan terlalu banyak sinyal perdagangan di pasar yang berfluktuasi tinggi, meningkatkan biaya perdagangan dan dapat menyebabkan kerugian berkelanjutan. Solusinya adalah menyesuaikan panjang SMA sesuai dengan kondisi pasar dan kerangka waktu yang berbeda.
Manajemen risiko dengan skor tetapStrategi menggunakan poin tetap dan bukan persentase atau ATR untuk mengatur stop loss, yang mungkin tidak cukup fleksibel dalam berbagai lingkungan volatilitas. Stop loss di pasar yang berfluktuasi tinggi mungkin terlalu kecil, dan stop loss di pasar yang berfluktuasi rendah mungkin terlalu besar.
ADX keterlambatan: ADX adalah indikator yang tertinggal, mungkin hanya memberi sinyal konfirmasi setelah tren telah terbentuk, yang menyebabkan keterlambatan masuk. Hal ini dapat diperbaiki dengan mengoptimalkan parameter ADX atau menggabungkan indikator terkemuka lainnya.
Kurangnya perbedaan status pasarStrategi ini tidak membedakan antara kondisi pasar yang berbeda (seperti tren, rangsangan), menggunakan logika perdagangan yang sama di semua lingkungan pasar, dan dapat menyebabkan kinerja yang buruk di pasar non-trend.
Pembatasan kerangka waktu tunggalStrategi ini hanya didasarkan pada analisis jangka waktu tunggal, kurangnya konfirmasi jangka waktu ganda, dan kemungkinan kehilangan pergeseran pasar penting dalam konteks tren yang lebih besar.
Peningkatan manajemen risiko dinamis: Menggantikan stop loss dengan stop loss dengan titik tetap dengan sistem manajemen risiko dinamis berdasarkan ATR (Average True Rate of Volatility), memungkinkan strategi untuk beradaptasi dengan lingkungan volatilitas pasar yang berbeda. Misalnya, stop loss dapat diatur menjadi 1,5 kali ATR, dan stop loss menjadi 3 kali ATR.
Analisis multi-frame waktu: Menambahkan konfirmasi tren pada jangka waktu yang lebih tinggi, hanya berdagang di arah tren yang lebih besar, meningkatkan tingkat kemenangan. Anda dapat menambahkan SMA periode yang lebih lama sebagai filter tren.
Identifikasi status pasarIntroduksi mekanisme klasifikasi kondisi pasar, seperti indikator volatilitas atau indikator kekuatan tren, untuk menerapkan parameter strategi atau logika perdagangan yang berbeda dalam lingkungan pasar yang berbeda.
Pengoptimalan masukPertimbangkan untuk menambahkan indikator konfirmasi masuk tambahan, seperti RSI (Indeks Relatif Lemah) atau Brinks, untuk meningkatkan kualitas sinyal masuk. Anda juga dapat menerapkan strategi batch-building untuk mengurangi risiko masuk satu titik.
Parameter adaptasiAdaptasi Parameter: Mekanisme adaptasi parameter yang secara otomatis menyesuaikan panjang SMA, ADX threshold, dan parameter manajemen risiko berdasarkan perilaku pasar baru-baru ini, sehingga strategi dapat beradaptasi dengan kondisi pasar yang berubah.
Filter waktuTambahkan filter waktu perdagangan untuk menghindari waktu-waktu likuiditas rendah atau waktu-waktu berita yang bergejolak, mengurangi risiko slippage dan pergerakan yang tidak normal.
Strategi SMA crossover yang diperkuat ADX yang melacak dinamika adalah sistem perdagangan yang lengkap yang menggabungkan analisis teknis dan manajemen risiko. Dengan menggabungkan sinyal SMA crossover sederhana dengan konfirmasi tren ADX, strategi ini dapat mengidentifikasi peluang perdagangan yang menguntungkan dengan lebih akurat.
Meskipun ada beberapa keterbatasan, seperti manajemen risiko poin tetap dan analisis kerangka waktu tunggal, masalah-masalah ini dapat diatasi dengan arah optimasi yang dikemukakan dalam artikel ini. Dengan memperkenalkan manajemen risiko dinamis berbasis ATR, analisis kerangka waktu ganda dan identifikasi status pasar, strategi ini memiliki potensi untuk menjadi sistem perdagangan yang lebih kuat dan beradaptasi.
Pada akhirnya, keberhasilan strategi ini tergantung pada penyesuaian parameter yang halus oleh pedagang dan adaptasi terhadap pasar dan kerangka waktu tertentu. Disarankan untuk melakukan pengembalian yang memadai dan simulasi perdagangan sebelum perdagangan langsung untuk memverifikasi kinerja strategi dalam kondisi pasar yang berbeda.
/*backtest
start: 2024-08-04 00:00:00
end: 2025-08-02 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("safa bot alert", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// === INPUTS ===
smaLength = input.int(3, title="SMA Length")
tpPoints = input.float(80, title="Take Profit (Points)")
slPoints = input.float(35, title="Stop Loss (Points)")
trailPoints = input.float(15, title="Trailing Stop (Points)")
sessionCloseHour = input.int(16, "Session Close Hour (24h)")
sessionCloseMinute = input.int(0, "Session Close Minute")
// === ADX INPUTS ===
adxLength = input.int(15, title="ADX Length")
adxThreshold = input.float(15, title="Minimum ADX to Trade")
// === INDICATORS ===
sma = ta.sma(close, smaLength)
plot(sma, title="3 SMA", color=color.orange)
// === MANUAL ADX CALCULATION ===
upMove = high - high[1]
downMove = low[1] - low
plusDM = (upMove > downMove and upMove > 0) ? upMove : 0
minusDM = (downMove > upMove and downMove > 0) ? downMove : 0
trur = ta.rma(ta.tr, adxLength)
plusDI = 100 * ta.rma(plusDM, adxLength) / trur
minusDI = 100 * ta.rma(minusDM, adxLength) / trur
dx = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
adx = ta.rma(dx, adxLength)
plot(adx, title="ADX", color=color.blue)
// === ENTRY CONDITIONS ===
longCondition = ta.crossover(close, sma) and adx > adxThreshold
shortCondition = ta.crossunder(close, sma) and adx > adxThreshold
// === STRATEGY EXECUTION ===
if (longCondition)
strategy.entry("Long", strategy.long)
strategy.exit("Exit", from_entry="Long", limit=close + tpPoints, stop=close - slPoints, trail_points=trailPoints, trail_offset=trailPoints)
// FIRE ALERT
string alertMsg = '{"signal":"BUY","entry":' + str.tostring(close) +
',"SL":' + str.tostring(close - slPoints) +
',"TP":' + str.tostring(close + tpPoints) +
',"time":"' + str.tostring(time) + '"}'
alert(alertMsg, alert.freq_once_per_bar_close)
if (shortCondition)
strategy.entry("Short", strategy.short)
strategy.exit("Exit", from_entry="Short", limit=close - tpPoints, stop=close + slPoints, trail_points=trailPoints, trail_offset=trailPoints)
// FIRE ALERT
string alertMsg = '{"signal":"SELL","entry":' + str.tostring(close) +
',"SL":' + str.tostring(close + slPoints) +
',"TP":' + str.tostring(close - tpPoints) +
',"time":"' + str.tostring(time) + '"}'
alert(alertMsg, alert.freq_once_per_bar_close)
// === FORCE EXIT AT SESSION CLOSE ===
sessionCloseTime = (hour == sessionCloseHour and minute == sessionCloseMinute)
if (sessionCloseTime)
strategy.close_all(comment="Session Close")
// === NO-REPAINT FUNCTION ===
reso_no_repaint(exp, use, res) =>
use ? request.security(syminfo.tickerid, res, exp[1], lookahead=barmerge.lookahead_off, gaps=barmerge.gaps_on)[0] : exp