TradingViewで検証:時限式ドンチアン・トレンド【常識はずれ → でも利益!】

TradingViewで検証:時限式ドンチアン・トレンド【常識はずれ → でも利益!】

今回はなんといっても、「 "常識はずれ" な決済のスキーム」がポイントです!

1.誰もが "躊躇ちゅうちょしてしまう" ような手法の成績がわかる
 (本に掲載されていた "勝てる" 手法)
2.あなたも好きな銘柄で、この記事と同じバックテストができる
 (コードを公開、TradingViewでも公開、ぜんぶ無料だよ)

ぜひ、お読みください^^

10年以上も前に「利益が出る」と紹介された手法が、現在でも通用するのか

この記事は、2007年10月に出版された「伝説のトレーダー集団 タートルズ流投資の魔術」に掲載されている手法を、TradingViewで再現するものです。

  1. ATRチャネル・ブレイクアウト
  2. ボリンジャー・ブレイクアウト
  3. ドンチアン・トレンド・システム
  4. 時限退出付きドンチアン・トレンド ◀ イマココ
  5. ダブル移動平均
  6. トリプル移動平均

常識はずれ → でも利益!
時限式ドンチアン・トレンドのバックテスト

  1. タートルズ流 投資の魔術 からの引用
  2. ストラテジーを作成
    1. エントリーとイグジット
  3. バックテスト
    1. テスト1
    2. テスト2
    3. テスト3
    4. テスト4
    5. テスト結果の比較
  4. 考察
  5. ストラテジーのPineスクリプト
    1. TradingViewでも公開しています!
  6. バックテストならTradingView

1. タートルズ流 投資の魔術 からの引用

まずは、「時限式ドンチアン・トレンド」について書かれている箇所を、書籍「伝説のトレーダー集団 タートルズ流投資の魔術」から引用します。

 ドンチアン・トレンド・システムの変形、時限退出付きドンチアン・トレンド・システムは、ブレイクアウトの退出のかわりに時間にもとづいた退出を用いる。80日経てば退出し、どんなストップも使わない。

 仕掛けは問題ではなく、手じまいだけが問題だというトレーダーは多い。このシステムがその発言への私の答えだ。このシステムのパフォーマンスを他のシステムのそれと比べると、この非常に単純なシステムがもっと複雑な退出にまったく引けをとらないことがわかるだろう。

引用元
伝説のトレーダー集団 タートルズ流投資の魔術(P.169)

「この非常に単純なシステムがもっと複雑な退出にまったく引けをとらないことがわかるだろう。」

別の記事でまとめる予定ですが、確かに、書籍に掲載されているバックテストの結果を見ると "まったく引きをとらない" ものになっています。しかし、書いてあることをただ鵜呑みにしてしまうのは "あまりにも安易" です。

  • 本当に良い結果になるのか?
  • 銘柄が変わって、テスト期間が変わっても、同じような結果になるのか?

この記事は、上記の手法を TradingView で再現することを目的としたものです。

目次へ

2. ストラテジーを作成

TradingViewストラテジー 時限式ドンチアン・トレンド

今回も、各指標について明記されていたため「本に掲載されている図」と比較することはしていません。パラメーターやコードは「5. ストラテジーのPineスクリプト」をご覧ください。

目次へ

2-1. エントリーとイグジット

ポイントはなんと言っても「80営業日の経過で決済」です。他の一切の決済は行いません。ひとたびエントリーしたら、80営業日の経過まで "何が起ころうとも" 決済しない。そういうスキームです。

にわかには信じられませんが、これで「勝てる」と紹介されているわけです。
きっと誰もが思うはずです。「本当か?」と――。

買いエントリー

  • 「EMA25 が EMA350 を上回っている + 20日間の最高値をブレイク」で買いエントリー
  • 80営業日の経過で決済(他の一切の決済を行わない)

※ EMA●●:●●日指数平滑移動平均

TradingViewストラテジー 時限式ドンチアン・トレンド 買いシグナルとイグジット

