Strategi perdagangan agregasi indikator momentum

Penulis:ChaoZhang, Tanggal: 2024-02-21 11:59:22
Tag:

img

Gambaran umum

Strategi ini mengintegrasikan beberapa indikator teknis termasuk moving average, MACD, RSI dan Bollinger band untuk menghasilkan berbagai sinyal beli dan jual, membentuk strategi perdagangan agregasi indikator momentum yang relatif lengkap.

Logika Strategi

Logika inti dari strategi ini adalah untuk mengumpulkan sinyal beli dan jual dari beberapa indikator teknis, yang terutama mencakup aspek-aspek berikut:

  1. Indikator rata-rata bergerak: Menghitung garis rata-rata bergerak cepat dan lambat dan menghasilkan sinyal beli ketika garis cepat melintasi di atas garis lambat, dan sinyal jual saat melintasi di bawahnya.

  2. Indikator MACD: Menghitung garis MACD dan garis sinyal, menghasilkan sinyal beli ketika garis MACD melintasi di atas garis sinyal, dan sinyal jual ketika melintasi di bawahnya.

  3. Indikator RSI: Menghitung nilai RSI untuk menentukan apakah memasuki zona overbought atau oversold, dikombinasikan dengan salib emas dan salib kematian garis RSI dan garis tengah 50 untuk menghasilkan sinyal perdagangan.

  4. Indikator Bollinger Bands: Menentukan apakah harga menembus band atas dan bawah, dikombinasikan dengan sinyal kembali ke band tengah untuk menghasilkan sinyal perdagangan.

  5. Kriteria keluar: Tetapkan standar stop profit dan stop loss, keluar posisi ketika mencapai persentase tertentu.

Sinyal dari setiap modul indikator bekerja secara independen. Strategi memantau sinyal ini secara real time, pergi panjang ketika sinyal beli dipicu dan pergi pendek ketika sinyal jual dipicu, untuk secara dinamis mengumpulkan posisi menguntungkan.

Analisis Keuntungan

Keuntungan dari strategi ini meliputi:

  1. Sumber sinyal yang kaya dengan berbagai sinyal indikator, tidak mudah melewatkan kesempatan.

  2. Mengurangi sinyal palsu dengan memverifikasi sinyal dengan indikator yang berbeda.

  3. Kemampuan beradaptasi dengan tren dan pembalikan dengan indikator tren dan pembalikan rata-rata.

  4. Mekanisme stop profit dan stop loss otomatis membantu mengendalikan risiko.

Analisis Risiko

Ada juga beberapa risiko yang ada dalam strategi ini:

  1. Risiko ketidakvaliditas indikator di bawah kondisi pasar tertentu.

  2. Masalah oversimplification ketika mengumpulkan terlalu banyak sinyal, menyebabkan resolusi yang tidak cukup.

  3. Kesulitan dalam optimasi parameter dengan banyak indikator.

  4. Tingkat omset yang tinggi dan peningkatan biaya perdagangan.

Arahan Optimasi

Ada beberapa ruang untuk optimasi lebih lanjut:

  1. Uji dan optimalkan kombinasi indikator dan parameter.

  2. Gunakan metode pembelajaran mesin untuk menemukan parameter optimal secara otomatis.

  3. Uji metode bobot yang berbeda untuk agregasi sinyal.

  4. Tambahkan mekanisme stop loss adaptif berdasarkan volatilitas pasar.

  5. Tambahkan algoritma pembukaan untuk mengontrol proporsi pembukaan tunggal untuk kontrol risiko yang lebih baik.

Kesimpulan

Sebagai kesimpulan, ini adalah strategi perdagangan agregasi indikator momentum yang khas dan universal, yang mengintegrasikan sinyal perdagangan dari berbagai indikator teknis umum dan meningkatkan kinerja melalui agregasi sinyal. Dibandingkan dengan strategi indikator tunggal, ini memiliki keuntungan sumber sinyal yang lebih melimpah dan identifikasi tren dan pembalikan yang lebih baik. Sementara itu, kesulitan dalam pengoptimalan parameter dan peningkatan risiko ketidakberhasilan juga harus diperhatikan. Dengan pengujian dan pengoptimalan lebih lanjut, strategi ini dapat menjadi alat perdagangan kuantitatif yang sangat praktis.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Kesin Etkili Analiz V1 - Artun Sinan", overlay=true)
//indicator("Kesin Etkili Analiz V1 - Artun Sinan", overlay=true)

