Chiến lược này là một hệ thống theo xu hướng dựa trên chỉ số QQE (Quick Quiet Exponent), kết hợp với các cơ chế quản lý rủi ro năng động. Cốt lõi của chiến lược nắm bắt xu hướng thị trường thông qua các đường chéo của các đường QQE nhanh và chậm, trong khi sử dụng ATR (Range trung bình thực sự) để điều chỉnh năng động mức dừng lỗ và lấy lợi nhuận để tối ưu hóa cấu hình rủi ro-lợi nhuận. Chiến lược cũng bao gồm các tính năng quản lý rủi ro tài khoản và kiểm soát vị trí tự động điều chỉnh kích thước vị trí dựa trên vốn chủ sở hữu tài khoản.
Chiến lược này 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ị trí. Mô-đun tạo tín hiệu dựa trên chỉ số QQE, tính toán đường nhanh (QQEF) thông qua đường trung bình chuyển động nhân tố (EMA) của RSI, và kết hợp ATRRSI để tính toán đường chậm (QQES).
Chiến lược này chuyển đổi chỉ số QQE thành một hệ thống giao dịch hoàn chỉnh, đạt được sự kết hợp hữu cơ của việc theo dõi xu hướng và quản lý rủi ro. Thiết kế chiến lược là hợp lý, có tính thực tế và khả năng mở rộng mạnh mẽ. Thông qua tối ưu hóa tham số và kiểm soát rủi ro thích hợp, chiến lược này có thể duy trì hiệu suất ổn định trong các môi trường thị trường khác nhau. Các nhà giao dịch được khuyến cáo tiến hành kiểm tra kỹ lưỡng và tối ưu hóa tham số trước khi giao dịch trực tiếp.
/*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")