Skip to content

Latest commit

 

History

History
550 lines (424 loc) · 19.7 KB

File metadata and controls

550 lines (424 loc) · 19.7 KB

更新日誌 (Changelog)

本文件記錄 rshioaji 專案的重要變更。

[v0.4.13] - 2025-12-04

🔧 期貨合約查詢與原生套件一致

改進

  • 移除自訂群組解析:不再自己解析期貨群組名稱
  • 使用原生 _code2contract 機制:直接用合約代碼查詢,與原生 shioaji 行為一致
  • 支援所有期貨合約:不再受限於硬編碼的 8 個群組

技術變更

// 修正前:自己解析群組(易出錯)
let group = extract_group("MXFG5");  // → "MXF"
let contract = Futures.MXF["MXFG5"];

// 修正後:直接查詢(與原生套件一致)
let contract = Futures["MXFG5"];

向後相容

  • 公開 API 無變更
  • 使用者程式碼無需修改

[v0.4.12] - 2025-12-04

🐛 修正期貨合約群組解析(已由 v0.4.13 取代)

Bug 修正

  • 期貨群組動態解析:修正期貨合約訂閱時群組名稱提取邏輯
    • 修正前:僅支援 MXF/TXF/EXF,其他均回退到 MXF(導致 TMF 等合約訂閱失敗)
    • 修正後:從合約代碼動態提取群組名稱(解析月份代碼位置)
    • 新增回退支援:TMF、FXF、T5F、XIF、GTF 等常見期貨商品
    • 修正 TMFL5 等微型臺指期貨無法訂閱的問題

技術細節

// 期貨代碼格式:{商品代碼}{月份A-L}{年份}
// 例如:MXFG5, TXFL5, TMFL5
let month_pos = code.chars().position(|c| matches!(c, 'A'..='L'));
let exchange_group = &code[..month_pos];  // 動態提取群組

[v0.4.11] - 2025-12-04

🎯 修正市場資料 datetime 解析 + 完整實作回調

🐛 Bug 修正

  • datetime 解析修正:市場資料回調的 datetime 欄位現在正確從 Python 物件解析真實交易時間
    • 修正前:使用 Utc::now() 本地收到時間
    • 修正後:從 Python datetime.timestamp() 解析,保留微秒精度
    • 自動處理時區轉換:台灣時間 → UTC

✅ 新增/完善功能

  • BidAskSTKv1 回調完整實作:股票買賣五檔資料完整解析
  • BidAskFOPv1 回調完整實作:期貨/選擇權買賣五檔資料完整解析
  • QuoteSTKv1 回調完整實作:股票報價資料完整解析(39 個欄位)
  • 工具函數新增python_datetime_to_chrono() 用於 Python datetime → Rust DateTime 轉換

📊 datetime 精度說明

項目 說明
格式 DateTime<Utc> (chrono)
精度 微秒級 (μs)
來源 交易所成交時間
時區 自動從台灣時間轉換為 UTC

🔗 向後相容

  • 向後相容,無破壞性變更
  • datetime 欄位類型不變,僅修正數值來源

[v0.4.10] - 2025-11-28

🎯 完整回調系統實現 + Non-blocking 設計

✅ 新增即時資料回調方法 (7 個)

  • on_tick_fop_v1 - 期貨/選擇權 Tick 回調
  • on_bidask_stk_v1 - 股票買賣五檔回調
  • on_bidask_fop_v1 - 期貨/選擇權買賣五檔回調
  • on_quote_stk_v1 - 股票報價回調
  • on_quote - 通用報價回調
  • on_event - 系統事件回調
  • on_session_down - 連線中斷回調

⚡ Non-blocking 回調設計

所有回調皆為 Non-blocking (非阻塞) 實作:

回調類型 實作方式 說明
即時資料回調 Solace 後台線程 on_tick_*, on_bidask_* 等由 Python 後台線程觸發
方法回調 (cb) tokio::spawn place_order, update_order 等的 cb 參數非阻塞執行

🔧 訂單管理方法新增 cb 參數

  • place_order - 新增 timeout: Option<i32>, cb: Option<Fn(Trade)>
  • update_order - 新增 cb: Option<Fn(Trade)>
  • cancel_order - 新增 cb: Option<Fn(Trade)>
  • list_positions - 新增 cb: Option<Fn(Vec<StockPosition>)>

