ボリンジャーバンドはトレンドの発生やレンジ相場を見やすく表示してくれるため、トレーダーに人気のテクニカル指標です。
ボリンジャーバンドを使ったトレード手法として、±2σにタッチしたら逆張りでエントリーする手法があります。TradingViewにはこの考え方に近い逆張りストラテジーが標準で用意されているので、実際の中身を確認してみましょう。
ボリンジャーバンドのストラテジー
TradingViewのストラテジーテスターを使えば、より簡単かつ素早くロジックの優位性を確かめることができます。
今回確認するのは、TradingViewにデフォルトで内蔵されているボリンジャーバンドのトレード戦略です。
BB Strategy, TradingView
赤い領域が損失の累計、青い領域が利益の累計です。トータルで1.03スイスフランとなっていますが、これはエントリーサイズを1通貨とした場合の結果です。
ストラテジーテスターの詳しい見方については、TradingViewのストラテジーテスターで検証を参照してください。
BB Strategy
これはTradingViewに元から用意されているストラテジーで、単純移動平均(SMA)と標準偏差を使ったボリンジャーバンドの逆張り(リバーサル)戦略です。終値が±2σのラインを抜けたタイミングでエントリーする、非常にシンプルなロジックになっています。
なお、この記事で紹介しているソースコードはPineスクリプトv4時代のものです。現在のTradingViewでは「Bollinger Bands Strategy Directed」という名称でPineスクリプトv5版に更新されており、ロング/ショートの方向を指定できるパラメータが追加されていますが、SMAと標準偏差から±2σのバンドを算出し、終値がそれをクロスしたタイミングでエントリーするという基本ロジックは変わっていません。

BB Strategyのソースを表示させます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//@version=4 strategy("Bollinger Bands Strategy", overlay=true) source = close length = input(20, minval=1) mult = input(2.0, minval=0.001, maxval=50) basis = sma(source, length) dev = mult * stdev(source, length) upper = basis + dev lower = basis - dev buyEntry = crossover(source, lower) sellEntry = crossunder(source, upper) if (crossover(source, lower)) strategy.entry("BBandLE", strategy.long, stop=lower, oca_name="BollingerBands", oca_type=strategy.oca.cancel, comment="BBandLE") else strategy.cancel(id="BBandLE") if (crossunder(source, upper)) strategy.entry("BBandSE", strategy.short, stop=upper, oca_name="BollingerBands", oca_type=strategy.oca.cancel, comment="BBandSE") else strategy.cancel(id="BBandSE") //plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr) |
このブロックがボリンジャーバンドの設定です。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
// パラメータ期間が20 length = input(20, minval=1) // 標準偏差+2σ mult = input(2.0, minval=0.001, maxval=50) // 単純移動平均を期間20で作成、これはボリンジャーバンドのセンター basis = sma(source, length) // 標準偏差2の作成 dev = mult * stdev(source, length) // +2σ upper = basis + dev // -2σ lower = basis - dev |
売買条件と注文、決済、キャンセルの処理は以下のようになっています。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// この2行は以降の条件文とダブっているのですが、使うケースがあります //buyEntry = crossover(source, lower) //sellEntry = crossunder(source, upper) // 買い条件:source(終値)が-2σをクロスオーバー if (crossover(source, lower)) // 買い注文:-2σで損切、注文が約定されるとoca_nameがBollingerBandsのグループの注文はキャンセル strategy.entry("BBandLE", strategy.long, stop=lower, oca_name="BollingerBands", oca_type=strategy.oca.cancel, comment="BBandLE") else strategy.cancel(id="BBandLE") // 売り条件:source(終値)が+2σをクロスアンダー if (crossunder(source, upper)) // 買い注文:-2σで損切、注文が約定されるとoca_nameがBollingerBandsのグループの注文はキャンセル strategy.entry("BBandSE", strategy.short, stop=upper, oca_name="BollingerBands", oca_type=strategy.oca.cancel, comment="BBandSE") else strategy.cancel(id="BBandSE") |
ボリンジャーバンドの±1σ、±2σのラインを追加して、このストラテジーの値動きを確認してみます。
- 終値が-2σを越えたところで買いエントリー
- 終値が+2σを下抜けたところで、それまでの買いポジションを決済し、ドテンで売りエントリー
③ これは買いエントリーですが、この後は逆方向に動いているにもかかわらず損切りされないまま含み損が増大し、その後の売り条件が点灯するまでポジションを持ち続けることになります。
これはいわゆる逆張りのストラテジーで、レンジ相場ではワークしますが、トレンドが発生した場合は押し目や戻りでポジションを持ってしまい、損失につながってしまいます。
損切利確の考察
このストラテジーの損切利確はエントリーした次の反対売買でのドテン決済になり、ある程度の変更が考えられます。
以下のような修正を加えてみます。
- 買いの損切:エントリー後に-2σに戻ったら損切
- 買いの利確:+1σを越えたら利確
- 売りの損切:エントリー後に+2σに戻ったら損切
- 売りの利確:-1σを越えたら利確
|
1 2 3 4 5 6 7 8 9 |
buyExit = crossunder(source, lower) sellExit = crossover(source, upper) buyExitSg1 = crossover(sourceH, upper1) sellExitSg1 = crossunder(sourceL, lower1) ... strategy.close("BBandLE", when = buyExit) strategy.close("BBandSE", when = sellExit) strategy.close("BBandLE", when = sourceH >= upper1) strategy.close("BBandSE", when = sourceL <= lower1) |
検証したパターンは次の3通りです。
- A:-2σでエントリー、+1σで利確
- B:+2σでエントリー、-1σで利確
- C:-2σでエントリー、-2σ越えで損切

PF(プロフィットファクター)で比較してみました。PFは1以上であれば利益が出ている計算になりますが、実運用を考えると1.5程度は欲しいところです。
1時間足については2020年以降の短期間のみの検証ですが、修正版で多少の改善は見られるものの、大幅な改善とまでは言えないレベルです。
| オリジナル | 修正版 | |||
| 日足 | 1時間足 | 日足 | 1時間足 | |
| USDJPY | 1.040 | 0.72 | 1.128 | 0.810 |
| USDCHF | 1.918 | 0.858 | 1.340 | 0.834 |
| EURJPY | 0.856 | 0.784 | 0.970 | 0.955 |
| EURUSD | 1.150 | 0.824 | 1.013 | 0.934 |
| GBPJPY | 1.087 | 0.743 | 1.043 | 0.872 |
| GBPUSD | 1.116 | 0.783 | 1.264 | 0.922 |
| AUDJPY | 1.318 | 0.834 | 1.027 | 0.874 |
ストラテジーテスターの評価方法については、こちらのTradingViewのストラテジーテスターで検証もあわせて参考にしてください。
まとめ
このストラテジーは、ボリンジャーバンドの日足であればそれなりにワークしそうですが、損切り・利確ルールを小手先で変更した程度ではうまくいかないようです。
逆張りだけでなく、順張り(トレンドフォロー)でエントリーする考え方もあります。また、ボリンジャーバンド以外のオシレーター系インジケーターを組み合わせたトレード手法も検討の余地があります。


























