iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0
Software Development

金融分析 X Python-訊號燈系列 第 14

【D14】取得股票歷史資料

前言

就跟昨天的加權指數一樣,我們之前的取得的CSV都是「每日」的資訊,但是我們需要歷史資料才能歸納與分析我們的策略是否正確,所以今天就要說明如何從證交所取得股票歷史資料。


取得歷史資料:證交所

前往個股日成交資訊

首頁 > 交易資訊 > 盤後資訊 > 個股日成交資訊

並在日期中選擇要下載的年與月份,然後輸入要查詢的股票,接著按【查詢】,就會出來該年月的交易資訊,然後點擊旁邊【CSV下載】,把資料下載到本機。

https://ithelp.ithome.com.tw/upload/images/20210914/20103826m71rR8qQXS.png

也是一樣的,把我們想要抓下來的範圍全部都下載(至少需要2021的資訊)。這邊的紀錄是從民99年1月4日起開始提供。要注意的是,這邊的交易內容,是包含:一般、零股、盤後定價、鉅額交易,所以交易的量會跟盤中的不一樣。

匯入資料庫

然後要匯入資料庫。
同樣的,這邊也有遇到標題與尾巴有一些說明,我們不需要這個部分,只要每日的交易資訊,因此也適用判斷第一個欄位長度是否為日期的9碼,當不是9碼的時候就繼續這個for迴圈,直到是日期9碼的時候才執行匯入作業:

if len(row[0]) != 9:
    continue

當然在日期的部分也要修改::

f"{str(int(row[0][:3])+1911)}-{str(row[0])[4:6]}-{str(row[0])[7:]}"

而不太一樣的地方是在。加權指數的資料沒有商品代碼,因其不是可以交易的商品,但今天我們是搜尋台積電的歷史交易資訊,所以在一開始的搜尋條件就把台積電加入,這時候就可以用帶入參數的方式,把台積電的代碼帶入程式中。而我的作法就是直接帶入,不解CSV的字串:

def insert_mysql(self, symbol) -> bool:

因此在跑寫入資料庫的for迴圈,就可以填入這些交易資料是哪個標的物。

for row, _ in self.df.iterrows():
    if len(row[0]) != 9:
        continue
    # data: yyy/mm/dd to yyyy-mm-dd,
    # e.g. 110/08/02 to 2021-08-02
    trade_date = f"{str(int(row[0][:3])+1911)}-{str(row[0])[4:6]}-{str(row[0])[7:]}"
    cmd = f"""INSERT IGNORE INTO DailyPrice
    (Symbol, TradeDate, OpenPrice, HighPrice,
    LowPrice, ClosePrice, Volumn)
    VALUES('{symbol}',
    '{trade_date}', {row[3].replace(',', '')},
    {row[4].replace(',', '')}, {row[5].replace(',', '')},
    {row[6].replace(',', '')}, {row[1].replace(',', '')});"""
    cursor.execute(cmd)
conn.commit()

最後把我們要的範圍資料(2021年開始)全部匯入,就大功告成。


上一篇
【D13】取得:加權指數歷史資料,並觀察量與指數的關係
下一篇
【D15】當大盤漲的時候,跟台積電有關係嗎?
系列文
金融分析 X Python-訊號燈32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言