【独習】0から始めるシストレ!

初学者がシステムトレードに挑戦するブログです

日経平均の抽出

前回は自分が見たい銘柄の株価の抽出を行いました!

でも、トレードで行う上で個別銘柄の分析を行うだけでなく日経やダウ平均等の指標を見てマクロ的な目線も必要ですよね。

今後システムトレードアルゴリズムに組み込もうと考えていますが、

取り敢えず自動で日経平均、ダウ平均を自動でcsvに抜き出すプログラムを作成しようと思います。

 


 

開発環境

開発環境としてはGoogle Collaboratory 

を用いて基本的には開発(言語はpython)を行っていこうと考えています。

Google Collaboratory とは、
Colaboratory(略称: Colab)は、ブラウザから Python を記述、実行できるサービスです。次の特長を備えています。
colab.research.google.com

日経平均、ダウ平均抽出

 それでは、実際に各経済指標を抽出するプログラムを紹介いたします。
 

参照先

 今回は下記のサイトから各経済指標を抽出します。
“FRED® (Federal Reserve Economic Data) =フレッド”を用います。これは米国に12ある連邦準備銀行のうちのひとつ=セントルイス連邦準備銀行が運営している経済統計データ集です。米国経済に関する21,937の時系列データを自由にダウンロードすることができ、このサイトで主要な経済統計の大部分を入手することが可能です。このサイトでは、日経平均等も取得可能となっています。このサイトからAPIを用いて各データを抜き出していきます。

fred.stlouisfed.org

日経平均

fred.stlouisfed.org

ダウ平均

fred.stlouisfed.org

S&P500

fred.stlouisfed.org

他にも様々な指標があるので是非気になる指標を見てみてください!
 

抽出プログラム

 ここでは、上記のサイトから欲しい情報(日経平均、S&P500、ダウ平均)をcsvに抜き出すところまでを実施します。

#import
import datetime
import pandas as pd
import csv
from pandas_datareader import data as web


#取得期間
end = datetime.date.today()#計算日まで取得
start = end - datetime.timedelta(days=500)#任意の期間を指定

#日経平均 NIKKEI225
n225 = web.DataReader("NIKKEI225""fred", start,end)#FREDよりデータ取得
n225.to_csv("nikkei_data_row.csv")

#ダウ DJIA
dow = web.DataReader("DJIA""fred", start,end)#FREDよりデータ取得
dow.to_csv("dow_data_row.csv")

#S&P SP500
sp500 = web.DataReader("SP500""fred", start,end)#FREDよりデータ取得
sp500.to_csv("sp500_data_row.csv")

#取得した経済指標を読み込み
n225_=pd.read_csv('nikkei_data_row.csv')
dow_=pd.read_csv('dow_data_row.csv')
sp500_=pd.read_csv('sp500_data_row.csv')

#祝日等の欠損を処理
n225_ = n225_.dropna(subset=["NIKKEI225"]) #欠損値削除
n225_.reset_index(inplace=True, drop=True)
dow_ = dow_.dropna(subset=["DJIA"]) #欠損値削除
dow_.reset_index(inplace=True, drop=True)
sp500_ = sp500_.dropna(subset=["SP500"]) #欠損値削除
sp500_.reset_index(inplace=True, drop=True)

#欠損値数の確認
#print(n225_.isnull().sum()) #欠損値数の確認
#print(dow_.isnull().sum())
#print(sp500_.isnull().sum())

#日経平均とダウとSP500を一つのCSVで管理できるように出力
#ただし、結合により欠損が生じていることに注意(祝日の差)
stock_means = pd.merge(n225_, dow_, on="DATE", how="left")
stock_means = pd.merge(stock_means, sp500_, on="DATE", how="left" )

#祝日等の欠損を処理
stock_means = stock_means.dropna(subset=["NIKKEI225","DJIA","SP500"]) #欠損値削除
stock_means.reset_index(inplace=True, drop=True)

#CSV出力
n225_.to_csv("nikkei_data.csv")
dow_.to_csv("dow_data.csv")
sp500_.to_csv("sp500_data.csv")
stock_means.to_csv("stock_means_data.csv")

#計算修了確認
print("End of calculation")
グラフ化

ここでは、先に抽出したデータをグラフに可視化します。

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
% matplotlib inline

#グラフ作成
y_n225 = stock_means.iloc[:, 1].values#日経平均
y_dow = stock_means.iloc[:, 2].values#ダウ平均
y_sp500 = stock_means.iloc[:, 3].values#SP500
plt.plot(y_n225, color = 'blue')
plt.plot(y_dow, color = 'red')
plt.plot(y_sp500,color = 'black')

#グラフ形式
plt.title('n225&dow&sp500')
plt.xlabel('Date')
plt.ylabel('Index')

#画像保存
#fnameF='fig_tmp.jpg'
#plt.savefig(fnameF, dpi=200, bbox_inches="tight", pad_inches=0.1)
#グラフ表示
plt.show()

 

株価抽出

開発環境

開発環境としてはGoogle Collaboratory 

を用いて基本的には開発(言語はpython)を行っていこうと考えています。

Google Collaboratory とは、
Colaboratory(略称: Colab)は、ブラウザから Python を記述、実行できるサービスです。次の特長を備えています。

  • 環境構築が不要
  • GPU への無料アクセス
  • 簡単に共有

colab.research.google.com

株価の抽出

システムトレードをするためにも株価を抽出する必要があります。
そこで、今回はこちらのサイトを用いてスクレイビングを実施し株価を抽出したいと思います。
(※スクレイビング先のサイトの変更により下記コードが使えなくなることも考えられますのでご注意ください)

kabuoji3.com
下記のようにurl は https://kabuoji3.com/stock/9532/2020/ になっています。
                   ↑   ↑  ↑
            個別株価データ 証券コード 対象年
