株価の分析用にTA-Libをインストールしてみる
データサイエンスとPythonの勉強をしていると、株とか金融関係のデータを使った分析例みたいなものを結構目にすると思います。
そういうのみるたびに思います。
投資なんて所詮ギャンブルでしょ笑
俺はもっと高尚なことにPythonやデータサイエンスの知識を使うんだもんね。
嘘です。
本当はこう思ってます。
データサイエンスとPythonの力使えば、株で儲けるなんてわけないんじゃね?よっしゃ、速攻データサイエンスとPythonの知識身につけて株で儲けたる!そんで美女侍らす!
というわけで、株価の分析用のツール?であるTA-Libをインストールすることにしました。今日はそのメモ及び備忘録。
環境はMac OS Xです。
※どうやらpyplから直接DLしてインストールとかはできないらしいです。
①パッケージのDL
まずここ行きます。
TA-Lib
http://ta-lib.org/
それで、Downloadsをクリック。
ファイルの一覧から、自分の環境にあったパッケージをダウンロードします。
ここでは私はta-lib-0.4.0-msvc.zipをDLしました。
サイトをみると、このTA-Lib、元々はC/C++で書かれてるっぽい。それでラッパー(毎週火曜の深夜帯にやってるあれじゃない)というものを通してPython で使えるようにするっぽい。です。すみません、まだまだ素人でよくわかりません。 でも大丈夫です。詳しくはパッケージのSWIGディレクトリ見ろやボケって書いてある超親切設計ですから。
②SWIGディレクトリを見てみる。
SWIGディレクトリ行きました。
ありました、README.txt
開けました。
This directory tree contains files needed to build a SWIG wrapper to TA-Lib. SWIG is a software development tool for building scripting language interfaces to C and C++ programs. It supports a number of target languages: including Guile, Java, Mzscheme, Ocaml, Perl, Pike, PHP, Python, Ruby, and Tcl. More information can be found at http://www.swig.org
…ほーら、やっぱりね!
全部英語だよね!ググれば日本語でも出てくんのかな!?もういいやめんどくせえ!適当に読んで適当な理解で進めてやるぜ!
無理です。
一人でやろうと思ったけど、断念してググります。先人たちの知恵拝借します。
…10分後
http://mrjbq7.github.io/ta-lib/install.html
こういうのにたどり着きました。
ふむふむ、brewしてpipすればおk。
ウッソ。めっちゃ簡単じゃん。
③brewする
sh
brew install ta-lib
実行します。
④pipする
sh
pip install TA-Lib
実行します。
⑤インストール完了
なんと、これでインストール完了したみたいです。簡単すぎませんかちょっと。
⑥試しにコードを書いて、ついでにプロットもしてみる。
import pandas as pd from pandas import DataFrame, Series import numpy as np import talib as ta import matplotlib.pyplot as plt %matplotlib inline #iPythonで書いています
いつものように必要なモジュールを呼び出します。
あらかじめk-db.comのサイトからDLしておいたソフトバンクの直近250日の日足のデータを使います。
sfb = pd.read_csv("stocks_9984-T.csv", encoding="shift_jis", index_col=0) #encodingをshift_jisとしないと漢字、読めませんでした。
とりあえず、読み込んだデータフレームを使いやすいように加工します。
#日本語のインデックス使いづらそうなので英語に。英語間違ってたらすみません。 sfb.columns = ["Open", "High", "Low", "Close", "Volume", "Trading Value"] sfb.index.names = ["Day"] #indexを昇順にソートします。 sfb = sfb.sortlevel()
下準備はこれで完了です。TA-Libで計算させた終値SMA(20日)をデータフレームに挿入。plot()メソッドでプロットします。
sfb["SMA 20"] = ta.SMA(np.array(sfb["Close"]), timeperiod=20) #引数にとるデータはarray型でないとダメ?のようです。 sfb[["SMA 20", "Close"]].plot()
結果↓
うん、いい感じですね!
しばらくはこれで色々なテクニカル指標と戯れてみようと思います。
テクニカル指標なんかに慣れてきたら色々なストラテジーやその有効性なども検証していけたらいいなと思ってます!