Skip to content

SDpower/rshioaji

Repository files navigation

rshioaji

一個用 Rust 封裝台灣永豐金證券 shioaji API 的高效能交易程式庫,支援多平台部署。

Crates.io Documentation License

✅ 已成功發佈至 crates.io

開發者資訊

開發者: Steve Lo
聯絡方式: [email protected]
專案性質: 概念驗證 (Proof of Concept) 專案

特點

  • 🚀 高效能:基於 Rust 實現,提供優秀的執行效能和記憶體安全
  • 🔗 相容性:直接使用系統安裝的 Python shioaji,確保完整功能相容性
  • 🌐 多平台支援:支援 macOS ARM64 和 Linux x86_64 平台
  • 📦 純系統整合:無需嵌入 .so 檔案,直接使用 pip install shioaji
  • 🐳 容器化:提供 Docker 支援,便於部署和分發
  • 非同步:基於 tokio 實現非同步操作
  • 🛡️ 型別安全:完整的 Rust 型別定義,編譯時錯誤檢查
  • 🔧 環境變數管理:完整的環境變數處理和驗證,對應 Python utils.py
  • 📝 日誌系統:與 Python 版本相同格式的日誌系統
  • 🔍 錯誤追蹤:支援 Sentry 整合和錯誤監控
  • 🔑 完整登入流程:實現與 Python 版本相同的標準登入步驟
  • 📡 事件回調系統:原生 Rust trait 系統,支援市場資料、訂單和系統事件回調

📦 安裝

從 crates.io 安裝 (推薦)

在您的 Cargo.toml 中添加:

[dependencies]
# 基本版本
rshioaji = "0.4.10"

# 啟用高效能功能 (推薦)
rshioaji = { version = "0.4.10", features = ["speed"] }

# 啟用所有功能 + 事件回調
rshioaji = { version = "0.4.10", features = ["speed"] }

可用功能 (Features)

功能 描述 用途
speed 🚀 高效能時間處理 等效於 Python shioaji[speed],提升日期時間處理效能
sentry 🔍 Sentry 錯誤追蹤 支援 Sentry 錯誤監控和追蹤功能

🎯 新功能 v0.4.10 - 完整回調系統 + Non-blocking 設計

重大功能更新 (v0.4.9 → v0.4.10)

本版本實現了完整的回調系統,所有回調皆為 Non-blocking 設計:

  • ✅ v0.4.10 新增:7 個即時資料回調方法 + 4 個方法 cb 參數
  • ⚡ Non-blocking:即時資料透過 Solace 後台線程,方法回調透過 tokio::spawn
  • 📚 文檔改進:新增生產環境推薦模式範例

v0.4.10 核心功能

新增交易管理功能

  • 訂單管理: update_order(), cancel_order(), list_trades()
  • 帳戶管理: list_accounts() - 列出所有可用帳戶
  • 部位管理: list_positions() - 查詢持倉資訊
  • 類型完善: 新增 Unit 枚舉,擴展 from_string 方法

架構改進

  • 程式碼品質: 修正所有編譯錯誤和 Clippy 警告
  • 類型安全: 完整的 Python-Rust 類型轉換系統
  • 文檔完善: 新增實現追蹤文檔和開發指南

支援的回調類型

回調類型 介面 描述 實作方式
市場資料回調 TickCallback 處理股票和期權的 tick 資料事件 Solace 後台線程
買賣價差回調 BidAskCallback 處理委買委賣價差變化事件 Solace 後台線程
報價回調 QuoteCallback 處理即時報價和綜合報價事件 Solace 後台線程
訂單回調 OrderCallback 處理訂單狀態變更和成交事件 Solace 後台線程
系統回調 SystemCallback 處理系統事件和連線狀態變化 Solace 後台線程
方法回調 (cb) Fn(T) 訂單/部位操作完成回調 tokio::spawn

