この記事を読むと、
・ 超長期のボリンジャーバンドのバックテストが自分でも
・「コピー → ペースト → 1クリック」の簡単操作で(コードを無料公開)
・「22銘柄12年 ✕ 4テスト」の検証結果がわかる
- 2018年12月9日 追記
- 「5-1. TradingViewでも公開しています!」を追加しました
10年以上も前に「利益が出る」と紹介された手法が、現在でも通用するのか

この記事は、2007年10月に出版された「伝説のトレーダー集団 タートルズ流投資の魔術」に掲載されている手法を、TradingViewで再現するものです。
- ATRチャネル・ブレイクアウト
- ボリンジャー・ブレイクアウト ◀ イマココ
- ドンチアン・トレンド・システム
- 時限退出付きドンチアン・トレンド
- ダブル移動平均
- トリプル移動平均
25銘柄12年✕4→利益!
ボリンジャー・ブレイクアウトをTradingViewで検証
1. タートルズ流 投資の魔術 からの引用
まずは、この記事の主題でもある「ボリンジャー・ブレイクアウト」について書かれている箇所を「伝説のトレーダー集団 タートルズ流投資の魔術」から引用します。
このシステムは、1992年に出版されたチャック・ルボーとデビット・ルーカスの共著『マーケットのテクニカル秘録』で説明されている(チャネル幅にさまざまな日数の移動平均とさまざまな標準偏差を用いている)。
ボリンジャー・バンドはジョン・ボリンジャーによって考案された変動性チャネルだ。これは、終値の350日移動平均に標準偏差の2.5倍を加算・減算したもので、前日の終値がチャネルの上限を超えたら、寄り付きから買い持ちのトレードを仕掛け、前日の終値がチャネルの下限を下回れば、売り持ちとなる。終値が移動平均値とクロスして下へ抜けたら、取引は手じまいだ。
引用元
伝説のトレーダー集団 タートルズ流投資の魔術(P.166)
この記事は、上記の手法をTradingViewで再現することを目的としたものです。
2. ストラテジーを作成

チャートが再現できているか確認するために、「伝説のトレーダー集団 タートルズ流投資の魔術」の P.167 図22 と同じものを作成してみました。
前回同様、限月とつなぎ足の違いはあると思いますが、貴金属が限月間の差が少ないのか大きな違いはなく(ほぼ)同じ形のチャートを作成することができました。かなり近い形で再現できていると思います。
パラメーターやコードは「5. ストラテジーのPineスクリプト」をご覧ください。
2-1. エントリーとイグジット
買いエントリー
- 「SMA350+標準偏差の2.5倍」を終値で上抜けたら買いエントリー
- 買い持ちの状態で「SMA350」を終値で下抜けたら決済
※ SMA350:350日単純移動平均

売りエントリー
- 「SMA350-標準偏差の2.5倍」を終値で下抜けたら売りエントリー
- 売り持ちの状態で「SMA350」を終値で上抜けたら決済
※ SMA350:350日単純移動平均

