FXでプライスアクションをPythonを使って抽出する方法

使っているFX会社はどこ?
自動売買用(1万円キャッシュバック中) → インヴァスト証券
Python API用(FX APIはここしかない) → OANDA ジャパン

欧米で生まれたローソク足パターン分析「プライスアクション」をPythonを使って過去為替レートのデータから検出する流れをまとめました!為替データから高値・安値を読み取り、プライスアクションの「スラスト」を検知してみましょう。

こんばんは、新米データサイエンティスト(@algon_fx)です。無事、海外でのお仕事も終わり日本に帰国しました。

さて本ブログでも複数回に渡ってローソク足パターン分析を行ってきました。私はFX機械学習トレードを行う上で、ローソク足分析はとても強い武器の一つだと考えています。

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

その2 – ローソク足分析手法「酒田五法」をPythonで実装する方法

その2では日本でも有名な酒田五法を、Pythonを使って過去レートから検出する流れをまとめました。酒田五法と並んで、特に海外で人気の高いローソク足分析手法に「プライスアクション」という分析方法があります。

今回はPythonを使って過去為替レートからプライスアクションを検出する方法をやってみましょう!

FXのプライスアクションとは?

ローソク足には「この形」が出現したら近い将来「相場が上がる(下がる)」と言ったように、過去の為替相場の経験を体系的に分析して作られた分析手法があります。

一まとめに言うと「ローソク足パターン分析」なのですが、より細かく分類をすると個別に手法名が付いてたりします。

江戸時代の日本の有名な日本人相場師が作ったものが「酒田五法」です。酒田五法は主に5つのパターンがあり、それらを使って相場の上げ下げを予測するものです。

酒田五法に類似して欧米でもローソク足パターン分析が盛んになりました。その結果として生まれたのが「プライスアクション」です。いわば酒田五法の欧米版とでも言うべきでしょうか。

つまり酒田五法もプライスアクションもローソク足の値段(つまりプライス)の動き(アクション)を分析して、為替レートの状況判断を行う手法です。

よくプライスアクションの説明として「酒田五法は日本人がメインだけど、プライスアクションは世界的に使われているから信頼できる」的な説明があります。

どんなデータを根拠にしているのか不明なのですが、私が参加している海外のFXコミュニティなどでは酒田五法もバリバリ使われています。昔はそうだったのかもしれませんが、今やインターネットで簡単に勉強できる時代です。プライスアクションの方が世界的に使われていると言うのは大きな誤解だと私は思います

プライスアクションの種類

さてローソク足のパターンを分析したルールが「プライスアクション」ですが、いくつか種類があります。今回は全種類は紹介しませんが、プライスアクションの主な3つを紹介します。

まずは相場の転換/停滞を教えてくれるプライスアクション「ピンバー」です。下のようなローソク足が出現したら「ピンバー」です。

ご覧の通り「実態(ローソク足の胴体部分)」が極端に短く、「ひげ(線部分)」が上下のどちらかに極端に長いローソク足をさします。ピンバーがなんども出現する相場では、相場の転換や停滞を意味します。

同じく相場の転換を示唆するプライスアクションとして「スパイク」と言う種類もあります。下の図をみてください。

スパイクには「ハイ」と「ロー」の二種類があります。上の図の左側がスパイクハイのプライスアクションです。これは相場が上昇トレンド時に出現すると相場の転換(つまり下降トレンドへ)変わるシグナルとなります。

対して右側のスパイクローは逆の考えです。相場が下降トレンド時に出現すると上昇トレンドへ転換する可能性があることを意味しています。

上の二つは相場の転換を示唆するプライスアクションでしたが、当然トレンドの出現を示唆するプライスアクションもあります。その中の一つが「スラスト」です。私はプライスアクションの中でスラストを最も信用しています。

右側がスラストアップです。ロジックは非常に単純で現在のローソク足の終値が一つ前のローソク足の高値より高い場合は上昇トレンドの勢いが強いことを示します。対して左側のスラストダウンは逆の考えです。

上昇トレンドが強い傾向にあるとスラストアップが頻繁に出現します。また正攻法の使い方ではありませんが、安値圏でスラストアップが出現し始める=上昇トレンドへ転換したと言う見方も可能です。(逆も然りで高値圏でのスラストダウンは上昇から下降への転換サイン)

今回はPythonを使ってプライスアクションのスラストを過去為替レートから検出して確認してみましょう!

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

では、早速、Jupyter Notebookを立ち上げてやってみましょう。すでにPython 3の環境構築を行っている方はご自身のPCから実行してみてください。

Python(または機械学習の基本ライブラリ)の環境構築がされていな方はGoogle Colaを使いましょう。ブラウザから実行可能です。5分程度で環境構築が整います。詳しくは「Google Colabの隠し技と基本操作」をご覧ください。

Jupyter Notebookが立ち上がったら、まずは必要なライブラリをインポートしましょう。特別なライブラリなどは必要ありません。機械学習の基本ライブラリ「numpy」「pandas」「matplotlib」で実装可能です。(google colabには全てデフォルトでインストール済みです)

続いて過去の為替データを読み込みます。過去為替データですがFX API経由で取得が可能です。FX APIの詳しい使い方は「OANDA FX APIの基本的な使い方」をご覧ください。今回は私がOANDA APIから取得したドル円1分足の過去データを使います。

下記のURLからCSVファイルをダウンロードしましょう。

usd_1min_api.csv

これで準備完了です!次のステップへ移りましょう。

STEP2 データの読み込みと前処理

