私の動作環境
Windows8.1pro 64bit
Anaconda3 2019.10
(backtrader用の仮想環境をPython3.5で構築)
#BacktraderからTa-libを動かす
BacktraderはTa-libに対応しています。すでに組み込まれているインジケーターと重複していますが、さらにいくつかのインジケーターを表示できるようになります。またロウソク足パターン識別、統計解析などを行うこともできます。
#Ta-libインストールは厄介
が、Ta-libのインストール失敗してしまいました。PIPを使ったのですがエラーが出てしまいました。どうやらTa-libはインストールが少々厄介なものみたいです。私のように躓いている人が結構いるようです。
そんな中、condaを使ってダウンロードするチャンネルを指定すれば簡単にインストールできるという解説記事を発見。さっそく記事を真似てインストールしてみました。サンプルスクリプトも一通りテストしてまったく問題ありませんでした。
condaのチャンネルとは?
https://qiita.com/yuj/items/8ce25959427ea97d373b
#QUANTPIANチャンネルからインストールできるTa-libは0.4.9
ところが当時の解説記事の中で使っていたチャンネルはQUANTOPIAN(トレーディングライブラリZiplineを提供している企業)だったのです。こちらからインストールされるTa-libは0.4.9です。すべてのOSに対応していてダウンロード・インストール数も多いのですがリリースが2015年と古い上に新しいバージョン0.4.15ではbacktrader向けの修正が追加されています。(2020年2月時点 最新0.4.19)
0.4.15
[FIX]:
Import TA_FUNC_FLAGS, TA_INPUT_FLAGS, TA_OUTPUT_FLAGS into talib.abstract to support backwards compatibility for backtrader
#Acaconda cloudでTa-lib 0.4.15を探す
なのでQUANTPIAN以外のチャンネルから新しいバージョンのTa-libをダウンロードした方がいいです。その際にPrompt上でチャンネル及びTa-libパッケージを検索するよりもWeb上のAnaconda cloudで検索した方がわかりやすいです。
Anaconda cloudでta-libを検索
https://anaconda.org/search?q=ta-lib
このようにQUANTPIANからのインストールが圧倒的に多いのですが、他にも提供チャンネルがたくさんあることがわかります。
ありがたいことに0.4.17(condaだと0.4.16)を提供して下さっているユーザーがいるので、そちらからインストールすることにしました。チャンネルを選ぶとこのような画面になると思います。
こちらのページに書かれているコマンドをそのままコピーしてAnacondaprompt上に貼り付けて実行するとインストールできます。(仮想環境を使っている人はあらかじめ切り替えておきましょう)
すでに0.4.9をインストールしていてもアップデートしてくれます。いろいろと心配な人は新しく仮想環境を構築してもいいかもしれません。
確認のためbacktrader_documentのTa-libテストスクリプト(RSI)をAnacondapromptから実行してみます。
https://www.backtrader.com/docu/talib/talib/
(envbacktrader) C:\Users\xxxx>python talibtest.py --plot --ind rsi
※ドキュメントのスクリプトそのままではエラーがでます。こちらの記事を参考にしてCSVファイルを用意してスクリプトの一部を書き換えてください。
https://qiita.com/xxssxxx/items/e915b8afe51facc47a55
問題なく動作するようです。
こちらはTa-lib_0.4.9で同じテストスクリプトを実行した結果です。RSIの表示はそのままですがチャートに表示されているDOJIマークが0.4.16と比較して明らかに少ないです。Ta-lib内部の判定式が変わったのでしょうか???やはり何らかの変更はあったみたいですね。
#MacOS対応のTa-lib 0.4.17
ということで、Anaconda cloudとcondaを使えば新しいバージョンのTa-libを簡単にインストールできます。しかし残念ながら現時点(2020年2月)でMacOS用のTa-lib 0.4.17を提供しているチャンネルはないみたいです。