iT邦幫忙

2021 iThome 鐵人賽

DAY 30
0
Mobile Development

使用 Swift 和公開資訊,打造投資理財的 Apps系列 第 31

D30 - 用 Swift 和公開資訊,打造投資理財的 Apps { 台股申購功能擴充,算出價差 }

這是第三十天!!!

到目前為止的範例程式碼就在這個 repo

https://github.com/MoonAndEye/ITIronMan_2021/tree/main/D29/ITIronMan

到目前,這一份程式已經具備下面幾項功能

  • 台股 上市/上櫃/興櫃 股票代號 vs. 名稱,以及基本資料,如股本、負責人、成立日期等等
  • 台股申購資料
  • 加權指數 K線/成交量/均線
  • 三大法人成交比重

如果要拿去上架,將 UI 改成美美的,就可以了。

接下來,我們對台股申購,進行功能的擴充,D7~D11

這次鐵人賽,我們在 D7~D11 的文章,做出了台股申購的功能。

我們回顧一下依照當時拿到的公開資料,可以拿到的是 [抽籤日期]、[證券名稱]、[申購開始日]、[申購結束日]、[承銷價(元)]、[實際承銷價(元)]、[撥券日期(上市、上櫃日期)]、[申購股數]、[中籤率]。

如果想知道抽中,「大概」可以賺到多少,上面這些資訊是無法知道的,因為這些資訊少了 [收盤價]。如果能獲得收盤價,那 ( [收盤價(撥券日)] - [承銷價] ) * 張數 就可以預估這次申購,如果抽到,會不會賠錢。

證交所有個股的開、高、低、收,下載的頁面如下。

https://www.twse.com.tw/zh/page/trading/exchange/STOCK_DAY.html

https://ithelp.ithome.com.tw/upload/images/20211010/20140622fRWa7uLopv.png

而每一檔下載的位置,可以在「CSV 下載」的按鈕中,看到。

https://www.twse.com.tw/en/exchangeReport/STOCK_DAY?response=csv&date=20210928&stockNo=2330

要更換的參數,就是 date=20210928 再輸入 stockNo=2330,就可以得到 2330 這一檔的當月的開高低收。

依照之前設計的 UI,我們可以這樣設計發動 API (但不建議,原因後述)。

在 UITabelViewDelegate 中的 tableView(_:willDisplay:forRowAt:),發動 API。

UITableViewDelegate 的文件

https://developer.apple.com/documentation/uikit/uitableviewdelegate/1614883-tableview

https://ithelp.ithome.com.tw/upload/images/20211010/20140622m6lEqGKbpj.png

所以邏輯如下

1- 在 willDisplay 中,用 row 的 indexPath 去問 Model,這一個的 data model 是什麼,拿出股票代號。

2.a - 如果這個股票代號的資料,有存在記憶體或是 UserDefaults 中,那就直接顯示在 cell 上,也把價差,價差百分比算出,顯示在 cell 上。

2.b - 如果這個股票袋號沒有之前的資料,那就用上面的網址,發動 URLRequest,去拿當月的 CSV 檔

3- 將上述的 CSV 檔離今天最近日期的 row 拿出

4- 將 row 的資料轉成 data model,存入記憶體或 UserDefaults 中。

5- 將 data model 傳回 ViewController,並將資料顯示在 Cell 上。

但…下一篇會說明,為什麼不要這樣做。


上一篇
D29 - 用 Swift 和公開資訊,打造投資理財的 Apps { 三大法人成交比重實作.4 }
下一篇
D31 - 用 Swift 和公開資訊,打造投資理財的 Apps { 台股申購功能擴充,算出價差.2}
系列文
使用 Swift 和公開資訊,打造投資理財的 Apps37

尚未有邦友留言

立即登入留言