Strategi Dagangan Pengumpulan Indikator Momentum

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

img

Ringkasan

Strategi ini mengintegrasikan pelbagai penunjuk teknikal termasuk purata bergerak, MACD, RSI dan pita Bollinger untuk menjana pelbagai isyarat beli dan jual, membentuk strategi dagangan agregasi penunjuk momentum yang agak lengkap.

Logika Strategi

Logik teras strategi ini adalah untuk mengumpulkan isyarat beli dan jual dari pelbagai penunjuk teknikal, yang terutamanya merangkumi aspek berikut:

  1. Penunjuk purata bergerak: Mengira garis purata bergerak pantas dan perlahan dan menjana isyarat beli apabila garis pantas melintasi di atas garis perlahan, dan isyarat jual apabila melintasi di bawah.

  2. Indikator MACD: Mengira garis MACD dan garis isyarat, menghasilkan isyarat beli apabila garis MACD melintasi di atas garis isyarat, dan isyarat jual apabila melintasi di bawah.

  3. Indikator RSI: Mengira nilai RSI untuk menentukan sama ada ia memasuki zon overbought atau oversold, digabungkan dengan salib emas dan salib kematian garis RSI dan garis tengah 50 untuk menjana isyarat perdagangan.

  4. Penunjuk Bollinger Bands: Menentukan sama ada harga menembusi band atas dan bawah, digabungkan dengan isyarat untuk kembali ke band tengah untuk menjana isyarat perdagangan.

  5. Kriteria keluar: Tetapkan standard berhenti keuntungan dan berhenti kerugian, keluar kedudukan apabila mencapai peratusan tertentu.

Isyarat setiap modul indikator berfungsi secara bebas. Strategi memantau isyarat ini dalam masa nyata, pergi lama apabila isyarat beli dicetuskan dan pergi pendek apabila isyarat jual dicetuskan, untuk secara dinamik mengumpulkan kedudukan yang menguntungkan.

Analisis Kelebihan

Kelebihan strategi ini termasuk:

  1. Sumber isyarat yang kaya dengan pelbagai isyarat petunjuk, tidak mudah untuk terlepas peluang.

  2. Mengurangkan isyarat palsu dengan mengesahkan isyarat dengan penunjuk yang berbeza.

  3. Kemampuan penyesuaian yang baik kepada trend dan pembalikan dengan kedua-dua trend dan penunjuk pembalikan purata.

  4. Mekanisme stop profit dan stop loss automatik membantu mengawal risiko.

Analisis Risiko

Terdapat juga beberapa risiko yang wujud dalam strategi ini:

  1. Risiko ketidakvaliditi penunjuk di bawah keadaan pasaran tertentu.

  2. Masalah oversimplification apabila mengumpul terlalu banyak isyarat, membawa kepada resolusi yang tidak mencukupi.

  3. Kesukaran dalam pengoptimuman parameter dengan banyak penunjuk.

  4. Kadar perolehan yang tinggi dan peningkatan kos perdagangan.

Arahan pengoptimuman

Terdapat beberapa ruang untuk pengoptimuman lanjut:

  1. Uji dan optimumkan kombinasi penunjuk dan parameter.

  2. Gunakan kaedah pembelajaran mesin untuk mencari parameter optimum secara automatik.

  3. Uji kaedah berat yang berbeza untuk pengumpulan isyarat.

  4. Tambahkan mekanisme stop loss adaptif berdasarkan turun naik pasaran.

  5. Tambah algoritma pembukaan untuk mengawal perkadaran pembukaan tunggal untuk kawalan risiko yang lebih baik.

Kesimpulan

Kesimpulannya, ini adalah strategi dagangan agregasi penunjuk momentum yang tipikal dan universal, yang mengintegrasikan isyarat dagangan dari pelbagai penunjuk teknikal biasa dan meningkatkan prestasi melalui agregasi isyarat. Berbanding dengan strategi penunjuk tunggal, ia mempunyai kelebihan sumber isyarat yang lebih banyak dan pengenalan yang lebih baik terhadap trend dan pembalikan. Sementara itu, kesukaran dalam pengoptimuman parameter dan peningkatan risiko ketidaktentuan juga harus diperhatikan. Dengan pengujian dan pengoptimuman lanjut, strategi ini boleh menjadi alat dagangan kuantitatif yang sangat praktikal.


/*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 lanjut