売りエントリー

  • 「EMA25 が EMA350 を下回っている + 20日間の最安値をブレイク」で売りエントリー
  • 80営業日の経過で決済(他の一切の決済を行わない)

※ EMA●●:●●日指数平滑移動平均

TradingViewストラテジー 時限式ドンチアン・トレンド 売りシグナルとイグジット

信じがたいですが、簡単な話です。
疑わしいなら「試してみれば良いだけ」のことです。

目次へ

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):
      金、白金、原油、コーン、大豆
  • その他

    • 資金管理:単利

※ ちょっと今更ですが、6098リクルートは12年間の検証ができていません

手法は、市場との相性があるケースも多いので、主要な各市場から5銘柄ずつピックアップしてテストしています。

TradingView のバックテストの資金管理は単利で検証するのが良いと思います。実戦向きな設定がないので。

目次へ

3-1. テスト1

まずは、いつものように「こうだっただろう」と思われる設定でテストをしていきます。

テスト1設定

DC-en EMA-m EMA-l Time-ex Pyramiding
20 25 350 80-days None

ドンチアンの決済とロスカットの機能は削除しました。あくまでも、この記事における決済は「時限式の決済」のみにします。

テスト1結果

  損益 最大DD 取引数 勝数 勝率 RR比 勝ち保有 負け保有
Total     848 447 52.71% 1.24    
USDJPY 21.26 20.88 36 16 44.44 1.626 80 80
EURJPY 24.12 30.54 34 21 61.76 0.753 80 80
GBPJPY 129.96 27.13 36 21 58.33 1.6 80 80
CHFJPY -22.87 46.33 36 17 47.22 0.848 80 80
CADJPY 17.21 27.39 36 16 44.44 1.536 80 80
NKY 6165.02 7838.22 34 16 47.06 1.454 80 80
DJI 9609.52 3697.51 35 22 62.86 1.231 80 80
DAX 4783.09 3590.56 37 22 39.46 1.062 80 80
UKX -548.5 3116.4 37 20 54.05 0.772 80 80
HSI 10765.38 14060.68 34 18 52.94 1.263 80 80
6098 836 305 6 4 66.67 1.374 80 80
4452 2827 1398 33 16 48.48 1.875 80 80
5711 -4950 9030 35 15 42.86 0.87 80 80
7201 -752.3 800.3 34 14 41.18 0.973 80 80
9984 3019 4067 33 18 54.55 1.129 80 80
AAPL 117.6 40.69 35 26 74.29 0.843 80 80
AXP 53.47 23.53 35 23 65.71 0.843 80 80
BA 234.97 51.03 35 21 60 2.031 80 80
JNJ -8.26 40.38 35 16 45.71 1.077 80 80
MCD 74.99 20.63 34 18 52.94 1.85 80 80
GOLD 110520 44680 35 22 62.86 1.353 80 80
PLATINUM 20195 43480 35 19 54.29 0.993 80 80
WTI 45830 84110 35 17 48.57 1.316 80 80
CORN -16000 34762.5 37 15 40.54 1.152 80 80
SOY BEANS -1925 44087.5 36 14 38.89 1.539 80 80

※ 「勝ち保有」「負け保有」は、保有期間(日)の平均

まず、ここで読み取れる特長を列挙してみます。

  • 「勝ち保有」「負け保有」がすべてきっちり「80」
  • これまでの手法と比べて「勝率」が高め
  • 「ドンチアン・トレンド・システム」と比較して「取引回数」が減少
  • 『「損益」がマイナスの銘柄数』が増えている気がする(感覚)

テスト1統計

破産の確率 0.00%
期待値/リスク 0.179
収益の見込み 152.12

※ 破産の確率は、損失の許容=2%で算出

※ 期待値/リスク = 勝率 ✕ RR比 -|1- 勝率|

※ 収益の見込み = 期待値/リスク ✕ 取引回数

1項目ずつ TradingView の結果を手入力していくのですが(CSVとかで吐き出せたら良いのに)、「損益」がマイナスの銘柄が多くて「あれ、やっぱりこの手法ダメなんじゃないか」なんて思っていたのですが、集計してみると意外と勝てています。ただ、前回の「ドンチアン・トレンド・システム」よりは悪いですね。

目次へ

3-2. テスト2

せっかくなので、いくつかの変数を調整できるように作りました。まずは、「Pyramiding(増し玉)」の設定を変更してテストしてみます。

テスト2設定

DC-en EMA-m EMA-l Time-ex Pyramiding
20 25 350 80-days 1-ATR 上限4

「エントリーした価格からプラス方向にATRの1倍動いたらポジションを追加する」というものです。最初のものを含めて4回のエントリーが上限です。

テスト2結果

  損益 最大DD 取引数 勝数 勝率 RR比 勝ち保有 負け保有
Total     2749 1478 53.77% 1.23    
USDJPY 95.98 50.76 112 62 55.36 1.232 65 70
EURJPY 118.32 76.46 114 70 61.4 0.915 67 66
GBPJPY 282.86 111.63 131 69 52.67 1.483 71 66
CHFJPY -48.39 117.94 109 49 44.95 0.984 71 66
CADJPY 10.67 112.01 115 49 42.61 1.396 67 66
NKY 23513.77 25263.58 113 54 47.79 1.472 69 69
DJI 31549.42 8931.5 122 78 63.93 1.283 63 65
DAX 14123.69 12607.59 122 76 62.3 0.92 73 68
UKX -6497 13339.2 122 60 49.18 0.724 61 69
HSI 20123.8 52012.49 119 65 54.62 1.013 71 71
6098 3315 589 20 16 80 1.177 72 78
4452 10863 2858 99 47 47.47 2.331 72 71
5711 -8955 23595 110 44 40 1.145 69 72
7201 -2451.2 2751.2 103 44 42.72 0.892 71 66
9984 13977 7393 102 53 51.96 1.499 69 69
AAPL 388.41 144.16 126 97 76.98 0.764 69 74
AXP 147.87 70.7 121 71 58.68 1.092 65 63
BA 789.72 154.67 117 67 57.26 2.235 72 64
JNJ -97.67 116.23 110 51 46.36 0.791 64 67
MCD 227.39 68.37 115 61 53.04 1.739 69 67
GOLD 350160 120140 119 74 62.18 1.446 66 66
PLATINUM 84025 159235 110 66 60 0.843 67 71
WTI 327490 160640 102 61 59.8 1.223 71 65
CORN 21737.5 47737.5 105 46 43.81 1.457 71 70
SOY BEANS -44925 181237.5 111 48 43.24 1.135 67 66

※ 「勝ち保有」「負け保有」は、保有期間(日)の平均

  • 「取引回数」が「848 → 2749」で3倍強に
  • 「勝率」が 1% 上昇
  • 「RR比」が 0.007 低下
  • 「買い保有」「売り保有」にムラがでた

比較的、成績の変化が少なく「取引回数」を増やすことができています。優秀です。

「保有期間」のムラは、ピラミッティング分の決済を最初のエントリーのものと同じタイミングに設定しているために発生してものです。

テスト2統計

破産の確率 0.00%
期待値/リスク 0.200
収益の見込み 551.16

※ 破産の確率は、損失の許容=2%で算出

※ 期待値/リスク = 勝率 ✕ RR比 -|1- 勝率|

※ 収益の見込み = 期待値/リスク ✕ 取引回数

  • 「期待値」とすると「0.179 → 0.200」で上昇
  • 当然、「収益の見込み」も増加

普通は、「取引回数を増やすアプローチ」をすると、取引回数は増えるんだけど期待値は下がって、でも『取引回数が増えたので「収益の見込み」は大幅増だね』というのが大体のパターンです。

しかし、今回は「期待値の上昇」と「取引回数の増加」の両方を達成することができています。「収益の見込み」については、これまでで上から2番目くらいの結果です。優秀。

目次へ

3-3. テスト3

テスト3と4は、ちょっとした好奇心で「決済にかかる日数」を調整してみたいと思います。