ボリンジャー・ブレイクアウトも「The トレンドフォロー」ですね。前回のATRチャネル・ブレイクアウトより勝率が高めな気がします。
3. バックテスト
同じ条件で手法を比べるために、前回同様、以下の「基本条件」でテストしていきます。
バックテストの基本条件
期間
- 2005年1月1日 ~ 2017年12月31日
- 12年間
銘柄
- 為替(5):
USDJPY、EURJPY、GBPJPY、CHFJPY、CADJPY - 株価指数(5):
UKY日経225、DJI NYダウ、DAXドイツ、UKXイギリスFTSE、HSI香港ハンセン - 日本株(5):
6098リクルート、4452花王、5711三菱マテリアル、7201日産、9984ソフトバンクグループ - 米株(5):
AAPLアップル、AXPアメリカン・エクスプレス、BAボーイング、JNJジョンソン・エンド・ジョンソン、MCDマクドナルド - 海外商品(5):
金、白金、原油、コーン、大豆
- 為替(5):
その他
- 資金管理:単利
手法は、市場との相性があるケースも多いので、主要な各市場から5銘柄ずつピックアップしてテストします。
TradingView のバックテストの資金管理は単利で検証するのが良いと思います。実戦向きな設定がないので。
3-1. テスト1
まずは、「本に掲載されていたものと同じ」テストを行います。あくまでも、本から読み取れる情報をもとに「こうだろうな」と設定したものです。
テスト1設定
MA | Stev upper | Stev lower | Losscut | Pyramiding |
350 | 2.5 | 2.5 | None | None |
テスト1結果
損益 | 最大DD | 取引数 | 勝数 | 勝率 | RR比 | 勝ち保有 | 負け保有 | |
TOTAL | 159 | 73 | 45.91 | 2.950 | ||||
USDJPY | 48.64 | 4.98 | 5 | 3 | 60.00 | 5.889 | 600 | 167 |
EURJPY | 15.68 | 25.32 | 8 | 3 | 37.50 | 2.462 | 393 | 125 |
GBPJPY | 141.55 | 5.22 | 5 | 4 | 80.00 | 7.028 | 509 | 124 |
CHFJPY | 2.72 | 14.57 | 7 | 2 | 28.57 | 2.729 | 512 | 98 |
CADJPY | -0.21 | 9.52 | 9 | 4 | 44.44 | 1.236 | 265 | 90 |
NKY | 11027.16 | 1409.97 | 6 | 4 | 66.67 | 2.620 | 385 | 157 |
DJI | 5444.31 | 3114.88 | 8 | 4 | 50.00 | 2.127 | 433 | 71 |
DAX | -443.16 | 2306.59 | 5 | 2 | 40.00 | 1.212 | 424 | 143 |
UKX | 125.80 | 1186.90 | 7 | 3 | 42.86 | 1.419 | 439 | 87 |
HSI | -13836.28 | 20811.90 | 8 | 1 | 12.50 | 2.346 | 446 | 119 |
6098 | 1208.00 | 0.00 | 1 | 1 | 100.00 | - | 471 | - |
4452 | 2316.00 | 878.00 | 7 | 3 | 42.86 | 3.168 | 516 | 111 |
5711 | -3385.00 | 4845.00 | 8 | 2 | 25.00 | 1.049 | 286 | 139 |
7201 | -211.00 | 392.00 | 5 | 1 | 20.00 | 2.61 | 377 | 140 |
9984 | 4306.00 | 183.00 | 6 | 4 | 66.67 | 8.329 | 285 | 205 |
AAPL | 61.69 | 6.79 | 6 | 5 | 83.33 | 2.017 | 330 | 160 |
AXP | 32.89 | 5.79 | 6 | 3 | 50.00 | 3.157 | 485 | 103 |
BA | 164.40 | 52.59 | 8 | 4 | 50.00 | 3.591 | 420 | 186 |
JNJ | 14.70 | 21.36 | 7 | 2 | 38.57 | 3.851 | 520 | 110 |
MCD | 33.60 | 16.15 | 7 | 4 | 57.14 | 1.974 | 406 | 48 |
GOLD | 78130.00 | 21370.00 | 5 | 3 | 60.00 | 3.104 | 604 | 120 |
PLATINUM | 16365.00 | 27100.00 | 4 | 2 | 50.00 | 1.605 | 558 | 44 |
WTI | -3380.00 | 48590.00 | 7 | 3 | 42.86 | 1.260 | 302 | 171 |
CORN | -2900.00 | 8700.00 | 8 | 3 | 37.50 | 1.336 | 320 | 115 |
SOY BEANS | 5212.50 | 18325.00 | 6 | 3 | 50.00 | 1.198 | 378 | 101 |
※ 「勝ち保有」「負け保有」は、保有期間(日)の平均
※ TOTALの「RR比」は「6098」を除いて算出
以下のことが言えそうです。
- 勝率高め、RRもかなり優秀
- ATRチャネル・ブレイクアウトよりもかなり優秀
- 日本の個別株は苦手そう
- その他はほぼプラス以上
日本個別株は、超長期の手法が苦手な可能性がありそうです。5銘柄だけなので何とも判断がつきませんが。
テスト1統計
破産の確率 | 0% |
期待値/リスク | 0.81 |
※ 破産の確率は、損失の許容=2%で算出
※ 期待値/リスク = 勝率 ✕ RR比 -|1- 勝率|
破産の確率は0%ですね。期待値を算出してみると、前回のATRチャネル・ブレイクアウトよりもかなり優秀です。シリーズの終わりにすべての手法を比較してみたいと思いますが、かなり優秀な期待値じゃないかと思います。
3-2. テスト2
次にピラミッティングを追加してテストしてみます。
テスト2設定
MA | Stev upper | Stev lower | Losscut | Pyramiding |
350 | 2.5 | 2.5 | None | 10-ATR 上限4 |
エントリー後、プラス方向に20日ATRの10倍ごとに追加します。最初のものを含めて4回のエントリーが上限です。タートルズの用語で言うと「ロード」の状態ですね。
テスト2結果
損益 | 最大DD | 取引数 | 勝数 | 勝率 | RR比 | 勝ち保有 | 負け保有 | |
TOTAL | 319 | 156 | 48.90 | 1.950 | ||||
USDJPY | 116.30 | 6.89 | 10 | 7 | 70.00 | 4.233 | 650 | 141 |
EURJPY | 12.59 | 24.44 | 13 | 5 | 38.46 | 2.030 | 357 | 148 |
GBPJPY | 170.97 | 31.56 | 16 | 9 | 56.25 | 2.403 | 484 | 181 |
CHFJPY | 10.95 | 36.26 | 12 | 5 | 41.67 | 1.699 | 496 | 110 |
CADJPY | -23.47 | 33.34 | 14 | 5 | 35.71 | 0.825 | 268 | 128 |
NKY | 19069.57 | 3866.40 | 15 | 11 | 73.33 | 1.335 | 384 | 149 |
DJI | 8957.34 | 5238.15 | 19 | 11 | 57.89 | 1.366 | 367 | 112 |
DAX | 2373.58 | 2306.59 | 8 | 6 | 62.50 | 1.217 | 466 | 143 |
UKX | 946.90 | 1482.00 | 12 | 6 | 50.00 | 1.387 | 433 | 147 |
HSI | -3980.33 | 20811.90 | 11 | 4 | 36.36 | 1.421 | 291 | 119 |
6098 | 3030.00 | 0.00 | 4 | 4 | 100.00 | - | 382 | - |
4452 | 7300.00 | 2524.00 | 13 | 6 | 46.15 | 3.167 | 615 | 118 |
5711 | -4005.00 | 6155.00 | 12 | 3 | 25.00 | 1.156 | 278 | 162 |
7201 | -830.00 | 830.00 | 8 | 1 | 12.50 | 2.261 | 377 | 131 |
9984 | 409.00 | 3192.00 | 15 | 6 | 40.00 | 1.585 | 293 | 150 |
AAPL | -28.54 | 118.87 | 21 | 8 | 38.10 | 1.294 | 317 | 151 |
AXP | 34.42 | 21.04 | 12 | 6 | 50.00 | 1.849 | 403 | 136 |
BA | 400.47 | 55.42 | 17 | 10 | 58.82 | 4.32 | 371 | 178 |
JNJ | 37.73 | 21.36 | 12 | 6 | 50.00 | 1.932 | 418 | 105 |
MCD | 16.91 | 26.95 | 16 | 8 | 50.00 | 1.285 | 380 | 147 |
GOLD | 174830.00 | 29490.00 | 12 | 8 | 66.67 | 3.232 | 548 | 208 |
PLATINUM | 79885.00 | 27100.00 | 9 | 6 | 66.67 | 1.787 | 535 | 95 |
WTI | -87820.00 | 145190.00 | 14 | 5 | 35.71 | 0.846 | 321 | 135 |
CORN | -34387.00 | 34387.00 | 15 | 4 | 26.67 | 0.744 | 301 | 135 |
SOY BEANS | 32000.00 | 18325.00 | 9 | 6 | 66.67 | 1.109 | 322 | 101 |
※ 「勝ち保有」「負け保有」は、保有期間(日)の平均
※ TOTALの「RR比」は「6098」を除いて算出
テストが終わった段階で、ちょっと悪くなった印象でした。とはいえ、勝率48.9%とRR比1.95倍なので、単利でやれば十分勝てる手法です。確認のため期待値を算出してみると次のようになります。
テスト2統計
破産の確率 | 0% |
期待値/リスク | 0.44 |
※ 破産の確率は、損失の許容=2%で算出
※ 期待値/リスク = 勝率 ✕ RR比 -|1- 勝率|
テスト1と比較して「0.81 → 0.44」とかなり悪化しています。「取引回数を考慮するとどうなるか」を「3-5. テスト結果の比較」で見てみたいと思います。
3-3. テスト3
次のテストは、一般的によく使われる「標準偏差の2倍」にしてみたものです。
テスト3設定
MA | Stev upper | Stev lower | Losscut | Pyramiding |
350 | 2 | 2 | None | None |
テスト3結果
損益 | 最大DD | 取引数 | 勝数 | 勝率 | RR比 | 勝ち保有 | 負け保有 | |
TOTAL | 204 | 88 | 43.14 | 3.050 | ||||
USDJPY | 42.51 | 17.00 | 8 | 3 | 37.50 | 5.622 | 615 | 99 |
EURJPY | 26.78 | 13.37 | 10 | 4 | 40.00 | 2.990 | 364 | 127 |
GBPJPY | 149.08 | 12.61 | 6 | 4 | 66.67 | 6.409 | 517 | 186 |
CHFJPY | 23.67 | 8.65 | 8 | 3 | 37.50 | 4.493 | 459 | 124 |
CADJPY | -17.13 | 22.36 | 13 | 5 | 38.46 | 0.968 | 281 | 70 |
NKY | 9443.43 | 2747.39 | 8 | 4 | 50.00 | 3.004 | 393 | 158 |
DJI | 6484.98 | 2765.62 | 10 | 4 | 40.00 | 3.290 | 441 | 79 |
DAX | 3520.08 | 868.84 | 7 | 5 | 71.43 | 1.449 | 376 | 138 |
UKX | -555.80 | 1940.80 | 11 | 4 | 36.36 | 1.443 | 423 | 88 |
HSI | 2364.60 | 8764.19 | 9 | 2 | 22.22 | 4.444 | 455 | 150 |
6098 | 1173.00 | 142.00 | 2 | 1 | 50.00 | 9.261 | 539 | 28 |
4452 | 2145.00 | 1319.00 | 9 | 3 | 33.33 | 3.979 | 518 | 94 |
5711 | -2080.00 | 3880.00 | 9 | 3 | 33.33 | 1.102 | 345 | 106 |
7201 | -521.00 | 521.00 | 9 | 1 | 11.11 | 3.405 | 378 | 127 |
9984 | 4062.00 | 585.00 | 8 | 5 | 62.50 | 2.500 | 312 | 118 |
AAPL | 93.63 | 15.31 | 7 | 5 | 71.43 | 2.320 | 456 | 169 |
AXP | 50.06 | 8.10 | 7 | 4 | 57.14 | 3.861 | 487 | 46 |
BA | 219.82 | 40.31 | 8 | 5 | 62.50 | 3.293 | 473 | 133 |
JNJ | 15.68 | 21.91 | 8 | 2 | 25.00 | 4.454 | 561 | 107 |
MCD | 31.99 | 30.18 | 11 | 4 | 36.36 | 3.119 | 437 | 94 |
GOLD | 98100.00 | 9880.00 | 5 | 3 | 60.00 | 7.286 | 613 | 187 |
PLATINUM | 530.00 | 45625.00 | 7 | 3 | 42.86 | 1.347 | 511 | 114 |
WTI | 10690.00 | 74140.00 | 9 | 4 | 44.44 | 1.461 | 332 | 118 |
CORN | 362.50 | 13462.50 | 9 | 4 | 44.44 | 1.277 | 294 | 95 |
SOY BEANS | 19837.50 | 11825.00 | 6 | 3 | 50.00 | 2.062 | 385 | 123 |
※ 「勝ち保有」「負け保有」は、保有期間(日)の平均
条件を標準偏差の「2.5倍」から「2倍」にした分(あまくした分)取引回数が増えています。これで期待値が悪くならなければ、テスト1よりも良いと言えそうです。
テスト3統計
破産の確率 | 0% |
期待値/リスク | 0.75 |
※ 破産の確率は、損失の許容=2%で算出
※ 期待値/リスク = 勝率 ✕ RR比 -|1- 勝率|
期待値を算出してみると、テスト1と比較して「0.81 → 0.75」となり、それほど悪化していないことがわかります。この点も、「3-5. テスト結果の比較」で、もうちょっとだけ細かく見てみたいと思います。
3-4. テスト4
最後に、テスト3にピラミッティングを加えたものをテストしてみました。
テスト4設定
MA | Stev upper | Stev lower | Losscut | Pyramiding |
350 | 2 | 2 | None | 10-ATR 上限4 |
テスト4結果
損益 | 最大DD | 取引数 | 勝数 | 勝率 | RR比 | 勝ち保有 | 負け保有 | |
TOTAL | 401 | 188 | 46.88 | 2.41 | ||||
USDJPY | 119.77 | 17.00 | 14 | 8 | 57.14 | 5.070 | 622 | 107 |
EURJPY | 12.36 | 28.94 | 18 | 7 | 38.89 | 1.873 | 354 | 143 |
GBPJPY | 237.82 | 32.55 | 17 | 11 | 64.71 | 2.803 | 458 | 182 |
CHFJPY | 33.24 | 30.34 | 14 | 6 | 42.86 | 2.464 | 475 | 123 |
CADJPY | -42.18 | 50.42 | 19 | 6 | 31.58 | 0.888 | 285 | 114 |
NKY | 17695.86 | 6599.18 | 18 | 11 | 61.11 | 1.695 | 390 | 165 |
DJI | 12927.77 | 454.2 | 22 | 11 | 50.00 | 2.232 | 384 | 109 |
DAX | 4252.88 | 3569.55 | 15 | 8 | 53.33 | 1.649 | 447 | 160 |
UKX | -936.20 | 4056.80 | 18 | 8 | 44.44 | 1.029 | 426 | 106 |
HSI | 3241.96 | 22692.00 | 17 | 6 | 35.29 | 2.060 | 376 | 141 |
6098 | 3528.00 | 142.00 | 5 | 4 | 80.00 | 6.461 | 418 | 28 |
4452 | 7513.00 | -2688.00 | 15 | 6 | 40.00 | 3.876 | 621 | 112 |
5711 | -2480.00 | 6110.00 | 14 | 5 | 35.71 | 1.149 | 317 | 122 |
7201 | -1829.00 | 1829.00 | 15 | 2 | 13.33 | 1.404 | 293 | 114 |
9984 | 2331.00 | 3424.00 | 18 | 8 | 44.44 | 1.635 | 309 | 126 |
AAPL | 197.42 | 44.93 | 21 | 14 | 66.67 | 2.207 | 401 | 177 |
AXP | 50.20 | 14.78 | 13 | 4 | 53.85 | 2.195 | 422 | 104 |
BA | 597.56 | 42.44 | 20 | 13 | 65.00 | 4.362 | 408 | 143 |
JNJ | 47.36 | 21.91 | 15 | 6 | 40.00 | 2.710 | 492 | 98 |
MCD | 44.37 | 40.00 | 21 | 10 | 47.62 | 1.788 | 382 | 129 |
GOLD | 213750.00 | 18000.00 | 12 | 9 | 75.00 | 4.310 | 558 | 256 |
PLATINUM | 66845.00 | 45625.00 | 13 | 7 | 53.85 | 1.820 | 536 | 134 |
WTI | -54260.00 | 130270.00 | 17 | 7 | 41.18 | 0.909 | 321 | 135 |
CORN | -36750.00 | 40962.50 | 18 | 5 | 27.78 | 0.857 | 285 | 128 |
SOY BEANS | 11362.50 | 40075.00 | 12 | 6 | 50.00 | 1.227 | 322 | 125 |
※ 「勝ち保有」「負け保有」は、保有期間(日)の平均
テスト4統計
破産の確率 | 0% |
期待値/リスク | 0.6 |
※ 破産の確率は、損失の許容=2%で算出
※ 期待値/リスク = 勝率 ✕ RR比 -|1- 勝率|
期待値は 0.6 になりましたが、取引数はもっとも多くなりました。はたして「どのテストが優秀なのか」次で比べてみたいと思います。
3-5. テスト結果の比較
さて、テスト1からテスト4まで行いましたが、手法の良し悪しは「期待値と取引回数のバランス」で決まります。対象となる銘柄を増やせば高い期待値のまま取引回数を増やせますが、バックテストの比較ではまったく関係のない話です。
取引回数 | 勝率 | RR比 | 期待値 | 収益の見込み | |
テスト1 | 159 | 45.91 | 2.950 | 0.81 | 128.79 |
テスト2 | 319 | 48.90 | 1.950 | 0.44 | 140.36 |
テスト3 | 204 | 43.14 | 3.050 | 0.75 | 153.00 |
テスト4 | 401 | 46.88 | 2.410 | 0.60 | 240.60 |
収益の見込みは、それぞれ以下で算出しました。
- テスト1:0.81 ✕ 159 = 128.79
- テスト2:0.44 ✕ 319 = 140.36
- テスト3:0.75 ✕ 204 = 153.00
- テスト4:0.60 ✕ 401 = 240.60
※ この数値に、1トレードあたりのリスクを掛けると、収益を算出することもできます。
こうやって計算してみると、成績が良いのは "ダントツ" で「テスト4」ですね。わかりやすい。
期待値が良くても取引回数(チャンス)が少なければ意味がないし、取引回数が多くても期待値がマイナスなら損してしまう。つまり、この2つのバランスが重要です。
4. 考察
今回、2つの変数を調整してみました。「標準偏差を何倍にするか」と「ピラミッティングの有無」です。
まず、どちらの調整もプラスに作用したことがわかります。
テスト1 → テスト2:128.79 → 140.36
テスト1 → テスト3:128.79 → 153.00
組み合わせてみると、さらに良い結果になりました。
テスト4:240.60
最適化の問題は、短期間の偏ったデータを対象に行なうテストで行うことで生じます。このように、バックテストの "量" と "質" を確保した上で効果的な変数を探ることは、非常に有意義だと考えています。
また、実際のトレードでは「取引対象を増やすこと」で「高い期待値を維持しながら取引回数を増やすこと」も可能です。実際のトレードとバックテスト、それぞれのメリットとデメリットを把握して良い点を活かしていきたいものです。
5. ストラテジーのPineスクリプト
今回行ったバックテストに用いたストラテジーのコード(Pineスクリプト)を公開します。販売や二次配布以外は自由にご利用いただいて差し支えありません。ご自由にお使いください!
Pineスクリプト:Strategy Turtle Bollinger Break Out
//@version=3
strategy("Strategy Turtle Bollinger Break Out"
,default_qty_type=strategy.fixed
,default_qty_value=1
,pyramiding=4
,overlay=true)
src = close
len = input(350 ,minval=1 ,title="ma length")
up_n = input(2 ,minval=1 ,title="stdev upper n")
low_n = input(2 ,minval=1 ,title="stdev lower n")
SO_bool = input(false,type=bool ,title="loss cut")
SO_len = input(20 ,type=integer ,minval=1 ,title="loss cut ATR length")
SO_N = input(2 ,type=float ,minval=0.5 ,title="loss cut ATR*N")
MAX_N = input(1 ,type=integer ,minval=1 ,maxval=4 ,title="maximun num of unit")
LO_len = input(20 ,type=integer ,minval=1 ,title="pyramiding ATR length")
LO_N = input(10 ,type=float ,minval=0.5 ,title="pyramiding ATR*N")
Tm_bool = input(false,type=bool ,title="timed exit")
Tm_len = input(80 ,type=integer ,minval=1 ,title="timed exit length")
fromYear = input(2005 ,type=integer ,minval=1900 ,title="test start")
endYear = input(2017 ,type=integer ,minval=1900 ,title="test end")
isWork = timestamp(fromYear ,1 ,1 ,00 ,00) <= time and time < timestamp(endYear+1 ,1 ,1 ,00 ,00)
SMA = sma(close ,len)
STD = stdev(close ,len)
UPPER = SMA + STD * up_n
LOWER = SMA - STD * low_n
atr_SO_ = ema(tr ,SO_len)
atr_LO_ = ema(tr ,LO_len)
atr_SO = atr_SO_*SO_N
atr_LO = atr_LO_*LO_N
countTradingDays = na
countNonTradingDays = na
countTradingDays := strategy.position_size==0 ? 0 : countTradingDays[1] + 1
countNonTradingDays := strategy.position_size!=0 ? 0 : countNonTradingDays[1] + 1
entry1 = close
entry2 = close
entry3 = close
entry4 = close
entry1 := strategy.position_size==0 ? na : entry1[1]
entry2 := strategy.position_size==0 ? na : entry2[1]
entry3 := strategy.position_size==0 ? na : entry3[1]
entry4 := strategy.position_size==0 ? na : entry4[1]
lo2 = close
lo3 = close
lo4 = close
lo2 := strategy.position_size==0 ? na : lo2[1]
lo3 := strategy.position_size==0 ? na : lo3[1]
lo4 := strategy.position_size==0 ? na : lo4[1]
losscut = close
losscut := strategy.position_size==0 or SO_bool==false ? na : losscut[1]
L_EntrySig = close >= UPPER
S_EntrySig = close <= LOWER
if(strategy.position_size != 0)
L_ExitSig = (close <= SMA or S_EntrySig) and strategy.position_size > 0
S_ExitSig = (close >= SMA or L_EntrySig) and strategy.position_size < 0
TimedSig = countTradingDays > Tm_len and Tm_bool
strategy.close_all(when = L_ExitSig or S_ExitSig or TimedSig)
if(L_ExitSig or S_ExitSig)
entry1 := na
entry2 := na
entry3 := na
entry4 := na
lo2 := na
lo3 := na
lo4 := na
losscut := na
if(strategy.position_size > 0)
lo_sig2 = lo2 < high
lo_sig3 = lo3 < high
lo_sig4 = lo4 < high
if(lo_sig2 and MAX_N >= 2)
if(SO_bool)
strategy.entry("L-Entry2" ,strategy.long ,stop=close-atr_SO ,comment="L-Entry2")
strategy.exit("L-Entry1" ,stop=close-atr_SO)
else
strategy.entry("L-Entry2" ,strategy.long ,comment="L-Entry2")
lo2 := na
losscut := SO_bool ? close - atr_SO : na
if(lo_sig3 and MAX_N >= 3)
if(SO_bool)
strategy.entry("L-Entry3" ,strategy.long ,stop=close-atr_SO ,comment="L-Entry3")
strategy.exit("L-Entry2" ,stop=close-atr_SO)
strategy.exit("L-Entry1" ,stop=close-atr_SO)
else
strategy.entry("L-Entry3" ,strategy.long ,comment="L-Entry3")
lo3 := na
losscut := SO_bool ? close - atr_SO : na
if(lo_sig4 and MAX_N >= 4)
if(SO_bool)
strategy.entry("L-Entry4" ,strategy.long ,stop=close-atr_SO ,comment="L-Entry4")
strategy.exit("L-Entry3" ,stop=close-atr_SO)
strategy.exit("L-Entry2" ,stop=close-atr_SO)
strategy.exit("L-Entry1" ,stop=close-atr_SO)
else
strategy.entry("L-Entry4" ,strategy.long ,comment="L-Entry4")
lo4 := na
losscut := SO_bool ? close - atr_SO : na
if(strategy.position_size < 0)
lo_sig2 = lo2 > low
lo_sig3 = lo3 > low
lo_sig4 = lo4 > low
if(lo_sig2 and MAX_N >= 2)
if(SO_bool)
strategy.entry("S-Entry2" ,strategy.short ,stop=close+atr_SO ,comment="S-Entry2")
strategy.exit("S-Entry1" ,stop=close+atr_SO)
else
strategy.entry("S-Entry2" ,strategy.short ,comment="S-Entry2")
lo2 := na
losscut := SO_bool ? close + atr_SO : na
if(lo_sig3 and MAX_N >= 3)
if(SO_bool)
strategy.entry("S-Entry3" ,strategy.short ,stop=close+atr_SO ,comment="S-Entry3")
strategy.exit("S-Entry2" ,stop=close+atr_SO)
strategy.exit("S-Entry1" ,stop=close+atr_SO)
else
strategy.entry("S-Entry3" ,strategy.short ,comment="S-Entry3")
lo3 := na
losscut := SO_bool ? close + atr_SO : na
if(lo_sig4 and MAX_N >= 4)
if(SO_bool)
strategy.entry("S-Entry4" ,strategy.short ,stop=close+atr_SO ,comment="S-Entry4")
strategy.exit("S-Entry3" ,stop=close+atr_SO)
strategy.exit("S-Entry2" ,stop=close+atr_SO)
strategy.exit("S-Entry1" ,stop=close+atr_SO)
else
strategy.entry("S-Entry4" ,strategy.short ,comment="S-Entry4")
lo4 := na
losscut := SO_bool ? close + atr_SO : na
if((L_EntrySig or S_EntrySig) and isWork and strategy.position_size==0)
countTradingDays := 0
entry1 := close
if(L_EntrySig)
if(SO_bool)
strategy.entry("L-Entry1" ,strategy.long ,stop=close-atr_SO ,comment="L-Entry1")
else
strategy.entry("L-Entry1" ,strategy.long ,comment="L-Entry1")
lo2 := MAX_N >= 2 ? close + atr_LO : na
lo3 := MAX_N >= 3 ? close + atr_LO * 2 : na
lo4 := MAX_N >= 4 ? close + atr_LO * 3 : na
losscut := SO_bool ? close - atr_SO : na
if(S_EntrySig)
if(SO_bool)
strategy.entry("S-Entry1" ,strategy.short ,stop=close+atr_SO ,comment="S-Entry1")
else
strategy.entry("S-Entry1" ,strategy.short ,comment="S-Entry1")
lo2 := MAX_N >= 2 ? close - atr_LO : na
lo3 := MAX_N >= 3 ? close - atr_LO * 2 : na
lo4 := MAX_N >= 4 ? close - atr_LO * 3 : na
losscut := SO_bool ? close + atr_SO : na
plot(strategy.position_size ,transp=0 ,title="保有ポジションの数")
plot(strategy.openprofit ,transp=0 ,title="未決済の損益")
plot(strategy.netprofit ,transp=0 ,title="決済済みの損益")
plot(strategy.closedtrades ,transp=0 ,title="決済済み取引数")
plot(countTradingDays ,transp=0 ,title="取引日数")
plot(countNonTradingDays ,transp=0 ,title="ノンポジ日数")
plot(entry1 ,title="entry1" ,color=blue ,transp=0 ,style=linebr)
plot(lo2 ,title="lo2" ,color=red ,transp=0 ,style=linebr)
plot(lo3 ,title="lo3" ,color=red ,transp=0 ,style=linebr)
plot(lo4 ,title="lo4" ,color=red ,transp=0 ,style=linebr)
plot(losscut ,title="losscut" ,color=red ,transp=0 ,style=linebr)
plot(atr_SO ,transp=0 ,title="ATR_SO")
plot(atr_LO ,transp=0 ,title="ATR_LO")
// plot(strategy.max_drawdown ,transp=50 ,title="最大DD")
// plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)
p1 = plot(UPPER ,color=#303F9F ,title="UPPER" ,style=line ,linewidth=2, transp=0)
p2 = plot(LOWER ,color=#4CAF50 ,title="LOWER" ,style=line ,linewidth=2, transp=0)
plot(SMA ,color=red ,title="EMA" ,style=line ,linewidth=2 ,transp=0)
fill(p1 ,p2 ,color=#2196F3 ,title="fill" ,transp=60)
5-1. TradingViewでも公開しています!

TradingView のインジケーターの検索で「bollinger break out」と検索するとでてきます。上記のコードと同じストラテジーを使用することができます。
6. バックテストならTradingView

TradingViewのテストは大変便利で、かなり自由の効くバックテストを短時間で簡単に、価格データを用意することなく豊富な銘柄と足種を対象に行うことができます。
一方で、その簡便さと引き換えに、TradingViewではできないバックテストも多くあります。
たとえば「分散投資」や「資金管理」があげられますが、これらは投資において非常に重要な要素でもあり、これらを含めたバックテストをするならリアルさが不可欠です。こういったバックテストをするためには、やはりPythonなどのプログラミング言語で自作していくしかないと考えています。
とはいえ、TradingViewが便利であることは間違いなく、最近では、手法の検証はTradingViewで行い、良い手法が見つかったら更に詳細なテストをPythonで行うようにしています。できるものはTradingViewでサクサクやってしまいます。
タカハシ / 7年目の兼業トレーダー
このブログの目的は、「学習の備忘録」と「アウトプットして理解を深めること」。「トレードで稼ぐために学んだこと」を徹底的に公開していきます。
元・日本料理の板前、現・金融畑のウェブ屋さん
保有資格:証券外務員1種、認定テクニカルアナリスト
更新のお知らせは、各SNSやLINEで。LINEだと1対1でお話することもできます!
>> このブログと著者についての詳細
>> 使っているツールの紹介
はじめて訪れた方にオススメしたいページ
「破産の確率」計算機
株やFXの「破産の確率」を計算するフォームです。
勝率、リスクリワード比率、損失の許容(リスク)から、「そのトレードで破産してしまう確率」を求めることができます。項目を入力して「計算」ボタンをクリック(タップ)してください。
※ページ下部にコメント欄があります!感想やご要望があればどしどしお寄せください^^!
ゼロから投資
投資初心者の同僚にゼロから投資を教えることに。
せっかくなので「教える過程」をまるっと公開。
まずは「あとは経験を積むだけ!」な状態を目指してもらいます。
※ 2019年4月より記事を作成中。順次アップしていきます!
トレードツール
ボク自身が、「使っていた」「使っている」「勉強している」ツールについて。
投資でどういう使い方をしているのか、実例をご紹介していきます。