【海外FX手法】QQEMODとSSLHybridトレンドフォロー

add_texts FX手法

このページでは、英語で紹介されている手法を日本語で分かりやすく紹介しています。 主に、YouTube再生数の多いものをピックアップしています。

QQEMOD&SSL Hybrid手法

以前あったYoutubeの動画が削除されてしまっていたので、手法の要素だけ抽出してオリジナルインジケーターを作りました。

紹介されていたのは、QQEMODSSL Hybridというインジケーターを使う手法。

割とシンプルなので再現性は高いと思います。

QQEMODが青の時(上昇トレンド)または赤の時(下降トレンド)を確認して、SSL HybridのExit Arrowサインが出たらエントリーするというやり方です。

損切ラインは直近安値。 リスクリワードは1:1。

QQESSLの条件成立

この画像のところが条件成立ですね。

どの通貨、どの時間足だと成績がいいのか?などもインジケーターをストラテジー化して調査しました。

SSL HybridとQQE MODってどんなインジ?

SSL Hybrid

  • 短期と長期の移動平均線を組み合わせたインジケーター。
  • 移動平均線が交差する点をトレーディングのシグナルとして利用。短期MAが長期MAを上から下へ交差する場合は売りシグナル、その逆は買いシグナル。
  • 特にトレンドが強い市場状況で効果を発揮。

QQE MOD(Quantitative Qualitative Estimation Modified)

  • RSI(相対力指数)をベースにしたインジケーター。市場の過熱・過冷を示すのに使われます。
  • RSIにボラティリティの要素を加えることで、より精度の高いシグナルを出す。
  • トレンドの強さや転換点を識別するのに役立つ。

ザックリこの手法の説明をすると、QQEMODでトレンドの上下を判断。そしてSSL HybridのExit Arrowで、勢いが出た瞬間に乗っかって1:1を取りに行くって感じですね。

TradingViewへの追加方法

2つのインジはどちらもTradingViewの公開スクリプトから無料で追加できます。   SSL Hybridの追加はこちらから。

SSLHybrid

「インジケーター」→「検索」から「SSL Hybrid」で出てきます。作者名が「Mihkel00」のものを選んでください。   QQE MODの追加はこちらから。

QQEMOD

同じくインジケーター検索から「QQE MOD」で追加できます。

表示を手法用にスッキリさせる

SSL Hybridをデフォルトで入れると、これがめちゃくちゃゴチャゴチャしています。

SSLHy表示

点とか矢印とかもうわけわかんないですw

なので、Exit Arrow以外の表示を設定でオフにします。

やり方は、インジケーターの設定画面を開いて「スタイル」タブへ。 チェックボックスが並んでいるので、「Exit Arrows」以外をすべてオフにするだけです。

SSL表示改善

すると、この手法に必要なExit Arrowサインだけ表示されます。 だいぶスッキリして見やすくなりますね。

QQEMODとSSLの要素を使ったオリジナル

先ほど紹介したインジケーターを導入してもできるのですが、改めて1つにまとめたインジケーターを作りました。

今回作ったのはQQEと、SSLの要素を活かしたサインツールです。

名前は「QQE Channel Strategy

QQESSLオリジナルインジケーター

TradingViewでも無料で公開しています。(英語版なので、日本語が良い方は下にあるコードを使ってください)

ストラテジーの設定が入っているのでバックテストにも使えます。

デフォルト条件はこの手法に合わせて、チャネルEMA期間60・SL直近10本の安値/高値・リスクリワード1:1にしてあります。手数料は0.05%(スプレッド込みのイメージ)。

設定画面は4つのグループに分かれています。

  •  トレンドチャネル チャネルのEMA期間。長くするとトレンド判定がゆっくりになります。
  • モメンタムフィルター RSI期間とQQ係数。係数が大きいほどシグナルが絞られます。
  •  SL/TP 直近何本の安値/高値をSLにするか、リスクリワード比の設定。固定SL/TPをOFFにするとシグナルだけで決済します。
  •  ストラテジー ロング/ショートの有効・無効とロット数。

好みに合わせて変更してください。

//@version=6
// ============================================================
// QQE Channel Strategy  (QCS)
// 完全オリジナル実装
// ① トレンドチャネル(High/Low EMAによる方向判定)
// ② モメンタムフィルター(QQEアルゴリズムコンセプトを独自実装)
// 両者が同方向に揃ったときだけエントリー
// ============================================================
// 手数料・スリッページはPropertiesタブ「Commissions / Slippage」でも変更可能
strategy(
    title             = "QQE Channel Strategy",
    shorttitle        = "QCS",
    overlay           = true,
    default_qty_type  = strategy.fixed,
    default_qty_value = 1,
    commission_type   = strategy.commission.percent,
    commission_value  = 0.05,   // ← 手数料(%)。Propertiesタブでも変更可
    slippage          = 2       // ← スリッページ(tick)
)