//BackTest
yearin = input (2019, title="BackTestBaşlangıç Tarihi")

// Göstergelerin parametrelerini tanımlayın
emaShrtPeriod = input.int(title="EMA Kısa Periyodu", defval=50, minval=1)
emaLngPeriod = input.int(title="EMA Uzun Periyodu", defval=100, minval=1)

maPeriod = input.int(50, "Hareketli Ortalama Periyodu", minval=1)
fast = input.int(12, "MACD Hızlı Periyodu", minval=1)
slow = input.int(26, "MACD Yavaş Periyodu", minval=1)
signal = input.int(9, "MACD Sinyal Periyodu", minval=1)
rsiPeriod = input.int(14, "RSI Periyodu", minval=1)
rsiOverbought = input.int(70, "RSI Aşırı Alım Eşiği", minval=50, maxval=100)
rsiOversold = input.int(30, "RSI Aşırı Satım Eşiği", minval=0, maxval=50)
bbPeriod = input.int(20, "Bollinger Bantları Periyodu", minval=1)
bbStd = input.float(2, "Bollinger Bantları Standart Sapması", minval=0.1)

//EMA göstergesi ayarları
ema1 = ta.ema (close,emaShrtPeriod)
ema2 = ta.ema (close, emaLngPeriod)

emaCrossUp = ema1 >= ema2
emaCrossDown = ema2 < ema1

plot(ema1, title="EMAKısa", color=color.rgb(0, 255, 13))
plot(ema2, title="EMAUzun", color=color.rgb(255, 251, 1))



// Göstergeleri hesaplayın
ma = ta.sma(close, maPeriod) // Hareketli ortalama
[macd, macdsignal, macdhist] = ta.macd(close, fast, slow, signal) // MACD
rsi = ta.rsi(close, rsiPeriod) // RSI
[upper, middle, lower] = ta.bb(close, bbPeriod, bbStd) // Bollinger Bantları

// Alım veya satım sinyalleri üretin
buySignal = false
sellSignal = false

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Fibonacci seviyelerini tanımlayın
fibLevels = array.new_float(7) // Fibonacci seviyelerini tutacak bir dizi oluşturun
array.set(fibLevels, 0, 0.0) // %0 seviyesini ayarlayın
array.set(fibLevels, 1, 0.236) // %23.6 seviyesini ayarlayın
array.set(fibLevels, 2, 0.382) // %38.2 seviyesini ayarlayın
array.set(fibLevels, 3, 0.5) // %50 seviyesini ayarlayın
array.set(fibLevels, 4, 0.618) // %61.8 seviyesini ayarlayın
array.set(fibLevels, 5, 0.786) // %78.6 seviyesini ayarlayın
array.set(fibLevels, 6, 1.0) // %100 seviyesini ayarlayın

// Tepe ve dip noktasını belirleyin
highpoint = ta.highest (high, 20) // Son 30 mum çubuğunun en yüksek değerini alın
lowpoint = ta.lowest (low, 20) // Son 30 mum çubuğunun en düşük değerini alın
diff = highpoint - lowpoint // Tepe ve dip noktası arasındaki farkı hesaplayın

// Fibonacci seviyelerini hesaplayın
fib0 = lowpoint + diff * array.get(fibLevels, 0) // %0 seviyesini hesaplayın
fib1 = lowpoint + diff * array.get(fibLevels, 1) // %23.6 seviyesini hesaplayın
fib2 = lowpoint + diff * array.get(fibLevels, 2) // %38.2 seviyesini hesaplayın
fib3 = lowpoint + diff * array.get(fibLevels, 3) // %50 seviyesini hesaplayın
fib4 = lowpoint + diff * array.get(fibLevels, 4) // %61.8 seviyesini hesaplayın
fib5 = lowpoint + diff * array.get(fibLevels, 5) // %78.6 seviyesini hesaplayın
fib6 = lowpoint + diff * array.get(fibLevels, 6) // %100 seviyesini hesaplayın

