どんな記事
今回はなんといっても、「 〝常識はずれ〟な決済ロジック」がポイントです!
- 誰もが 〝躊躇してしまう〟ような手法の成績 がわかる(本に掲載されていた〝勝てる〟手法)
- あなたも好きな銘柄で、この記事と同じバックテスト ができる(コードを公開、TradingViewでも公開)
ぜひ、お読みください^^
タートルズ流 投資の魔術 からの引用
まずは、「時限式ドンチアン・トレンド」について書かれている箇所を、書籍「伝説のトレーダー集団 タートルズ流投資の魔術」から引用します。
ドンチアン・トレンド・システムの変形、時限退出付きドンチアン・トレンド・システムは、ブレイクアウトの退出のかわりに時間にもとづいた退出を用いる。80日経てば退出し、どんなストップも使わない。
仕掛けは問題ではなく、手じまいだけが問題だというトレーダーは多い。このシステムがその発言への筆者の答えだ。このシステムのパフォーマンスを他のシステムのそれと比べると、この非常に単純なシステムがもっと複雑な退出にまったく引けをとらないことがわかるだろう。
「この非常に単純なシステムがもっと複雑な退出にまったく引けをとらないことがわかるだろう。」
別の記事でまとめる予定ですが、確かに、書籍に掲載されているバックテストの結果を見ると〝まったく引きをとらない〟ものになっています。しかし、書いてあることをただ鵜呑みにしてしまうのは〝あまりにも安易〟です。
- 本当に良い結果になるのか?
- 銘柄が変わっ て、テスト期間が変わっても、同じような結果になるのか?
この記事は、上記の手法をTradingViewで再現することを目的としたものです。
ストラテジーを作成
エントリーとイグジット
ポイントはなんと言っても「80営業日の経過で決済」です。他の一切の決済は行いません。エントリーしたら、80営業日を経過するまで〝何が起ころうとも〟決済しない。そういうスキームです。
にわかには信じられませんが、これで「勝てる」と紹介されているわけです。
買いエントリー
- 「EMA25 が EMA350 を上回っている + 20日間の最高値をブレイク」で買いエントリー
- 80営業日の経過で決済(他の一切の決済を行わない)
売りエントリー
- 「EMA25 が EMA350 を下回っている + 20日間の最安値をブレイク」で売りエントリー
- 80営業日の経過で決済(他の一切の決済を行わない)
信じがたいですが、簡単な話です。疑わしいなら「試してみれば良いだけ」です。
バックテスト
同じ条件で手法を比べるために、以下の「基本条件」でテストしていきます。
バックテストの基本条件
期間
- 2005年1月1日 ~ 2017年12月31日(12年間)
資金管理
- 単利
銘柄
為替 | USDJPY、EURJPY、GBPJPY、CHFJPY、CADJPY |
株価指数 | NKY日経225、DJI NYダウ、DAXドイツ、UKXイギリスFTSE、HSI香港ハンセン |
日本株 | 6098リクルート、4452花王、5711三菱マテリアル、7201日産、9984ソフトバンクグループ |
米株 | AAPLアップル、AXPアメリカン・エクスプレス、BAボーイング、JNJジョンソン・エンド・ジョンソン、MCDマクドナルド |
海外商品 | 金、白金、原油、コーン、大豆 |
手法は、市場との相性があるケースも多いので、主要な各市場から5銘柄ずつピックアップしてテストしています。
テスト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 |
EURJPY | 24.12 | 30.54 | 34 | 21 | 61.76 | 0.753 |
GBPJPY | 129.96 | 27.13 | 36 | 21 | 58.33 | 1.6 |
CHFJPY | -22.87 | 46.33 | 36 | 17 | 47.22 | 0.848 |
CADJPY | 17.21 | 27.39 | 36 | 16 | 44.44 | 1.536 |
NKY | 6165.02 | 7838.22 | 34 | 16 | 47.06 | 1.454 |
DJI | 9609.52 | 3697.51 | 35 | 22 | 62.86 | 1.231 |
DAX | 4783.09 | 3590.56 | 37 | 22 | 39.46 | 1.062 |
UKX | -548.5 | 3116.4 | 37 | 20 | 54.05 | 0.772 |
HSI | 10765.38 | 14060.68 | 34 | 18 | 52.94 | 1.263 |
6098 | 836 | 305 | 6 | 4 | 66.67 | 1.374 |
4452 | 2827 | 1398 | 33 | 16 | 48.48 | 1.875 |
5711 | -4950 | 9030 | 35 | 15 | 42.86 | 0.87 |
7201 | -752.3 | 800.3 | 34 | 14 | 41.18 | 0.973 |
9984 | 3019 | 4067 | 33 | 18 | 54.55 | 1.129 |
AAPL | 117.6 | 40.69 | 35 | 26 | 74.29 | 0.843 |
AXP | 53.47 | 23.53 | 35 | 23 | 65.71 | 0.843 |
BA | 234.97 | 51.03 | 35 | 21 | 60 | 2.031 |
JNJ | -8.26 | 40.38 | 35 | 16 | 45.71 | 1.077 |
MCD | 74.99 | 20.63 | 34 | 18 | 52.94 | 1.85 |
GOLD | 110520 | 44680 | 35 | 22 | 62.86 | 1.353 |
PLATINUM | 20195 | 43480 | 35 | 19 | 54.29 | 0.993 |
WTI | 45830 | 84110 | 35 | 17 | 48.57 | 1.316 |
CORN | -16000 | 34762.5 | 37 | 15 | 40.54 | 1.152 |
SOY BEANS | -1925 | 44087.5 | 36 | 14 | 38.89 | 1.539 |
まず、ここで読み取れる特長を列挙してみます。
- これまでの手法と比べて「勝率」が高め
- 「ドンチアン・トレンド・システム」と比較して「取引回数」が減少
- 『「損益」がマイナスの銘柄数』が増えている気がする(感覚)
テスト1 統計
破産の確率 | 期待値/リスク | 収益の見込み |
---|---|---|
0.00% | 0.179 | 152.12 |
破産の確率は、損失の許容=2%で算出しています。期待値と収益の見込みは以下の計算式で算出しています。
1項目ずつTradingViewの結果を手入力していくのですが(CSVとかで吐き出せたら良いのに)、「損益」がマイナスの銘柄が多くて「あれ、やっぱりこの手法ダメなんじゃないか」なんて思っていたのですが、集計してみると意外と勝てています。ただ、前回の「ドンチアン・トレンド・システム」よりは悪いですね。
テスト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 |
EURJPY | 118.32 | 76.46 | 114 | 70 | 61.4 | 0.915 |
GBPJPY | 282.86 | 111.63 | 131 | 69 | 52.67 | 1.483 |
CHFJPY | -48.39 | 117.94 | 109 | 49 | 44.95 | 0.984 |
CADJPY | 10.67 | 112.01 | 115 | 49 | 42.61 | 1.396 |
NKY | 23513.77 | 25263.58 | 113 | 54 | 47.79 | 1.472 |
DJI | 31549.42 | 8931.5 | 122 | 78 | 63.93 | 1.283 |
DAX | 14123.69 | 12607.59 | 122 | 76 | 62.3 | 0.92 |
UKX | -6497 | 13339.2 | 122 | 60 | 49.18 | 0.724 |
HSI | 20123.8 | 52012.49 | 119 | 65 | 54.62 | 1.013 |
6098 | 3315 | 589 | 20 | 16 | 80 | 1.177 |
4452 | 10863 | 2858 | 99 | 47 | 47.47 | 2.331 |
5711 | -8955 | 23595 | 110 | 44 | 40 | 1.145 |
7201 | -2451.2 | 2751.2 | 103 | 44 | 42.72 | 0.892 |
9984 | 13977 | 7393 | 102 | 53 | 51.96 | 1.499 |
AAPL | 388.41 | 144.16 | 126 | 97 | 76.98 | 0.764 |
AXP | 147.87 | 70.7 | 121 | 71 | 58.68 | 1.092 |
BA | 789.72 | 154.67 | 117 | 67 | 57.26 | 2.235 |
JNJ | -97.67 | 116.23 | 110 | 51 | 46.36 | 0.791 |
MCD | 227.39 | 68.37 | 115 | 61 | 53.04 | 1.739 |
GOLD | 350160 | 120140 | 119 | 74 | 62.18 | 1.446 |
PLATINUM | 84025 | 159235 | 110 | 66 | 60 | 0.843 |
WTI | 327490 | 160640 | 102 | 61 | 59.8 | 1.223 |
CORN | 21737.5 | 47737.5 | 105 | 46 | 43.81 | 1.457 |
SOY BEANS | -44925 | 181237.5 | 111 | 48 | 43.24 | 1.135 |
- 「取引回数」が「848 → 2749」で3倍強に
- 「勝率」が 1% 上昇
- 「RR比」が 0.007 低下
- 「買い保有」「売り保有」にムラがでた
比較的、成績の変化が少なく「取引回数」を増やすことができています。優秀です。
「保有期間」のムラは、ピラミッティング分の決済を最初のエントリーのものと同じタイミングに設定しているために発生してものです。
テスト2 統計
破産の確率 | 期待値/リスク | 収益の見込み |
---|---|---|
0.00% | 0.200 | 551.16 |
破産の確率は、損失の許容=2%で算出しています。期待値と収益の見込みは以下の計算式で算出しています。
- 「期待値」とすると「0.179 → 0.200」で上昇
- 当然、「収益の見込み」も増加
普通は、「取引回数を増やすアプローチ」をすると、取引回数は増えるんだけど期待値は下がって、でも『取引回数が増えたので「収益の見込み」は大幅増だね』というのが大体のパターンです。
しかし、今回は「期待値の上昇」と「取引回数の増加」の両方を達成することができています。「収益の見込み」については、これまでで上から2番目くらいの結果です。優秀。
テスト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 |
EURJPY | 40.68 | 22.8 | 62 | 36 | 58.06 | 0.997 |
GBPJPY | 129.76 | 28.38 | 63 | 36 | 57.14 | 1.594 |
CHFJPY | 6.02 | 24.96 | 60 | 31 | 51.67 | 1.001 |
CADJPY | 11.6 | 33.75 | 62 | 27 | 43.55 | 1.455 |
NKY | 9587.64 | 5678.06 | 60 | 31 | 51.67 | 1.354 |
DJI | 9373.77 | 5007.23 | 61 | 40 | 65.57 | 0.892 |
DAX | -1254.04 | 6912.1 | 64 | 32 | 50 | 0.92 |
UKX | -2736.4 | 4384.8 | 62 | 33 | 53.32 | 0.609 |
HSI | 22728.49 | 10890.9 | 55 | 36 | 65.45 | 1.088 |
6098 | 799 | 192 | 10 | 6 | 60 | 2.442 |
4452 | 1042 | 2346 | 58 | 26 | 44.83 | 1.362 |
5711 | -760 | 5220 | 58 | 28 | 48.28 | 1.015 |
7201 | -592.7 | 1043.7 | 56 | 23 | 41.07 | 1.086 |
9984 | 2951 | 3194 | 57 | 28 | 49.12 | 1.289 |
AAPL | 106.22 | 31.66 | 59 | 37 | 62.71 | 1.15 |
AXP | 72.98 | 15.28 | 61 | 34 | 55.74 | 1.544 |
BA | 207.33 | 35.15 | 57 | 36 | 63.16 | 1.593 |
JNJ | -30.85 | 49.81 | 60 | 27 | 45 | 1.008 |
MCD | 67.8 | 28.03 | 62 | 35 | 56.45 | 1.33 |
GOLD | 114800 | 24800 | 58 | 40 | 68.97 | 0.993 |
PLATINUM | 14865 | 46995 | 63 | 30 | 47.62 | 1.218 |
WTI | -101990 | 196600 | 63 | 33 | 52.38 | 0.625 |
CORN | -4550 | 67487.5 | 62 | 25 | 40.32 | 1.343 |
SOY BEANS | -38187.5 | 72312.5 | 62 | 29 | 46.77 | 0.845 |
- 取引回数: 848 → 1459(増加)
- 勝率: 52.71% → 52.78%(ちょっとだけアップ)
- RR比: 1.237 → 1.150(低下)
「勝率」はほぼ変わらずなのが不思議です。適当に一定期間のポジションにしているだけなのに、ほぼ変わらず。エッジはエントリーが重要で、イグジットはさほど重要じゃないということなんでしょうか。「取引回数の増加」と「RR比の低下」は、期間が「80営業日 → 40営業日」になっていることで説明がつきそうですね。
テスト3 統計
破産の確率 | 期待値/リスク | 収益の見込み |
---|---|---|
0.00% | 0.135 | 196.44 |
破産の確率は、損失の許容=2%で算出しています。期待値と収益の見込みは以下の計算式で算出しています。
結果、「期待値」は低下しましたが、「取引回数」の増加によって「収益の見込み」も伸びました。
テスト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 |
EURJPY | -59.07 | 84.59 | 25 | 11 | 44 | 0.716 |
GBPJPY | 118.73 | 31.44 | 26 | 16 | 61.54 | 1.329 |
CHFJPY | 6.07 | 36.61 | 25 | 11 | 44 | 1.396 |
CADJPY | 23.66 | 21.85 | 26 | 13 | 50 | 1.39 |
NKY | 3220.28 | 10689.41 | 24 | 13 | 54.17 | 0.98 |
DJI | 5607.98 | 7838.83 | 25 | 17 | 68 | 0.718 |
DAX | 5738.46 | 2402.35 | 26 | 16 | 61.54 | 1.116 |
UKX | 2078.5 | 1581.5 | 26 | 17 | 65.38 | 0.835 |
HSI | 19820.57 | 8754.55 | 24 | 16 | 66.67 | 1.04 |
6098 | 822 | 237 | 4 | 3 | 75 | 1.489 |
4452 | 4987 | 1081 | 24 | 14 | 58.33 | 2.09 |
5711 | -1320 | 5250 | 24 | 9 | 37.5 | 1.491 |
7201 | -503.7 | 1106.7 | 25 | 10 | 40 | 1.109 |
9984 | 4452 | 3872 | 23 | 12 | 52.17 | 1.402 |
AAPL | 156.79 | 37.11 | 24 | 18 | 75 | 1.407 |
AXP | 44.08 | 23.72 | 26 | 16 | 61.54 | 0.978 |
BA | 201.2 | 66.3 | 24 | 14 | 58.33 | 1.814 |
JNJ | 12.08 | 21.91 | 24 | 12 | 50 | 1.168 |
MCD | 66.95 | 21.55 | 26 | 15 | 57.69 | 1.393 |
GOLD | 131890 | 17390 | 25 | 19 | 76 | 1.182 |
PLATINUM | -10915 | 68845 | 25 | 12 | 48 | 0.994 |
WTI | -79170 | 149160 | 26 | 11 | 42.31 | 0.898 |
CORN | -23675 | 30637.5 | 25 | 17 | 32 | 1.295 |
SOY BEANS | -52337.5 | 70562.5 | 25 | 11 | 44 | 0.678 |
- 取引回数: 848 → 604
- 勝率: 52.71% → 56.29%
- RR比: 1.237 → 1.170
「取引回数」の減少はまるっと期間の変更で説明がつきそうな変化です。「勝率」と「RR比」も変化があるものの〝ほぼ変わらず〟な印象。テスト3の結果を踏まえると大きな驚きがありません(期間を変えても「勝率」「RR比」が大きく変わらないのはスゴイことなんです、本当は)。
それよりも気になるのは、決済期間を伸ばしたことで勝率が上がってしまったことです。なんか、「〝塩漬けトレーダー〟にポジティブな材料を与えてしまうのでは」と懸念を持ちました。
これは、あくまでも一定期間に限った戦略的な長期保有です。「なん か損してるし切りづらいから〝なんとなく〟長期保有する」のとは、まったく違います。「ダメな銘柄を長期保有する」ことほど(本当に!)無駄なことはありません。(ちょっと辛口になりましたが)誤解のないようにお願いします。
テスト4 統計
破産の確率 | 期待値/リスク | 収益の見込み |
---|---|---|
0.00% | 0.221 | 133.64 |
破産の確率は、損失の許容=2%で算出しています。期待値と収益の見込みは以下の計算式で算出しています。
結果、「期待値」は上昇しましたが「収益の見込み」が減少。「手法自体の悪化」ではなく、「取引回数の減少による悪化」であると考えます。(というか、結果がそう物語っています)
テスト結果の比較
テスト結果をまとめて、比較をしてみます。
取引回数 | 勝率 | 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)で「収益の見込み」に大きな変化がなかった(すごい)
考察
今回は、一風変わった手法のバックテストでした。
「時間にもとづいた退出を用いる。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で、同じバックテストが簡単にできます。もし気になる方がいれば、お試しください。
Pineスクリプト
今回行ったバックテストに用いたストラテジーのコード(Pineスクリプト)を公開します。販売や二次配布 "以外" は自由にご利用いただいて差し支えありません。ご自由にお使いください!
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")
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)
TradingViewでも公開しています!
TradingView のインジケーターの検索で「Time Exit」と検索するとでてきます。上記のコードと同じストラテジーを使用することができます。
バックテストならTradingView
TradingViewのテストは大変便利で、
- かなり自由の効くバックテストを
- 短時間で簡単に、
- 価格データを用意することなく
- 豊富な銘柄と足種を対象に
行うことができます。
一方で、その簡便さと引き換えに「TradingViewではできないバックテスト」も多くあります。
たとえば「分散投資」や「資金管理」があげられますが、これらは投資において非常に重要な要素でもあり、これらを含めたバックテストをするならリアルさが不可欠です。こういったバックテストをするためには、やはりPythonなどのプログラミング言語で自作していくしかないと考えています。
とはいえ、TradingViewが便利であることは間違いなく、最近では、手法の検証はTradingViewで行い、良い手法が見つかったら更に詳細なテストをPythonで行うようにしています。できるものはTradingViewでサクサクやってしまいます。
わりと、30分くらいあればインジケーターを作成することもできます。便利。
- 記事をシェア