機械学習でベストチャートパターンを探る!!
株価は買いたい人と売りたい人の需給で決まるのだから、需給の結果を示すチャートには意味がある。とチャートに一定の敬意を払いつつも、
巷に溢れるチャートパターンを見るとなんだか胡散臭い。
おまじないやポエムの類のようにも感じる。
例が示されるけれど、都合の良いデータを抜き出しているだけのように見えるし、上手くいかない時に「だまし」でした。とか言われると、それを許容するなら、なんでもOKじゃん。って思ってしまう。更に言うと、別にチャートが、だまそうとしているわけでもないので、側から見ていると、独り相撲にも見える。
結局、チャートパターンって、検証データが不足しているように思う。
そこで、機械学習を使って、大量のデータから、クラスタリング(グループ化)の機能を使いパフォーマンスが良いベストチャートパターンを独自に作ってみることにした。
羅列するとシンプルに見えるんだけど、
グループ化で、明らかに違うチャートが混ざってしまう問題あり、この解決に下記を実施して試行錯誤した。
いろいろ試した結果、グループ化できない外れ値のようなチャートを無理にクラスタリングするのが悪いのではないかという結論にいたり、クラスタリング手法を、k-means法から、外れ値が扱えるDBSCAN法へ変更する事で、チャートが混ざる問題を回避した。
それにより精度が上がったが、グループ化ができたのは5%、27グループ165枚となった。(まぁ、機械がグループ化ができない物は、人間も同じパターンと認識するのは困難なので、対象が少ないのは、やむなしだろう。別のアプローチとして、k-means法を使い、数百のグループに無理矢理に分類する事もできるが、その後、人手で妥当性を見ながら取捨選択してパターンを整理するのも難しい。)
DBSCAN法によりグループ化されたサンプルは下記の通り。(同じグループが横に並ぶ。)
量が多いので全ては紹介できないが、ざっと見た感じ良さそうではないだろうか?
次に、これらのチャートに2か月後のデータを追加してグループ毎に中央値でチャートを作成すると下記のような27個のチャートパターンが出力される。
オレンジ色が1か月後、赤色が2か月後を示す。
これを整理すると下図のように整理できる。
整理すると、トレンドフォローと反発に2つに区分できそうだ。
サインが分かり辛い右側の反発を割愛すると、
パフォーマンスがよいチャートパターンとしては、
上昇トレンド継続とダブルボトムが扱いやすそうだ。
更にダブルボトムに注目すると2回目のボトムは底値を切り上げている点も注目すべきだろう。
ここで逆にパフォーマンスが悪かったチャートを同様に調べて見ると、下記の様になった。
徐々に上昇力を失って、ダブルトップをつけて下落しているものや、上昇トレンドが緩やかになって下落しているように見えるもあるが、あまり目立った傾向が無く下落しているものも多い。
これらを見ていると、個人的には売却時はチャートの形で判断するよりは、明確な売却ルールを定めておいた方が良さそうに思われる。
次に、パフォーマンスの良いグループ(反発)のチャートを下記の様に個別に出力して見た。薄く灰色になっている部分がグループ化で使用した部分である。
ここで使用したコードはこれです。
これを見ると、(VIXが30を超えた時に)ダブルボトムを付けたのを確認して買うのが良さそうである。そして、ストキャスティクスの買われ過ぎのサインは無視して「トレンドが変わるまで」ついていくのが良さそうだ。
ここで、気付いた人もいるかも知れないが、これらはコロナショックで売られ過ぎた時のタイミングで同じようなチャートパターンになっている。そして、オンラインへのシフトを意識してスターバックスが弱く、グーグル、フェイスブックが強くなっている。
結局、チャートパターンは大きなファンダメンタルズや時流には勝てない事を示しているようにも見える。
これらを踏まえると、ファンダに逆らわず、需給をチャートで確認して売買するのが良さそうに思われる。
今回の結果を整理すると、作成できたチャートパターンは下図のとおり。
と言ったところだろうか。
今回の調査では、パフォーマンスが良いチャートパターンとして、カップウィズハンドルみたいな需給が拮抗する上値抵抗線からの上昇パターンを抽出する事は出来なかった。判定期間(3ヵ月)が短すぎたのか、今回のクラスタリング手法では抽出が難しかったのか、不明だが、この辺りはもう少し調査をしてみたい。
今回の記事が、なにかの参考になれば幸いです。
では!
おまけ
どんなコーディングだったのか知りたい人へ、
今回使用したコードをおまけで付けておきます。
煩雑なコードになっているので、その点は覚悟しておいてください(笑)
ここから先は
¥ 100
この記事が気に入ったらサポートをしてみませんか?