這是第三十天!!!
到目前為止的範例程式碼就在這個 repo
https://github.com/MoonAndEye/ITIronMan_2021/tree/main/D29/ITIronMan
到目前,這一份程式已經具備下面幾項功能
如果要拿去上架,將 UI 改成美美的,就可以了。
接下來,我們對台股申購,進行功能的擴充,D7~D11
這次鐵人賽,我們在 D7~D11 的文章,做出了台股申購的功能。
我們回顧一下依照當時拿到的公開資料,可以拿到的是 [抽籤日期]、[證券名稱]、[申購開始日]、[申購結束日]、[承銷價(元)]、[實際承銷價(元)]、[撥券日期(上市、上櫃日期)]、[申購股數]、[中籤率]。
如果想知道抽中,「大概」可以賺到多少,上面這些資訊是無法知道的,因為這些資訊少了 [收盤價]。如果能獲得收盤價,那 ( [收盤價(撥券日)] - [承銷價] ) * 張數 就可以預估這次申購,如果抽到,會不會賠錢。
證交所有個股的開、高、低、收,下載的頁面如下。
https://www.twse.com.tw/zh/page/trading/exchange/STOCK_DAY.html
而每一檔下載的位置,可以在「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
所以邏輯如下
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 上。
但…下一篇會說明,為什麼不要這樣做。