このページでは、海外で紹介されているFX手法を日本語で分かりやすく紹介しています。主に、シンプルで再現性が高そうなものをピックアップしています。
G-Channel + Premier RSI 手法
2つのインジを組み合わせるだけのシンプルな手法です。
使うのは、G-Channel Trend DetectionとPremier RSI Oscillator [LazyBear]の2つ。
G-Channelでトレンドの方向を確認して、Premier RSIのサインが出たらエントリーするというやり方です。
損切ラインは直近安値(ショートは直近高値)。リスクリワードは1:1.5が目標。
G-Channel TrendとPremier RSIってどんなインジ?
G-Channel Trend Detection

- 価格の上下にバンドを描いて、トレンドの方向を色で教えてくれるインジ。
- バンドが青なら上昇、赤なら下降トレンドと判断します。
- 見た目がシンプルで、現在どっちの方向なのかが一目でわかるのがいいところ。
Premier RSI Oscillator [LazyBear]
![Premier RSI Oscillator [LazyBear]](https://angou-kasou.com/wp-content/uploads/2024/04/Premier-RSI-Oscillator-LazyBear.webp)
- 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つをまとめたオリジナルインジを作ってみた

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分

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

BTCの1日足は一時右肩上がりでかなり成績がよかったのですが、レンジに入ると帳消しに。
何とか現状プラスではあるけど…という印象。
BTC 1W

一週間足はなんとプロフィットファクター4.8という化け物みたいな成績。
しかし日足のことがあるので、どこまで信じていいのかという感じですね。
GOLD 1日足

GOLDの日足はキレイなトレンドだったのですが、その期間もマイナス続き。
そのほか、
- EUR/USD
- USD/JPY
- GBP/USD
- AUD/USD
- USD/CAD
などの各足もしらべてみたのですが、ストラテジー結果はどれもよくありませんでした。
この手法の感想
コンセプトはシンプルで面白いと思いますが、バックテストを回してみると結果がついてこない感じでした。
元のインジはビジュアルがわかりやすいので、サインを参考にしながら裁量で判断するのが一番向いてるのかなとは思います。
パラメーターをいじれば改善できる余地もあると思うので、興味がある方はいろいろ試してみてください。
あと、MT4やMT5など他のツールでチャートを見ている方はぜひ一度TradingViewを見てみてください。



コメント