テスト3設定

DC-en EMA-m EMA-l Time-ex Pyramiding
20 25 350 40-days None

まずは「80営業日 → 40営業日」として、「短期間にするとどのような影響があるのか」をテストしてみます。ちゃんと比較できるように「Pyramiding」の設定を「None」に。結果がたのしみです。

テスト3結果

  損益 最大DD 取引数 勝数 勝率 RR比 勝ち保有 負け保有
Total     1459 770 52.78% 1.15    
USDJPY 5.03 36.1 64 31 48.44 1.123 40 40
EURJPY 40.68 22.8 62 36 58.06 0.997 40 40
GBPJPY 129.76 28.38 63 36 57.14 1.594 40 40
CHFJPY 6.02 24.96 60 31 51.67 1.001 40 40
CADJPY 11.6 33.75 62 27 43.55 1.455 40 40
NKY 9587.64 5678.06 60 31 51.67 1.354 40 40
DJI 9373.77 5007.23 61 40 65.57 0.892 40 40
DAX -1254.04 6912.1 64 32 50 0.92 40 40
UKX -2736.4 4384.8 62 33 53.32 0.609 40 40
HSI 22728.49 10890.9 55 36 65.45 1.088 40 40
6098 799 192 10 6 60 2.442 40 40
4452 1042 2346 58 26 44.83 1.362 40 40
5711 -760 5220 58 28 48.28 1.015 40 40
7201 -592.7 1043.7 56 23 41.07 1.086 40 40
9984 2951 3194 57 28 49.12 1.289 40 40
AAPL 106.22 31.66 59 37 62.71 1.15 40 40
AXP 72.98 15.28 61 34 55.74 1.544 40 40
BA 207.33 35.15 57 36 63.16 1.593 40 40
JNJ -30.85 49.81 60 27 45 1.008 40 40
MCD 67.8 28.03 62 35 56.45 1.33 40 40
GOLD 114800 24800 58 40 68.97 0.993 40 40
PLATINUM 14865 46995 63 30 47.62 1.218 40 40
WTI -101990 196600 63 33 52.38 0.625 40 40
CORN -4550 67487.5 62 25 40.32 1.343 40 40
SOY BEANS -38187.5 72312.5 62 29 46.77 0.845 40 40

※ 「勝ち保有」「負け保有」は、保有期間(日)の平均

  • 保有期間: 40営業日(きっちり)
  • 取引回数: 848 → 1459(増加)
  • 勝率: 52.71% → 52.78%(ちょっとだけアップ)
  • RR比: 1.237 → 1.150(低下)

「勝率」はほぼ変わらずなのが不思議です。適当に一定期間のポジションにしているだけなのに、ほぼ変わらず。エッジはエントリーが重要で、イグジットはさほど重要じゃないということなんでしょうか。「取引回数の増加」と「RR比の低下」は、期間が「80営業日 → 40営業日」になっていることで説明がつきそうですね。

テスト3統計

破産の確率 0.00%
期待値/リスク 0.135
収益の見込み 196.44

※ 破産の確率は、損失の許容=2%で算出

※ 期待値/リスク = 勝率 ✕ RR比 -|1- 勝率|

※ 収益の見込み = 期待値/リスク ✕ 取引回数

結果、「期待値」は低下しましたが、「取引回数」の増加によって「収益の見込み」も伸びました。

目次へ

3-4. テスト4

最後です。テスト3に引き続き、「決済にかかる日数」を調整します。

テスト4設定

DC-en EMA-m EMA-l Time-ex Pyramiding
20 25 350 120-days None

今度は「80営業日 → 120営業日」として期間をのばしてみます。

テスト4結果

  損益 最大DD 取引数 勝数 勝率 RR比 勝ち保有 負け保有
