注意:
- 操作功能前請先登入。
- 詳細功能請參考 API Reference/pfcf。
1. 註冊連線事件 (Connection Events)
在執行登入前,建議先註冊連線與斷線的事件監聽 (Callback),以便即時掌握各模組(報價、交易、帳務)的連線狀況。
以下範例展示如何定義回調函式並註冊至 SDK:
import unitrade
from unitrade.unitrade import Unitrade
import time
# 初始 API
api = Unitrade()
# 定義連線成功的回調函式
def on_connected(module_name, server_info):
print(f"[{module_name}] 連線成功: {server_info}")
# 定義斷線的回調函式
def on_disconnected(module_name, server_info):
print(f"[{module_name}] 連線中斷: {server_info}")
# 實作各模組的 Callback wrapper
def dquote_on_connected():
on_connected("內期報價", unitrade.dquote.get_current_server())
def fquote_on_connected():
on_connected("外期報價", unitrade.fquote.get_current_server())
def dtrade_on_connected():
on_connected("內期交易", unitrade.dtrade.get_current_server())
def ftrade_on_connected():
on_connected("外期交易", unitrade.ftrade.get_current_server())
def daccount_on_connected():
on_connected("內期帳務", unitrade.daccount.get_current_server())
def faccount_on_connected():
on_connected("外期帳務", unitrade.faccount.get_current_server())
# 註冊 Connected 事件
unitrade.dquote.on_connected = dquote_on_connected
unitrade.fquote.on_connected = fquote_on_connected
unitrade.dtrade.on_connected = dtrade_on_connected
unitrade.ftrade.on_connected = ftrade_on_connected
unitrade.daccount.on_connected = daccount_on_connected
unitrade.faccount.on_connected = faccount_on_connected
# 註冊 Disconnected 事件 (邏輯同上,此處略縮寫以示範註冊方式)
unitrade.dquote.on_disconnected = lambda: print("內期報價 斷線")
unitrade.fquote.on_disconnected = lambda: print("外期報價 斷線")
unitrade.dtrade.on_disconnected = lambda: print("內期交易 斷線")
unitrade.ftrade.on_disconnected = lambda: print("外期交易 斷線")
unitrade.daccount.on_disconnected = lambda: print("內期帳務 斷線")
unitrade.faccount.on_disconnected = lambda: print("外期帳務 斷線")
2. 系統登入
註冊完事件後執行登入,此時應會觸發上述的 on_connected 事件。
# 錯誤事件處理
unitrade.on_error = lambda error: print(f'API 錯誤: {error}')
# 系統登入
# 參數: URL, 帳號, 密碼, 憑證檔名, 憑證密碼
loginresponse = unitrade.login("url", "帳號", "密碼", '憑證檔名', '憑證密碼')
# 取得第一個交易帳號
actno = unitrade.get_accounts()[0]
print(f"登入回應: {loginresponse}")
print(f"登入狀態旗標: {unitrade.login_status_flag}")
print(f"交易帳號: {actno}")
# 等待連線建立 (確保 Callback 有時間被觸發)
time.sleep(2)
3. 伺服器資訊與切換
SDK 支援查詢可用伺服器列表,並指定切換至特定伺服器。以下針對不同模組進行示範。
內期報價 (Domestic Quote)
# 取得伺服器列表
print("內期報價伺服器列表:", unitrade.dquote.get_server_list())
# 切換伺服器
# 參數為伺服器名稱 (Name)
unitrade.dquote.set_server_by_name("217")
time.sleep(2) # 等待重新連線
外期報價 (Foreign Quote)
# 取得伺服器列表
print("外期報價伺服器列表:", unitrade.fquote.get_server_list())
# 切換伺服器
unitrade.fquote.set_server_by_name("217")
time.sleep(2)
內期交易 (Domestic Trade)
# 取得伺服器列表
print("內期交易伺服器列表:", unitrade.dtrade.get_server_list())
# 切換伺服器
unitrade.dtrade.set_server_by_name("99167")
time.sleep(2)
外期交易 (Foreign Trade)
# 取得伺服器列表
print("外期交易伺服器列表:", unitrade.ftrade.get_server_list())
# 切換伺服器
unitrade.ftrade.set_server_by_name("141")
time.sleep(2)
4. 系統登出
登出系統並斷開所有連線。
unitrade.logout()
print('登出完畢')
print(f"登入狀態旗標: {unitrade.login_status_flag}")