Skip to content

Johnny1110/futures_engine

Repository files navigation

Futures Engine




Desc

Exchange futures engine, implements by Golang.

Quick Start

Prerequisites

  • Go 1.21+
  • Make (optional, for using Makefile targets)

Installation & Development

# Clone the repository
git clone <repository-url>
cd futures_engine

# Download dependencies
go mod download

# Build the project
make build
# or
go build -o bin/futures_engine ./cmd/futures_engine

# Run the application
./bin/futures_engine

# Run with options
./bin/futures_engine --help
./bin/futures_engine --version
./bin/futures_engine --log-level debug

# Run tests
make test
# or
go test -v ./...

# Run with coverage
make coverage

# Development mode with auto-reload (requires air)
make dev

Available Make Targets

  • make build - Build the binary
  • make test - Run tests
  • make coverage - Run tests with coverage
  • make lint - Run linter (requires golangci-lint)
  • make clean - Clean build artifacts
  • make release - Build optimized release binary
  • make help - Show all available targets

Project Structure

├── cmd/futures_engine/     # Application entrypoint
├── internal/              # Private application code
│   ├── config/           # Configuration management
│   ├── logger/           # Logging utilities
│   └── version/          # Version information
├── pkg/utils/            # Public utility packages
├── docs/                 # Documentation
├── .github/workflows/    # CI/CD pipelines
├── Dockerfile           # Container configuration
├── Makefile             # Build automation
└── .golangci.yml        # Linting configuration





永續合約交易引擎核心模組設計



1. Order Management System (OMS) 訂單管理系統

職責:

  • 接收、驗證、儲存訂單
  • 訂單狀態管理(pending, partially filled, filled, cancelled)
  • 訂單類型支援(limit, market, stop-loss, take-profit)

為什麼需要:

  • 與現貨不同,永續合約的訂單需要關聯到特定倉位,並且要驗證保證金充足性。訂單不只是簡單的買賣,還涉及開倉、平倉、加倉等操作。

2. Matching Engine 撮合引擎

職責:

  • 維護多個交易對的 order book
  • 價格優先、時間優先的撮合邏輯
  • 處理不同訂單類型的撮合策略
  • 生成成交記錄(trades)

與現貨的差異:

  • 撮合時需要即時更新倉位狀態,並觸發保證金檢查。每筆成交都可能影響用戶的未實現盈虧。

3. Position Manager 倉位管理器

職責:

  • 倉位開倉、加倉、減倉、平倉邏輯
  • 計算平均開倉價格
  • 追蹤每個用戶的多空倉位
  • 倉位模式管理(單向持倉/雙向持倉)

核心概念:

  • 這是永續合約特有的模組。每個用戶可以持有多頭(long)或空頭(short)倉位,系統需要精確追蹤倉位大小、開倉均價和方向。

4. Margin System 保證金系統

職責:

  • 初始保證金(Initial Margin)計算
  • 維持保證金(Maintenance Margin)計算
  • 可用餘額計算
  • 保證金模式支援(全倉/逐倉)

理論基礎:

  • 保證金是槓桿交易的核心。初始保證金決定了用戶能開多大的倉位,維持保證金則是防止爆倉的最後防線。

5. Risk Engine 風控引擎

職責:

  • 實時監控所有倉位的風險率
  • 計算強平價格
  • 執行自動減倉(ADL)邏輯
  • 風險限額管理

為什麼重要:

  • 這是保護交易所和用戶的核心模組。需要高效地計算每個倉位的風險,並在必要時觸發強平。

6. Liquidation Engine 強平引擎

職責:

  • 執行強制平倉
  • 管理強平訂單隊列
  • 接管被強平的倉位
  • 計算並分配強平罰金

運作原理:

  • 當倉位的保證金率低於維持保證金要求時,系統會接管倉位並以市價平倉,避免穿倉(負餘額)。

7. Mark Price Engine 標記價格引擎

職責:

  • 計算標記價格(避免市場操縱)
  • 整合多個數據源的價格
  • 提供公平的強平觸發價格

設計理由:

  • 使用標記價格而非最新成交價來計算未實現盈虧和強平,可以防止市場操縱導致的不公平強平。

8. Funding Rate System 資金費率系統

職責:

  • 計算資金費率
  • 定時收取/支付資金費用
  • 維持永續合約價格錨定現貨

核心機制:

  • 這是永續合約特有的機制,通過定期的資金費用交換,使合約價格不會長期偏離現貨價格。

9. Settlement Engine 結算引擎

職責:

  • 處理已實現盈虧結算
  • 更新用戶餘額
  • 處理資金費用結算
  • 管理保險基金

重要性:

  • 確保所有的盈虧都能正確結算,並管理系統的保險基金以應對穿倉損失。

10. Insurance Fund Manager 保險基金管理器

職責:

  • 累積強平罰金
  • 覆蓋穿倉損失
  • 管理基金使用規則

存在理由:

  • 當強平無法以維持保證金價格成交時,保險基金用來覆蓋損失,保護其他用戶。

11. PnL Calculator 盈虧計算器

職責:

  • 計算未實現盈虧(Unrealized PnL)
  • 計算已實現盈虧(Realized PnL)
  • 支援不同的計算模式(Mark Price / Last Price)

計算邏輯:

  • 需要考慮開倉均價、當前價格、倉位方向和大小,並且要處理部分平倉的複雜情況。

12. Index Price Service 指數價格服務

職責:

  • 從多個現貨交易所獲取價格
  • 計算加權平均價格
  • 處理異常價格數據

設計目的:

  • 提供穩定、難以操縱的參考價格,作為標記價格計算的基礎。


依賴關係:

用戶下單 → OMS驗證 → Margin檢查 → Matching Engine撮合
                                    ↓
                               Position Manager更新倉位
                                    ↓
                               Risk Engine評估風險
                                    ↓
                               如需強平 → Liquidation Engine
                                    ↓
                               Settlement Engine結算



技術實現考量

  • 高並發處理:使用 Go 的 goroutine 和 channel 實現高效的並發處理
  • 記憶體管理:Order book 需要在記憶體中維護,但也要有持久化機制
  • 精度問題:使用 decimal 類型處理金額計算,避免浮點數精度問題
  • 延遲優化:核心撮合路徑需要極低延遲,考慮使用 lock-free 數據結構




Knowledge Repository

  1. Alice 的 BTC 永續合約交易故事
  2. 永續合約的本質:零和遊戲
  3. 精度問題


開發筆記

About

Exchange futures engine, implements by Golang.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published