回調系統特點

  • 🔧 原生 Rust Trait:完全基於 Rust trait 系統,型別安全
  • 🚀 Non-blocking 設計:所有回調皆為非阻塞實作,不影響主流程
  • 📡 多重處理器支援:可註冊多個回調處理器
  • 🛡️ 線程安全:支援多線程環境下的安全事件分發
  • 🎯 靈活組合:可選擇性實作需要的回調介面
  • 即時資料:透過 Solace 後台線程觸發,延遲極低

🔧 合約存取架構改進 (2025-06-25)

重要變更:get_system_contract 方法

  • 方法重新命名create_system_contractget_system_contract
  • 語意更準確:反映實際功能(取得現有合約,而非建立新合約)
  • 架構對齊:與 Python shioaji 的 api.Contracts.Stocks["2330"] 模式一致

新增安全檢查

  • 必要條件:使用前必須先呼叫 login() 方法
  • 錯誤處理:未登入時回傳清楚的錯誤訊息
  • 安全性:防止在未認證狀態下存取合約資料
// ❌ 錯誤用法:未登入就嘗試存取合約
let client = Shioaji::new(false, HashMap::new())?;
client.place_order(contract, order).await?; // 會失敗並提示需要登入

// ✅ 正確用法:先登入再存取合約
let client = Shioaji::new(false, HashMap::new())?;
client.init().await?;
client.login(&api_key, &secret_key, true, 30, None, false, 30000).await?;
client.place_order(contract, order).await?; // 成功,取得真實 Python 合約實例

編譯選項

# 基本編譯
cargo build

# 啟用高效能功能
cargo build --features speed

# 生產環境編譯 (推薦)
cargo build --release --features speed

支援平台

  • macOS ARM64 (macosx_arm)
  • Linux x86_64 (manylinux_x86_64)

開發環境需求

系統需求

  • Rust 1.75+
  • Python 3.13+ (完整支援並測試驗證)
  • 系統安裝的 shioaji 套件:pip install shioaji

開發依賴

  • PyO3 0.20+
  • tokio 1.0+
  • serde 1.0+

🚀 快速開始

1. 安裝套件

# 創建新的 Rust 專案
cargo new my-trading-app
cd my-trading-app

# 編輯 Cargo.toml 添加依賴
[dependencies]
rshioaji = { version = "0.4.10", features = ["speed"] }
tokio = { version = "1.0", features = ["full"] }

2. 基本使用範例

use rshioaji::{Shioaji, Exchange, Action, OrderType, Order, StockPriceType};
use std::collections::HashMap;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 初始化環境
    dotenvy::dotenv().ok();
    env_logger::init();
    
    // 創建客戶端
    let client = Shioaji::new(false, HashMap::new())?; // false = 真實模式
    client.init().await?;
    
    // 🔑 重要:必須先登入才能存取合約
    // get_system_contract 方法會檢查登入狀態
    let api_key = std::env::var("SHIOAJI_API_KEY")?;
    let secret_key = std::env::var("SHIOAJI_SECRET_KEY")?;
    
    let accounts = client.login(
        &api_key, 
        &secret_key, 
        true,    // fetch_contract: 下載合約資料
        30,      // contracts_timeout
        None,    // contracts_cb
        false,   // subscribe_trade
        30000    // receive_window
    ).await?;
    
    println!("✅ 登入成功!帳戶數量: {}", accounts.len());
    
    // ✅ 登入後可以安全存取合約
    // get_system_contract 會從 api.Contracts.Stocks["2330"] 取得真實 Python 實例
    let stock = client.create_stock("2330", Exchange::TSE);
    let order = Order::new(Action::Buy, 500.0, 1000, OrderType::ROD, StockPriceType::LMT);

    // 下單 - 支援 timeout 和 non-blocking callback
    match client.place_order(
        stock.contract,
        order,
        Some(30000),  // timeout: 30 秒
        Some(|trade: Trade| {  // cb: non-blocking 回調
            println!("📞 下單回調觸發!交易 ID: {}", trade.order_id);
        })
    ).await {
        Ok(trade) => println!("下單成功!交易 ID: {}", trade.order_id),
        Err(e) => println!("下單失敗:{}", e),
    }
    
    // 登出
    client.logout().await?;
    
    Ok(())
}

