資源の読み込みに... 荷物...

QQEとRSIをベースにした長期・短期信号戦略

作者: リン・ハーンチャオチャン開催日:2024年5月27日 15:17:45
タグ:RSIQQE

img

概要

この戦略は,QQE指標とRSI指標に基づいている.RSI指標のスムーズ移動平均値と動的振動範囲を計算し,長い短信号間隔を構築する.RSI指標が上部レールを突破すると長い信号を生成し,下部レールを突破すると短い信号を生成する.戦略の主なアイデアは,RSI指標のトレンド特性とQQE指標の変動特性を利用して市場トレンドや変動機会の変化を把握することである.

戦略原則

  1. RSI指標の平滑移動平均RsiMaを傾向を判断するための基礎として計算する.
  2. RSI指標の絶対偏差値 AtrRsi とその平滑移動平均 MaAtrRsi を,変動を判断するための基礎として計算する.
  3. QQE因子によるダイナミック振動範囲 dar を計算し,RsiMa と組み合わせて,長帯と短帯の長短信号間隔を構成します.
  4. RSIインジケーターと長短信号間隔の関係を判断します.RSIインジケーターが長帯を超えると,長信号を生成し,短帯を下回ると,短信号を生成します.
  5. ロング・ショート・シグナルに従って取引を行います. ロング・シグナルが発信されると,ロング・ポジションを開き,ショート・シグナルが発信されると,ポジションを閉じます.

戦略 の 利点

  1. RSI指標とQQE指標の特徴を組み合わせ,市場の動向と変動の機会をより良く把握できます.
  2. 動的振動範囲を使用して,市場の変動の変化に適応できる信号間隔を構成する.
  3. RSIインジケーターと波動範囲を平らにして,ノイズ干渉と頻繁な取引を効果的に軽減します.
  4. 論理は明確で,パラメータは少なく,さらに最適化や改善に適しています.

戦略リスク

  1. 不安定な市場や不安定性が低い市場では,この戦略のパフォーマンスが理想的ではない可能性があります.
  2. 明確なストップ・ロスのメカニズムがないため,市場が急激に逆転すると,引き上げリスクが大きくなる可能性があります.
  3. パラメータ設定は戦略の業績により大きな影響があり,異なる市場や品種に応じて調整する必要があります.

戦略の最適化方向

  1. 引き上げリスクを制御するために,固定パーセントのストップ・ロース,ATRストップ・ロースなど,明確なストップ・ロースメカニズムを導入する.
  2. パラメータ設定を最適化する.最適なパラメータ組み合わせは,遺伝子アルゴリズム,グリッド検索,その他の方法によって見つけることができます.
  3. トレーディング・シグナルを豊かにし,戦略の安定性を向上させるため,取引量やポジション量などの他の指標を導入することを検討する.
  4. 不安定な市場では,戦略の適応性を高めるため,レンジ・トレードまたはスウィング・トレード・ロジックを導入することを検討する.

概要

この戦略は,RSI指標とQQE指標に基づいて長短シグナルを構築し,トレンドキャプチャと変動把握の特徴を有する.戦略論理は,パラメータが少なく,さらに最適化および改善に適している.しかし,この戦略には,引き下げ制御およびパラメータ設定などの特定のリスクも含まれており,さらに改善する必要がある.将来的には,ストップ損失メカニズム,パラメータ最適化,信号濃縮,および異なる市場への適応性などの側面から戦略を最適化することができ,戦略の堅牢性と収益性を向上させる.


/*backtest
start: 2023-05-21 00:00:00
end: 2024-05-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

//@version=4
// modified by swigle
// thanks colinmck

strategy("QQE signals bot", overlay=true)


RSI_Period = input(14, title='RSI Length')
SF = input(5, title='RSI Smoothing')
QQE = input(4.236, title='Fast QQE Factor')
ThreshHold = input(10, title="Thresh-hold")

src = close
Wilders_Period = RSI_Period * 2 - 1

Rsi = rsi(src, RSI_Period)
RsiMa = ema(Rsi, SF)
AtrRsi = abs(RsiMa[1] - RsiMa)
MaAtrRsi = ema(AtrRsi, Wilders_Period)
dar = ema(MaAtrRsi, Wilders_Period) * QQE

longband = 0.0
shortband = 0.0
trend = 0

DeltaFastAtrRsi = dar
RSIndex = RsiMa
newshortband = RSIndex + DeltaFastAtrRsi
newlongband = RSIndex - DeltaFastAtrRsi
longband := RSIndex[1] > longband[1] and RSIndex > longband[1] ? max(longband[1], newlongband) : newlongband
shortband := RSIndex[1] < shortband[1] and RSIndex < shortband[1] ? min(shortband[1], newshortband) : newshortband
cross_1 = cross(longband[1], RSIndex)
trend := cross(RSIndex, shortband[1]) ? 1 : cross_1 ? -1 : nz(trend[1], 1)
FastAtrRsiTL = trend == 1 ? longband : shortband

// Find all the QQE Crosses

QQExlong = 0
QQExlong := nz(QQExlong[1])
QQExshort = 0
QQExshort := nz(QQExshort[1])
QQExlong := FastAtrRsiTL < RSIndex ? QQExlong + 1 : 0
QQExshort := FastAtrRsiTL > RSIndex ? QQExshort + 1 : 0

//Conditions

qqeLong = QQExlong == 1 ? FastAtrRsiTL[1] - 50 : na
qqeShort = QQExshort == 1 ? FastAtrRsiTL[1] - 50 : na

// Plotting

plotshape(qqeLong, title="QQE long", text="Long", textcolor=color.white, style=shape.labelup, location=location.belowbar, color=color.green, size=size.tiny)
plotshape(qqeShort, title="QQE short", text="Short", textcolor=color.white, style=shape.labeldown, location=location.abovebar, color=color.red, size=size.tiny)

// trade

//if qqeLong > 0
strategy.entry("buy long", strategy.long, 100, when=qqeLong)
    
if qqeShort > 0
    strategy.close("buy long")
    // strategy.exit("close_position", "buy long", loss=1000)
    // strategy.entry("sell", strategy.short, 1, when=strategy.position_size > 0)
    


関連性

もっと