ローソク足のパターン分析をPythonを使ってやってみる(初歩編)

使っている取引会社はどこ?
仮想通貨用(2019年5月からAPI取引対応) → GMOコイン
Python API用(FX APIはここしかない) → OANDA ジャパン

PythonとTa-Libを使ってローソク足のパターン分析を行う方法をまとめました。まずは初級編として、為替レートのデータからローソク足チャートの作り方、さらに特定のローソク足パターンの抽出を行います
  • 本記事は初歩編です。機械学習/FX予想は行いません。パターン抽出のみです。
  • Pythonなどの環境構築不要、ブラウザから実行可能(Google Colab利用)
  • matplotlibを使って為替レートデータからローソク足チャートを作る方法
  • 特定のローソク足のパターンを為替レートのデータから抽出する方法
  • ローソク足のパターンは全部で4種類をやります
  • 所要時間は10分〜1時間程度で実装可能です

こんばんは、新米データサイエンティスト(@algon_fx)です。気づけば今月もすでに後半戦に突入をしてしまいました。

ここ最近は本業もとても順調で、日々様々なデータ分析/機械学習モデリングを淡々と行なっています。金融系のデータを触ることは滅多にありませんが、動画やら画像やらのデータを分析するのも楽しいです。

FXトレードに関しても、ここ最近はLSTMディープラーニングなどを複数使いながら、少しずつ機械学習FXトレードのコツ(?)が解ってきたような気がします。

FX予想のモデリング検証は、ここ最近はランダムフォレストと勾配ブースティングにはまっています。また後日、こちらは記事でまとめたいと思います。

今日は少し変わりネタとして「ローソク足のパターン分析」をPythonを使ってやってみましょう。Twitterでも呟きましたが、ローソク足のパターン分析は非常に強力なツールになり得ると最近は感じています。(一般的なトレードでも機械学習のFX予想でも)


では、 実際にやってみましょう!

ローソク足 パターン分析とは?

株でもFXでも世界標準として使われている「ローソク足」ですが、これは日本人が開発しました。

ローソク足には「始値」「高値」「安値」「終値」の4種類の為替レートが使われており、それらのレートを1本の足で的確かつ視覚的に理解しやすいように表したものです。チャートがローソクに似ているから「ローソク足」と呼ばれるわけです。

ローソク足くらい知ってる!」って方も多いかと思います。少し経験値がつくと、「まだローソク足で消耗しているの?俺はもうテクニカル派だぜ」なんてイキってる方もいます。

私もそうでした。

実際にこのブログでも「Pythonでテクニカル指標」なんてシリーズ化して、必死にテクニカル指標を追っていました。事実、今も追っています(笑)

テクニカル指標を活用すること自体はなんら問題はありません。問題があったのは「ローソク足を軽視していた」ことです。実はすごいんです、ローソク足。

ローソク足には「パターン」というものが存在します。ローソク足がこういう形をしたら、相場はこうなると経験則をまとめたようなものです。もはや、これはこれで一種の機械学習・・いや人間学習ですね。

そんなローソク足のパターンを過去の為替レートとPythonを使って分析してみましょう。

STEP1 ライブラリとデータの読み込み

まずは必要なPythonライブラリをインポートしましょう。自分のパソコンで環境構築を行うのが面倒な方は、Google Colabがオススメです。

環境構築が一切不要で、無料で今すぐブラウザからPythonのコードを実行することが可能です。さらに機械学習で必要な大半のライブラリも事前に構築されています。神サービスです。

まずは一般的なライブラリをインポートします。

冒頭でも書きましたが、今回はTa-lib(読み:タリブ)というPythonのオープンソースライブラリを使います。Ta-libはテクニカル指標を計算していくれるライブラリです。インストール方法など、詳しくは「Pythonでテクニカル指標を算出できるライブラリTa-Lib」の記事をご覧ください。

Google Colabを使われている方は、下記のコードを実行してColabに手動でインストールする必要があります。参考までにですが、上記でインポートしたNumpyなどのライブラリは、Colabで事前に構築されています。Talibはマイナーなライブラリなので手動インストールが必要なだけです。

また、Ta-libですがWindowsと相性が悪く、よくインストールが行えない!と仰る方も多いです。Google Colabであれば、簡単にインストールして実行できるので試しに使ってみて下さい。

4〜5分程度かかりますが、上記のコードをGoogle Colabで実行するとインストールが開始されます。完了すると「Successfully installed Ta-Lib-0.4.17」と出力の最終行に表示されます。