// ================================================================
// ① 入力設定
// ================================================================
var GRP_CH   = "📊 トレンドチャネル"
var GRP_MOM  = "📈 モメンタムフィルター"
var GRP_SL   = "🛡️  SL / TP"
var GRP_ST   = "⚙️  ストラテジー"

// チャネル
chLen    = input.int  (60,    "チャネルEMA期間",        minval = 1,   group = GRP_CH)

// モメンタム
rsiLen   = input.int  (14,    "RSI期間",               minval = 1,   group = GRP_MOM)
rsiSmth  = input.int  (5,     "RSIスムージング(EMA)",  minval = 1,   group = GRP_MOM)
qFactor  = input.float(4.238, "QQ係数",                minval = 0.1,
     step = 0.001, tooltip = "大きいほどシグナルが少なく安定する。推奨範囲 2〜6", group = GRP_MOM)

// SL / TP
useSLTP  = input.bool (true,  "固定SL/TPを使う",
     tooltip = "OFF にするとシグナルベースの決済のみ(出口サイン・モメンタム逆転)", group = GRP_SL)
swingLen = input.int  (10,    "SL基準:直近N本の安値/高値",  minval = 1,
     tooltip = "ロング:直近N本の最安値をSLに。ショート:最高値をSLに", group = GRP_SL)
rrRatio  = input.float(1.0,   "リスクリワード比(TP倍率)",  minval = 0.1, step = 0.1,
     tooltip = "1.0 = 1:1。SL幅 × この値がTP距離になる", group = GRP_SL)

// ストラテジー
useLong  = input.bool (true,  "ロング有効",  group = GRP_ST)
useShort = input.bool (true,  "ショート有効", group = GRP_ST)
lotSize  = input.float(1.0,   "ロット数",   minval = 0.01, step = 0.01, group = GRP_ST)

// ================================================================
// ② トレンドチャネル(独自実装)
//    高値EMA / 安値EMA で価格帯を囲み、抜けた方向でトレンドを判定
// ================================================================
chHigh = ta.ema(high, chLen)
chLow  = ta.ema(low,  chLen)

var int chDir = 0
chDir := close > chHigh ?  1
       : close < chLow  ? -1
       : nz(chDir[1])

// 出口ライン:内側のEMAを価格が割ったら流れが変わったサイン
chExit = chDir >= 0 ? chLow : chHigh

chBull  = chDir ==  1
chBear  = chDir == -1

chFlipL = ta.change(chDir) != 0 and chBull
chFlipS = ta.change(chDir) != 0 and chBear

exitLong  = chBull[1] and ta.crossunder(close, chExit)
exitShort = chBear[1] and ta.crossover (close, chExit)

// ================================================================
// ③ モメンタムフィルター(独自実装)
//    RSI → スムージング → 変動量ATR化 → トレーリングバンド
// ================================================================
rsiVal = ta.rsi(close, rsiLen)
rsiSm  = ta.ema(rsiVal, rsiSmth)

wilderLen = rsiLen * 2 - 1
rsiDelta  = math.abs(rsiSm - nz(rsiSm[1]))
rsiAtr1   = ta.ema(rsiDelta, wilderLen)
dar       = ta.ema(rsiAtr1, wilderLen) * qFactor

float lBand = rsiSm - dar
float sBand = rsiSm + dar

lBand := rsiSm > nz(lBand[1]) ? math.max(lBand, nz(lBand[1])) : lBand
sBand := rsiSm < nz(sBand[1]) ? math.min(sBand, nz(sBand[1])) : sBand

var int qDir = 0
qDir := ta.crossover (rsiSm, sBand[1]) ?  1
      : ta.crossunder(rsiSm, lBand[1]) ? -1
      : nz(qDir[1])

qBull = qDir ==  1
qBear = qDir == -1

// ================================================================
// ④ エントリー / イグジット
// ================================================================
entryLong  = (chFlipL and qBull)
           or (ta.change(qDir) != 0 and qBull and chBull)

entryShort = (chFlipS and qBear)
           or (ta.change(qDir) != 0 and qBear and chBear)

exitL = exitLong  or (qBear and strategy.position_size > 0)
exitS = exitShort or (qBull and strategy.position_size < 0)

// ── ロング ───────────────────────────────────────────────────
if useLong
    if entryLong
        slPrice = ta.lowest(low, swingLen)                           // 直近N本の最安値
        risk    = math.max(close - slPrice, syminfo.mintick)         // SL幅(0除算対策)
        tpPrice = close + risk * rrRatio                             // RR比でTP計算
        strategy.entry("Long", strategy.long, qty = lotSize)
        if useSLTP
            strategy.exit("Long SLTP", "Long",
                 stop    = slPrice,
                 limit   = tpPrice,
                 comment_loss   = "SL",
                 comment_profit = "TP")
    // シグナルベース決済(SLTPより先に来たらそちらで閉じる)
    if exitL
        strategy.close("Long", comment = "Signal Exit")

