QQEインジケーターとRSIインジケーターに基づくロングおよびショートシグナル戦略

RSI QQE
作成日: 2024-05-27 15:17:45 最終変更日: 2024-05-27 15:17:45
コピー: 0 クリック数: 830
1
フォロー
1617
フォロワー

QQEインジケーターとRSIインジケーターに基づくロングおよびショートシグナル戦略

概要

この戦略は,QQE指標とRSI指標をベースに,RSI指標の平滑移動平均値と動的振動幅を計算して多空信号区間を構築する.RSI指標が上位突破時に多空信号を生じ,下位突破時に空き信号を生じする.戦略の主な考え方は,RSI指標のトレンド特性とQQE指標の波動特性を利用して,市場のトレンドの変化と波動の機会を捉えることである.

戦略原則

  1. RSI指標の平滑移動平均RsiMaを計算し,トレンドの判断の基礎として使う.
  2. RSI指標の絶対偏差値AtrRsiを計算し,波動を判断するための基礎として,その滑らかな移動平均値MaAtrRsiを計算する.
  3. QQE因子に基づいて動的振動幅darを計算し,RsiMaと結合して,多空信号区間のlongbandとshortbandを構成する.
  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)