rshioaji
一個用 Rust 封裝台灣永豐金證券 shioaji API 的高效能交易程式庫,支援多平台部署。
✅ 已成功發佈至 crates.io
開發者資訊
開發者: Steve Lo
聯絡方式: info@sd.idv.tw
專案性質: 概念驗證 (Proof of Concept) 專案
特點
- 🚀 高效能:基於 Rust 實現,提供優秀的執行效能和記憶體安全
- 🔗 相容性:使用原始 Python C 擴展 (.so 檔案),確保完整功能相容性
- 🌐 多平台支援:支援 macOS ARM64 和 Linux x86_64 平台
- 📦 靜態連結:支援將 .so 檔案內嵌至執行檔,無運行時依賴
- 🐳 容器化:提供 Docker 支援,便於部署和分發
- ⚡ 非同步:基於 tokio 實現非同步操作
- 🛡️ 型別安全:完整的 Rust 型別定義,編譯時錯誤檢查
- 🔧 環境變數管理:完整的環境變數處理和驗證,對應 Python utils.py
- 📝 日誌系統:與 Python 版本相同格式的日誌系統
- 🔍 錯誤追蹤:支援 Sentry 整合和錯誤監控
- 🔑 完整登入流程:實現與 Python 版本相同的標準登入步驟
- 📡 事件回調系統:原生 Rust trait 系統,支援市場資料、訂單和系統事件回調
📦 安裝
從 crates.io 安裝 (推薦)
在您的 Cargo.toml 中添加:
[]
# 基本版本
= "0.3.9"
# 啟用高效能功能 (推薦)
= { = "0.3.9", = ["speed"] }
# 啟用所有功能 + 完整回調支援
= { = "0.3.9", = ["speed", "static-link"] }
可用功能 (Features)
| 功能 | 描述 | 用途 |
|---|---|---|
speed |
🚀 高效能時間處理 | 等效於 Python shioaji[speed],提升日期時間處理效能 |
static-link |
📦 靜態連結 | 將 .so 檔案內嵌到執行檔,無運行時依賴 |
sentry |
🔍 Sentry 錯誤追蹤 | 支援 Sentry 錯誤監控和追蹤功能 |
🎯 新功能 v0.3.9 - 事件處理優化
✅ 重要更新:v0.3.9 事件處理優化
v0.3.9 專注於優化事件處理系統,提升用戶體驗:
| 優化項目 | v0.3.9 狀態 | 說明 |
|---|---|---|
| ✅ 靜默事件處理 | 全面優化 | 移除不必要的事件輸出訊息,減少控制台干擾 |
| ✅ 回調系統穩定性 | 持續改進 | 維持 v0.3.8 的完整回調功能,提升穩定性 |
| ✅ 效能優化 | 微調改進 | 優化事件橋接效能,減少資源消耗 |
| ✅ 錯誤處理 | 改進靜默 | 改善錯誤處理機制,提供更清潔的執行環境 |
v0.3.9 主要改進
🔧 事件處理優化:
- 移除干擾訊息:完全移除 "🔔 收到事件" 等輸出,提供安靜的執行環境
- 靜默錯誤處理:改善回調錯誤處理,避免不必要的控制台輸出
- 效能調校:微調事件橋接機制,提升處理效率
✅ v0.3.9 完整保留 v0.3.8 功能:
- 完整回調支援:所有 v0.3.8 的回調功能完全保留
- 穩定性提升:在保持功能完整性的同時提升系統穩定性
- 用戶體驗改善:提供更清潔、專業的執行環境
編譯選項
# 基本編譯
# 啟用高效能功能
# 生產環境編譯 (推薦)
支援平台
- macOS ARM64 (
macosx_arm) - Linux x86_64 (
manylinux_x86_64)
開發環境需求
系統需求
- Rust 1.75+
- Python 3.12+ (完整支援並測試驗證)
- 對應平台的 shioaji C 擴展檔案
開發依賴
- PyO3 0.20+
- tokio 1.0+
- serde 1.0+
🚀 快速開始
1. 安裝套件
# 創建新的 Rust 專案
# 編輯 Cargo.toml 添加依賴
[]
= { = "0.3.9", = ["speed"] }
= { = "1.0", = ["full"] }
2. 基本使用範例
use ;
use HashMap;
async
3. v0.3.8 完整回調系統範例
use ;
use Arc;
use HashMap;
// 實作完整的事件處理器
async
從源碼編譯 (開發者)
1. 克隆專案
2. 編譯專案
一般編譯(動態連結)
靜態連結編譯(推薦)
高效能編譯(包含速度優化)
# 啟用 speed 功能,等效於 shioaji[speed]
# 結合靜態連結和速度優化
靜態連結優勢:
- 🔗 所有 .so 檔案內嵌於執行檔中
- 📦 單一執行檔,無外部依賴
- 🚀 更快的啟動時間
- 🛡️ 提升安全性,減少攻擊面
- 📋 便於分發和部署
Speed 功能優勢:
- ⚡ 快速日期時間處理(等效於 ciso8601)
- 🔢 高效能 base58 編碼/解碼(等效於 based58)
- 🚀 Rust 原生高效能實作
- 📈 減少 Python C 擴展依賴
3. 環境變數配置
創建 .env 檔案或設定環境變數:
# .env 檔案範例
SHIOAJI_API_KEY=您的實際API金鑰
SHIOAJI_SECRET_KEY=您的實際密鑰
SHIOAJI_SIMULATION=false
RUST_LOG=info
支援的環境變數
基本 API 設定
SHIOAJI_API_KEY或API_KEY- API 金鑰SHIOAJI_SECRET_KEY或SECRET_KEY- 密鑰SHIOAJI_SIMULATION或SIMULATION- 模擬模式 (true/false)
日誌設定 (對應 Python utils.py)
LOG_LEVEL- 日誌等級 (DEBUG/INFO/WARNING/ERROR/CRITICAL)SJ_LOG_PATH- 日誌檔案路徑 (設為 "console" 只輸出到控制台)RUST_LOG- Rust 日誌等級 (debug/info/warn/error)
Sentry 錯誤追蹤設定
SENTRY_URI- Sentry DSN URLLOG_SENTRY- 是否啟用 Sentry (True/False)SENTRY_LOG_LEVEL- Sentry 日誌等級 (DEBUG/INFO/WARNING/ERROR/CRITICAL)
測試設定
LEGACY_TEST- 遺留測試模式 (0=停用, 1=啟用)
4. 執行程式
# 基本執行
# 啟用高效能功能
# 生產環境執行
📚 使用範例
完整交易範例
use ;
use HashMap;
async
CLI 工具使用 (從源碼)
# 編譯 CLI 工具
# 查看幫助
# 查詢股票資料
# 啟用除錯模式
Docker 部署
建置 Docker 映像檔
# Linux x86_64 平台(推薦生產環境 - 162MB)
# Python 3.12 原生支援版本(173MB)
# Alpine Linux(超輕量版本 - 50MB)
# macOS ARM64 平台(開發環境 - 100MB)
# 手動建置
執行容器
# 使用 .env 檔案執行(推薦 - Python 3.12)
# 使用 .env 檔案執行(Python 3.11 輕量版)
# 使用環境變數執行(Python 3.12)
# Alpine 超輕量版本
# 互動模式(Python 3.12)
# 背景執行(Python 3.12)
Docker Compose 部署
創建 docker-compose.yml(Python 3.12 版本):
version: '3.8'
services:
rshioaji:
build:
context: .
dockerfile: Dockerfile.python # 使用 Python 3.12
env_file:
- .env
command:
restart: unless-stopped
volumes:
- ./logs:/app/logs
或使用預建映像:
version: '3.8'
services:
rshioaji:
image: rshioaji:python312
env_file:
- .env
command:
restart: unless-stopped
volumes:
- ./logs:/app/logs
執行:
Docker 特點
- 🏔️ 超輕量設計:173MB Python 3.12 | 162MB 輕量版 | 50MB 超輕量版 (減少 91.3% 大小)
- 🐧 多平台支援:Linux x86_64、Alpine Linux 和 macOS ARM64
- 🐍 Python 3.12:原生支援 Python 3.12 和完整 C 擴展整合 (推薦)
- 📦 多階段建置:分離編譯環境與運行環境,大幅減少映像檔大小
- 🔐 安全配置:支援 .env 檔案和環境變數,API 憑證自動遮罩
- ⚡ 快速部署:一鍵建置與執行,容器啟動速度快
- 🛡️ 隔離環境:避免 macOS 安全性限制,提供穩定運行環境
- 🚀 生產就緒:多種部署模式,支援 Docker Compose 和容器編排
映像檔大小對比
| 版本 | 大小 | 用途 | Python 支援 |
|---|---|---|---|
| rshioaji:python312 | 173MB | Python 3.12 推薦 | ✅ 原生 3.12 支援 |
| rshioaji:latest | 162MB | Python 3.11 輕量版 | ✅ 完整支援 |
| rshioaji:alpine | 50MB | 資源受限環境 | ⚠️ 基本支援 |
| rshioaji:macos | 100MB | 開發環境 | ✅ 完整支援 |
🔧 環境變數配置
rshioaji 提供完整的環境變數管理功能,對應 Python shioaji 的 utils.py 模組。
環境變數設定範例
創建 .env 檔案:
# 基本 API 設定
SHIOAJI_API_KEY=your_actual_api_key
SHIOAJI_SECRET_KEY=your_actual_secret_key
SHIOAJI_SIMULATION=true
# 日誌設定
LOG_LEVEL=INFO
SJ_LOG_PATH=shioaji.log
# Sentry 錯誤追蹤 (選用)
SENTRY_URI=https://your-dsn@sentry.io/project-id
LOG_SENTRY=True
SENTRY_LOG_LEVEL=ERROR
# 測試設定
LEGACY_TEST=0
使用方式
use ;
// 載入環境變數配置
let env_config = from_env;
// 驗證配置
if let Err = env_config.validate
// 初始化日誌系統
init_logging?;
info!;
📝 日誌系統
日誌格式
日誌格式與 Python 版本保持一致:
[L YYYY-MM-DD HH:MM:SS.fff UTC filename:line:function] message
範例輸出
[I 2024-01-15 08:30:45.123 UTC main.rs:25:main] 🚀 rshioaji 環境初始化完成
[I 2024-01-15 08:30:45.124 UTC main.rs:26:main] 📊 日誌等級: INFO
[I 2024-01-15 08:30:45.125 UTC main.rs:27:main] 🛡️ Sentry 錯誤追蹤: 啟用
啟用 Sentry 功能
# 編譯時加入 sentry 功能
# 執行時啟用 Sentry
LOG_SENTRY=True SENTRY_URI=your_sentry_dsn
📚 詳細文件
📖 API 使用指南
基本配置
use ;
use HashMap;
// 方法 1: 從環境變數載入 (推薦)
let config = from_env?;
let client = new?;
// 方法 2: 手動配置
let client = new?; // true = 模擬模式
市場資料操作
use ;
// 創建合約
let stock = client.create_stock;
// 訂閱即時報價
client.subscribe.await?;
// 取得歷史 K 線
let kbars = client.kbars.await?;
下單操作
use ;
// 創建委託單
let order = new;
// 送出委託
let trade = client.place_order.await?;
專案結構
rshioaji/
├── src/ # Rust 原始碼
│ ├── lib.rs # 程式庫入口
│ ├── main.rs # 可執行檔入口
│ ├── client.rs # 主要客戶端實作
│ ├── bindings.rs # Python FFI 綁定
│ ├── platform.rs # 平台檢測邏輯
│ ├── error.rs # 錯誤處理
│ └── types/ # 型別定義
├── lib/shioaji/ # Python C 擴展檔案
│ ├── macosx_arm/ # macOS ARM64 版本
│ └── manylinux_x86_64/ # Linux x86_64 版本
├── examples/ # 範例程式
├── tests/ # 測試檔案
├── Dockerfile # Docker 配置
├── .dockerignore # Docker 忽略檔案
└── docker-build.sh # Docker 建置腳本
平台檢測
rshioaji 會自動檢測執行平台並載入對應的 C 擴展檔案:
use Platform;
let platform = detect;
println!;
// 驗證安裝
let base_path = current_dir?;
platform.validate_installation?;
環境設定
動態連結版本
macOS ARM64
Linux x86_64
靜態連結版本
靜態連結版本無需設定環境變數,可直接執行:
# 直接執行,無需額外設定
# 或使用 cargo
除錯
啟用日誌
檢查平台檔案
# 確認 .so 檔案存在
# 檢查檔案權限
常見問題
Q: 出現 "Platform validation failed" 錯誤
A: 請確認對應平台的 .so 檔案存在且有執行權限。
Q: Docker 容器無法啟動
A: 確認使用正確的 Dockerfile(Linux 用 Dockerfile,macOS 用 Dockerfile.macos)。
Q: Python 3.12 模組載入錯誤
A: 確認 lib/shioaji 目錄下的 .so 檔案為 cpython-312 版本。
Q: Python 模組匯入錯誤
A: 檢查 PYTHONPATH 和 LD_LIBRARY_PATH 環境變數設定,確認 Python 3.12 環境正確。
授權
此專案採用 MIT 和 Apache 2.0 雙重授權。
貢獻
歡迎提交 Issue 和 Pull Request!
開發者聯絡
如有任何問題或建議,請聯絡:
- Steve Lo - info@sd.idv.tw
🎯 進階使用
功能開關
# 啟用高效能模式 (推薦生產環境)
# 啟用靜態連結 (單一執行檔)
# 同時啟用多個功能
效能優化
// 使用 speed 功能時,自動啟用:
// - 高效能日期時間處理 (等效於 ciso8601)
// - 優化的 base58 編碼 (等效於 based58)
// - 其他 Rust 原生高效能實作
// 無需額外程式碼,編譯時自動優化
✅ 生產驗證
rshioaji 已成功發佈至 crates.io 並通過完整測試:
- 📦 crates.io: https://crates.io/crates/rshioaji
- 📚 文件: https://docs.rs/rshioaji
- 🔐 API 認證: 真實憑證登入測試通過
- 📊 市場資料: 成功查詢台積電 (2330) 資料
- 📈 即時訂閱: K 線和 tick 資料正常運作
- 🌐 跨平台: macOS ARM64 和 Linux x86_64 支援
- 🚀 高效能: speed 功能提升處理效能
安裝驗證
# 創建測試專案
&&
# 添加依賴
# 編譯測試
🔗 相關連結
- 📦 crates.io: https://crates.io/crates/rshioaji
- 📚 API 文件: https://docs.rs/rshioaji
- 🐙 GitHub: https://github.com/stevelo/rshioaji
- 📧 聯絡: info@sd.idv.tw
📊 套件資訊
[]
= "0.3.9" # 最新版本 (完整回調系統)
- 版本: 0.3.9
- 授權: MIT OR Apache-2.0
- 平台: macOS ARM64, Linux x86_64
- Rust 版本: 1.75+
⚠️ 重要聲明:
- 此套件已通過完整功能驗證並發佈至 crates.io
- 正式交易前請充分測試,開發者不承擔任何交易損失責任
- 需要有效的永豐金證券 API 金鑰才能正常運作
- 請向永豐金證券申請相關授權並遵守其使用條款