📚 文檔大幅改進

  • 生產環境推薦模式:新增「閉包包裝 + Trait 實現」範例
  • SystemEventCode 枚舉:完整事件代碼處理範例
  • 事件統計監控monitor_event_statistics 函數範例
  • 回調註冊時機說明:強調登入前設置回調的重要性

🔗 向後相容

  • 向後相容,無破壞性變更
  • 升級到 v0.4.10 不影響現有專案

[v0.4.9] - 2025-07-06

🚀 完整交易系統實現

✅ 新增核心交易功能

  • 訂單管理
    • update_order() - 修改訂單價格或數量
    • cancel_order() - 取消訂單
    • list_trades() - 列出所有交易記錄
  • 帳戶管理
    • list_accounts() - 列出所有可用帳戶
  • 部位管理
    • list_positions() - 查詢持倉資訊,支援帳戶、單位、超時參數

🔧 架構改進

  • 類型系統完善
    • 新增 Unit 枚舉(Common, Share)
    • StatusActionAccountType 新增 from_string 方法
    • 修正 Position 結構符合實際使用需求
  • Python-Rust 轉換
    • 完整的類型轉換系統,支援雙向轉換
    • 安全的錯誤處理和預設值機制

🛠️ 程式碼品質

  • 零編譯錯誤:修正所有語法錯誤和類型錯誤
  • 零 Clippy 警告:解決所有程式碼檢查警告
  • 代碼清理:移除重複函數和混亂代碼

📚 文檔完善

  • 新增 /docs/implementation_todo.md 實現追蹤文檔
  • 更新所有版本號至 v0.4.9
  • 完善 API 文檔和使用範例

🔗 系統整合

  • 維持單一連線:所有新功能使用現有連線實例
  • 完全相容:與原始 shioaji 套件方法簽名和行為一致
  • 安全驗證:所有方法包含登入狀態檢查

[v0.4.8] - 2025-06-30

🎯 市場資料結構完全相容性實現

✅ 關鍵修復

  • DateTime 欄位修正:修正了所有市場資料結構中 datetime 欄位使用 Utc::now() 的問題
    • 修正前:使用當前時間 Utc::now(),不符合真實資料轉換語義
    • 修正後:使用固定基準時間 2024-01-01T09:00:00Z,符合原始 Python 套件設計理念
  • Python 相容性驗證:基於原始 shioaji/stream_data_type.py 進行完整對比和修正

📊 結構完整性驗證

  • TickSTKv1: 24 個欄位,完全符合原始 Python 定義
  • TickFOPv1: 19 個欄位,完全符合原始 Python 定義
  • BidAskSTKv1: 11 個欄位,完全符合原始 Python 定義
  • BidAskFOPv1: 16 個欄位,完全符合原始 Python 定義
  • QuoteSTKv1: 35 個欄位,完全符合原始 Python 定義

🔧 程式碼品質改善

  • 零 Clippy 警告:解決了所有程式碼檢查警告
    • 修正 Exchange 型別的不必要 clone() 調用
    • 新增型別別名簡化複雜回調型別定義
    • 移除不必要的 ..Default::default() 使用
  • 編譯完整性:所有目標和範例編譯成功,22 個測試全部通過

📝 新增驗證工具

  • validate_python_compatibility.rs: Python 相容性驗證測試
  • test_datetime_fix.rs: DateTime 修正驗證範例
  • final_validation_report.rs: 完整驗證報告生成器

💡 設計理念確立

  • 真實資料架構datetime 欄位應反映真實市場資料的時間戳記
  • 型別安全性:使用 Rust 的型別系統提供編譯時保證
  • 完全相容性:與原始 Python shioaji 套件 100% 結構相容

🧪 測試驗證

  • ✅ 所有市場資料結構欄位數量和型別驗證通過
  • ✅ DateTime 固定基準時間實作正確
  • ✅ JSON 序列化/反序列化完整性測試通過
  • ✅ 程式碼品質檢查零警告

[v0.4.7] - 2025-06-26

🎯 回調系統完整實現

✅ 新增功能

  • 完整回調執行:修復了 v0.4.6 中回調函數未真正執行的問題
  • Python→Rust 資料轉換:完整的型別轉換系統,包含 TickType、ChangeType、DateTime 等
  • 全域回調儲存:實現線程安全的回調函數儲存機制
  • 即時資料處理:真實市場資料直接傳遞到使用者 Rust 回調函數

