Pythonのライブラリ「pyti」を使ってテクニカル指標を計算してみる

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

Pythoでテクニカル指標の計算を行ってくれる「pyti」の基本的な使い方まとめ。pytiを使ってEMA、ボリンジャーバンド、MACDなどの基礎テクニカル指標を計算する方法のまとめ
【人気記事】私のFX向け機械学習&トレードの環境

こんばんは、新米データサイエンティスト(@algon_fx)です。約三週間もブログをサボってしまいました…。本業が忙しかったのもありますが、最近はブログの記事を書く時間があるのであれば予測モデルへの時間を費やしたく…なかなか記事を書く時間が取れていませんんでした。

プロジェクト管理表にも記載していますが、ここ最近はLSTM(Long-Short-Term-Memory)を使って予測モデルに没頭しています。これがまた、色々と奥が深い。

まだ試行錯誤で利益が出ることはありませんが…OANDAのプロコースで実弾でやっています。100〜1000通貨の小さいトレードですが、デモ口座でやるよりも身が引き締まりますね。

私の機械学習の開発環境&トレード環境

さて、今日の記事はPythonで簡単にテクニカル指標が計算できる「pyti」の初歩的な使い方をまとめます。

紹介すると言っておきながらいきなりですが、個人的にはテクニカル指標はライブラリに頼らないほうが良いと思います。特にFX予測を始めたばかりの方は。Pythonでテクニカル指標シリーズでもやっていますが、テクニカル指標の計算式を理解するためにも、スクラッチで計算することをお勧めします。

とはいえ、少し慣れてきたらやっぱりライブラリに頼るのが楽で簡単です!以前に紹介した「Talib」に加えて、最近新しく使っている「pyti」の基本的な操作方法をまとめました。

そもそもTa-libとpytiの違いとは

テクニカル指標の処理ライブラリの決定版といえば「Ta-lib(タリブ)」です。日本語でもTa-libを紹介しいる記事が多く、リソースも比較的豊富なので使っている方も多いかと。

では、なぜpyti(パイタイと読む)を使うのか?それは、Ta-libで使えないテクニカル指標が稀にあったり、計算方法が若干異なっていたりするからです。

例えば一目均衡表。これはTa-libでは対応していませんがpytiでは対応しています。両ライブラリともに、実装されているテクニカル指標の種類は豊富なんですが、一目均衡表のようにどちらかでしか実装されていない指標もあります。

あとTwitterで何度かDMを頂いたのですが、Talibのインストールが上手くいかない人が一定数います(笑)主にWindowsユーザーに多いようですが、原因不明のエラーが出るそうです。ってことでTalibのインストールが上手くいかなかった人の代替手段としてもpytiを紹介できればと。

pytiのインストールと必要環境

pytiですがPython2とPython3に対応しています。またインストールはpip経由で簡単に行えます。

Windosでは試していませんが私のMacでは特に問題もなくインストールが出来ました。インストールでエラーが出た方はコメントで共有ください。

データの準備

ではpytiを使ってみましょう。いつものビットコインの過去レートをスクレイピングしたレートを使いましょう。(参照:ビットコインのスクレイピング

まず必要なライブラリーをインポートします。

次にビットコインの今年1月からの過去レートを1日足でスクレイピングしましょう。カラム名にアスタリスクが入っていて邪魔ですので変更しておきます。

EMA(指数平滑移動平均)を計算

ではまずはpytiを使ってEMA(指数平滑移動平均)を計算してあげましょう。EMAの計算方法とスクラッチでの書き方はこちらの記事をご参考ください。

まずpytiの必要なモジュールをインポートしましょう。

EMAですが一般的に短期9長期26を使いますので、そのまま計算します。

ちょっと汚いコードで恥ずかしいですが、まぁ仕事はしてくれます。

これで計算完了です。periodとしてEMAの期間を指定しています。talibとの大きな違いの一つですがpytiはpythonのリストを渡す必要があります。これは少し面倒ですね。

では本当にEMAが計算できているのか確認をしてみましょう。

ちゃんとビットコインの終値とEMA26/EMA9が表示されているのが確認できます。EMAをスクラッチで計算処理すると面倒なのですが、Pytiでは終値と期間(period)を関数に渡してあげるだけで計算してくれます。便利ですね。

ボリンジャーバンドを計算

次にテクニカル指標として人気の高いボリンジャーバンドの計算をpytiを使ってやりましょう。(スクラッチで計算したい方はこちらの記事参照:ボリンジャーバンドの使い方と計算式、Pythonでボリンジャーバンドを書いてみる

上の記事を見ていただくと解りますが、ボリンジャーバンドは標準偏差(データの散らばり度合い)を基本として、1σと-1σを計算します。場合には2σと-2σを使う方もいますが、残念ながらpytiでは2σは標準装備されていません。

ではボリンジャーバンドを計算してみましょう。まずはσ(middle_bollinger_band)、1σ(upper_bollinger_band)、-1σ(lower_bollinger_band)の関数をpytiからインポートしましょう。

ボリンジャーバンドは期間20が一般的なので、periodを20として計算をします。

念のため値を確認して見ます。tail()でデータフレームの最後の5行を表示させます。

大丈夫そうですね。では、終値と一緒にボリンジャーバンドをチャートに落としてみましょう。

こうやってみるとボリンジャーバンドがテクニカル指標として優秀なのが解りますね。ちゃんと1σと-1σの間に収まっていますし。ただトレード時はボリンジャーバンドのみで判断はできませんが。

ストキャスティクスを計算する

次はオシレーター系の代表格とも言うべきストキャスティクスをpytiで計算しましょう。(参照:「ストキャスティクス」をPythonを使って書いてみた。ストキャスの使い方、計算方法のまとめ。

ストキャスは%D、%Kとさらに%SDを計算する必要があります……が!pytiでは%SDを計算する関数が見つかりません。(見落としているのか、海外では%SDはメジャーではないのか)

まぁ何れにしても%Dと%Kを計算してみましょう。

では、Matplotlibのサブプロットを使って終値とストキャスを表示してみましょう。

大丈夫そうですね。%SDがないと、どこか寂しいチャートに見えますが(笑)

MACDを計算

最後にこちらもテクニカル指標として定番のMACDをpytiで計算してみましょう。(参照:MACDをPythonを使って計算してみる。MACDの計算方法や使い方のまとめ。

MACDの関数ですが短期と長期をアーギュメントで渡す必要があります。今回は一般的な期間26期間12で計算をします。

ではMatplotlibでチャートに落としてみましょう。

自分はトレードではMACDとシグナルを使いますが、シグナルに関してはpytiには計算関数がありませんでした。まぁ自分で計算処理を書けば特に問題はありませんが、このようにpytiもTalibも若干歯がゆい部分があるのは事実です。

まとめと次の課題

今回はPythonでテクニカル指標を簡単に計算をしてくれる「pyti」ライブラリのインストールから基礎的な使いをまとめました。いかがでしたか?

次の課題としては自分でPythonでスクラッチで計算、 Talibで計算、Pytiで計算をしてみて、指標の値がちゃんと同等になるか調査をしてみたいですね。

Talibではメジャーなテクニカル指標で比較をしてみたところ、全く同じ値が出るものもありますが、若干ずれるものもありました。私の計算方法が間違っていたり、調べるとTalibの計算方法がマイナーな計算方法を採用していたりと理由はそれぞれでしたが。

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

【人気記事】

私の機械学習の開発環境&トレード環境

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

FX 機械学習

Posted by algon