【FX手法】G-Channel Trend Detection手法をバックテスト検証

FX Gトレンド手法サムネ FX手法

このページでは、海外で紹介されているFX手法を日本語で分かりやすく紹介しています。主に、シンプルで再現性が高そうなものをピックアップしています。

G-Channel + Premier RSI 手法

2つのインジを組み合わせるだけのシンプルな手法です。

使うのは、G-Channel Trend DetectionPremier RSI Oscillator [LazyBear]の2つ。

G-Channelでトレンドの方向を確認して、Premier RSIのサインが出たらエントリーするというやり方です。

損切ラインは直近安値(ショートは直近高値)。リスクリワードは1:1.5が目標。

G-Channel TrendとPremier RSIってどんなインジ?

G-Channel Trend Detection

G-Channel Trend Detection

  • 価格の上下にバンドを描いて、トレンドの方向を色で教えてくれるインジ。
  • バンドが青なら上昇、赤なら下降トレンドと判断します。
  • 見た目がシンプルで、現在どっちの方向なのかが一目でわかるのがいいところ。

Premier RSI Oscillator [LazyBear]

Premier RSI Oscillator [LazyBear]

  • RSIにStochasticをかけて、モメンタムの強さと方向を捉えるインジ。
  • トレンドの転換点を捉えるのが得意で、ビジュアル的にわかりやすいのが特徴。
  • デフォルトのままだとG-Channelと似た判断になりやすいので、設定値を変えて使います。

G-Channelでトレンドの大きな流れを把握して、Premier RSIで波のタイミングを計るって感じですね。

TradingViewへの追加方法

どちらもTradingViewの公開スクリプトから無料で追加できます。

G-Channel Trend Detectionの追加はこちらから。

Premier RSI Oscillator [LazyBear]の追加はこちらから。

Premier RSIの設定を変える

Premier RSIはデフォルトのままだと少し使いにくいので、下記に変えます。

  • 14 → 20
  • 8 → 15
  • 25 → 10

この数値にすることで、G-Channelと判断が被りにくくなってサインが見やすくなりますね。

2つをまとめたオリジナルインジを作ってみた

Trend Band Strategy

2つ別々に入れてもできるんですが、この手法の要素を1つにまとめたオリジナルインジを作りました。

名前は「Trend Band Strategy」。

//@version=6
// ================================================================
// Trend Band Strategy (TBS)
// 完全オリジナル実装
// ① トレンドバンド(二重EMAによる上下バンドでトレンド方向を判定)
// ② Stoch RSIフィルター(K線とD線の位置関係でモメンタム確認)
// ================================================================
strategy(
    title             = "Trend Band Strategy",
    shorttitle        = "TBS",
    overlay           = true,
    default_qty_type  = strategy.fixed,
    default_qty_value = 1,
    commission_type   = strategy.commission.percent,
    commission_value  = 0.05,
    slippage          = 2
)

// ================================================================
// 入力設定
// ================================================================
var GRP_BAND = "📊 トレンドバンド"
var GRP_SRSI = "📈 Stoch RSIフィルター"
var GRP_SL   = "🛡️  SL / TP"
var GRP_ST   = "⚙️  ストラテジー"

bandLen   = input.int  (20,   "バンド期間",           minval = 1,  group = GRP_BAND,
     tooltip = "大きくするとトレンド判定がゆっくりになる。推奨範囲 10〜40")

rsiLen    = input.int  (20,   "RSI期間",              minval = 1,  group = GRP_SRSI)
stochLen  = input.int  (15,   "Stochastic期間",       minval = 1,  group = GRP_SRSI)
smoothLen = input.int  (10,   "シグナル平滑化期間",   minval = 1,  group = GRP_SRSI,
     tooltip = "Stoch RSIのDラインの平滑化期間")

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

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をかけてバンドを形成
//   終値がバンド上限を抜けたら上昇トレンド、下限を割ったら下降トレンド
//   ミッドライン割れでイグジット
// ================================================================
upperBand = ta.ema(ta.ema(high, bandLen), bandLen)
lowerBand = ta.ema(ta.ema(low,  bandLen), bandLen)
midLine   = (upperBand + lowerBand) / 2

var int trendDir = 0
trendDir := close > upperBand ?  1
           : close < lowerBand ? -1
           : nz(trendDir[1])

isBull = trendDir ==  1
isBear = trendDir == -1

flipUp = ta.change(trendDir) != 0 and isBull
flipDn = ta.change(trendDir) != 0 and isBear

crossUnderMid = ta.crossunder(close, midLine)
crossOverMid  = ta.crossover (close, midLine)
exitLong      = isBull[1] and crossUnderMid
exitShort     = isBear[1] and crossOverMid

// ================================================================
// Stoch RSIフィルター
//   RSIにStochasticをかけてモメンタムを確認
//   K線がD線の上 → 上昇モメンタム → ロング許可
//   K線がD線の下 → 下降モメンタム → ショート許可
// ================================================================
rsiVal  = ta.rsi(close, rsiLen)
stochK  = ta.stoch(rsiVal, rsiVal, rsiVal, stochLen)
stochD  = ta.sma(stochK, smoothLen)