🛡️ 安全檢查重點

// ❌ 錯誤:未登入就嘗試下單
let client = Shioaji::new(false, HashMap::new())?;
client.place_order(contract, order).await?; 
// Error: "Must login first before accessing contracts. Please call login() method."

// ✅ 正確:先登入再操作
let client = Shioaji::new(false, HashMap::new())?;
client.init().await?;
client.login(&api_key, &secret_key, true, 30, None, false, 30000).await?;
client.place_order(contract, order).await?; // 成功

3. 事件回調系統範例 (新功能)

use rshioaji::{
    Shioaji, TickCallback, BidAskCallback, QuoteCallback, OrderCallback, SystemCallback,
    TickSTKv1, TickFOPv1, BidAskSTKv1, BidAskFOPv1, QuoteSTKv1, OrderState, Exchange
};
use std::sync::Arc;

// 實作事件處理器
#[derive(Debug)]
struct MyEventHandler {
    name: String,
}

impl TickCallback for MyEventHandler {
    fn on_tick_stk_v1(&self, exchange: Exchange, tick: TickSTKv1) {
        println!("📈 [{}] 股票 Tick: {} @ {:?} - 價格: {}", 
                self.name, tick.code, exchange, tick.close);
    }
    
    fn on_tick_fop_v1(&self, exchange: Exchange, tick: TickFOPv1) {
        println!("📊 [{}] 期權 Tick: {} @ {:?} - 價格: {}", 
                self.name, tick.code, exchange, tick.close);
    }
}

impl OrderCallback for MyEventHandler {
    fn on_order(&self, order_state: OrderState, data: serde_json::Value) {
        println!("📋 [{}] 訂單更新: {:?}", self.name, order_state);
    }
}

impl SystemCallback for MyEventHandler {
    fn on_event(&self, event_type: i32, code: i32, message: String, details: String) {
        println!("🔔 [{}] 系統事件: {}", self.name, message);
    }
    
    fn on_session_down(&self) {
        println!("⚠️ [{}] 連線中斷!", self.name);
    }
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = Shioaji::new(true, HashMap::new())?;
    client.init().await?;
    
    // 建立事件處理器
    let handler = Arc::new(MyEventHandler { name: "主處理器".to_string() });
    
    // 註冊各種回調
    client.register_tick_callback(handler.clone()).await;
    client.register_order_callback(handler.clone()).await;
    client.register_system_callback(handler.clone()).await;
    
    // 設定回調系統
    client.setup_callbacks().await?;
    
    println!("✅ 事件回調系統已啟動");
    
    Ok(())
}

從源碼編譯 (開發者)

1. 克隆專案

git clone https://github.com/stevelo/rshioaji
cd rshioaji

2. 編譯專案

一般編譯(動態連結)

cargo build --release

高效能編譯(推薦)

# 啟用 speed 功能,等效於 shioaji[speed]
cargo build --release --features speed

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_KEYAPI_KEY - API 金鑰
  • SHIOAJI_SECRET_KEYSECRET_KEY - 密鑰
  • SHIOAJI_SIMULATIONSIMULATION - 模擬模式 (true/false)
系統需求
  • 必要: 系統安裝的 shioaji 套件:pip install shioaji
  • 檢查: 確認 Python 可以正確導入 shioaji 模組