Total     604 340 56.29% 1.17    
USDJPY 8.72 21.82 27 17 62.96 0.668 120 120
EURJPY -59.07 84.59 25 11 44 0.716 120 120
GBPJPY 118.73 31.44 26 16 61.54 1.329 120 120
CHFJPY 6.07 36.61 25 11 44 1.396 120 120
CADJPY 23.66 21.85 26 13 50 1.39 120 120
NKY 3220.28 10689.41 24 13 54.17 0.98 120 120
DJI 5607.98 7838.83 25 17 68 0.718 120 120
DAX 5738.46 2402.35 26 16 61.54 1.116 120 120
UKX 2078.5 1581.5 26 17 65.38 0.835 120 120
HSI 19820.57 8754.55 24 16 66.67 1.04 120 120
6098 822 237 4 3 75 1.489 120 120
4452 4987 1081 24 14 58.33 2.09 120 120
5711 -1320 5250 24 9 37.5 1.491 120 120
7201 -503.7 1106.7 25 10 40 1.109 120 120
9984 4452 3872 23 12 52.17 1.402 120 120
AAPL 156.79 37.11 24 18 75 1.407 120 120
AXP 44.08 23.72 26 16 61.54 0.978 120 120
BA 201.2 66.3 24 14 58.33 1.814 120 120
JNJ 12.08 21.91 24 12 50 1.168 120 120
MCD 66.95 21.55 26 15 57.69 1.393 120 120
GOLD 131890 17390 25 19 76 1.182 120 120
PLATINUM -10915 68845 25 12 48 0.994 120 120
WTI -79170 149160 26 11 42.31 0.898 120 120
CORN -23675 30637.5 25 17 32 1.295 120 120
SOY BEANS -52337.5 70562.5 25 11 44 0.678 120 120

※ 「勝ち保有」「負け保有」は、保有期間(日)の平均

  • 保有期間: 120営業日(きっちり)
  • 取引回数: 848 → 604
  • 勝率: 52.71% → 56.29%
  • RR比: 1.237 → 1.170

「取引回数」の減少はまるっと期間の変更で説明がつきそうな変化です。「勝率」と「RR比」も変化があるものの "ほぼ変わらず" な印象。テスト3の結果を踏まえると大きな驚きがありません(期間を変えても「勝率」「RR比」が大きく変わらないのはスゴイことなんです、本当は)。

それよりも気になるのは、決済期間を伸ばしたことで勝率が上がってしまったことです。なんか、「 "塩漬けトレーダー" にポジティブな材料を与えてしまうのでは」と懸念を持ちました。

これは、あくまでも一定期間に限った戦略的な長期保有です。「なんか損してるし切りづらいから "なんとなく" 長期保有する」のとは、まったく違います。「ダメな銘柄を長期保有する」ことほど(本当に!)無駄なことはありません。(ちょっと辛口になりましたが)誤解のないようにお願いします。

テスト4統計

破産の確率 0.00%
期待値/リスク 0.221
収益の見込み 133.64

※ 破産の確率は、損失の許容=2%で算出

※ 期待値/リスク = 勝率 ✕ RR比 -|1- 勝率|

※ 収益の見込み = 期待値/リスク ✕ 取引回数

結果、「期待値」は上昇しましたが「収益の見込み」が減少。「手法自体の悪化」ではなく、「取引回数の減少による悪化」であると考えます。(というか、結果がそう物語っています)

目次へ

3-5. テスト結果の比較

テスト結果をまとめて、比較をしてみます。

  取引回数 勝率 RR比 破産の確率 期待値 収益の見込み
テスト1 848 52.71 1.240 0.00 0.179 152.12
テスト2 2749 53.77 1.230 0.00 0.200 551.16
テスト3 1459 52.78 1.150 0.00 0.135 196.44
テスト4 604 56.29 1.170 0.00 0.221 133.64
  • 全体的に、これまでの手法よりも「勝率」が高い
  • ピラミッティング導入(テスト2)で期待値が上昇(不思議)
  • 保有期間の調整(テスト3・4)で「収益の見込み」に大きな変化がなかった(すごい)

詳しくは「4. 考察」で見ていきたいと思います。

目次へ

4. 考察

今回は、一風変わった手法のバックテストでした。