rsiOK_L = stochK > stochD
rsiOK_S = stochK < stochD

// ================================================================
// エントリー / イグジット
// ================================================================
entryLong  = flipUp and rsiOK_L
entryShort = flipDn and rsiOK_S

swingLow  = ta.lowest (low,  swingLen)
swingHigh = ta.highest(high, swingLen)

if useLong
    if entryLong
        risk    = math.max(close - swingLow, syminfo.mintick)
        tpPrice = close + risk * rrRatio
        strategy.entry("Long", strategy.long, qty = lotSize)
        if useSLTP
            strategy.exit("Long SLTP", "Long",
                 stop           = swingLow,
                 limit          = tpPrice,
                 comment_loss   = "SL",
                 comment_profit = "TP")
    if exitLong
        strategy.close("Long", comment = "Exit")

if useShort
    if entryShort
        risk    = math.max(swingHigh - close, syminfo.mintick)
        tpPrice = close - risk * rrRatio
        strategy.entry("Short", strategy.short, qty = lotSize)
        if useSLTP
            strategy.exit("Short SLTP", "Short",
                 stop           = swingHigh,
                 limit          = tpPrice,
                 comment_loss   = "SL",
                 comment_profit = "TP")
    if exitShort
        strategy.close("Short", comment = "Exit")

// ================================================================
// アラート(アラートダイアログで「alert()関数の呼び出し」を選択)
// ================================================================
if barstate.isconfirmed
    if entryLong
        alert("{{ticker}} {{interval}}: ロングエントリー", alert.freq_once_per_bar_close)
    if entryShort
        alert("{{ticker}} {{interval}}: ショートエントリー", alert.freq_once_per_bar_close)
    if exitLong or exitShort
        alert("{{ticker}} {{interval}}: イグジット", alert.freq_once_per_bar_close)

// ================================================================
// 描画
// ================================================================
bandColor = isBull ? color.new(#00c3ff, 0) : color.new(#ff0062, 0)

plot(upperBand, "Upper Band", color.new(bandColor, 70), 1)
plot(lowerBand, "Lower Band", color.new(bandColor, 70), 1)
fill(
    plot(upperBand, display = display.none),
    plot(lowerBand, display = display.none),
    color.new(bandColor, 90)
)
plot(midLine, "Mid Line", bandColor, 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(
    isBull and rsiOK_L ? color.new(#00c3ff, 65)
  : isBear and rsiOK_S ? color.new(#ff0062, 65)
  : na
)

 

なお、G-Channel・Premier RSIともに著作権のあるオリジナルインジのため、コードをそのままコピーするのではなく、各インジの概念・考え方を参考にしてゼロから独自実装しています。

トレンドバンド部分は、G-Channelと同じくチャネルでトレンドの方向を判定するという考え方を使い、高値・安値に二重EMAをかけた独自のバンドとして実装しました。

フィルター部分は、Premier RSIのコアである「RSIにStochasticをかけてモメンタムを見る」という考え方をそのまま使っています。設定値はこの手法に合わせてRSI期間20・Stochastic期間15・平滑化10をデフォルトにしました。

エントリー条件はバンドの方向が転換したタイミングで、Stoch RSIのK線がD線の上(ロング)または下(ショート)にあるときだけ入ります。イグジットはバンドのミッドライン割れ。SLは直近の安値・高値ベースです。

ストラテジーになっているので、バックテストで成績も確認できます。

バックテスト結果

正直に言うと、結果はあまり良くなかったです。

なのでこのインジケーターはトレーディングビューでは一般公開していません。

レンジ相場でのダマシが多く、手数料負けしやすい印象でした。トレンドがしっかり出ているとき、一時は悪くないんですが、どこかで大きくマイナスなども。

BTC 5分

Trend Band Strategybtc5

5分みたいな短い足は手数料負けも込みで地獄行き。

BTC 1日足

Trend Band Strategybtc1D

BTCの1日足は一時右肩上がりでかなり成績がよかったのですが、レンジに入ると帳消しに。

何とか現状プラスではあるけど…という印象。

BTC 1W

Trend Band Strategybtc1W

一週間足はなんとプロフィットファクター4.8という化け物みたいな成績。

しかし日足のことがあるので、どこまで信じていいのかという感じですね。

GOLD 1日足

Trend Band StrategyGOLD 1D

GOLDの日足はキレイなトレンドだったのですが、その期間もマイナス続き。

そのほか、

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

などの各足もしらべてみたのですが、ストラテジー結果はどれもよくありませんでした。

この手法の感想

コンセプトはシンプルで面白いと思いますが、バックテストを回してみると結果がついてこない感じでした。

元のインジはビジュアルがわかりやすいので、サインを参考にしながら裁量で判断するのが一番向いてるのかなとは思います。

パラメーターをいじれば改善できる余地もあると思うので、興味がある方はいろいろ試してみてください。

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

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

TradingView

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

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

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

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

 

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

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

投資についての免責事項

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

FX手法
Shiroiをフォローする

コメント

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