日誌設定 (對應 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 URL
  • LOG_SENTRY - 是否啟用 Sentry (True/False)
  • SENTRY_LOG_LEVEL - Sentry 日誌等級 (DEBUG/INFO/WARNING/ERROR/CRITICAL)
測試設定
  • LEGACY_TEST - 遺留測試模式 (0=停用, 1=啟用)

4. 執行程式

# 基本執行
cargo run

# 啟用高效能功能
cargo run --features speed

# 生產環境執行
cargo run --release --features speed

📚 使用範例

完整交易範例

use rshioaji::{Shioaji, Config, Exchange, Action, OrderType, StockPriceType, Order, Trade};
use std::collections::HashMap;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 載入配置
    let config = Config::from_env()?;
    let client = Shioaji::new(config.simulation, HashMap::new())?;
    client.init().await?;

    // 登入
    let accounts = client.login(&config.api_key, &config.secret_key, true, 30, None, false, 30000).await?;

    // 創建股票合約
    let stock = client.create_stock("2330", Exchange::TSE);

    // 創建買單
    let order = Order::new(
        Action::Buy,
        100.0,  // 價格
        1000,   // 數量
        OrderType::ROD,
        StockPriceType::LMT,
    );

    // 下單 (注意:這會實際下單,請謹慎使用)
    // 支援 timeout 和 Non-blocking cb 參數
    let trade = client.place_order(
        stock.contract,
        order,
        Some(30000),  // timeout: 30 秒
        Some(|t: Trade| {  // Non-blocking 回調
            println!("📞 下單回調 (Non-blocking): {:?}", t.order_id);
        })
    ).await?;
    println!("委託成功:{:?}", trade);

    Ok(())
}

方法回調參數範例 (Non-blocking)

所有訂單和部位管理方法都支援 cb (callback) 參數,使用 tokio::spawn 實現非阻塞執行:

use rshioaji::{Shioaji, Trade, StockPosition};

// place_order - 下單回調
client.place_order(
    contract,
    order,
    Some(30000),  // timeout
    Some(|trade: Trade| {
        println!("📞 下單成功!交易 ID: {}", trade.order_id);
    })
).await?;

// update_order - 改價/改量回調
client.update_order(
    trade,
    Some(550.0),  // 新價格
    None,         // 數量不變
    Some(30000),  // timeout
    Some(|updated_trade: Trade| {
        println!("📞 改價成功!新價格: {}", updated_trade.order.price);
    })
).await?;

// cancel_order - 取消委託回調
client.cancel_order(
    trade,
    Some(30000),  // timeout
    Some(|cancelled_trade: Trade| {
        println!("📞 取消成功!狀態: {:?}", cancelled_trade.status);
    })
).await?;

// list_positions - 查詢部位回調
client.list_positions(
    account,
    Some(Unit::Common),  // 整股
    Some(30000),         // timeout
    Some(|positions: Vec<StockPosition>| {
        println!("📞 部位查詢完成!共 {} 筆", positions.len());
    })
).await?;

重要: 所有 cb 回調皆使用 tokio::spawn 非阻塞執行,不會阻塞主流程。

CLI 工具使用 (從源碼)

# 編譯 CLI 工具
cargo build --bin rshioaji-cli --release

# 查看幫助
./target/release/rshioaji-cli --help

# 查詢股票資料
./target/release/rshioaji-cli --stock 2330

# 啟用除錯模式
./target/release/rshioaji-cli --debug --stock 2330

Docker 部署

建置 Docker 映像檔

# Linux x86_64 平台(推薦生產環境 - 162MB)
./docker-build.sh linux

# Python 3.13 原生支援版本(200MB)
docker build -t rshioaji:python312 -f Dockerfile.python .

# Alpine Linux(超輕量版本 - 50MB)
./docker-build.sh alpine

# macOS ARM64 平台(開發環境 - 100MB)
./docker-build.sh macos

# 手動建置
docker build -t rshioaji:latest .                    # 輕量版 162MB (Python 3.11)
docker build -t rshioaji:python313 -f Dockerfile.python . # Python 3.13 200MB
docker build -t rshioaji:alpine -f Dockerfile.alpine . # 超輕量 50MB
docker build -t rshioaji:macos -f Dockerfile.macos .   # macOS ARM64

執行容器

# 使用 .env 檔案執行(推薦 - Python 3.13)
docker run --rm -v $(pwd)/.env:/app/.env:ro rshioaji:python313 --stock 2330

# 使用 .env 檔案執行(Python 3.11 輕量版)
docker run --rm -v $(pwd)/.env:/app/.env:ro rshioaji:latest --stock 2330

# 使用環境變數執行(Python 3.13)
docker run --rm \
  -e SHIOAJI_API_KEY=your_key \
  -e SHIOAJI_SECRET_KEY=your_secret \
  -e SHIOAJI_SIMULATION=false \
  rshioaji:python313 --stock 2330 --debug

