csharp-twse-price-0

[C#] 取得證交所台股價格的 3 種實用方法(附範例下載)

想要在網路上取得台股最新的股價有許多種方式,其中一種免費的方式就是直接向證交所網站取得股價資料,這次我會分享 3 種用 C# 向證交所取得股價資料的實用方法。

  1. 取得即時的價格
  2. 取得每日收盤行情的 K 線資料
  3. 取得單一股票在當月各日成交資訊

這 3 種方式分別可以應用在不同的實務上,當了解基本取得資料的方式,就可以寫程式定期取得最新或是歷史的股價資料。

先看一次我這次範例的操作畫面。

範例建置環境
後端架構: C# ASP.Net MVC .Net Framework
前端架構: Vue.js, jQuery, Bootstrap

我網頁上只講解重要的程式碼部份,完整範例可至文末下載。

範例1 取得即時股價

範例畫面輸入要查詢的股票代碼,可輸入單一股票或是用 , (逗號)分隔輸入代碼後按查詢。

按下查詢後,程式會組合查詢網址,例如

https://mis.twse.com.tw/stock/api/getStockInfo.jsp?json=1&delay=0&ex_ch=tse_2330.tw|tse_0050.tw|

網址中的 tse_2330.tw|tse_0050.tw| 就是要查詢的股票名稱,大家可以換成自己需要的股票。
當此網址在瀏覽器查詢時,即會回傳 Json 格式的價格資料

接下來就可以用程式解析 Json 來取得價格資料。
我列出 Json 內容中價格資訊常用的欄位

證交所台股價格

在此範例中我只顯示「股票代號/當盤成交價/最低委賣價/最高委買價」做示範,
大家可以依自己的需求調整要顯示的資料。

2021-8-10 補充:

在呼叫證交所的即時價格時,如果是盤中呼叫,”偶爾” 會發生沒有當盤成交價的問題。

而這問題在逐筆交易上線(2020-3-23)以前,是不會發生的,當時是每 5 秒撮合一次,一定有成交價。

但在逐筆交易上線後,從證交所呼叫即時價格,其實是得到每 5 秒行情快照的結果,也就是 5 秒才會更新一個價格。

可能在快照那當下 0.1 秒時,就是沒有人成交,所以也就沒有看到當盤成交價。

如果沒有當盤成交價的話,只能從委買 1 或委賣 1 來推算可能的成交價了。

如果需要非常即時的逐筆交易價格,我是透過群益 API 來取得即時報價的,可參考這篇文章

Html 網頁版面

Javascript 程式碼

只向後端執行呼叫動作

C# Controller 程式

利用程式組出要查詢的網址,接著使用 WebClient 取得回傳資料,取得回傳的 Json 資料後就依欄位取出資料。

程式碼上有簡單的註解說明,若需要實際操作可至下方下載完整範例。

範例2 取得每日收盤行情

在範例畫面上輸入要查詢的日期,查詢後就會列出當日所有股價的 K 線價格。

當查詢之後,程式會組合查詢網址:

https://www.twse.com.tw/exchangeReport/MI_INDEX?response=csv&date=20210507&type=ALL

替換參數 「20210507」 後就可以改成需要查詢的日期
此查詢結果會回傳 csv 格式的內容,內容包含所有上市交易的清單,以及類股指數的價格,

此檔案比較大有 2 萬多筆資料回傳。
回傳資料分 2 部份,上半部是類股價格而下半部是個股價格,會在同一份檔案中。
我自己是用欄位數量來分辨類股或是個股的。
那接下來就來看程式碼的部份

Html 網頁版面

Javascript 程式碼

只向後端執行呼叫動作

C# Controller 程式

利用程式組出要查詢的網址,接著使用 WebClient 取得回傳資料,取得資料是 CSV 格式,將 CSV 解析成string[] 格式資料,就可以依索引位置來取得指定的資料。

範例3 取得當月各日成交資訊

在範例畫面上輸入股票代碼及查詢日期,就可以查詢該股票當月的所有日期價格。

當查詢之後,程式會組合查詢網址:

http://www.twse.com.tw/exchangeReport/STOCK_DAY?response=csv&date=20210510&stockNo=2330

替換參數 「20210510」及「2330」 後就可以改變回傳內容。
此查詢結果會回傳 csv 格式的內容,內容包含股票當月各日成交資訊。

資料欄位包含日期/成交股數/成交金額/開盤價/最高價/最低價/收盤價/漲跌價差/成交筆數

接下來我就示範如何用程式取出欄位

Html 網頁版面

Javascript 程式碼

只向後端執行呼叫動作

C# Controller 程式

利用程式組出要查詢的網址,接著使用 WebClient 取得回傳資料,取得資料是 CSV 格式,將 CSV 解析成 string[] 格式資料,就可以依索引位置來取得指定的資料。

以上就是 3 種向證交所取得股價的實用方式,網頁上的程式碼中有些方法寫在共用方法區內,沒有展示出來,若需要了解更多可以下載完整範例。

重點整理

  1. 取得證交所即時價格是每 5 秒更新一次
  2. 要取得逐筆交易的 Tick 價格可串接券商 API 取得證交所即時價格是每
  3. 知道證交所查詢網址即可自寫程式查詢
  4. 一天更新一次價格可利用查詢證交所每日收盤行情
  5. 當月各日成交資訊可回溯非常久的歷史資料

範例下載

此範例的下載位置: 範例下載

相關學習文章

相關網站

如果你在學習上有不懂的地方,可以參考線上家教服務

如果你喜歡這篇文章,請幫我在上方綠色的拍手圖示按 5 下
使用 Google 或 FB 免費登入,你的鼓勵支持我繼續創作,寫出好的文章

[加入社團一起討論] 或是 [追蹤程式教練 Mars]

4 thoughts on “[C#] 取得證交所台股價格的 3 種實用方法(附範例下載)

    1. 不好意思,我已經重新放檔案了,你再試試看。
      之前做壓縮檔時沒注意到,謝謝你的提醒。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *