【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年开始)全部汇入,就大功告成。


<<:  14.移转 Aras PLM大小事-开发报表 Where Used Top Level Product

>>:  [Day1] - 开赛!

[Q&A] 10 资安制度运行与企业经营关键因素

会议上话说的很多,出席或列席的人没有听进心里、用心思考过仍属於无效的沟通。 踏踏实实的做好小事情,并...

D24 / 什麽时候我的 Composable function 会重新被呼叫 - recompose

今天大概会聊到的范围 recompose 在整个系列文章中,有提过不只一次的 recomposit...

远端系列-4:如何下载远端数据库的档案?

角色情境 小明同时学会输入指令操作着终端机、 以及透过滑鼠操作着图像化介面的 Sourcetree ...

Day33. 迭代器模式

本文同步更新於blog Iterator Pattern 提供一种方法顺序访问一个聚合对象中的各个...

[DAY 03] 银锋冰菓室

银锋冰果室 地点:台南市盐水区中山路1号(八角楼旁) 时间:中午 - 22:00 南部就是热情 无论...