では、Talibもインポートを行いましょう。

続いて本記事で使うデータを読み込みます。私が事前にOANDA FX APIでドル円の10分足を取得したデータを使いましょう。日付などを綺麗にしています。下記のURLからCSVファイルをダウロードして下さい。

usd_10min_api.csv

それではデータの読み込みを行いましょう。CSVファイルをJupyter Notebookの起動ディレクトリ以外に保存した場合は、下記コードで保存先のパスを指定する必要があります。

Google Colabはサーバーへファイルをアップロードする手順が必要です。下記のコードを実行して下さい。コードを実行すると「ファイル選択」のボタンが出力されます。そちらからCSVファイルを選択してアップロードしましょう。

CSVファイルのアップロードが完了したら、上記の「CSVファイルの読み込み」のコードをColab上で実行して下さい。

次にデータの日付をIndexとして使います。加えて不要なカラムも落としましょう。

念のためデータを確認してみましょう。

これでオッケーです。参考までにですが、こちらのデータはドル円の10分足が16,422個入ったデータとなっています。

STEP2 ローソク足チャートを作ろう

データの準備が整いましたので、次は為替レートのデータからローソク足チャートを生成する関数を作ります。詳しくは「Pythonでローソク足チャートを作る」の記事をご参考ください。

コードを見ていただくとわかりますが、少し雑です(笑)。というのも、入力するデータのカラム名を決めうちにしています。カラムの名前が少しでも異なると動かなくなるので、他でも使ってみたいと思っている方はお気を付けてください。

STEP3 Ta-Libでローソク足パターンを抽出

では、いよいよ本題であるローソク足のパターンの抽出を行います。今回はローソク足のパターンの基礎となる4種類のパターン抽出を行います。

まずはTalibへデータを渡すため、それぞれのレートの値(終値、始値、高値、安値)をNumpy配列へ変換してあげます。

続いてTa-Libの関数を使って4種類のローソク足パターンをデータから抽出しましょう。

実際に抽出が出来ているのか確認してみましょう。

新たに4種類のローソク足パターンのカラムが追加されています。では、それぞれのパターンを確認してみましょう。

ローソク足パターン その1「丸坊主」

まずは「丸坊主」と呼ばれるパターンを見てみましょう。丸坊主には「陽線丸坊主」と「陰線丸坊主」の2種類あります。ローソク足の形は下記です。

丸坊主

ヒゲが付いていない長いローソク足を丸坊主と呼びます。陽線の丸坊主は「強い買いの勢いがある=相場は上昇へ継続する」、陰線の丸坊主は逆で「強い売り勢力=相場は下降へ継続する」を表しています。

では、実際に丸坊主のローソク足が出現した場所を確認してみましょう。

Ta-Libのローソク足パターン分析では、「-100」「0」「100」の値が戻ってきます。0はパターンが出ていない状態、100は陽線のパターンが検出された場合、-100は陰線のパターンが検出したことを表します。

上の出力のMarubozuのカラムを見てみると、-100と100といった具合に丸坊主が検出されたレコードが表示されています。丸坊主が何個、検出されたか確認します。

全部で16,442レコードが入っている中、陽線丸坊主と陰線丸坊主は983レコード検出されたみたいです。全体の5.97%が丸坊主??なんか怪しい。

では、実際にローソク足チャートに落として丸坊主を確認して見ます。

上記ですが私が適当に選んだ丸坊主のデータです。2018/3/9の8:10に丸坊主=100、つまり陽線丸坊主が検出された訳です。では、この時間の前後10時間を合わせてローソク足チャートを表示させましょう。

こちらのローソク足チャートは2018/3/9の8:10に丸坊主の部分へズームインしたものです。丸坊主が出る以前も軽い上昇トレンドでしたが、陽線丸坊主が検出された後から勢いの強い上昇トレンドとなっています。

では、逆に陰線丸坊主(-100)もチャート上で確認して見ましょう。今度は2018/3/9 14:50のデータを使います。

では同じようにチャートで表示させて見ます。

あれ・・ぜんぜん下降トレンドじゃない。

当然ではありますが、ローソク足のパターンが全てその意味通りに通用する訳ではありません。むしろ、多くのケースで騙し(参考にしてはいけないデータ)です。

ローソク足パターンを使うには、その時々の為替レートのトレンドや値動きを加味した上で使うことがとても重要です!ローソク足パターンはあくまで、参考指標の一つです。

