iT邦幫忙

2021 iThome 鐵人賽

DAY 28
0
Software Development

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

【D28】模組化#3:取得市場行情資料

前言

股票每日交易資訊、三大法人資料(區分期貨與選擇權二類-依日期)模組化後,也把加權指數行情用get_and_save取資料並且匯入資料庫中吧。

本日程式碼使用:market_info.py

將會改寫:


製作module: daily_market_info

這邊只有製作一個class「daily_market_info」,但是其中包含從API取得資料,以及下載好的檔案取得資料。

  • 區分來源

要從網路,還是檔案取得資料的關鍵是「來源」,這邊製作了urlpath兩個參數在get_and_save()功能中,讓我們方便帶入使用。

path沒有資料,表示是使用url的方式,也就是從網路取得資料,url的位置可以指定,也可以使用預設值。如果path有資料,就以這個為優先,但是沒有預設值。

所以在get_and_save()要辨別資料是否齊全,沒有的話直接從網路來。

if url:
    print("=資料從網路來(非預設)=")
    r = self._get_csv_data(url)
else:
    if path:  # 代表是從檔案來的
        print("=資料從檔案來=")
        r = self._get_csv_data(path=path)
    else:
        print("=資料從網路來=")
        r = self._get_csv_data()

最後取資料的時候,就要實作,因此要判斷到底是走網路API,還是直接解檔案:

if path is None:
    if url:
        self.url = url

    csv = requests.get(self.url)  # 從網路取得CSV檔案
    df = pandas.read_csv(StringIO(csv.text))  # 有header
else:
    # 從CSV檔取得資料,且編碼為big-5
    df = pandas.read_csv(path, encoding="big5")

測試

測試時,分成URL API取資料,另一個是直接給路徑

  • URL
csv_data = daily_market_info()
r = csv_data.get_and_save()
if r:
    print("success")
else:
    print("False")
  • Path
csv_data = daily_market_info()
csv_path = os.path.join(os.path.dirname(__file__), "每日市場成交資訊_202101.csv")
r = csv_data.get_and_save(path=csv_path)
if r:
    print("success")
else:
    print("False")

後記

本來預計要做到訊號燈的模組化,結果還是取資料,看來只能明天把訊號燈模組化吧!


上一篇
【D27】模組化#2:取三大法人期貨交易資料
下一篇
【D29】模組化#4:訊號燈
系列文
金融分析 X Python-訊號燈32

尚未有邦友留言

立即登入留言