Download Taiwan Stock Market Historical Data With Python And Fugle API

使用Python與富果API下載台股歷史資料

目錄

    原始文章

    使用Python與富果API下載台股歷史資料


    最優質的股市交易資料源

    在之前的文章中,我曾經提過,如何透過證券交易所的開放資料API,以及Yahoo Finance下載股市資料。雖然這兩個方式都可以免費取得資料,但也各有缺點。首先,證交所的開放資料只提供最新的交易資料,沒有歷史資料,代表使用者必須每天自行備份;而Yahoo Finance雖然可以下載歷史資料,但不時會看到有網友說Yahoo API不能正常使用。

    最近我在瀏覽富果Fugle的技術文件時,赫然發現富果竟然也提供了歷史資料,而且不需開戶也可以使用。親自使用Python測試之後,真心覺得不論在便利性與穩定性上都海放對手。我之前曾經介紹過富果Fugle的開戶常見問題,這就就不多提。

    如果你對富果帳戶有興趣,可以使用我的推薦碼 f-8e635c3

    開戶成功後,你我都可以獲得108富果幣。1枚富果幣等同於1元新台幣,可以兌換現金,也可以用來解鎖研究功能,也就是富果App中各式各樣的卡片。

    來吧,複製貼上

    
    # 讀取套件
    import requests
    import pandas as pd
    import datetime
    
    def get_symbols():
        '''
        取得股票代號
        '''
        symbol_link = 'https://www.twse.com.tw/exchangeReport/STOCK_DAY_ALL?response=open_data'
        symbols = pd.read_csv(symbol_link)
        return symbols
    
    def gen_calendar():
        '''
        產生日期表
        '''
        this_year = datetime.datetime.now()
        years = range(2010, this_year.year + 1)  # Fugle提供的資料從2010年
        begin = [int(str(y) + '0101') for y in years]
        end = [int(str(y) + '1231') for y in years]
        calendar = pd.DataFrame({'begin': begin,
                                'end': end})
        calendar['begin'] = pd.to_datetime(calendar['begin'], format='%Y%m%d')
        calendar['end'] = pd.to_datetime(calendar['end'], format='%Y%m%d')
        calendar[['begin', 'end']] = calendar[['begin', 'end']].astype('str')
        return calendar
    
    def get_hist_data(symbols=[]):
        '''
        透過富果Fugle API抓取歷史資料
        '''
        if len(symbols) == 0:
            symbols = get_symbols()
        calendar = gen_calendar()
        result = pd.DataFrame()
        for i in range(len(symbols)):
            cur_symbol = symbols[i]
            symbol_result = pd.DataFrame()
            for j in range(len(calendar)):
                cur_begin = calendar.loc[j, 'begin']
                cur_end = calendar.loc[j, 'end']
                # 透過富果Fugle API抓取歷史資料
                data_link = f'https://api.fugle.tw/marketdata/v0.3/candles?symbolId=2884&apiToken=demo&from={cur_begin}&to={cur_end}&fields=open,high,low,close,volume,turnover,change'
                resp = requests.get(url=data_link)
                data = resp.json()
                candles = data['candles']
                new_result = pd.DataFrame.from_dict(candles)
                symbol_result = pd.concat([symbol_result, new_result])
            symbol_result['symbol'] = cur_symbol
            result = pd.concat([result, symbol_result])
        return result
    
    # 全部股票歷史資料
    data = get_hist_data()
    # 單一個股歷史資料 - 2330台積電
    data = get_hist_data(symbols=['2330'])
    



    推薦文章

    Aron

    搭載商業思維的資料科學家,工業設計系畢業,曾任職知名品牌行銷企劃。下班後寫機器學習模型,寫網站,也寫文章。興趣是把Side Project當成創業題目來玩,把人生當成遊戲破關。

    facebook telegram

    推薦書單

    抗老化,你需要大重量訓練
    抗老化,你需要大重量訓練 ⭐⭐⭐⭐⭐
    用生活常識就能看懂財務報表
    用生活常識就能看懂財務報表 ⭐⭐⭐⭐
    人生複本
    人生複本 ⭐⭐⭐⭐⭐
    七侯筆錄之筆靈(上)
    七侯筆錄之筆靈(上) ⭐⭐⭐⭐⭐

    發佈留言

    • * 表示必填欄位
    • 您填寫的電子郵件不會被公開
    • 請確認您的電子郵件正確無誤,當您的留言收到新的回覆時,我們會寄送通知信件給您

    發佈留言必須填寫的電子郵件地址不會公開。