【シンジ】戦略×エンジニア×Webデザイナー

Webコンサル、デザイン、サービス開発、経営に関することを呟きます。

たった16行のPythonで株式分析ツールを作ってみた

 

f:id:Shinji0418s:20210304090619j:plainどうも。株)WIREBASEの中村です。

 

今回は、たった16行のPythonコードで米国株向けのペアトレード分析ツールを作ってみようと思います。

 

最近、注目度の高いプログラミング言語Python(パイソン)」ですが、その機能性や利便性からプログラマーに凄く親しまれています。

 

人口知能(機械学習や深層学習)などの超専門分野の開発にも使われている一方、文法が平易なため、プログラミング初心者の方でも大規模なWebサービス・アプリケーション開発が短期間でできちゃったりします。

 

そんな初心者でも簡単にできちゃう、たった16行のPythonコードで作っちゃおうと思います。

 

 

①先ずはデータを可視化する

使用するデータはオープンソース(QuandlやYahooFinance)のものを使用します。APIを介して今時点の株式

 

 

f:id:Shinji0418s:20210304084436p:plain



データを引っ張ってきます。

 

それでは、早速、ライブラリをインポートしてみましょう。

import pandas as pd
import datetime as dt
import seaborn as sns
from matplotlib import pyplot as plt
plt.style.use('ggplot')
%matplotlib inline

 

Pandas を使ってデータの分析やアップデートを行います。

 

また、Seabornとmatplotlibを使って以下の様にデータを可視化します。

 

Dataset available

 

 

➁データを分析する
今回は年単位でデータを引っ張ってきましょう。

 

df['date'] = pd.to_datetime(df['date'])
df['year'] =df['date'].dt.year

 

2つの株式銘柄を比較するには、同じ日付範囲のデータを辿る必要があるのですが、株式によっては、以下の様に発行日から1年もたっていないものもある為、

 

https://miro.medium.com/max/392/1*3d01COF4iAja6xNpNn76Rg.png

 

そのような株式は以下のコードで除きます。

count_df=pd.DataFrame(df.Name.value_counts()[:470], columns=["Name", "Count"]).reset_index()list_valid_shares=list(count_df["index"])
final_df=df[df.Name.isin(list_valid_shares)]

 

では、データをみていきましょう。

 

Data for further processing

 

上のテーブルでは、2013年から2019年までのデータがあります。

 

ゴールは特定の年において、最も類似性の高い株式を見つけることです。

2018年のデータをみていきましょう。

 

data_by_year=final_df.groupby("year")
data_2018=data_by_year.get_group(2018)

 

Data for the year 2018

 

このデータでは分かりづらいので、時系列のデータに変換してみましょう。

 

日付をインデックスとして、それぞれ日付毎の銘柄を比較できるようにします。

 

Pivot data for 2018

 

そして、pandaのcorrメソッドを使うと、2018年のデータと類似している銘柄を見つけることができます。

 

 

corr_mat=pivot_df.corr(method ='pearson').apply(lambda x : x.abs())

f:id:Shinji0418s:20210304084953p:plain

 

 

そしたら、unstackメソッドを使ったり、結果を並べ替えたりして銘柄毎の相関性を分析していきます。

先ずは、上のテーブルに記載されいている上位10の株式と使って、相関性を見つけ出しましょう。

sorted_corr = corr_mat.unstack().sort_values(kind="quicksort", ascending=False)sc=pd.DataFrame(sorted_corr, columns=["Value"])[470:480]

 

Sorted correlation DF

 

 

f:id:Shinji0418s:20210304085319p:plain



 

Final top five groups for pair trading

 

 

 

③結果を可視化する

 

最後に、matplotlibモジュールを使って出力します。

 

f:id:Shinji0418s:20210304085539p:plain

 

 

Graph

 

 

Graph

 

 

Graph

 

これで完成です!

どうだったでしょうか?初心者の方でも問題なく進めることができると思います。

 

もっと複雑な分析ツールや、自動売買ツールも開発できたりするので、気軽にご相談くださいませ。

 

それでは、今日はこの辺で。

 

 

 株)WIREBASE中村LINE↓

友だち追加

株)WIREBASE中村Twitter