[C#] 取得證交所台股價格的 3 種實用方法

[C#] 取得證交所台股價格的 3 種實用方法

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

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

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

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

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

完整範例可至文末下載。

建立 MVC 專案

打開 Visual Studio 2022,選擇「ASP.NET Web 應用程式 (.NET Framework),按「下一步」,建立新 MVC 專案。

開啟 Visual Studio 2019 選擇「建立新的專案」,專案類型為「ASP.NET Web 應用程式(.NET Framework)」

再輸入專案名稱及位置,選擇「MVC 範本」,即可建立新專案。

修改佈局頁

MVC 建立之後,開啟 \Views\Shared\_Layout.cshtml 先調整一下佈局頁,引用新的 JavaScript 。

@Scripts.Render("~/bundles/bootstrap") 下方加入 Vue.js 套件。

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

加入 jquery.blockUI 套件。

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.blockUI/2.70/jquery.blockUI.js"></script>

調整後畫面

修改佈局頁

調整首頁

此範例我直接改在首頁顯示,開啟 \Views\Home\Index.cshtml 頁面。

開啟 \Views\Home\Index.cshtml 頁面

先清空原有的範本程式碼,加入以下語法。

修改 Controller 程式碼

在 View 會呼叫 Controller 的方法,
開啟 \Controllers\HomeController.cs 檔案,在方法內增加以下 3 個方法。

建立 Model

剛剛在 HomeController 建立的方法,有定義新的參數及回傳類別,這些類別要放在 Model 裡面,
在 Models 目錄按右鍵選「加入」->「類別」。

在 Models 目錄按右鍵選「加入」->「類別」

輸入名稱為「HomeModel」,按「新增」。

輸入名稱為「HomeModel」,按「新增」

然後在「HomeModel」的類別裡面,再加入新的類別。

範例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| 就是要查詢的股票名稱,大家可以換成自己需要的股票。

如果要查加權指數可使用代碼: tse_t00.tw。
當此網址在瀏覽器查詢時,即會回傳 Json 格式的價格資料

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

證交所台股價格

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

2021-8-10 補充:

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

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

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

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

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

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

範例2 取得每日收盤行情解說

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

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

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

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

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

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

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

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

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

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

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

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

重點整理

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

範例下載

連結 GitHub 下載範例

相關學習文章

如果你在學習上有不懂的地方,可以參考專業諮詢或線上家教服務,我想辨法解決你的問題
如果文章內容有錯誤的地方,幫我在下方留言通知我一下,謝謝
喜歡我的文章,請幫我在上方綠色拍手圖示按 5 下,也歡迎按月贊助,鼓勵我繼續創作,謝謝

加入社團一起討論

10 thoughts on “[C#] 取得證交所台股價格的 3 種實用方法

  1. 你好,非常感謝您的分享,想請問是否可以得到周線月線的資料,因為網路上好像大多都只有教如何取得日線而已,還是說必須自己從這些日線資料推出周線資料。

    謝謝您,祝萬事順心

  2. MARS大想請教一下我目前用證交所API來取加權指數
    雖然能取到但總是比看盤軟體慢了兩三秒
    有時還會漏掉
    不知道群益API你是否有研究能即時取得加權指數的方法

    1. 你好,證交所的即時報價是每 5 秒更新一次,所以你會覺得比較慢是正常的
      然後偶爾會漏掉,會發生在個股的即時成交價,偶爾會出現當下 0.1 秒時,沒有出現成交價

      然後我要準確取得即時價格,我都是用群益 API 來報價,會即時更新,不會有漏報的問題
      群益取 api 方法,我有寫文章教學喔,可參考 https://blog.hungwin.com.tw/csharp-capital-api-quote-tick-best5/
      只要更換商品代碼就行,群益加權指數的代碼是 TSEA

      1. 用您的程式加上了 cboCommID.Items.Add(new ComboboxItem(“TSWE”, “加權指數”)); 執行後取報價看起來失敗了, 不知是不是未開盤的原因, 總之我明天開盤再試

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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。

twelve + seventeen =