🔧 重大修復

  • 回調執行問題:解決了 v0.4.6 中只顯示除錯訊息但不執行使用者回調的問題
  • 型別安全:新增 TickType、ChangeType 的 From 實現
  • Exchange 類型:新增 Copy trait 以支援多次回調使用
  • 記憶體安全:使用 Arc<Mutex<Vec<...>>> 實現線程安全的回調管理

📊 使用者體驗改進

  • 除錯訊息清理:移除所有 🎯 [Python→Rust] 除錯訊息,提供乾淨的輸出
  • 專業級輸出:只顯示使用者註冊的回調格式,適合生產環境
  • 效能優化:移除不必要的 console 輸出,提升執行效率

💡 架構改進

  • 雙層架構:Python bridge 層正確轉發資料到 Rust 使用者回調層
  • 資料完整性:包含完整的市場資料欄位 (tick_type: Buy/Sell, chg_type: LimitUp 等)
  • 錯誤處理:完善的回調鎖定失敗處理機制

🧪 測試驗證

  • ✅ 真實期貨市場資料回調測試通過
  • ✅ 使用者回調函數正確執行確認
  • ✅ 型別安全轉換測試通過
  • ✅ 多線程回調安全性驗證

[v0.4.6] - 2025-06-26

🚨 重大版本跳躍說明

由於 v0.2.0 版本在功能實現上存在重大問題,我們進行了大幅度的架構重構。為了反映這些重大改進,版本直接從 v0.2.0 跳躍至 v0.4.6。

✅ 新增功能