「時間にもとづいた退出を用いる。80日経てば退出し、どんなストップも使わない。」

こんな決済で本当に勝てるのか・・・。私も疑問しかありませんでしが、やってみると本当に勝てました。見当はずれな資金管理をしなければ実践でも勝てると思います。ビックリです。

しかも、本に掲載されていたのが 2006年ごろまでのテスト結果。今回は、期間を変更し、銘柄も変更して行ったものです(資金管理は含めず単利のテスト。取引回数、サンプルの "質" はともに十分)。それでも勝てていることが、また説得力を高めているように思います。

さて、今回のテストによって「決済よりもエントリーのエッジが重要であること」が示されたと思います(決済が軽視しているわけではありません)。

  • 仮に「『保有期間:80営業日』の優位性」で勝てている手法だとすると「保有期間」を変えることで成績の著しい悪化が生じるはず
  • 保有期間:80 → 40(テスト3)
    • 期待値:0.179 → 0.139
    • 取引回数:848 → 1459
    • 収益の見込み:152.12 → 196.44
  • 保有期間:80 → 120(テスト4)
    • 期待値:0.179 → 0.221
    • 取引回数:848 → 604
    • 収益の見込み:152.12 → 133.64
  • 著しい悪化はみられない
  • この手法において、重要なのは「エントリーの優位性」であると言えそう

テスト3は期待値の低下を取引回数でカバーし、テスト4については取引回数の減少を期待値でカバーしました。「もっともシンプルな決済(イグジット)」で良い結果がでていることから、「エントリーのエッジでの利益」であると考えています。

当然ですが、いくつかの注意点もあると思います。

  • エントリーのエッジとかけ離れた期間を「保有期間」とするのは有効でないと思われる
  • エントリーのエッジがなければ成り立たない
  • あまりにもシンプルで怖い(メンタルが必要なのでは)

念のため書いておくと、実践で使うにはあまりにも無防備なのでオススメしません。

こんな手法でもバックテストしてみると面白いですね。得るものがあります。TradingView で、同じバックテストが簡単にできます。もし気になる方がいれば、お試しください。

目次へ

5. ストラテジーのPineスクリプト

今回行ったバックテストに用いたストラテジーのコード(Pineスクリプト)を公開します。販売や二次配布 "以外" は自由にご利用いただいて差し支えありません。ご自由にお使いください!

Pineスクリプト:Strategy Turtle Time Exit Donchian Trend

//@version=3
strategy("Strategy Turtle Time Exit Donchian Trend"
  ,default_qty_type=strategy.fixed
  ,default_qty_value=1
  ,pyramiding=4
  ,overlay=true)



src = close
len_dc_entry = input(20   ,minval=1 ,title="length of dc entry")
len_ema_m    = input(25   ,minval=1 ,title="length of middle ema")
len_ema_l    = input(350  ,minval=1 ,title="length of long ema")
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(1    ,type=float   ,minval=0.5 ,title="pyramiding ATR*N")
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) 

upper_en = highest(high ,len_dc_entry)[1]
lower_en = lowest(low ,len_dc_entry)[1]
ema_m    = ema(src ,len_ema_m)
ema_l    = ema(src ,len_ema_l)

atr_LO_ = ema(tr ,LO_len)
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]



L_EntrySig = strategy.position_size==0 and high >= upper_en and ema_m >= ema_l
S_EntrySig = strategy.position_size==0 and low  <= lower_en and ema_m <= ema_l
lo_sig2    = strategy.position_size>0 ? lo2 < high : strategy.position_size<0 ? lo2 > low : na
lo_sig3    = strategy.position_size>0 ? lo3 < high : strategy.position_size<0 ? lo3 > low : na
lo_sig4    = strategy.position_size>0 ? lo4 < high : strategy.position_size<0 ? lo4 > low : na



if(strategy.position_size != 0)
    
    TimedSig = countTradingDays >= Tm_len
    strategy.close_all(when = TimedSig)
    
    if(TimedSig)
        entry1  := na
        entry2  := na
        entry3  := na
        entry4  := na
        lo2     := na
        lo3     := na
        lo4     := na



