FX初心者のmt4システムトレード自動売買録-無料EA配布中-

fx初心者が、MT4で試行錯誤の上作成した自動売買システムの成果を記録しているブログです。プログラムのメモや、エントリーポイントなどを開設公開しています。無料EA配布中

【プログラミングメモ】yahoo apiで株のデータを収集する方法(python)

yahoo apiを使って株のデータを収集する方法を紹介します。

色々な収集方法があると思いますが自分はphythonというプログラム言語を使って収集してみました。

 

 

 

データを収集する方法

 データを収集する方法はyahooapiに限らず、海外のよくわからないapiやウェブスクレイピング等で収集できるようです。

 一番検索で引っかかったのは、ウェブスクレイピングだったのですが、スクレイピングは違法ではないとはいえ、場合によっては法に触れる可能性もありそうなグレーゾーンの手法なような気がしたので(現に、yahooファイナンスのウェブスクレイピングは規約上禁止されているようです。)、正式に許可が出ているyahooapiを利用することにしました。

 

yahooapiから株の情報を取得してCSVに吐き出すソースコード
import csv
import time
from datetime import datetime
import sys
from yahoo_finance_api2 import share
from yahoo_finance_api2.exceptions import YahooFinanceError
count = 1
csvfile = "input.csv"

def get_data():
    global old_time, now_time, old_price, now_price, change_rate, data_volume,old_opprice,now_opprice,old_low,old_high,afday_opprice,afday_clprice

    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_DAY, 1)
        
        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]
        opprice = symbol_data["open"]
        old_opprice = opprice[0]
 
        now_opprice = opprice[-1]
 
        data_volume = len(date)

    except YahooFinanceError as e:
        print(e.message)
        old_price = int(0)
        now_price = int(0)
        old_opprice = int(0)
        now_opprice = 0
        old_time = 0
        now_time = 0
        old_date = 0
        now_date = 0
        afday_clprice=0
        afday_opprice=0
        pass
def write_csv():
 with open("output.csv""a",newline=""as csvFile:
           writer = csv.writer(csvFile)
           writer.writerow([row_str, data_volume, old_time,old_opprice,old_price,old_high,old_low,afday_opprice,afday_clprice, now_time, now_price])

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

 

 

少し変えましたがほとんど以下サイトのソースコードを参考にさせていただきました。

調べると大抵のソースコードが出てくるのは非常に助かります。。

blog.codecamp.jp