iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 19
0

我們已經取得證交所資料,但是在金融分析中,需要大量的歷史資料。總不能每次都ㄧ個月份一個月份的去新增吧?
這次就是要用簡單的批次做法,把程式碼改寫方便我們更自動的取得與處理資料。

本篇程式碼:Day19_batchSaveApiStockToDb.py


取得資料變成function

首先把我們主要的作業變成一個funciton,再結合先前的取欄位名稱和匯入到Azure SQL server,就是三個主要功能。

這邊的做法,就是帶入股票代碼以及年月,格式為yyyymm,到時候股票和日期都是可以變動的數字。

def get_stock_history_data(stock_symbol, his_month):
    # API位置
    # address = "http://www.twse.com.tw/exchangeReport/STOCK_DAY_ALL?response=open_data"
    stock = stock_symbol
    date = his_month
    address = f"https://www.twse.com.tw/exchangeReport/STOCK_DAY?response=json&date={date}&stockNo={stock}"

    # 取得資料
    response = requests.get(address)
    # 解析
    # 有幾個部分:stat, date, title, fields, data, notes
    data = response.text  # 這是json格式的資料
    a_json = json.loads(data)  # 轉成dict
    df = pandas.DataFrame.from_dict(a_json["data"])  # 轉成dataframe

    # 修改欄位名稱
    new_headers = create_new_header(a_json["fields"])
    df.columns = new_headers  # 設定資料欄位的名稱
    # print(df)

    _ = save_data_to_azure_db(stock, df)
    print("===finished===")

批次呼叫

我們這邊互叫上面的程式。
時間區間使用pandas.date_range(),可以設定開始結束還有時間區間,以及時區。這邊使用從2010-1-1開始,一直到今天,而時間區間為一個月
這樣我們就有股票和所要取得的月份,如此可以順利的呼叫API並把資料放進去囉

# 時間不能太早:{"stat":"查詢日期小於99年1月4日,請重新查詢!"}
# 取得從2010-1-1到現在的所有月份,用此可以取得資料
date_list = (
    pandas.date_range(
        "2010-1-1",
        datetime.datetime.now().strftime("%Y-%m-%d"),
        freq="MS",
        tz="Asia/Taipei",
    )
    .strftime("%Y%m%d")
    .tolist()
)
print(date_list)

for data_date in date_list:
    print(f"start({datetime.datetime.now().strftime('%m%d-%H%M%S')}): {data_date}")
    get_stock_history_data("2330", data_date)


上一篇
【Day18】匯入證交所歷史資料到Azure中
下一篇
【Day20】技術分析:移動平均線(MA)
系列文
Pyhon X 金融分析 X Azure31

尚未有邦友留言

立即登入留言