# Alpine 超輕量版本
docker run --rm -v $(pwd)/.env:/app/.env:ro rshioaji:alpine --stock 2330

# 互動模式(Python 3.13)
docker run --rm -it -v $(pwd)/.env:/app/.env:ro rshioaji:python313 bash

# 背景執行(Python 3.12)
docker run -d --name rshioaji-trader \
  -v $(pwd)/.env:/app/.env:ro \
  rshioaji:python313 --stock 2330 --debug

Docker Compose 部署

創建 docker-compose.yml(Python 3.13 版本):

version: '3.8'
services:
  rshioaji:
    build:
      context: .
      dockerfile: Dockerfile.python  # 使用 Python 3.13
    env_file:
      - .env
    command: ["--stock", "2330", "--debug"]
    restart: unless-stopped
    volumes:
      - ./logs:/app/logs

或使用預建映像:

version: '3.8'
services:
  rshioaji:
    image: rshioaji:python313
    env_file:
      - .env
    command: ["--stock", "2330", "--debug"]
    restart: unless-stopped
    volumes:
      - ./logs:/app/logs

執行:

docker-compose up -d
docker-compose logs -f rshioaji

Docker 特點

  • 🏔️ 超輕量設計:200MB Python 3.13 | 180MB 輕量版 | 70MB 超輕量版 (減少 88% 大小)
  • 🐧 多平台支援:Linux x86_64、Alpine Linux 和 macOS ARM64
  • 🐍 Python 3.13:原生支援 Python 3.13 和 PyO3 橋接整合 (推薦)
  • 📦 多階段建置:分離編譯環境與運行環境,大幅減少映像檔大小
  • 🔐 安全配置:支援 .env 檔案和環境變數,API 憑證自動遮罩
  • 快速部署:一鍵建置與執行,容器啟動速度快
  • 🛡️ 隔離環境:避免 macOS 安全性限制,提供穩定運行環境
  • 🚀 生產就緒:多種部署模式,支援 Docker Compose 和容器編排

映像檔大小對比

版本 大小 用途 Python 支援
rshioaji:python313 200MB Python 3.13 推薦 ✅ 原生 3.13 支援
rshioaji:latest 180MB Python 3.13 輕量版 ✅ 完整支援
rshioaji:alpine 70MB 資源受限環境 ⚠️ 基本支援
rshioaji:macos 120MB 開發環境 ✅ 完整支援

🔧 環境變數配置

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://[email protected]/project-id
LOG_SENTRY=True
SENTRY_LOG_LEVEL=ERROR

# 測試設定
LEGACY_TEST=0

使用方式

use rshioaji::{EnvironmentConfig, init_logging};

// 載入環境變數配置
let env_config = EnvironmentConfig::from_env();

// 驗證配置
if let Err(e) = env_config.validate() {
    eprintln!("環境變數配置錯誤: {}", e);
    return Ok(());
}

// 初始化日誌系統
init_logging(&env_config)?;
log::info!("環境配置: {}", env_config.summary());

📝 日誌系統

日誌格式

日誌格式與 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 功能
cargo build --features sentry

# 執行時啟用 Sentry
LOG_SENTRY=True SENTRY_URI=your_sentry_dsn cargo run --features sentry

📚 詳細文件

📖 API 使用指南

基本配置

use rshioaji::{Shioaji, Config};
use std::collections::HashMap;

// 方法 1: 從環境變數載入 (推薦)
let config = Config::from_env()?;
let client = Shioaji::new(config.simulation, HashMap::new())?;

// 方法 2: 手動配置
let client = Shioaji::new(true, HashMap::new())?; // true = 模擬模式

市場資料操作

use rshioaji::{Exchange, QuoteType};

// 創建合約
let stock = client.create_stock("2330", Exchange::TSE);

// 訂閱即時報價
client.subscribe(stock.contract.clone(), QuoteType::Tick).await?;

// 取得歷史 K 線
let kbars = client.kbars(stock.contract, "2024-01-01", "2024-01-31").await?;

