永豐金證券程式交易 — Python API 準備 in Windows env.

JuddHsieh
6 min readAug 9, 2021

--

紀錄日期 2021–08–10

先直接分享官方的 links:

  1. Main Page: https://sinotrade.github.io/

2. Github: https://github.com/Sinotrade/Shioaji

3. PyPI: https://pypi.org/project/shioaji/0.0.4.dev3/

4. 永豐憑證申請: https://www.sinotrade.com.tw/CSCenter/CSCenter_13_1?tab=2

假如你想使用永豐API,建議有些心理準備,

  1. 並不如一切看起來的fancy,實際上的經驗上,也不像是說明文件說的那麼輕鬆,說明影片的參考價值也不大,一來沒幫助,二來畫質很可怕
  2. 這是一個開發團隊還在努力進行的project。 壞的方面來看,遇到問題是一定會有的,必須心裡有底就是。好的方面是開發團隊感覺是真的用心,是可以期待的
  3. 說明文件: 我覺得使用者文件是key item, 對developer來說, 說明文件內容不足會造成使用的門檻,很可惜。 所以這也是為什麼我會特地開個文章,希望能幫助到像我一樣弱弱的人,降低進入的門檻

Okay, 那開始我的流程建議

  1. Python 安裝

必須是 python 3~3.7 之間的版本,詳細可看PyPI。 假如你是 3.8 or 3.9, 必須downgrade 他,或者是安裝3.7後去更改環境變數(remove 3.9的相關路徑,改成3.7之類的), 我是直接改路徑了,反正我在電腦玩薩爾達-BOTW mod也需要環境是python 3.7 :p

2. 安裝主套件

參考official link, 在terminal/cmd pip他就好了

cmd: pip install shioaji

3. 憑證

不得不說這個很頭痛,畢竟這麼重要的東西卻沒有文件說明,但我自己聯想應該可以沿用電腦下單軟體的憑證,結果也是如此。

所以可以去 這個link: https://www.sinotrade.com.tw/CSCenter/CSCenter_13_1?tab=2

反正就是下載一個程式,啟用/儲存/設定 憑證blabla, 密碼我覺得不用改,我改過一次,但好像發生問題後就reset了,但我沒去深究原因,反正自己試看看吧

4. Try it

試試看他們提供的 code,如圖,並以下說明

line 5–10: 使用前需login

馬掉個資,但針對各紅色字母說明如下

A: 身分證字號

B: 證券登入密碼,也就是你手機APP要登入的密碼

C:憑證儲存的位置,範例格式: "C:\ekey\\551\My\Sinopac.pfx" (須注意python對於字串的處理,有時候會需要\\)

D,E: 假如你沒特別改憑證密碼的話,都是身分證字號

line 11–16: 測試回傳內容

然後設個break point,或是把資料print 出來,應該三秒內就會收到回傳資料

若是得到空的response, 或等很久(不一定是timeout),甚至是直接fail, 你可能就要針對package作調整了

5. (Optional) 調整 python 的 package version

簡單來說,shioaji 這個program用了一些packages, 你可能沒有這些package,或者是package版本不符合

所以你必須知道他用了哪些package,並且是哪些版本,不用google或者是在上面發問浪費時間了,我找了一天結果還是fail,建議你

  1. 安裝docker
  2. Import shioaji 的開發環境,詳細或最新請參考official link

cmd: docker run -it sinotrade/shioaji:latest

3. 從docker啟動 shioaji 開發環境,在該環境下 cmd: pip list

4. 理論上你會得到開發環境的所有package與版本,然後照著這個去改你的package就結束了,舉一個當範例

cmd: pip install — upgrade pysolace==0.9.10

* 假如有些windows檔案權限問題呢,就自己控制吧,或者是右鍵,以系統管理員身分來執行 cmd/terminal

環境設定到這邊就結束了, 個人是踩了很多雷,看沒什麼說明的說明文件,爬大家的百花齊開的環境設定文,花了一堆時間,最後才用這個流程解決的,希望可以幫助到跟我一樣因此頭痛的人

最後來個感想,但感覺會被砲...

  1. 說明文件內容不足: 如前面所說,看起來fancy,用起來心情ugly... 看github report issue,裡面就有不少是說明文件應該要有的。我無法理解為什麼不寫得仔細一點,還要爬文,google或猜老半天,不說清楚是要怎麼用....
  2. 說明文件是英文: 我承認是雞蛋裡挑骨頭,但使用者都台灣人啊... 寫英文感覺起來比較厲害沒錯啦,但不覺得開發團隊平常討論都是用英文對話... 個人平常寫code也都參考英文網頁,這對我來說不是什麼問題,但假如使用者都是非英語系的人,就有點為做而做了。不知道,可能是考量到有老外會用這個API,所以寫一份英文版就不用寫兩份了,英文不好的就自己去google翻譯,這樣? 總之我覺得很詭異,甚至是工程師式中英文混雜語也行阿。不覺得這個suggestion不錯excellent嗎?
  3. 我覺得永豐"感覺上"滿用心推機器人交易,有爬到開發團隊也自認永豐非軟體公司,似乎是靠熱情再做project的感覺? 可以理解這樣的環境下會遇到這樣的處境,畢竟IT在一般產業都是被公司認知為"必須卻又只是輔助"的工作團隊 (就跟你的左手一樣,只是輔助,但切掉你的左手你要嗎?) 總之是辛苦了, 你們面對的User,同時也是Developer,所以假如能站在這點去驅動未來的plan的話,我覺得會更有幫助。 身為使用者的我就不多方便建議什麼了。只希望說明文件弄好一點
  4. 另外群益似乎也有python,但對群益的印象很.....,元大的似乎是.net,永豐打這塊我覺得是很棒的想法,希望未來系統會更穩定,不然真的是也很猶豫該用哪個去實做啊

這系列先到這邊,畢竟最近也沒時間去弄開發

--

--