それではCSVファイルをPandasのデータフレーム形式で読み込みます。Google Colabを使っている方、CSVファイルをGoogle Colabへアップロードが必要ですのでご注意ください。

ご覧の通り2018年9月14日の1分足データです。ドル円の終値、高値、安値、始値のデータが入っています。扱いやすいようにカラム名を短縮した名前に変更してあげましょう。

続いて単純移動平均(Simple Moving Average)の期間200を算出します。単純移動平均とは、期間内のプライスの単純な平均を意味します。(詳しくはPythonで単純移動平均を算出をご覧ください)

大丈夫そうですね。

今回はプライスアクション(中でもスラスト)を算出するのに、なぜSMA100を事前に計算したのでしょうか?答えは為替相場の「高値」「安値」を検出するためです

為替レートから安値・高値の検出方法は多数あります。以前に当ブログで紹介した酒田五法の検出の時はテクニカル指標「ボリンジャーバンド」を使いました。

前回と同じ手法ではつまらないので、今回は高値・安値の検出方法として単純移動平均の期間100を利用します。単純移動平均とは決まった期間の平均値です。つまり100分の平均レートと比較して今のレートが大幅に下回る=安値圏、逆に大幅に上回る=高値圏という使い方をします。

最後に念のため1分足レートとSMA200をMatplotlibを使ってローソク足チャートに落としてみましょう。

大丈夫そうですね。チャートの下側にある青線がSMA200です。上記の期間ではSMA200に対してローソク足は大幅に上にあります=つまり比較的高値圏と言うのが分かります。

STEP3 スラストアップの検出

データの前準備も整いましたので、実際にプライスアクションの「スラストアップ」をデータから検出してみましょう。

スラストアップの検出条件ですが、今回は下記の3つを適用することとします。あくまで検出方法が主題ですので、この条件の細かい検証は本記事では行いません。

より強力なプライスアクションの検出を行い方はこの条件を色々と検証してみてください!(かなり細かく調整をするとFXトレードで強力な武器となります!私は本番トレードで愛用しています)

ルール1:sma200 – 2本前の終値 > 0.2
ルール2:1本前の終値 – 2本前の高値 > 0.0
ルール3:現在の終値 – 1本前の高値 > 0.0

それぞれ閾値を適当に設けています。検証してみたい方は、これらの閾値の調整を行ってみください。また、他のテクニカル指標と組み合わせてルールの追加をすることで、より強度な検出も可能です!

では上の通りの処理をPythonを使ってデータに加えましょう。まずはストラスアップ用にデータフレームを新しい変数にコピーします。

続いて終値(c)と高値(h)を2期間づつずらしましょう。Pandasのshift()メソッドを使うと簡単に行うことが可能です。

カラムの「c」が現在の終値です。対して「c1」が1分前の終値、「c2」が2分前の終値です。高値(h)も同様に1分前、2分まえとずらしています。

スラストアップの検出ルールその1を実装しましょう。ルール1はSMA200から2本前の終値を差分が0.2より大きいか否かです。つまりSMA200との乖離が大きい=安値圏と捉えることが可能です。

続いてルール2とルール3の処理を行いましょう。ルール2、3は単純にスラストアップのローソク足の形をデータから検出するルールです。ルールの条件を読めば、自ずとどのようなローソク足が検出可能かわかるかと思います。

これで3つのルール全てのフラグがデータフレームに入りました。それでは全ルールのフラグが1のレコードを探してあげましょう。3つのルールが全て適合=安値圏でスラストアップが出現していることを表します。

いくつか検出されていますね!では上記の該当箇所の一つをピックアップしてローソク足チャートで確認してみましょう。

おおお!思った以上にスラストアップを検出した最初の場所はうまくはまっていますね!左側の黒矢印が指す2つのローソク足に注目してください。しっかりスラストアップのパターンが出現しています。また、安値圏(SMA200から大幅に下回っている)場所なので、その後はしっかり上昇トレンドの相場となっています。

もう一つ確認してみましょう。

同様にスラストアップが出現、上昇トレンド出現となっていますね!

STEP4 スラストダウンを検出

続いてスラストダウンも検出してみましょう。考え方としてはスラストアップの逆です。今回は詳細のコード説明は行いません。一気に検出の処理を実行しましょう。

今回は一気に処理を書いてしまいましたが、詳細はコードでご確認ください。気づいたかともいるかと思いますが、スラストアップとは異なる閾値を設定しています。

では、スラストダウンもローソク足で確認してみましょう。

これまた綺麗なスラストダウンの検出ができました!プライスアクションのシグナル通り、トレンドが下降トレンドへしっかり移行しているのが確認できます。

まとめと課題

如何でしたでしょうか?今回はローソク足パターン分析の「プライスアクション」をPythonを使って過去為替レートのデータから検出する流れを行いました。

酒田五法は日本生まれ、プライスアクションは欧米生まれのローソク足分析パターンです。どちらが強い・弱いはありません。

ローソク足分析で重要なのはその時々の相場観、さらに別のテクニカル指標と巧みに組み合わせることにより威力を発揮します!

他の機械学習手法でのFX予想チュートリアルもまとめています。興味がある方は、ぜひこちらのチュートリアルも挑戦してみてください!

LSTMでFX予想する方法
ディープラーニングでFX予想する方法
ロジスティック回帰でFX予想する方法

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

使っているFX会社はどこ?
自動売買用(1万円キャッシュバック中) → インヴァスト証券
Python API用(FX APIはここしかない) → OANDA ジャパン

FX トレード

Posted by algon