株には全く興味が無い。あんなものにハマるのはアホだ。
しかし、彼らカネの亡者の「カネが欲しい」という貪欲、7つの大罪で言えばGreedか、その酷さというか、愚かさゆえの強欲がもたらすエネルギー、それは信じている。
つまり、例えば株価を取得するプログラムは、彼らのその強欲ゆえにバグの無い正確なものとなる。だって、エラーのある株価で取引したら大損するんだから。皮肉だが、強欲がもたらす正確性というか、エンジンのような力は、確かにある。
そこで、株取引は一切しないけど、株取引をしている彼ら(の強欲)が作り出したものを利用して、こちらの知恵や知見とさせてもらう。
具体的にはこれ。株価を取得するAPI。
Pythonで気楽に試せるらしい。コードに落として実行してみる。
使うAPIはpip3でインストールできた(2020/12/30時点)。
$ pip3 install yahoo-finance-api2 --user
でけた。
9行目 apiが提供するメソッド(Share)を使ってデータをsymbol_dataへ格納。
share.PERIOD_TIME_DAY,10 だと10日毎のデータ。
share.PERIOD_TIME_YEAR,10 にすれば10年単位のデータ。
share.FREQUENCY_TYPE_MINUTE,5 だと5分ごとにデータを取得する。
30行目 配列の先頭(一番古い株価の取得日)
31行目 配列の最後(最新の株価の取得日)
実行してみる。
$ python3 kabu01_yahoo.py
カンタンだけどしっかり動く。
もう一つ作ってみる。
日経225(って何だ)にある企業の株価を取得する。inputデータはこれ(企業コード)。
$ vim kabu02_nikkei225.py
実行。
日経225の
企業コード4151,そのデータ件数121,10年前の株価838円、今日の株価2,828円、3.37倍
企業コード4502,そのデータ件数121,10年前の株価3,950円、今日の株価3,740円、0.95倍
ふむ。簡単。配列からデータ取り出しの雛形にはなりそう。
コピペ用
import sys
from yahoo_finance_api2 import share
from yahoo_finance_api2.exceptions import YahooFinanceError
my_share = share.Share('MSFT')
symbol_data = None
try:
symbol_data = my_share.get_historical(share.PERIOD_TYPE_DAY,
10,
share.FREQUENCY_TYPE_MINUTE,
5)
except YahooFinancceError as e:
print(e.message)
sys.exit()
print(symbol_data)
len(symbol_data.keys())
#dict_keys(['timestamp', 'open', 'high', 'low', 'close', 'vllume'])
my_date = symbol_data["timestamp"]
print('----------------------------------')
print('timestamp')
#print('symbol_data["timestamp"] の length')
print(len(my_date))
print('----------------------------------')
print(my_date)
old_date = my_date[0]
now_date = my_date[807]
from datetime import datetime
old_date = datetime.utcfromtimestamp(int(old_date/1000))
now_date = datetime.utcfromtimestamp(int(now_date/1000))
print(old_date)
print(now_date)
my_price_close = symbol_data["close"]
old_price = my_price_close[0]
now_price = my_price_close[807]
print('----------------------------------')
print('終値close')
#print('symbol_data["close"] の length')
print(len(my_price_close))
print('----------------------------------')
print(str(old_date) + "の時の株価:" + str(old_price))
print(str(now_date) + "の時の株価:" + str(now_price))
コピペ用2
import csv
import time
from datetime import datetime
import sys
from yahoo_finance_api2 import share
from yahoo_finance_api2.exceptions import YahooFinanceError
# https://www.youtube.com/watch?v=yYckWsRtoXw&feature=emb_title
count = 1
csvfile = "kabu_date02_input_nikkei225.csv"
def get_data():
global old_date, now_date, old_time, now_time, old_price, now_price, change_rate, data_volume
my_share = share.Share(row_str + '.T')
symbol_data = None
try:
symbol_data = my_share.get_historical(share.PERIOD_TYPE_YEAR, 10, share.FREQUENCY_TYPE_MONTH, 1)
time.sleep(5)
date = symbol_data["timestamp"]
old_date = date[0]
now_date = date[-1]
old_time = datetime.utcfromtimestamp(int(old_date/1000))
now_time = datetime.utcfromtimestamp(int(now_date/1000))
price = symbol_data["close"]
old_price = price[0]
now_price = price[-1]
change_rate = '{:.2f}'.format(now_price/old_price)
data_volume = len(date)
except YahooFinanceError as e:
print(e.message)
sys.exit(1)
def write_csv():
global old_date, now_date, old_time, now_time, old_price, now_price, change_rate, data_volume
with open("kabu_date03_output.csv", "a") as csvFile:
writer = csv.writer(csvFile)
writer.writerow([row_str, data_volume, old_time, old_price, now_time, now_price, change_rate])
with open(csvfile, "r") as f:
rows = csv.reader(f)
for row in rows:
print("ループ:" + str(count) + "回目")
row_str = str("".join(row))
get_data()
write_csv()
count = count +1