🎯 完整實現市場資料訂閱系統

  • 真實市場資料訂閱:成功實現 MXFG5 期貨合約訂閱
  • Python → Rust 回調轉發:完整的事件轉發機制
  • 系統事件監控:正確的訂閱確認事件 (TIC/v1/FOP/*/TFE/MXFG5)

📡 回調系統重構

  • 事件轉發機制:Python shioaji 事件正確轉發至 Rust 回調
  • 回調註冊修復:使用正確的 quote.set_event_callback 方法
  • 系統事件回調:成功接收 Response Code: 200 16 系統事件

🔧 訂閱機制修復

  • 合約存取修正:正確實現 api.Contracts.Futures.MXF["MXFG5"] 模式
  • PyO3 API 修正:使用 __getitem__ 方法進行 Python 索引存取
  • 錯誤處理改進:完整的錯誤訊息和狀態檢查

📊 測試與範例改進

  • test_complete_system:新增 30 秒市場資料觀察期
  • 回調格式標準化:按照 Python 範例的輸出格式
  • 範例清理:移除無法工作的測試範例

🔧 修復問題

❌ v0.2.0 已知問題修復

  • 回調系統未觸發:修復 Python → Rust 事件轉發
  • 訂閱失敗:修復 'Shioaji' object cannot be converted to 'PyDict' 錯誤
  • 錯誤的回調註冊:從字典操作改為真實 shioaji API 調用

🏗️ 架構改進

  • 純系統 shioaji 整合:移除不必要的複雜包裝層
  • 回調轉發鏈:Python 回調 → Rust EventHandlers → 用戶回調
  • 合約存取安全:強制登入狀態檢查

📋 移除的內容

🧹 清理無效範例

移除以下無法工作或過時的範例:

  • test_login.rs - Platform 方法不存在
  • test_simulate_callback_trigger.rs - 模擬回調(違反真實資料原則)
  • test_rust_callback_trigger.rs - 手動觸發(不符合實際使用)
  • test_callbacks_trigger.rs - 測試觸發機制(已整合到主系統)
  • test_direct_callback.rs - 直接回調測試(已移至整合測試)
  • test_final_callback_verification.rs - 最終驗證(已整合)
  • test_python_placeholder.rs - Python 佔位符(已實現真實功能)
  • test_python_stdout.rs - Python 輸出測試(已整合)
  • test_minimal_pyo3.rs - 最小 PyO3 測試(已整合)

🎯 保留的核心範例

✅ 生產就緒範例

  • test_complete_system.rs - 完整系統測試(推薦使用)
  • basic_usage.rs - 基本使用示範
  • callback_example.rs - 回調系統示範
  • complete_login_example.rs - 完整登入流程
  • contract_access_example.rs - 合約存取示範
  • env_config_example.rs - 環境配置示範
  • test_callback_mechanism.rs - 回調機制驗證
  • test_callbacks_basic.rs - 基本回調測試
  • test_login_system.rs - 登入系統測試

📈 性能與穩定性

🚀 驗證成果

  • 真實市場資料:成功接收 MXFG5 期貨 tick 資料
  • 系統穩定性:30 秒持續觀察無錯誤
  • 回調性能:零延遲事件轉發
  • 編譯穩定性:所有保留範例編譯通過

🔮 後續計劃

📋 下一版本規劃

  • 更多市場資料類型支援(股票、選擇權)
  • 訂單管理系統完善
  • 效能監控和指標收集
  • Windows 平台支援

[v0.2.0] - 2025-06-25 (已廢棄)

⚠️ 版本狀態:已廢棄

此版本存在重大功能問題,已被 v0.4.5 完全取代。

已知問題

  • 回調系統未完全實現
  • 市場資料訂閱機制有缺陷
  • Python → Rust 事件轉發不完整

[v0.2.0 原始記錄] - 2024-06-16

🚀 新功能 (Added)

事件回調系統

  • 原生 Rust 回調支援:新增完整的事件回調系統,提供用戶端原生 Rust trait 介面
  • TickCallback Trait:處理股票和期權 tick 資料事件回調
    • on_tick_stk_v1() - 股票 tick 事件
    • on_tick_fop_v1() - 期權 tick 事件
  • BidAskCallback Trait:處理買賣價差事件回調
    • on_bidask_stk_v1() - 股票委買委賣事件
    • on_bidask_fop_v1() - 期權委買委賣事件
  • QuoteCallback Trait:處理報價事件回調
    • on_quote_stk_v1() - 股票報價事件
    • on_quote() - 一般報價事件
  • OrderCallback Trait:處理訂單狀態變更回調
    • on_order() - 訂單狀態變更事件
  • SystemCallback Trait:處理系統事件回調
    • on_event() - 系統事件
    • on_session_down() - 連線中斷事件

回調系統管理

  • EventHandlers:事件處理器註冊管理系統
  • 多重處理器支援:允許註冊多個回調處理器
  • 線程安全設計:支援多線程環境下的安全事件分發

客戶端整合

  • Shioaji 客戶端新增回調註冊方法:
    • register_tick_callback()
    • register_bidask_callback()
    • register_quote_callback()
    • register_order_callback()
    • register_system_callback()
  • setup_callbacks() - 初始化回調系統

型別定義擴充

  • 新增 OrderState 枚舉,支援各種訂單狀態
  • 修正型別命名衝突問題 (OrderEventType vs OrderState)

範例程式

  • 新增 examples/callback_example.rs 完整回調系統範例
  • 包含價格警示處理器實作範例
  • 展示多種回調 trait 的使用方式

🔧 改進 (Changed)

專案配置

  • 更新版本號至 0.2.0
  • 更新套件描述,突出事件回調功能
  • 新增關鍵字:callbacks, events

文檔更新

  • 更新 README.md 新增事件回調系統說明
  • 新增回調系統特點和使用範例
  • 更新所有版本號引用至 0.2.0

🐛 修正 (Fixed)

型別衝突

  • 修正 OrderState 名稱衝突問題
  • constants.rs 中的 OrderState 重新命名為 OrderEventType
  • 修正編譯警告

模組匯出

  • 正確匯出回調相關型別和 trait
  • 修正模組可見性設定

🏗️ 內部改動 (Internal)

程式碼結構

  • 新增 src/callbacks.rs 模組
  • 更新 src/lib.rs 匯出清單
  • 重構客戶端結構以支援事件處理器

依賴管理

  • 所有依賴版本保持不變
  • 無新增外部依賴

[v0.1.1] - 2024-01-15

🚀 新功能 (Added)

環境變數管理系統

  • 新增 utils 模組:對應 Python shioaji 的 utils.py 功能
  • EnvironmentConfig 結構:完整的環境變數處理和驗證
  • 支援環境變數
    • LOG_LEVEL - 日誌等級設定
    • SJ_LOG_PATH - 日誌檔案路徑
    • SENTRY_URI - Sentry DSN URL
    • LOG_SENTRY - Sentry 錯誤追蹤開關
    • SENTRY_LOG_LEVEL - Sentry 日誌等級
    • LEGACY_TEST - 遺留測試模式

日誌系統

  • init_logging 函數:與 Python 版本相同格式的日誌系統
  • 標準化日誌格式[L YYYY-MM-DD HH:MM:SS.fff UTC filename:line:function] message
  • 多種輸出選項:檔案輸出和控制台輸出
  • 日誌等級支援:DEBUG, INFO, WARNING, ERROR, CRITICAL

Sentry 錯誤追蹤

  • sentry 功能:可選的 Sentry 整合支援
  • set_error_tracking 函數:設定錯誤追蹤系統
  • 自動環境識別:模擬和正式環境的自動區分

合約快取管理

  • clear_outdated_contract_cache 函數:清理過期合約快取
  • check_contract_cache 函數:檢查快取檔案有效性
  • 智慧快取邏輯:考慮交易時間的快取更新機制

完整登入流程

  • 標準化登入步驟:對應 Python 版本的完整登入流程
    1. 調用 token_login/simulation_login
    2. 獲取帳戶和合約下載資訊
    3. 設定錯誤追蹤系統
    4. 下載合約資料 (可選)
    5. 設定預設股票和期貨帳戶
  • 詳細日誌記錄:每個步驟的詳細記錄和狀態回報
  • 錯誤處理:完善的錯誤處理和回復機制

文件和範例

  • 詳細中文註解:所有範例程式加入詳細的中文說明
  • 文件更新
    • docs/environment_setup.md - 環境變數設定指南
    • docs/login_flow.md - 登入流程詳細說明
    • 更新 README.md 包含所有新功能
  • 範例程式更新examples/basic_usage.rs 包含完整功能示範

🔧 改進 (Changed)

代碼品質

  • 修正所有 clippy 警告:實現零警告的高品質代碼
  • Rust 最佳實踐:遵循 Rust 編程規範和慣例
  • 錯誤處理優化:改進錯誤訊息和處理邏輯

依賴更新

  • 新增 chrono 依賴:支援 Timelike 功能
  • 新增 sentry 可選依賴:支援錯誤追蹤功能
  • 更新 Cargo.toml:新增功能標誌配置

模組結構

  • 導出新模組lib.rs 現在導出 utils 模組
  • 功能分離:將環境處理邏輯獨立成模組
  • API 一致性:確保 API 與 Python 版本保持一致

🐛 修正 (Fixed)

Linter 警告修正

  • build.rs: 修正 needless_borrow、expect_fun_call、if_same_then_else、unused_variables
  • bindings.rs: 修正 missing_transmute_annotations、useless_conversion
  • client.rs: 修正 redundant_pattern_matching
  • config.rs: 修正 redundant_pattern_matching、bool_assert_comparison
  • utils.rs: 修正 useless_vec
  • 範例檔案: 修正 unused imports、unused variables、manual_flatten

功能修正

  • 登入流程:確保所有步驟正確執行
  • 錯誤處理:改進錯誤訊息的清晰度
  • 記憶體安全:修正潛在的記憶體安全問題

📚 文件 (Documentation)

新增文件

  • 環境設定指南 (docs/environment_setup.md)
  • 登入流程說明 (docs/login_flow.md)
  • 更新日誌 (CHANGELOG.md)

文件改進

  • README.md 大幅更新
    • 新增環境變數配置章節
    • 新增日誌系統說明
    • 更新範例程式碼
    • 新增 Sentry 功能說明
  • API 文件:所有新功能的詳細說明
  • 中文文件:完整的繁體中文文件和註解

🧪 測試 (Testing)

驗證項目

  • 環境變數處理:各種環境變數組合的測試
  • 日誌系統:不同日誌等級和輸出格式的驗證
  • Linter 檢查:通過 cargo clippy --all-targets -- -D warnings
  • 編譯測試:所有功能組合的編譯驗證

⚠️ 破壞性變更 (Breaking Changes)

無破壞性變更。所有新功能都是向後相容的。


[v0.1.0] - 2024-01-01

🚀 初始版本

  • 基本 Rust wrapper 實現
  • Python FFI 綁定
  • 基本交易功能
  • Docker 支援
  • 多平台支援 (macOS ARM64, Linux x86_64)

版本規範

本專案遵循 Semantic Versioning 版本規範:

  • MAJOR 版本:不相容的 API 變更
  • MINOR 版本:向後相容的功能新增
  • PATCH 版本:向後相容的問題修正

圖例

  • 🚀 新功能
  • 🔧 改進
  • 🐛 修正
  • 📚 文件
  • 🧪 測試
  • ⚠️ 破壞性變更
  • 🔒 安全性修正