ローソク足パターン その2「包み線」

次は「包み線」と呼ばれるローソク足パターンを見てみましょう。先ほどの丸坊主では一つのローソク足のみでパターンを読みましたが、包み線は2本のローソク足のパターンを読み取ります。

左が陽線の包み線、右が陰線の包み線

包み線も陰線と陽線の2種類あります。一本目が陰線で二本目が一本目の値幅を完全に含む陽線を陽線の包み線と呼びます陽線包み線の意味としては、今まで下降トレンドだったのが強い勢いで上昇トレンドに転換する可能性を示唆しています。つまり相場が安値圏の時のみ意味のあるパターンです。

対して一本目が陽線で二本目が陰線の場合は陰線の包み線と呼びます。上昇トレンドだったのが、売りの勢いが強くなり下降トレンドへ転換する可能性を示唆します。相場が高値圏の時にしか意味をなしません。

では、実際に包み線を検出したデータをローソク足チャートで確認してみます。

思ったよりも多く検出しているみたいです。では、包み線が検出された2018/3/11 18:40のデータの前後をローソク足にして確認してみます。

これは陽線の包み線が意図した通り為替のレートが動いているケースです。包み線が出るまでは下降トレンドで、包み線が出現した後は上昇トレンドへ転換しています。

では次は逆に陰線の包み線を確認してみましょう。3/5 19:40に陰線の包み線が検出されています。

陰線の包み線では高値圏から下降へ転換することを示唆します。確かに陰線包み線が出た直後は下降はしていますが、すぐに上昇へ転換戻っています。騙しですね。

ローソク足パターン その3 「カラカサ」

三つ目のローソク足パターンは「カラカサ」です。これは1つのローソク足の形状を表したパターンです。カラカサも陽線と陰線の2種類あります。

陰線のカラカサ

Ta-LibではCDLHAMMER()の関数では陰線のカラカサを検出できます。相場が高値圏の時に陰線のカラカサが出現すると売り転換のシグナルとなります。

では、実際の為替レートとローソク足チャートで確認してみましょう。陰線のカラカサが検出された3/6 21:10のデータを確認してみます。

 

陰線のカラカサが出現前はレートが上昇トレンドであり、高値圏で陰線カラカサが出現した後は下降トレンドへ転換しています。

ローソク足パターン その4 「トンボ」

続いては寄引同時線から「トンボ」という種類のパターンです。寄引同時線とは、始値と終値がほぼ同じ価格(寄りと引きが同時)のローソク足をさします。

始値と終値がほぼ変わらなかったということは、売りと買いのバランスが拮抗していることを示します。寄引同時線にはいくつか種類がありますが、そのうちの「トンボ」を今回は確認してみましょう。

トンボ

トンボは上ひげがほとんど無く、下ひげが長い寄引同時線です。トンボが高値圏で出現した時は、高値を更新するほどの買いの勢いが衰えた=つまり下降トレンドへ転換することを示唆します。

では、実際に確認してみましょう。トンボが検出された付近のチャートを表示してみます。

トンボが出現した場所ですが、決して高値圏と呼ぶには微妙な位置ではありますが、その後は下降のトレンドが出ているのが確認できます。

まとめと次の課題

いかがでしたでしょうか?今回は為替レートのデータを使って、ローソク足のパターン分析を行ってみました。

ローソク足のパターン分析ですが、万能ではりませんが他のテクニカル指標やトレンドをしっかりと抑えることで、非常に強力なツールとなり得ます。

今回は初歩編として基本的なパターンを4種類確認してみました。Ta-Libには検出可能なローソク足パターンは50種類以上あります。それぞれのパターンを検出して、どのような意味があるのか勉強をしてみてはいかがでしょうか?

また、Ta-Libを使わなくてもローソク足のパターンの意味がわかれば自分でスクラッチでコーディングをすることも可能です。

私が本番のトレードで使っているローソク足パターン分析ですがTa-Libは使っていません。なぜなら、Ta-Libのパターン検出はノイズを拾ってしまうケースがあるからです。

ブログ読んでいただきありがとうございます!Twitterでも色々と発信しているので、是非フォローお願いします!

使っているFX会社はどこ?
仮想通貨用(2019年5月からAPI取引対応) → GMOコイン
Python API用(FX APIはここしかない) → OANDA ジャパン

FX 機械学習

Posted by algon