
Strategi ini ialah sistem mengikut arah aliran berdasarkan penunjuk QQE (Quick Quiet Exponent), digabungkan dengan mekanisme pengurusan risiko yang dinamik. Teras strategi adalah untuk menangkap arah aliran pasaran melalui persimpangan garis cepat QQE dan garis perlahan, dan menggunakan ATR (Julat Sebenar Purata) untuk melaraskan kedudukan henti rugi dan ambil untung secara dinamik untuk mencapai konfigurasi pulangan risiko yang optimum. Strategi ini juga termasuk pengurusan risiko akaun dan fungsi kawalan kedudukan, yang boleh melaraskan secara automatik bilangan jawatan terbuka berdasarkan ekuiti akaun.
Strategi ini terutamanya merangkumi tiga modul teras: penjanaan isyarat, pengurusan risiko dan kawalan kedudukan. Modul penjanaan isyarat adalah berdasarkan penunjuk QQE Ia mengira purata bergerak eksponen (EMA) RSI untuk mendapatkan garis pantas (QQEF), dan mengira garis perlahan (QQES) dalam kombinasi dengan ATRRSI. Apabila QQEF melintasi QQES ke atas, isyarat panjang dijana, dan apabila ia melintasi ke bawah, isyarat pendek dijana. Modul pengurusan risiko menggunakan ATR untuk mengira kedudukan stop loss dan take profit secara dinamik, dan menggunakan mekanisme trailing stop loss untuk melindungi keuntungan. Modul kawalan kedudukan mengira bilangan jawatan terbuka berdasarkan peratusan risiko pratetap dan ekuiti akaun semasa.
Strategi ini merealisasikan gabungan organik penjejakan arah aliran dan pengurusan risiko dengan mengubah penunjuk QQE menjadi sistem perdagangan yang lengkap. Strategi ini direka bentuk secara munasabah dan mempunyai kebolehpraktisan dan kebolehskalaan yang kukuh. Melalui pengoptimuman parameter yang munasabah dan kawalan risiko, strategi boleh mengekalkan prestasi yang stabil dalam pelbagai persekitaran pasaran. Adalah disyorkan bahawa pedagang menjalankan ujian belakang yang mencukupi dan pengoptimuman parameter apabila menggunakannya dalam perdagangan sebenar.
/*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")