// ── ショート ─────────────────────────────────────────────────
if useShort
    if entryShort
        slPrice = ta.highest(high, swingLen)                         // 直近N本の最高値
        risk    = math.max(slPrice - close, syminfo.mintick)
        tpPrice = close - risk * rrRatio
        strategy.entry("Short", strategy.short, qty = lotSize)
        if useSLTP
            strategy.exit("Short SLTP", "Short",
                 stop    = slPrice,
                 limit   = tpPrice,
                 comment_loss   = "SL",
                 comment_profit = "TP")
    if exitS
        strategy.close("Short", comment = "Signal Exit")

// ================================================================
// ⑤ 描画
// ================================================================
chColor = chBull ? color.new(#00c3ff, 0) : color.new(#ff0062, 0)

plot(chHigh, "CH High", color.new(chColor, 75), 1)
plot(chLow,  "CH Low",  color.new(chColor, 75), 1)
fill(
    plot(chHigh, display = display.none),
    plot(chLow,  display = display.none),
    color.new(chColor, 92)
)
plot(chExit, "Exit Line", chColor, 2)

plotshape(entryLong,  "BUY",  shape.triangleup,   location.belowbar,
     color.new(color.green, 0), size = size.normal, text = "BUY",  textcolor = color.white)
plotshape(entryShort, "SELL", shape.triangledown,  location.abovebar,
     color.new(color.red,   0), size = size.normal, text = "SELL", textcolor = color.white)

plotshape(exitLong,  "Exit↑", shape.xcross, location.abovebar,
     color.new(color.orange, 0), size = size.small)
plotshape(exitShort, "Exit↓", shape.xcross, location.belowbar,
     color.new(color.orange, 0), size = size.small)

barcolor(
    chBull and qBull ? color.new(#00c3ff, 65)
  : chBear and qBear ? color.new(#ff0062, 65)
  : na
)

// ================================================================
// ⑥ アラート
// ================================================================
alertcondition(entryLong,             "🟢 Long Entry",  "{{ticker}} {{interval}}: ロングエントリー")
alertcondition(entryShort,            "🔴 Short Entry", "{{ticker}} {{interval}}: ショートエントリー")
alertcondition(exitLong or exitShort,  "⚠️ Exit Arrow",  "{{ticker}} {{interval}}: イグジットサイン")
alertcondition(entryLong or entryShort or exitLong or exitShort,
     "📢 All Signals", "{{ticker}} {{interval}}: シグナル発生")

QQE SSL成績の良かった通貨は?

大切なことなので初めにお伝えしますが、あくまで検証段階で成績の良かったものです。

今後の成績を保証するものではないのでご了承ください。

一番ヤバイ

QQESSLBTC5

総じて成績が悪かったのは、5分などの短い時間足です。

手数料負けが起きるので、頻繁過ぎる取引は成績が悪くなりがちです。(条件を変更すると変わるかもしれませんが)

BTC(ビットコイン) 1日足

QQESSLBTC1D

かなり波は大きいですが、検証時は右肩上がり。映ってない部分はマイナス圏もありましたが、現状はプラスですね。

GOLD 1日足

QQESSLGOLD1D

GOLDもキレイなトレンドが起きている通貨なので、大きい足だと成績がいいですね。

  • EUR/USD
  • USD/JPY
  • GBP/USD
  • AUD/USD
  • USD/CAD

などの通貨でも調べましたが、調査時マイナスだったりと成績は良くありませんでしたね。

利確や損切条件などを変えると成績はまた変化すると思います。興味のある人はやってみてください。

この手法の感想

注意点としては、Exit Arrowサインが出ていたとしてもQQEMODが微妙に変化するということ。

QQEMODの値が青か赤か微妙な時は見送るのが賢明ですね。

あるいは様子を見つつ、1:1を待たずに0.8ぐらいで早めに決済してしまうのもアリかなと。

大きな足&大きなトレンドが起きやすい通貨でしか成績が良くなかったのが気になりますが、成績のいい通貨が実際にあるということは検証の価値ありかなと。

 
あと、MT4やMT5など他のツールでチャートを見ている方はぜひ一度TradingViewを見てみてください。

無料でも十分多機能で使いやすさはダントツです。

TradingView

コピペで使えるインジケーターについて

TradingViewへの追加の仕方がわからない方は

≫【画像で簡単】TradingViewオリジナルインジケーター追加方法

コチラの記事を参考にしてください。慣れると簡単ですよ。

 

もし「こんなインジケーターが欲しい」という希望があれば、コメント欄にどうぞ。

トレーディングビュー用限定になってしまいますが、可能な範囲で作りますのでお気軽に

投資についての免責事項

当ブログで紹介する情報は、あくまで個人的な見解や分析結果であり、投資を推奨するものではありません。実際の投資判断は、ご自身の責任において行っていただきますようお願いいたします。
詳しくは免責事項をご覧ください。

FX手法
Shiroiをフォローする

コメント

タイトルとURLをコピーしました