iT邦幫忙

2021 iThome 鐵人賽

DAY 9
0
Software Development

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

【D9】取得加權指數歷史資料

前言

認為整體環境看多,優秀的個股不會太差;大環境不好,優秀的股票也會被拖累。有這個概念後我們取得三大法人的留倉作為判斷依據,但這個判斷依據是不是可以跟市場趨勢做結合,這時候就是需要可以代替整體市場的發行量加權股價指數,作為比較的依據,來驗正這個想法。

本日程式碼使用:d9_saveTaiexToDb.py


簡介:發行量加權股價指數

發行量加權股價指數」是交易所自行編撰的指數,又稱為加權指數、上市指數、TAIEX,是跟美國S&P 500的公式相同,可以作為判斷臺北股市的狀況。

此指數是從1966開始,並且以1966年為基期,基期指數設為100,其計算公式為:發行量加權股價指數 =(當期總發行市值 / 基值)× 基期指數。現在大概為17304(2021/9/9)。

匯入資料

建立Table

這次取得的資料是從「發行量加權股價指數歷史資料」取得,此為一個CSV檔,裡面的欄位為:

  • 日期
  • 開盤指數
  • 最高指數
  • 最低指數
  • 收盤指數

因此紀錄加權指數的Table會長成這樣:

CREATE TABLE `Taiex` (
  `TradeDate` date NOT NULL,
  `Open` float NOT NULL DEFAULT '0',
  `High` float NOT NULL DEFAULT '0',
  `Low` float NOT NULL DEFAULT '0',
  `Close` float NOT NULL DEFAULT '0',
  PRIMARY KEY (`TradeDate`)
)

匯入資料庫

接著仿效Day6的做法,先從網路取得CSV,然後再用pandas讀取CSV,進而轉乘Dataframe

try:
    csv = requests.get(self.url)
    df = pandas.read_csv(StringIO(csv.text))  # 有header
    print(df)  # debug
    self.df = df
except Exception as exc:
    print(exc)
    return False

接著把資料資料匯入之前,稍微檢查一下資料,發現日期為1100901,為民國年,需要轉成西元年,因此要特別轉換,這邊使用:

str(int(row[0]/10000)+1911)}-{str(row[0])[3:5]}-{str(row[0])[5:8]

由於資料本身就是數值,所以就直接除以10000,然後用int()只取前面的年,接著再加上1911,然後再重新組合成日期格式,這邊就把數值用str()方式轉換成文字,接著用方式轉換成文字,接著用切割的方式切成所需的片段,也就是月份和日的部分,最後就組成:2021-09-01。然後就可以存進去囉!

所以這一塊的程式碼為:

my_connt_obj = db_connect.mysql_connect()
conn = my_connt_obj.connect()
with conn.cursor() as cursor:
    # 新增SQL語法
    for _, row in self.df.iterrows():
        trade_date = f"{str(int(row[0]/10000)+1911)}-{str(row[0])[3:5]}-{str(row[0])[5:8]}"
        cmd = f"""INSERT INTO Taiex
        (TradeDate, Open, High, Low, Close)
        values('{trade_date}',
        '{row[1]}', {row[2]}, {row[3]}, {row[4]});"""
        cursor.execute(cmd)

        counter += 1
conn.commit()

上一篇
【D8】製作圖表:三大法人-區分期貨與選擇權二類
下一篇
【D10】市場熱絡程度:每日市場成交資訊
系列文
金融分析 X Python-訊號燈32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言