iT邦幫忙

2021 iThome 鐵人賽

DAY 2
0
永豐金融APIs

深入解析 Shioaji API系列 第 2

Day 02 - 登入及下單簽署

登入及下單簽署

官網對應說明文件:https://sinotrade.github.io/tutor/login/
首先,說明如何登入Shioaji API。
如果你還沒有永豐金證券戶及帳號密碼,或是你想先測試Shioaji API的功能,可以使用模擬帳戶進行登入
模擬環境的帳號為PAPIUSER01~PAPIUSER08,登入密碼皆為「2222」,登入方式如下:

import shioaji as sj #將shioaji重新命名為sj
api = sj.Shioaji(simulation=True) #初始化時,simulation設為True,代表要使用模擬環境
api.login(
    person_id="PAPIUSER01", 
    passwd="2222"
)
api.logout() #登出

如果你有永豐金證券戶,可以直接用你的電子交易的帳號密碼進行登入

import os
import shioaji as sj #將shioaji重新命名為sj

api = sj.Shioaji() #初始化api,不用給任何參數
#執行登入動作
api.login(
    person_id=os.getenv('YOUR_PERSON_ID'), #登入帳號
    passwd=os.getenv('YOUR_PASSWORD') #登入密碼
)
api.logout() #登出

為了維護Shiaoji API的服務品質,從2021/08/06開始有限制帳號的連線數(同時間最多五個連線)。
所以Shioaji API提供了logout登出功能,當你不使用Shioaji API時,請記得執行logout()進行登出。其餘相關服務限制,請參考官方說明檔:https://sinotrade.github.io/tutor/limit/

跟第一個使用模擬環境登入方式,除了在初始化時不給任何參數外
可以看到在這裡,是使用os.getenv來取得設定在系統環境變數中的帳號及密碼
因為在實務上,我們不會把帳號資訊直接寫在程式碼中,而是將帳號資訊設定在環境變數中;當程式執行時再從環境變數中取得帳號資訊
之所以會這麼做,主要是為了防止在分享或上傳程式碼時,不小心把帳號資訊洩漏出去
但因為Windows、Linux的環境變數設定方式大不相同,而且你所使用的使用者帳號不一定會有權限可以新增環境變數,所以大多會透過設定檔的方式儲存帳號資訊
這裡介紹python-dotenv這個套件,使用方式也很簡單
首先,在命令提示字元中(若有使用虛擬環境,請記得先啟動虛擬環境),輸入下列指令進行安裝

pip install python-dotenv

接著在存放程式碼的資料夾底下,新增一個「.env」的檔案,檔案內容如下:

YOUR_PERSON_ID=PAPIUSER01
YOUR_PASSWORD=2222

等號前面為變數的名稱,後面為變數的值,每個變數以換行方式區分
最後,將程式碼修改為以下方式

import os
import shioaji as sj
from dotenv import load_dotenv #從dotenv模組中匯入load_dotenv這個function

load_dotenv() #讀取設定檔中的內容至環境變數
api = sj.Shioaji()

api.login(
    person_id=os.getenv('YOUR_PERSON_ID'),
    passwd=os.getenv('YOUR_PASSWORD')
)
api.logout()

當執行load_dotenv()時,程式就會在該資料夾底下搜尋是否有「.env」這個檔案,如果有就將變數名稱及值讀入至環境變數中
當然,你也可以把帳號資訊存在別的資料夾底下,在使用時只要指定env檔案的完整路徑即可,例如:

load_dotenv('D:\Shioaji\my_account.env')

登入後,我們可以看一下這個帳號底下有哪些帳戶。取得帳戶資訊有兩種,第一種是在執行login時,定義一個變數儲存回傳的帳戶資訊;第二種是在login後,執行list_accounts()取得帳戶資訊。這兩種方式,取得的內容都是相同的,範例如下:

accounts = api.login(
    person_id=os.getenv('YOUR_PERSON_ID'),
    passwd=os.getenv('YOUR_PASSWORD')
)
accounts = api.list_accounts()

若你登入虛擬環境後,執行print(accounts),會顯示以下內容

[FutureAccount(person_id='QBCCAIGJBJ', broker_id='F002000', account_id='9100020', signed=True, username='PAPIUSER01'), StockAccount(person_id='QBCCAIGJBJ', broker_id='9A95', account_id='0504350', signed=True, username='PAPIUSER01')]

可以看到虛擬環境帳號底下,分別有FutureAccount期貨帳戶及StockAccount股票帳戶,相關變數說明如下:

變數名稱 說明
person_id 身份證號碼
broker_id 券商分點號碼
account_id 帳戶號碼
signed 是否已簽署API下單 若帳號資訊無此變數,表示此帳戶尚未簽署API下單
username 使用者名稱 若使用個人帳號登入,此欄位顯示你的姓名

若你的帳戶尚未簽署API下單,可開啟永豐金iLeader,找到「數位e櫃台」並開啟
https://ithelp.ithome.com.tw/upload/images/20210917/20140827totMkngYIX.jpg
點「簽署中心」
https://ithelp.ithome.com.tw/upload/images/20210917/20140827D5Cw33KGNI.jpg
簽署中心中,有分「證券類」及「期貨類」
https://ithelp.ithome.com.tw/upload/images/20210917/20140827bPLoA3lJ12.jpg
若已簽署,則左上角會顯示「已簽署」
https://ithelp.ithome.com.tw/upload/images/20210917/20140827PCex4UldOV.jpg
若左上角顯示「未簽署」,則可以點進去進行簽署動作
https://ithelp.ithome.com.tw/upload/images/20210917/20140827RTNwqTWPxU.jpg


上一篇
Day 01 - Shioaji API 開發環境安裝
下一篇
Day 03 - Contract
系列文
深入解析 Shioaji API30

1 則留言

0
chunhung_lo
iT邦新手 5 級 ‧ 2021-12-06 18:14:14

你寫的真的非常詳細。

我要留言

立即登入留言