
この戦略は、QQE (Quick Quiet Exponent) 指標に基づくトレンド追跡システムと、動的なリスク管理メカニズムを組み合わせたものです。この戦略の核心は、QQEの高速ラインと低速ラインの交差点を通じて市場のトレンドを捉え、ATR(平均真の範囲)を使用してストップロスと利益確定のポジションを動的に調整し、最適なリスクリターン構成を実現することです。この戦略には、口座リスク管理とポジション制御機能も含まれており、口座のエクイティに基づいてオープンポジションの数を自動的に調整できます。
この戦略には、主にシグナル生成、リスク管理、ポジション制御という 3 つのコア モジュールが含まれます。シグナル生成モジュールは、QQE インジケーターに基づいています。RSI の指数移動平均 (EMA) を計算して高速ライン (QQEF) を取得し、ATRRSI と組み合わせて低速ライン (QQES) を計算します。 QQEF が QQES を上向きに交差するとロング シグナルが生成され、下向きに交差するとショート シグナルが生成されます。リスク管理モジュールは、ATR を使用してストップロスと利益確定ポジションを動的に計算し、トレーリング ストップロス メカニズムを適用して利益を保護します。ポジション制御モジュールは、事前に設定されたリスク率と現在の口座残高に基づいて、オープンポジションの数を計算します。
この戦略は、QQE インジケーターを完全な取引システムに変換することで、トレンド追跡とリスク管理の有機的な組み合わせを実現します。この戦略は合理的に設計されており、高い実用性と拡張性を備えています。合理的なパラメータ最適化とリスク管理を通じて、この戦略はさまざまな市場環境で安定したパフォーマンスを維持できます。実際の取引で使用する場合は、十分なバックテストとパラメータの最適化を行うことをお勧めします。
/*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")