Chiến lược giao dịch tổng hợp dựa trên chỉ báo động lượng


Ngày tạo: 2024-02-21 11:59:22 sửa đổi lần cuối: 2024-02-21 11:59:22
sao chép: 0 Số nhấp chuột: 597
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch tổng hợp dựa trên chỉ báo động lượng

Tổng quan

Chiến lược tổng hợp này sử dụng nhiều chỉ số kỹ thuật như đường trung bình di chuyển, MACD, RSI, và Brin, để tích hợp nhiều tín hiệu mua và bán, tạo thành một chiến lược giao dịch tích hợp chỉ số động lực tốt hơn.

Nguyên tắc chiến lược

Lập luận cốt lõi của chiến lược này là tập hợp các tín hiệu mua và bán từ nhiều chỉ số kỹ thuật, bao gồm:

  1. Chỉ số đường trung bình di chuyển: tính toán đường trung bình di chuyển nhanh và đường trung bình di chuyển chậm, tạo ra tín hiệu mua khi đường nhanh đi qua đường chậm và tạo ra tín hiệu bán khi đi xuống.

  2. Chỉ số MACD: tính toán đường MACD và đường tín hiệu, tạo ra tín hiệu mua khi đường MACD đi qua đường tín hiệu và tạo ra tín hiệu bán khi đi qua.

  3. Chỉ số RSI: tính giá trị RSI để xác định xem bạn đã đi vào vùng quá mua hay quá bán và kết hợp đường RSI với đường 50 trục giữa để tạo ra tín hiệu mua và bán.

  4. Chỉ số Brin: Xác định liệu giá có phá vỡ đường đi lên xuống và kết hợp với tín hiệu quay trở lại đường đi giữa để tạo ra tín hiệu mua và bán.

  5. Quyết định thoát: thiết lập tiêu chuẩn dừng lỗ, chủ động thoát khỏi vị trí khi đạt được một tỷ lệ nhất định.

Các mô-đun tín hiệu trên là độc lập với nhau, chiến lược sẽ giám sát các tín hiệu này trong thời gian thực, mở nhiều vị trí khi kích hoạt tín hiệu mua và bán, mở trống khi kích hoạt tín hiệu bán, để thực hiện tích hợp động của đĩa lợi nhuận.

Phân tích lợi thế

Chiến lược này có một số ưu điểm:

  1. Có rất nhiều nguồn tín hiệu: Kết hợp với nhiều chỉ số kỹ thuật để mua và bán tín hiệu, không dễ để bỏ lỡ cơ hội.

  2. Giảm tín hiệu giả: Xác minh tổng hợp các tín hiệu của các chỉ số khác nhau, có thể làm giảm tác động xấu của tín hiệu giả đối với một số chỉ số.

  3. Xác định xu hướng và đảo ngược: Sử dụng các chỉ số xu hướng như trung bình di chuyển, cũng như các chỉ số đảo ngược như RSI, MACD, có thể có hiệu quả trong các tình huống khác nhau.

  4. Tự động dừng lỗ: Chiến lược có cơ chế tự động dừng lỗ để kiểm soát rủi ro hiệu quả và tránh tổn thất.

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro, bao gồm:

  1. Rủi ro thất bại của chỉ số: Trong một số trường hợp, các chỉ số có thể bị thất bại, dẫn đến tín hiệu bị lệch.

  2. Vấn đề về quá tích hợp: tín hiệu quá tích hợp, dễ tạo ra độ phân giải chỉ số kém, bỏ lỡ một số cơ hội.

  3. Khó tối ưu hóa tham số: Do có nhiều chỉ số, khó tối ưu hóa tham số sẽ lớn hơn, cài đặt tham số chỉ số không phù hợp cũng có thể ảnh hưởng đến hiệu suất của chiến lược.

  4. Tỷ lệ giao dịch cao: tín hiệu chiến lược thường xuyên hơn, có thể dẫn đến tỷ lệ giao dịch cao hơn, tăng chi phí giao dịch.

Hướng tối ưu hóa

Chiến lược này có thể được tối ưu hóa bằng cách:

  1. Kiểm tra và tối ưu hóa các chỉ số và tham số để tìm ra sự kết hợp tốt nhất.

  2. Tự động tìm kiếm tham số tối ưu bằng phương pháp học máy, tránh tối ưu hóa tham số bằng tay.

  3. Kiểm tra các phương pháp tích hợp trọng lượng chỉ số khác nhau để tìm ra phương pháp tích hợp tín hiệu tối ưu.

  4. Thêm cơ chế dừng lỗ thích ứng, có thể tự động điều chỉnh tiêu chuẩn dừng lỗ theo biến động của thị trường.

  5. Tăng thuật toán mở vị trí, kiểm soát tỷ lệ mở vị trí đơn, giảm rủi ro đơn.

Tóm tắt

Chiến lược này nói chung là một chiến lược giao dịch tập hợp chỉ số động lực điển hình và phổ biến, sử dụng các tín hiệu mua và bán của nhiều chỉ số kỹ thuật phổ biến để nâng cao hiệu suất chiến lược thông qua tập hợp tín hiệu. So với chiến lược chỉ số đơn lẻ, nó có nhiều lợi thế như nguồn tín hiệu phong phú hơn, nhận ra xu hướng và đảo ngược toàn diện hơn. Đồng thời, việc tối ưu hóa tham số rất khó khăn, tăng nguy cơ thất bại của chỉ số cũng là vấn đề cần chú ý.

Mã nguồn chiến lược
/*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)