// Alım sinyali: Fiyat %61,8 seviyesinden yukarı yönlü kırılırsa ve MACD çizgisi sinyal çizgisinin üzerine çıkarsa, alım pozisyonu açın
alSignal = close > fib4 and ta.crossover(macd, macdsignal)

// Satım sinyali: Fiyat %61,8 seviyesinden aşağı yönlü kırılırsa ve MACD çizgisi sinyal çizgisinin altına inerse, satım pozisyonu açın
satSignal = close < fib4 and ta.crossunder(macd, macdsignal)

// Çıkış sinyali: Fiyat %38,2 Fibonacci seviyesine ulaşırsa veya belirli bir yüzde oranında kar veya zarar elde ederseniz, pozisyonu kapatın
exitSignal = close >= fib2 or close <= strategy.position_avg_price * 0.95 // Kar oranı olarak %5, zarar oranı olarak %5 belirledik

plot(fib0, title="%0", color=color.rgb(25, 0, 255))
plot(fib1, title="%23.6", color=color.rgb(25, 0, 255))
plot(fib2, title="%38.2", color=color.rgb(25, 0, 255))
plot(fib3, title="%50", color=color.rgb(25, 0, 255))
plot(fib4, title="%61.8", color=color.rgb(25, 0, 255))
plot(fib5, title="%78.6", color=color.rgb(25, 0, 255))
plot(fib6, title="%100", color=color.rgb(25, 0, 255))
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// Hareketli ortalama kesişimi sinyali
maCrossUp = ta.crossover(ma, close) // Fiyat hareketli ortalamanın üzerine çıkarsa
maCrossDown = ta.crossunder(ma, close) // Fiyat hareketli ortalamanın altına inerse

// MACD çizgisi ve sinyal çizgisi kesişimi sinyali // Histogram yerine çizgiler
macdCrossUp = ta.crossover(macd, macdsignal) // MACD çizgisi sinyal çizgisinin üzerine çıkarsa
macdCrossDown = ta.crossunder(macd, macdsignal) // MACD çizgisi sinyal çizgisinin altına inerse

// RSI aşırı alım veya aşırı satım sinyali ve 50 seviyesi kesişimi sinyali // Sinyalleri birleştir
// Eşik değerleri doğrudan kullanın
rsiOverboughtSignal = rsi > rsiOverbought and ta.crossover(rsi, 50) // RSI değeri aşırı alım eşiğinin üzerindeyse ve 50 seviyesini yukarı keserse
rsiOversoldSignal = rsi < rsiOversold and ta.crossunder(rsi, 50) // RSI değeri aşırı satım eşiğinin altındaysa ve 50 seviyesini aşağı keserse

// Bollinger Bantları kırılımı sinyali ve orta bant geri dönüşü sinyali // Sinyalleri birleştir
bbBreakUp = close > upper and ta.crossover(close, middle) // Fiyat üst banttan çıkarsa ve orta banta geri dönerse
bbBreakDown = close < lower and ta.crossunder(close, middle) // Fiyat alt banttan inerse ve orta banta geri dönerse

// Sinyalleri birleştirin
buySignal := maCrossUp or macdCrossUp or rsiOversoldSignal or bbBreakUp or emaCrossUp and yearin >= year
sellSignal := maCrossDown or macdCrossDown or rsiOverboughtSignal or bbBreakDown or emaCrossDown and yearin >= year

// Sinyalleri grafikte oklar ile gösterin
plotshape(buySignal, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape(sellSignal, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)

plot(macd, title="MACD", color=color.blue) // MACD çizgisini mavi renkte çizin
plot(macdsignal, title="Sinyal", color=color.orange) // Sinyal çizgisini turuncu renkte çizin


if buySignal
    strategy.entry("Enter Long", strategy.long)
else if sellSignal
    strategy.entry("Enter Short", strategy.short)

Lebih banyak