こんにちは、Zero-Cheeseです。
今回は、金融取引で頻繁に使用されるライブラリ「Ta-Lib」を、取り上げました。
この「Ta-Lib」は、
- インストール時に、エラーが発生する・・・
といった問題点を、よく耳にします。
特にPythonから「Ta-Lib」を使用するためには、
- OSに「Ta-Lib」本体をインストールした後、
- Pythonから使用するため、「専用のライブラリ」をインストールする
という2ステップがあり、場合によっては、複雑怪奇なエラーが発生してしまいます。
しかし「Ta-Lib」による処理は、Pythonのみのコードに対し、約10倍も爆速なので(C++で作られている)、なんとかして使いたい所です。
特に「リアルタイム」での取引では、重宝します!
そこで本記事では、
- ローカルOS環境に捉われないよう、Dockerを使って
- Pythonから、「Ta-Lib」を使用するまでの手順
を紹介します。
対象者は、
- Python初心者以上の方
- Linux(Ubuntu)のコマンド(少しでも知っている方)
- Dockerを使用した事がある方(多少、かじったレベルの方でも、十分に理解できる内容になっています。)
を想定しております。
「Ta-Lib」を使用して、金融取引の自動取引システムを作りたい方は、下記記事が参考になります。
仮想通貨の自動取引を題材に、Pythonのコードを、具体的に紹介しております。
そもそも、「Ta-Lib」って何?
TA-Libは、テクニカル分析を算出するための、ライブラリです。
特徴としては
- C++ で作られているので、算出時間が爆速ですが、
- Pythonで使うには、設定が少し面倒くさい
といったものが挙げられます。
繰り返しになりますが、Ta-Libを使うのと、Pythonのみのコードに比べ、処理時間が10倍ほど速くなります。
処理時間の比較は、こちらのサイトが参考になると思います。
各OS別に、直接インストールする方法と使用方法を、別記事でご紹介しています。
併せてどうぞ。
Dockerで「Ta-Lib」を使用するまで(手順のご紹介)
- まずは、既存のDockerイメージ(Ubuntu)からコンテナを作成し、その中に入って、コマンド操作により、インストールする方法
- 上記方法を、Dockerfileにまとめる方法 (クラウドにuploadしたり、GitHubやDocker Hubに公開する際は、ほとんどこの方法)
の順番で解説しております。
Docker本体のインストール方法に関しては、説明を割愛しております。
ご要望がありましたら、別途、記事を作るようにします。
既存のDockerイメージからコンテナを作成し、その中に入って、コマンド操作により、インストールする方法
下記の順番で、実行していきます。
- Ubuntuイメージを基に、コンテナを起動
- 必要なパッケージのインストール
- Pythonが使用できる状態にする
- Ta-LibのソースファイルをDL、ビルド後、インストール
- Pythonから、Ta-Libを使用できるようにする
- 最後に、本コンテナを、dockerイメージにする
この章で使用するコマンド全体は、以下になります。
詳細は、後程、解説しています。
# Ubuntuイメージを基に、コンテナを起動
docker run -it ubuntu bash
### コンテナ内での作業 ###
# 必要なパッケージのインストール
apt update
apt install wget
apt install make
apt install build-essential
cd /opt
# Python 3.9 を使えるようにする
# DL
wget https://repo.anaconda.com/miniconda/Miniconda3-py39_4.12.0-Linux-x86_64.sh
# DLしたファイルが、「Miniconda3-py39_4.12.0-Linux-x86_64.sh」の場合
sh Miniconda3-py39_4.12.0-Linux-x86_64.sh -b -p /opt/miniconda3
# DLしたファイルが、「Miniconda3-py39_4.12.0-Linux-x86_64.sh」の場合
rm Miniconda3-py39_4.12.0-Linux-x86_64.sh
export PATH=/opt/miniconda3/bin:$PATH
# Ta-Libを使えるようにする
# DL
wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz
# 解凍する
tar -zxvf ta-lib-0.4.0-src.tar.gz
# ソースファイルを削除
rm ta-lib-0.4.0-src.tar.gz
# ta-lib ディレクトリに移動
cd ta-lib
# configure コマンドを実行
./configure --prefix=/usr
# ビルドする
make
# インストールする
make install
# Pythonから、Ta-Libを使用できるようにする
pip install TA-Lib
# コンテナから出る、コマンド
exit
### コンテナ外での作業 ###
# 最後に上記作業をしたコンテナを、dockerイメージにする
# コンテナ一覧を表示する、コマンド
docker ps -a
# 実行結果 (コンテナの一覧が表示)
# 下記は、一例です。
# CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# a4b9435f1c22 ubuntu "bash" About an hour ago Up 51 minutes nifty_wilson
# dockerイメージ化
# コマンド -> docker commit [元となるコンテナ名] [作成するイメージ名]
# 下記は、コンテナIDが、「a4b9435f1c22」で、
# 「python-talib-image 」というイメージ名を作りたい場合
docker commit a4b9435f1c22 python-talib-image
① Ubuntuイメージを基に、コンテナを起動
今回は、Ubuntuを使用します。
人工知能(ディープラーニング)、データサイエンスの世界では、頻繁に使用されています。
下記コマンドを実行し、コンテナを作成、コンテナ内に入ります。
docker run -it ubuntu bash
上記コマンドを入力すると
- (初めてUbuntuを使用する場合)UbuntuのイメージファイルがDLされる
- Ubuntuのイメージファイルから、コンテナを作成し、コンテナに入ります。(bashが起動した状態になっています。)
② 「apt」を使用して、必要なパッケージをインストール
次に、
- パッケージ管理システムの「apt」のupdateと、
- 必要なパッケージを、インストールします。
今回、必要なパッケージは、以下の通りです。
- wget
- make
- build-essential
下記コマンドにて、インストールします。
# apt の update
apt update
# 必要なパッケージのインストール
apt install wget
apt install make
apt install build-essential
Dockerのドキュメントでは、「apt-get」が使われています。
「apt」は「apt-get」の設計ミスを克服したシステムであるため、本記事では、こちらを記載しています。
③ Pythonが使用できる状態にする
デフォルトの状態では、Pythonが使用できません。
ここでは、必要パッケージのみ入っていて、容量の小さい
- Miniconda
を使用します。
Anacondaは、1000以上のパッケージに加え、IDEも含まれるため、約3GBの容量(インストール時)になります。
一方、Minicondaは、容量 300MB(インストール時)ですが、必要なパッケージは、自分でインストールする必要があります。
Minicondaのソースファイルを、/opt にDLします。
Dockerを使用する際、インストールするファイル場所に、 /opt を使用するのが、一般的です。
まずは、/opt に移動します。
cd /opt
MinicondaのDL先URLは、こちらになります。(下記画面に遷移します。)
DLしたいファイルの、「リンクのアドレス」をコピーして下さい。
対象となるリンク上で、「右クリック → リンクのアドレスをコピー」をして下さい。
# コピーしたURLを、DL
# Python 3.9 用の Minicondaの場合
wget https://repo.anaconda.com/miniconda/Miniconda3-py39_4.12.0-Linux-x86_64.sh
次にMinicondaをインストールします。
# DLしたファイルが、「Miniconda3-py39_4.12.0-Linux-x86_64.sh」の場合
sh Miniconda3-py39_4.12.0-Linux-x86_64.sh -b -p /opt/miniconda3
上記コマンドのオプション
- -b: 途中で、ライセンスに同意するか? 等の入力を割愛
- -p:保存場所を指定 (上記では、/opt/miniconda3 を指定)
Minicondaのソースファイルはもういらないので、削除します。
# DLしたファイルが、「Miniconda3-py39_4.12.0-Linux-x86_64.sh」の場合
rm Miniconda3-py39_4.12.0-Linux-x86_64.sh
Minicondaのコマンドが使えるよう、PATHを通します。
単純に、「export PATH=・・・」というコマンドを入力してもOKですが、毎回起動する度に入力が必要になるので、.bashrcファイルを編集します。
/root/.bashrc ファイルを編集します。
このファイルは、シェルが起動する度に、設定として読み込まれます。
以下の一文を、ファイル末尾に、追記します。
export PATH=/opt/miniconda3/bin:$PATH
当ファイルを再読込みした後、「Python」とコマンドすると、対話モードで起動します。
つまり、PATHが通っている事が、確認できます。
当ファイルの再読込みは、
. /root/.bashrc (← 先頭にドット、次にスペースがあります。)
で行えます。
④ Ta-LibのソースファイルをDL、ビルド後、インストール
- Ta-Libの圧縮ファイルをDL
- 解凍して
- コンパイルして
- インストールする
操作を、ご紹介します。
Ta-Libの圧縮ファイルをDL
Ta-LibのDL先は、こちらになります。(← 当リンクより、DLしなくても大丈夫です。)
wget コマンドを使って、DLするようにします。
以下のコマンドを入力します。
wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz
その結果、/opt の中に
- ta-lib-0.4.0-src.tar.gz
というファイルが、保存されています。
解凍する
以下のコマンドで、解凍できます。
また解凍後、元の圧縮ファイルは不要なので、削除しています。
# 解凍する
tar -zxvf ta-lib-0.4.0-src.tar.gz
# ソースファイルを削除
rm ta-lib-0.4.0-src.tar.gz
解凍したら、/opt に
- ta-lib ディレクトリ
が生成されている事が、確認できます。
コンパイルする
まずは、コンパイルに必要なMakeFileを作成するために、
- ./configure –prefix=/usr
を入力します。
–prefix は、インストール先を指定するオプションになります。
次にビルドをするため、
- make
を実行します。
下記コマンドを入力します。
# ta-lib ディレクトリに移動
cd ta-lib
# configure コマンドを実行
./configure --prefix=/usr
# ビルドする
make
インストールする
- make install
コマンドで、インストールが完了します。
下記コマンドを入力します。
make install
⑤ Pythonから、Ta-Libを使用できるようにする
pipを使用して
- TA-Lib パッケージを、
インストールします。
下記コマンドを入力します。
pip install TA-Lib
動作確認をする
最後に、Pythonから使用できるか、チェックします。
下記コマンドを入力して、エラーが発生しなければ、OKです。
# 対話モードに入る
python
# 下記のような画面が出てくるので
# import talib と入力して エラーが発生しないかをチェック
Python 3.9.12 (main, Apr 5 2022, 06:56:58)
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import talib
⑥ 最後に、本コンテナを、dockerイメージにする
新しいコンテナを作ったり、公開したりするため
- イメージ化
をしておきます。
誤って、コンテナを消去した際も、最初から実行する必要がなくなります。
まずは、コンテナから出ます。
# コンテナから出る、コマンド
exit
次に、コンテナのIDを確認します。
# 下記コマンドを入力
docker ps -a
# 実行結果 (コンテナの一覧が表示)
# 下記は、一例です。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a4b9435f1c22 ubuntu "bash" About an hour ago Up 51 minutes nifty_wilson
コンテナから、イメージを作成する
# docker commit [元となるコンテナ名] [作成するイメージ名]
# 下記は、コンテナIDが、「a4b9435f1c22」 の場合で、
# 「python-talib-image」 というイメージ名を作りたい場合
docker commit a4b9435f1c22 python-talib-image
docker のイメージファイルが作成されている事を、確認する
# イメージ一覧を表示する、コマンド
docker images
先ほど作った、「python-talib-image」が一覧にあれば、OKです。
この章は以上となります。
おつかれさまでした。
Dockerfileにまとめる方法
最終的に、当方法に落とし込むのが、一般的になります。
Dockerfileとは、Dockerイメージを作成するまでの命令をまとめたファイルです。
当方法が優れている理由は、
- テキストファイルだけで構成されるので、ファイル容量がとても軽い → クラウド等へ、アップロードするのが容易。
- 第三者から見ても、Dockerイメージの中身が、把握できる。
前章で実行した操作手順を、テキストファイルに、Dockerの命令規則(Dockerインストラクション)に従って、記載します。
前章と本章との違い
- 前章では、コンテナを基に、Dockerイメージを作成しましたが
- 本章では、Dockerfileを基に、Dockerイメージを作成します。
Dockerfileの記載内容
最初に、全体を記します。
詳細は、後程、解説しています。
FROM ubuntu:latest
RUN apt-get update && apt-get install -y \
wget \
make \
build-essential
WORKDIR /opt
RUN wget https://repo.anaconda.com/miniconda/Miniconda3-py39_4.9.2-Linux-x86_64.sh && \
sh Miniconda3-py39_4.9.2-Linux-x86_64.sh -b -p /opt/miniconda3 && \
rm -f Miniconda3-py39_4.9.2-Linux-x86_64.sh && \
wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz && \
tar -zxvf ta-lib-0.4.0-src.tar.gz && \
rm -f ta-lib-0.4.0-src.tar.gz
ENV PATH /opt/miniconda3/bin:$PATH
WORKDIR /opt/ta-lib
RUN ./configure --prefix=/usr && \
make && \
make install
RUN pip install talib
CMD ["/bin/bash"]
Dockerfile 記載内容の解説
記載内容を見ると、
- 「前章で実施してきた内容が、順番に並んでいるんだな」
というのが、感覚的に分かるかと思います。
ただし、各行の先頭に
- FROM
- RUN
- WORKDIR
- ENV
- CMD
という文字列が、新たに加わっています。。
こちらが、Dockerインストラクションです。
本記事で使われている、Dockerインストラクションの意味を、簡単にご紹介します。
- FROM: ベースとなるDockerイメージファイルを指定する
- RUN: Linuxコマンドとして、実行する。
- WORKDIR: ディレクトリを移動する。(デフォルトでは / (ルート直下)にいます。)
- ENV : 環境変数の設定
- CMD: コンテナが起動した際の、デフォルトのコマンドを指定する。
かなり割愛して記載しています。
もしご要望が多ければ、Dockerに関して、詳細な記事を作ろうと思います。
Dockerfileから、Dockerイメージを作る方法
Dockerfileを基に、Dockerイメージを作成する方法です。
まずはターミナル(コマンドプロンプト)を立上げ、Dockerfileが保存されているディレクトリに、移動して下さい。
その後、以下のコマンドを実行することで、Dockerイメージが作成できます。
docker build .
上記コマンド docker buildの最後に、「 .」(スペース + ドット)があります。ご注意下さい。
Dockerfileを基にビルドされ、Dockerイメージが作成されます。
最後に
本記事でご紹介した通り、Dockerを使えば、
- 「Ta-Lib」のインストールができない!!
という状況を回避するだけでなく、
将来、別環境(クラウド等)に移植する際も、簡単になります。
今やDockerを使うことは、当たり前になっています。
未経験者の方は、これを機に、チャレンジしてみてはいかがでしょうか?
きっと、新たな可能性を、実感できると思います。
それではまた、お会いしましょう!