if(strategy.position_size > 0)
    
    if(lo_sig2 and MAX_N >= 2)
        lo2 := na
        strategy.entry("L-Entry2" ,strategy.long ,comment="L-Entry2")
    if(lo_sig3 and MAX_N >= 3)
        lo3 := na
        strategy.entry("L-Entry3" ,strategy.long ,comment="L-Entry3")
    if(lo_sig4 and MAX_N >= 4)
        lo4 := na
        strategy.entry("L-Entry4" ,strategy.long ,comment="L-Entry4")



if(strategy.position_size < 0)
    
    if(lo_sig2 and MAX_N >= 2)
        lo2 := na
        strategy.entry("S-Entry2" ,strategy.short ,comment="S-Entry2")
    if(lo_sig3 and MAX_N >= 3)
        lo3 := na
        strategy.entry("S-Entry3" ,strategy.short ,comment="S-Entry3")
    if(lo_sig4 and MAX_N >= 4)
        lo4 := na
        strategy.entry("S-Entry4" ,strategy.short ,comment="S-Entry4")



if((L_EntrySig or S_EntrySig) and isWork)
    countTradingDays := 1
    entry1           := close
    
    if(L_EntrySig)
        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

    if(S_EntrySig)    
        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
    
    
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(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(ema_m ,color=#303F9F ,title="ema_m" ,style=line ,linewidth=1, transp=0)
p2 = plot(ema_l ,color=#4CAF50 ,title="ema_l" ,style=line ,linewidth=1, transp=0)
fill(p1 ,p2 ,color=#2196F3 ,title="fill" ,transp=80)

p3 = plot(lower_en ,color=gray ,title="lower_entry" ,style=linebr ,linewidth=1 ,transp=40)
p4 = plot(upper_en ,color=gray ,title="upper_entry" ,style=linebr ,linewidth=1 ,transp=40)
fill(p3 ,p4 ,color=gray ,title="fill" ,transp=90)

5-1. TradingViewでも公開しています!

TradingView で ストラテジー「Donchian Trend System」を見つける

TradingView のインジケーターの検索で「Time Exit」と検索するとでてきます。上記のコードと同じストラテジーを使用することができます。

目次へ

TradingViewのバックテストは簡単

6. バックテストならTradingView

TradingViewのテストは大変便利で、

  • かなり自由の効くバックテストを
  • 短時間で簡単に、
  • 価格データを用意することなく
  • 豊富な銘柄と足種を対象に

行うことができます。

一方で、その簡便さと引き換えに「TradingViewではできないバックテスト」も多くあります。

たとえば「分散投資」や「資金管理」があげられますが、これらは投資において非常に重要な要素でもあり、これらを含めたバックテストをするならリアルさが不可欠です。こういったバックテストをするためには、やはりPythonなどのプログラミング言語で自作していくしかないと考えています。

とはいえ、TradingViewが便利であることは間違いなく、最近では、手法の検証はTradingViewで行い、良い手法が見つかったら更に詳細なテストをPythonで行うようにしています。できるものはTradingViewでサクサクやってしまいます。

目次へ

Back to Top

abbamboo

タカハシ / 7年目の兼業トレーダー

このブログの目的は、「学習の備忘録」と「アウトプットして理解を深めること」。「トレードで稼ぐために学んだこと」を徹底的に公開していきます。

元・日本料理の板前、現・金融畑のウェブ屋さん
保有資格:証券外務員1種、認定テクニカルアナリスト

更新のお知らせは、各SNS や LINE@ で。LINE@ だと1対1でお話することもできます!

>> このブログと著者についての詳細
>> 使っているツールの紹介

Investment Tech Hack

Sorry... doesn't support your browser

To get the best possible experience using our site we recommend that you upgrade to a modern web browser. Investment Tech Hackではご利用中のブラウザサポートはしていません。
Internet Explorerのアップグレード行う、もしくはその他のブラウザを使用しての閲覧をお願いします。