収益化へのステップ

【 Python 】Dockerから、金融分析ライブラリ「Ta-Lib」を使用する – PCに直接インストールできないケースも解決! –

【 Python 】Dockerから、金融分析ライブラリ「Ta-Lib」を使用する - PCに直接インストールできないケースも解決! -

こんにちは、Zero-Cheeseです。

今回は、金融取引で頻繁に使用されるライブラリ「Ta-Lib」を、取り上げました。

この「Ta-Lib」は、

  • インストールに、エラー発生する・・・

といった問題点を、よく耳にします。

特にPythonから「Ta-Lib」を使用するためには、

  1. OSに「Ta-Lib」本体をインストールした後、
  2. Pythonから使用するため、「専用のライブラリ」をインストールする

という2ステップがあり、場合によっては、複雑怪奇なエラーが発生してしまいます。

しかし「Ta-Lib」による処理は、Pythonのみのコードに対し、約10倍も爆速なので(C++で作られている)、なんとかして使いたい所です。

特に「リアルタイム」での取引では、重宝します!

そこで本記事では、

  • ローカルOS環境に捉われないよう、Dockerを使って
  • Pythonから、「Ta-Lib」を使用するまでの手順

を紹介します。

対象者は、

  • Python初心者以上の方
  • Linux(Ubuntu)のコマンド(少しでも知っている方)
  • Dockerを使用した事がある方(多少、かじったレベルの方でも、十分に理解できる内容になっています。)

を想定しております。

「Ta-Lib」を使用して、金融取引の自動取引システムを作りたい方は、下記記事が参考になります。

仮想通貨の自動取引を題材に、Pythonのコードを、具体的に紹介しております。

bitFlyerのAPIを使用して、Pythonにより自動取引システムを作る
bitFlyerのAPIを使用して、Pythonにより自動取引システムを作るbitFlyerのAPIを使用して、Pythonにより自動取引システムを作り方を、わかりやすく紹介した記事です。...

そもそも、「Ta-Lib」って何?

TA-Libは、テクニカル分析を算出するための、ライブラリです。

特徴としては

  • C++ で作られているので、算出時間が爆速ですが、
  • Pythonで使うには、設定が少し面倒くさい

といったものが挙げられます。

繰り返しになりますが、Ta-Libを使うのと、Pythonのみのコードに比べ、処理時間が10倍ほど速くなります。

処理時間の比較は、こちらのサイトが参考になると思います。

各OS別に、直接インストールする方法と使用方法を、別記事でご紹介しています。

併せてどうぞ。

【 Python 】Ta-Libを用いた、テクニカル分析 6選
【 Python 】Ta-Libを用いた、テクニカル分析 6選Pythonにて、金融取引のテクニカル分析 実装コードを紹介した記事です。...

Dockerで「Ta-Lib」を使用するまで(手順のご紹介)

  1. まずは、既存のDockerイメージ(Ubuntu)からコンテナを作成し、その中に入って、コマンド操作により、インストールする方法
  2. 上記方法を、Dockerfileにまとめる方法 (クラウドにuploadしたり、GitHubやDocker Hubに公開する際は、ほとんどこの方法)

の順番で解説しております。

Docker本体のインストール方法に関しては、説明を割愛しております。

ご要望がありましたら、別途、記事を作るようにします。

既存のDockerイメージからコンテナを作成し、その中に入って、コマンド操作により、インストールする方法

下記の順番で、実行していきます。

  1. Ubuntuイメージを基に、コンテナを起動
  2. 必要なパッケージのインストール
  3. Pythonが使用できる状態にする
  4. Ta-LibのソースファイルをDL、ビルド後、インストール
  5. Pythonから、Ta-Libを使用できるようにする
  6. 最後に、本コンテナを、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を使うことは、当たり前になっています。

未経験者の方は、これを機に、チャレンジしてみてはいかがでしょうか?

きっと、新たな可能性を、実感できると思います。

それではまた、お会いしましょう!