iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0
Software Development

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

【D13】取得:加權指數歷史資料,並觀察量與指數的關係

前言

昨天取得九月的加權指數資料,但是時間太短,看不出來量與價格的關係,所以就要取得更遠的資料囉。取得後才能觀察量與指數的關係。

本日程式碼使用:


取得資料

首先我們要取得資料,但是在open data平台上只有當月的,這時候只能去證交所一個月一個月的抓(大家都罵翻了XD)。

前往每日市場成交資訊

首頁 > 交易資訊 > 盤後資訊 > 每日市場成交資訊

那邊就有搜尋表單可以填寫,選擇年份和月份,一次可以抓一個月。現在範例是抓今年的份,也就是1~9月,因此會有至少八份CSV,因為九月的這幾天已經有收到。

這邊是先純手動抓,如果以後有時間,再寫如何用爬蟲的方式取得資料。

匯入資料庫

接著要匯入資料庫,這邊可以參考Day9,不過不太一樣的是,資料格式不相同,需要調整「日期」和「數字」。

在日期方面,從API取得的會是1100901,這種純數字沒有標點符號的版本,但是如果是從網頁下載下來,會是110/09/01這樣的格式,方便閱讀,但是進入資料庫時候需要調整,因為無法直接匯入。

首先在日期的部分,要改成略過標點符號:

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

接著數字的話用replace的方式,因為資料格式為str直接用replace,不用轉換,因此匯入的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 StockTransactionInfo
    (TradeDate,
    TranscationQty, TranscationAmount, TranscationCount,
    Taiex, ChangePoint)
    VALUES('{trade_date}',
    {row[1].replace(',', '')}, {row[2].replace(',', '')},
    {row[3].replace(',', '')}, {row[4].replace(',', '')},
    {row[5].replace(',', '')});"""
    cursor.execute(cmd)
conn.commit()

製作圖表

當匯入後,就製作成我們要的圖表吧!時間就是從2021年1月1日開始。

在這次做圖時,練習設定X軸與Y軸的刻度,這時使用.gca()取得當下的軸(Axes)(可參考文章)。接著設定xaxis使用來設定X軸的資訊,並且用matplotlib.ticker.MaxNLocator來設定要有幾個區塊,這邊設定為五個;同樣的道理,Y軸則是使用yasis的方式。因此程式碼會修改成這樣:

# 畫圖
plt.plot(df["TradeDate"], df["Taiex"],"r")  # (x軸資料, y軸資料, 線的顏色)
plt.title("Taiex", {"fontsize":15})     # 設定圖的標題及文字大小
# 設定X軸刻度
ax = plt.gca()
ax.xaxis.set_major_locator(matplotlib.ticker.MaxNLocator(5))
# 設定y軸刻度
ax.yaxis.set_major_locator(matplotlib.ticker.MaxNLocator(10))

圖片中就可以看到X軸和Y軸的跟昨天看起來不一樣,
https://ithelp.ithome.com.tw/upload/images/20210913/20103826RGdzYglwLI.png

同樣的,把這樣的概念,放在疊圖中也能達成目標,因此會從:
https://ithelp.ithome.com.tw/upload/images/20210913/20103826zXoDg31Rrf.png

變成:
https://ithelp.ithome.com.tw/upload/images/20210913/20103826V8KRxkIVGU.png


觀察量與點數的關係

仔細在有大行情的時候,如果量有大量出現,就好像圖中間的那幾根長條,之後有幾天會繼續下跌,這個現象非常明顯。而跌一段時間之後,量會變少,這時開始指數往上跑,雖然上漲不明顯,但也是個訊號。

所以我們的訊號可以說最近的加權指數的狀況,當有大跌的時候提醒自己,這時如果量也大量出來,就制作一個告警的訊號,說現在價格跌且大量,這幾天不適合進場,買股票可能會被大盤拖累。

這樣我們就有初步的加權指數與量的訊號燈構想。


上一篇
【D12】製作圖表:加權指數和交易金額的圖表
下一篇
【D14】取得股票歷史資料
系列文
金融分析 X Python-訊號燈32

尚未有邦友留言

立即登入留言