対象となる会社・対象年を自身で設定してスクレイビングを行います。

kabuoji3.com

コードリスト

今回のコードでは読み込むコードリストを作って一回で株価抽出します

code	name
9001	東武鉄道
9003	相鉄ホールディングス
9005	東急
9006	京浜急行電鉄
9007	小田急電鉄
サンプルコード
from bs4 import BeautifulSoup
import pandas as pd
import requests
from datetime import datetime

#対象株のデータ抽出
def get_dfs(stock_number):
    dfs = []
    year = [2018,2019,2020] #対象年
    for y in year:
        url = 'https://kabuoji3.com/stock/{}/{}/'.format(stock_number,y)
        headers = {
              "ユーザーエージェントの情報"
        }
        soup = BeautifulSoup(requests.get(url, headers = headers).content,'html.parser')
        tag_tr = soup.find_all('tr')
        head = [h.text for h in tag_tr[0].find_all('th')] #テーブルのヘッドの取得

        #テーブルの各データの取得
        data = []
        for i in range(1,len(tag_tr)):
            data.append([d.text for d in tag_tr[i].find_all('td')])
        df = pd.DataFrame(data, columns = head)

        col = ['始値','高値','安値','終値','出来高','終値調整']
        for c in col:
            df[c] = df[c].astype(float)
        df['日付'] = [datetime.strptime(i,'%Y-%m-%d') for i in df['日付']]
        dfs.append(df)

    return dfs

#複数年のデータフレームの結合
def concatenate(dfs):
        data = pd.concat(dfs,axis=0)
        data = data.reset_index(drop=True)
        col = ['始値','高値','安値','終値','出来高','終値調整']
        for c in col:
           data[c] = data[c].astype(float)
        return data

#作成したコードリストを読み込む
code_list = pd.read_csv('code_list.csv')

#複数のデータフレームをcsvで保存
for i in range(len(code_list)):
    k = code_list.loc[i,'code']#株式コード
    v = code_list.loc[i,'name']#会社名
    dfs = get_dfs(k)
    data = concatenate(dfs)
    data.to_csv('{}-{}.csv'.format(k,v))


ユーザエージェント情報は下記のサイトで入手可能です。
www.ugtop.com

「【独習】0から始めるシストレ!」について

社会人歴3年目の非ITエンジニアが0から機械学習システムトレードに挑戦するブログです!

f:id:mlpdaiki:20201226081416j:plain

ブログ名の由来


非ITエンジニアが0からシステムトレードに挑戦するブログなので、
「【独習】0から始めるシストレ!」というネーミングにしました。


ブログのコンセプト


・なにを書くのか?


初心者が0から機械学習システムトレードに挑戦していく記録を書きます。
その他にも主にサーバー構築等、IT系の記事を書いていきます。


・なぜ書くのか?


初心者が0から機械学習システムトレードに取り組む記事が継続的に取り組まれているものはあまり多くないのが現状です。また、あっても言語や環境が異なっており、参考になりにくいことも多々あります。

 

それなら、自分で自分に合った記事を作成し、記録を残してしよう!
そして、あわよくば仲間を探そう!増やそう!
というのが私の思いです。

 

・だれのために書くのか?


私自身と私と同じように0からシステムトレード機械学習に取り組もうとしている人・している人に対して書きます。

外に展開しているということを意識して、分かりやすさを重視して書きます!

(間違えることも多々あると思うので、指摘していただければと思います)

 

自己紹介


機械エンジニア(全然IT関係ない・・・・)
宇宙兄弟を見て、ロケット開発を夢見て(機械系)の道を志す。
(なんやかんやで全然違う産業機械メーカーに就職)

 

大学、社会人まで一貫して機械エンジニアとしてやっています。
いざ働いて見ると、学生時代想像してた環境と大違い。

(※RPAやDXの遅れが酷い・・・。これが古き大企業か・・・。)

 

このままでは他で活かせるスキルも身につかない。将来に不安だ・・・。
そんなこともあり、今後の人生を考え直そうと思い立ち、新しいこと(機械学習等)にチャレンジし始める。

 

転職しようにもアウトプットが必要だ!そして、目標が無いと甘えてしまう!
そんな理由でブログを決意!

 

その後の活動一覧


簡単にですが、本ブログの活動について紹介したいと思います。

2020.12.26  「【独習】0から始めるシストレ!」スタート

プライバシーポリシー

 

個人情報の利用目的

当ブログでは、お問い合わせや記事へのコメントの際、名前やメールアドレス等の個人情報を入力いただく場合がございます。
取得した個人情報は、お問い合わせに対する回答や必要な情報を電子メールなどをでご連絡する場合に利用させていただくものであり、これらの目的以外では利用いたしません。

掲載されている広告について

当サイトでは、第三者配信の広告サービスを利用しています。

このような広告配信事業者は、ユーザーの興味に応じた商品やサービスの広告を表示するために、当サイトや他サイトへのアクセスに関する情報 『Cookie(クッキー)』(氏名、住所、メール アドレス、電話番号は含まれません) を使用することがあります。

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。

このGoogleアナリティクスは、トラフィックデータの収集のためにCookie(クッキー)を使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。

この機能はCookie(クッキー)を無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。
この規約に関して、詳しくはこちらのgoogleアナリティクス利用規約をご覧ください。

免責事項

当サイトのすべての情報については可能な限り正確な情報を掲載するよう努めていますが、必ずしも正確性・信頼性等を保証するものではありません。

細心の注意を払い情報を提供していますが、情報が古くなっていたり、間違っていることもあります。そのため、当サイトに掲載している情報は、予告なしに変更・削除することがあります。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。