見出し画像

EC2 Amazon Linux 2にPython wrapper for TA-Libをインストールする

Amazon Web Services (AWS)にbotの動作環境を建てるときには、開発環境サービスのAWS Cloud9を使うことが多いようです。

しかし開発ではなく延々黙々とbotを動作させるなら、仮想サーバーサービスAmazon Elastic Compute Cloud (Amazon EC2)もお勧めです。cronでの定期実行などbotとの親和性もあります。


EC2では、自分でターミナル接続やファイル転送やエディタを用意する必要があります。WindowsからEC2を利用するならPuTTYとWinSCPVisual Studio Codeあたりが定番でしょうか。


botの動作環境作りについてあらためて調べると、botが流行した2018年の夏にかけてかつCloud9前提のガイドが目立つようです。

今回は最新世代のAWSサーバーOSであるAmazon Linux 2に、bot動作環境を構築してみました。

ほとんどの情報は容易に調べがつくのですが、相変わらずちょっとつまづきやすいTA-LibとPythonラッパーのインストールについて、うんちく抜きで、べた記録しておきます。

$ sudo yum install python3 -y
$ sudo yum install python3-devel -y

$ sudo /usr/bin/pip3 install --upgrade pip

$ sudo yum groupinstall "Development Tools" -y

$ wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz
$ tar xvzf ta-lib-0.4.0-src.tar.gz

$ cd ta-lib
$ ./configure --prefix=/usr
$ make
$ sudo make install

$ sudo bash -c "echo "/usr/local/lib64" >> /etc/ld.so.conf"
$ sudo /sbin/ldconfig

$ sudo /usr/local/bin/pip install ta-lib

ポイントとしてはsu権限に気をつけることと、最終行のta-libのインストールが、非力なサーバーには荷が重いことです。

Installing collected packages: ta-lib
  Running setup.py install for ta-lib ... |

インスタンスの能力によっては上記の状態になってから、十数分からそれ以上かかります。画面が停止してしまうのでフリーズと区別がつきません。

swap領域を設けてしのぐこともできますが、TA-Libを入れるときだけnanoやmicroクラスのインスタンスは止めて、一時的にsmall以上のインスタンスに切り替えることを強くお勧めします。インスタンスタイプの切り替えは簡単です。

smallクラスのインスタンスですとわずかな時間でTA-Libのインストールが終わります。

画像1

TA-Libのインストールが終わったら、すみやかにもとのインスタンスタイプに戻しておきましょう。忘れると月末に課金でのけ反ります。
インスタンスを停止・開始するたびにパブリックIPアドレスが変わりますから、再ログインの時にあわてないようにしましょう。Elastic IPを当てておくのがお勧めです。

[ec2-user@ip-201-90-50-108 ~]$ /usr/local/bin/pip list
Package    Version
---------- -------
numpy      1.16.3
pip        19.1
setuptools 38.4.0
TA-Lib     0.4.17
[ec2-user@ip-201-90-50-108 ~]$ python3
Python 3.7.2 (default, Feb 26 2019, 20:08:16)
[GCC 7.3.1 20180303 (Red Hat 7.3.1-5)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> import talib
>>> close = numpy.random.random(100)
>>> print(talib.SMA(close))
[       nan        nan        nan        nan        nan        nan
        nan        nan        nan        nan        nan        nan
        nan        nan        nan        nan        nan        nan
        nan        nan        nan        nan        nan        nan
        nan        nan        nan        nan        nan 0.41671108
 0.410935   0.41358109 0.39766859 0.4069405  0.42477452 0.45185312
 0.42704301 0.43384287 0.40916411 0.38381446 0.35697512 0.37757241
 0.39459039 0.41320944 0.42492816 0.42581097 0.40027884 0.42381735
 0.41149179 0.41789786 0.4223337  0.43582427 0.46283983 0.48163763
 0.48452862 0.48533995 0.47651723 0.47726277 0.49213817 0.51619198
 0.535168   0.52066115 0.52165073 0.50235243 0.50104657 0.49616469
 0.52201832 0.54294283 0.55604483 0.57328913 0.5797249  0.58675134
 0.59053176 0.58704703 0.57425906 0.58972628 0.59218161 0.59093546
 0.57912846 0.56198797 0.58505349 0.5950889  0.5948802  0.57326482
 0.56427305 0.55087164 0.56014008 0.57948303 0.56874505 0.55858476
 0.55280329 0.57409509 0.57259228 0.59061186 0.58078154 0.56888829
 0.55900231 0.53252178 0.52382147 0.53398231]
>>> print(talib.EMA(close))
[       nan        nan        nan        nan        nan        nan
        nan        nan        nan        nan        nan        nan
        nan        nan        nan        nan        nan        nan
        nan        nan        nan        nan        nan        nan
        nan        nan        nan        nan        nan 0.41671108
 0.39524178 0.40666762 0.39949173 0.42635434 0.44309998 0.47019687
 0.44402143 0.43905596 0.41836219 0.39877774 0.38112322 0.40386199
 0.41389189 0.4332839  0.46372146 0.4362986  0.40874518 0.44609646
 0.45056867 0.47331589 0.45300906 0.46684786 0.4946945  0.52000264
 0.52807877 0.53269761 0.51375504 0.4916382  0.5160643  0.54574872
 0.55268219 0.52587281 0.51292159 0.49511459 0.50489661 0.51855781
 0.53930161 0.56868809 0.56498966 0.56932144 0.55312042 0.57836217
 0.58445092 0.58609449 0.58192239 0.57681022 0.54494379 0.57109615
 0.5446516  0.52815382 0.54895201 0.57602431 0.59642338 0.57333215
 0.56056423 0.53714902 0.53585817 0.54975329 0.54964684 0.55749958
 0.552485   0.56689826 0.54839158 0.5631728  0.54953754 0.53729948
 0.53769999 0.51593715 0.4988027  0.52707076]
>>> quit()
[ec2-user@ip-201-90-50-108 ~]$ _
[ec2-user ~]$ sudo /usr/local/bin/pip install ccxt
[ec2-user ~]$ sudo /usr/local/bin/pip install pandas

TA-Libを入れるとnumpyも同時に入ります。
あとはta-libと同じコマンド書式でccxtやpandasなどおなじみの外部モジュールをインストールして、必要な環境にしてください。

誰かのお役に立てば幸いです。

show version

[ec2-user ~]$ python -V
Python 2.7.14

[ec2-user ~]$ python3 -V
Python 3.7.2

[ec2-user ~]$ python3.7 -V
Python 3.7.2

[ec2-user ~]$ /usr/local/bin/pip -V
pip 19.1 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)

[ec2-user ~]$ /usr/local/bin/pip3 -V
pip 19.1 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)

[ec2-user ~]$ /usr/local/bin/pip3.7 -V
pip 19.1 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)

RESOLUTION = '1d' FIRST_PERIOD_STICKS = 14 SECOND_PERIOD_STICKS = 3 MARKET_ID = 'ETHUSD' OC_MODE = True