下單操作

use rshioaji::{Action, OrderType, StockPriceType, Order};

// 創建委託單
let order = Order::new(
    Action::Buy,           // 買賣別
    100.0,                // 價格
    1000,                 // 數量
    OrderType::ROD,       // 委託類型
    StockPriceType::LMT,  // 價格類型
);

// 送出委託
let trade = client.place_order(stock.contract, order).await?;

專案結構

rshioaji/
├── src/                    # Rust 原始碼
│   ├── lib.rs             # 程式庫入口
│   ├── main.rs            # 可執行檔入口
│   ├── client.rs          # 主要客戶端實作
│   ├── bindings.rs        # Python FFI 綁定
│   ├── platform.rs        # 平台檢測邏輯
│   ├── error.rs           # 錯誤處理
│   └── types/             # 型別定義
├── examples/              # 範例程式
├── tests/                 # 測試檔案
├── Dockerfile             # Docker 配置
├── .dockerignore          # Docker 忽略檔案
└── docker-build.sh        # Docker 建置腳本

平台檢測

rshioaji 會自動檢測執行平台並確認系統 shioaji 安裝:

use rshioaji::platform::Platform;

let platform = Platform::detect();
println!("檢測到平台: {:?}", platform);

// 驗證系統 shioaji 安裝
platform.validate_system_shioaji()?;

環境設定

系統要求

安裝系統 shioaji

# 安裝 Python shioaji 套件
pip install shioaji

# 驗證安裝
python3 -c "import shioaji; print('✅ 系統 shioaji 安裝成功')"

純系統整合

v0.2.0+ 使用純系統 shioaji 整合,無需設定環境變數:

# 直接執行,自動檢測系統 shioaji
./target/release/rshioaji-cli

# 或使用 cargo
cargo run --release --features speed

除錯

啟用日誌

export RUST_LOG=debug
cargo run --example simple_test

檢查系統安裝

# 確認系統 shioaji 安裝
python3 -c "import shioaji; s=shioaji.Shioaji(); print('✅ 系統 shioaji 正常')"

# 檢查 Python 環境
which python3
python3 --version

常見問題

Q: 出現 "Platform validation failed" 錯誤

A: 請確認系統已安裝 shioaji:pip install shioaji,並確認可以正常導入。

Q: Docker 容器無法啟動

A: 確認使用正確的 Dockerfile(Linux 用 Dockerfile,macOS 用 Dockerfile.macos)。

Q: Python 3.13 模組載入錯誤

A: 確認系統 Python 環境正確且已安裝 shioaji:pip install shioaji

Q: Python 模組匯入錯誤

A: 檢查系統 Python 環境,確認 shioaji 正確安裝:python3 -c "import shioaji"

授權

此專案採用 MIT 和 Apache 2.0 雙重授權。

貢獻

歡迎提交 Issue 和 Pull Request!

開發者聯絡

如有任何問題或建議,請聯絡:

🎯 進階使用

功能開關

# 啟用高效能模式 (推薦生產環境)
cargo build --release --features speed

# 基本編譯 (純系統整合)
cargo build --release

效能優化

// 使用 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 功能提升處理效能

安裝驗證

# 創建測試專案
cargo new test-rshioaji && cd test-rshioaji

# 添加依賴
echo 'rshioaji = { version = "0.4.10", features = ["speed"] }' >> Cargo.toml

# 編譯測試
cargo build

🔗 相關連結

📊 套件資訊

[dependencies]
rshioaji = "0.4.10"  # 最新版本 (支援事件回調)
  • 版本: 0.4.10
  • 授權: MIT OR Apache-2.0
  • 平台: macOS ARM64, Linux x86_64
  • Rust 版本: 1.75+

⚠️ 重要聲明:

  • 此套件已通過完整功能驗證並發佈至 crates.io
  • 正式交易前請充分測試,開發者不承擔任何交易損失責任
  • 需要有效的永豐金證券 API 金鑰才能正常運作
  • 請向永豐金證券申請相關授權並遵守其使用條款

About

No description, website, or topics provided.

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages