
Chiến lược này là một hệ thống theo xu hướng dựa trên chỉ báo QQE (Quick Quiet Exponent), kết hợp với cơ chế quản lý rủi ro năng động. Cốt lõi của chiến lược này là nắm bắt xu hướng thị trường thông qua giao điểm giữa đường nhanh QQE và đường chậm, đồng thời sử dụng ATR (Phạm vi trung bình thực) để điều chỉnh động các vị thế dừng lỗ và chốt lời nhằm đạt được cấu hình rủi ro-lợi nhuận tối ưu. Chiến lược này cũng bao gồm chức năng quản lý rủi ro tài khoản và kiểm soát vị thế, có thể tự động điều chỉnh số lượng vị thế mở dựa trên vốn chủ sở hữu tài khoản.
Chiến lược này chủ yếu bao gồm ba mô-đun cốt lõi: tạo tín hiệu, quản lý rủi ro và kiểm soát vị thế. Mô-đun tạo tín hiệu dựa trên chỉ báo QQE. Nó tính toán đường trung bình động hàm mũ (EMA) của RSI để có được đường nhanh (QQEF) và tính toán đường chậm (QQES) kết hợp với ATRRSI. Khi QQEF cắt QQES theo hướng đi lên, tín hiệu dài sẽ được tạo ra, và khi cắt xuống, tín hiệu ngắn sẽ được tạo ra. Mô-đun quản lý rủi ro sử dụng ATR để tính toán động các vị thế dừng lỗ và chốt lời, đồng thời áp dụng cơ chế dừng lỗ theo sau để bảo vệ lợi nhuận. Mô-đun kiểm soát vị thế tính toán số lượng vị thế mở dựa trên tỷ lệ rủi ro được cài đặt trước và vốn chủ sở hữu tài khoản hiện tại.
Chiến lược này hiện thực hóa sự kết hợp hữu cơ giữa việc theo dõi xu hướng và quản lý rủi ro bằng cách biến chỉ báo QQE thành một hệ thống giao dịch hoàn chỉnh. Chiến lược này được thiết kế hợp lý, có tính thực tiễn và khả năng mở rộng cao. Thông qua việc tối ưu hóa các thông số hợp lý và kiểm soát rủi ro, chiến lược có thể duy trì hiệu suất ổn định trong nhiều môi trường thị trường khác nhau. Người giao dịch được khuyến nghị nên tiến hành kiểm tra ngược và tối ưu hóa tham số đầy đủ khi sử dụng phương pháp này trong giao dịch thực tế.
/*backtest
start: 2024-12-17 00:00:00
end: 2025-01-16 00:00:00
period: 3h
basePeriod: 3h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © seckinduran
//@version=5
strategy("QQE Strategy with Risk Management", overlay=true)
// Girdi Parametreleri
src = input(close, title="Source")
length = input.int(14, title="RSI Length", minval=1)
SSF = input.int(5, title="SF RSI Smoothing Factor", minval=1)
riskPercentage = input.float(1.0, title="Risk Percentage per Trade", minval=0.1, maxval=10.0)
// Trailing Stop ve Stop Loss Parametreleri
stopLossMultiplier = input.float(title="Stop Loss Katsayısı", defval=1.5)
takeProfitMultiplier = input.float(title="Take Profit Katsayısı", defval=3)
trailStopMultiplier = input.float(title="Trailing Stop Katsayısı", defval=1.5)
// QQE Hesaplamaları
RSII = ta.ema(ta.rsi(src, length), SSF)
TR = math.abs(RSII - RSII[1])
wwalpha = 1 / length
WWMA = ta.ema(TR, length)
ATRRSI = ta.ema(WWMA, length)
QQEF = ta.ema(ta.rsi(src, length), SSF)
QUP = QQEF + ATRRSI * 4.236
QDN = QQEF - ATRRSI * 4.236
QQES = 0.0
QQES := QUP < nz(QQES[1]) ? QUP : QQEF > nz(QQES[1]) and QQEF[1] < nz(QQES[1]) ? QDN : QDN > nz(QQES[1]) ? QDN : QQEF < nz(QQES[1]) and QQEF[1] > nz(QQES[1]) ? QUP : nz(QQES[1])
// Çizgileri Görselleştirme
plot(QQEF, "FAST", color=color.maroon, linewidth=2)
plot(QQES, "SLOW", color=color.blue, linewidth=1)
// Alım ve Satım Koşulları
longCondition = ta.crossover(QQEF, QQES) // Hızlı çizgi yavaş çizgiyi yukarı keserse
shortCondition = ta.crossunder(QQEF, QQES) // Hızlı çizgi yavaş çizgiyi aşağı keserse
// ATR Hesaplaması
atrValue = ta.atr(14) // ATR hesaplaması burada
// Pozisyon Büyüklüğü Hesaplama
tradeSize = strategy.equity / close
riskSize = (strategy.equity * riskPercentage / 100) / close
leverageSize = math.max(1, riskSize) // Negatif değerleri engellemek için doğrulama
// Pozisyon Açma
if (longCondition)
strategy.entry("Buy", strategy.long, qty=leverageSize, stop=close - (atrValue * stopLossMultiplier), limit=close + (atrValue * takeProfitMultiplier), comment="Long Entry")
if (shortCondition)
strategy.entry("Sell", strategy.short, qty=leverageSize, stop=close + (atrValue * stopLossMultiplier), limit=close - (atrValue * takeProfitMultiplier), comment="Short Entry")
// Çıkış Koşulları: Trailing Stop
if (strategy.position_size > 0)
strategy.exit("Trail Exit Long", from_entry="Buy", trail_price=close - atrValue * trailStopMultiplier, trail_offset=atrValue * stopLossMultiplier, limit=close + atrValue * takeProfitMultiplier)
if (strategy.position_size < 0)
strategy.exit("Trail Exit Short", from_entry="Sell", trail_price=close + atrValue * trailStopMultiplier, trail_offset=atrValue * stopLossMultiplier, limit=close - atrValue * takeProfitMultiplier)
// Pozisyon Kapatma Koşulları
if (ta.crossunder(close, QQES))
strategy.close("Buy") // Long pozisyonu kapat
if (ta.crossover(close, QQEF))
strategy.close("Sell") // Short pozisyonu kapat
// Ekstra Görselleştirme (Trend Renkleri)
longFillColor = QQEF > QQES ? color.new(color.green, 80) : na
shortFillColor = QQEF < QQES ? color.new(color.red, 80) : na
fill(plot1=plot(QQEF, display=display.none), plot2=plot(QQES, display=display.none), color=longFillColor, title="Uptrend Fill")
fill(plot1=plot(QQEF, display=display.none), plot2=plot(QQES, display=display.none), color=shortFillColor, title="Downtrend Fill")