Strategi Momentum Breakout dengan Filter ADX

Penulis:ChaoZhang, Tanggal: 2024-01-04 17:12:30
Tag:

img

Gambaran umum

Ini adalah strategi perdagangan jangka pendek yang menggunakan indikator ADX untuk menyaring sinyal breakout. Ini akan menjadi pendek ketika harga pecah di atas Upper Bollinger Band dan ADX jatuh, dan menjadi panjang ketika harga pecah di bawah Lower Bollinger Band dan ADX naik. Strategi ini juga mengatur stop loss dan take profit secara otomatis untuk perdagangan otomatis.

Logika Strategi

Inti dari strategi ini adalah menggunakan Bollinger Bands untuk sinyal breakout. Band atas dan bawah Bollinger Bands mewakili dua standar deviasi harga, sehingga breakout biasanya menyiratkan bahwa harga memasuki tren yang kuat. Selain itu, indikator ADX diperkenalkan di sini sebagai filter untuk menghindari breakout palsu. Sinyal pendek hanya dipertimbangkan ketika ADX turun sementara sinyal panjang hanya dipertimbangkan ketika ADX naik. Ini membantu menyaring beberapa whipsaws selama periode yang terikat rentang.

Secara khusus, strategi ini menghitung Bollinger Bands menggunakan 33 periode harga penutupan. Band tengah adalah rata-rata bergerak sederhana 33 periode, dan band atas/bawah ditempatkan pada dua penyimpangan standar di atas/di bawah band tengah. Strategi sinyal pendek ketika harga ditutup di bawah band atas dan ADX 8 periode di bawah ADX 15 periode. Ini sinyal panjang ketika harga ditutup di atas band bawah dan ADX 8 periode di atas ADX 15 periode. Keluar ditetapkan pada 800 poin keuntungan dan 400 poin stop loss.

Analisis Keuntungan

Sebagai strategi breakout yang menggabungkan filter tren dan momentum, ia memiliki beberapa keuntungan:

  1. Menggunakan Bollinger Bands untuk mendeteksi breakout selaras dengan kebiasaan sebagian besar trader.
  2. Filter ADX tambahan membantu menghindari kerugian dari whipsaws.
  3. Logikanya sederhana dan mudah dipahami dan dioptimalkan.
  4. Stop loss dan take profit otomatis memfasilitasi perdagangan algoritma.

Analisis Risiko

Ada juga beberapa risiko dengan strategi ini:

  1. Parameter BB yang tidak tepat dapat menghasilkan sinyal yang terlalu sering dan meningkatkan biaya.
  2. Parameter ADX yang tidak benar bisa menyaring sinyal yang valid.
  3. Jarak stop loss mungkin terlalu luas yang menyebabkan kerugian besar.

Untuk mengurangi risiko ini, kita dapat menyempurnakan parameter BB untuk mempersempit band, menyesuaikan periode ADX untuk menghindari over-filtering, dan mengurangi stop loss untuk mengendalikan kerugian perdagangan tunggal.

Arahan Optimasi

Ada ruang untuk optimasi lebih lanjut:

  1. Uji pada data pasar yang berbeda untuk menemukan set parameter yang optimal.
  2. Masukkan indikator lain seperti volume dan moving average untuk penyaringan sinyal.
  3. Menggunakan metode pembelajaran mesin untuk mengoptimalkan parameter secara otomatis.
  4. Pertimbangkan stop loss dinamis dan mengambil keuntungan.

Kesimpulan

Kesimpulannya, ini adalah strategi breakout yang sederhana dan praktis dengan filter. Mengidentifikasi tren dengan BB dan menyaring sinyal dengan ADX membantu menghindari kebisingan selama periode yang terikat rentang dan menangkap peluang tren sampai batas tertentu. Masih ada ruang besar untuk pengujian dan perbaikan lebih lanjut.


/*backtest
start: 2023-12-27 00:00:00
end: 2024-01-03 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Hizbullah XAUUSD Sniper", overlay=true)

Price = close

Length = input(33)
Mult = input(2)
Basis = sma(Price, Length)
StdDev = Mult * stdev(Price, Length)
Upper = Basis + StdDev
Lower = Basis - StdDev

ADX_Length = input(4)
TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
SmoothedTrueRange = sma(TrueRange, ADX_Length)
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0
SmoothedDirectionalMovementPlus = sma(DirectionalMovementPlus, ADX_Length)
SmoothedDirectionalMovementMinus = sma(DirectionalMovementMinus, ADX_Length)
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus - DIMinus) / (DIPlus + DIMinus)*100
SmoothedADX1 = ema(DX, input(8))
SmoothedADX2 = ema(DX, input(15))

Condition1 = crossunder(Price, Upper) and SmoothedADX1 < SmoothedADX2

Take_Profit = input(800)
Stop_Loss = input(400)

strategy.entry("ShortEntry", true, when = Condition1)
strategy.exit("ShortExit", "ShortEntry", profit = Take_Profit, loss = Stop_Loss)


Lebih banyak