跳到主要内容

配置文件完整指南

本文档详细说明了 OpenQuant 量化交易系统的配置文件格式和所有可用选项。

目录


概述

OpenQuant 使用 TOML 格式的配置文件。配置文件通常命名为 config.toml,在启动时作为参数传递

./open_quant config.toml

顶层配置

strategy_path

  • 类型: String (可选)
  • 说明: 策略文件路径
    • Python 策略:指向 .py 文件
    • Rust 策略:指向动态库文件(.dll / .so / .dylib
  • 示例:
    strategy_path = "examples/depth_imbalance_v2/strategy.py"
    # 或
    strategy_path = "target/release/libmy_strategy.so"

strategy_config_path

  • 类型: String (可选)
  • 说明: 策略专用配置文件路径,传递给策略的初始化函数,用于初始化策略的参数,支持toml、json、yaml和csv格式,不传则不使用配置文件
  • 示例:
    strategy_config_path = "examples/depth_imbalance_v2/strategy.toml"

instruments_refresh_sec

  • 类型: u64
  • 默认值: 300 (5分钟)
  • 说明: 产品信息刷新间隔(秒)
  • 示例:
    instruments_refresh_sec = 300

trader_version

  • 类型: String (仅 Python 策略)
  • 可选值: "V1" 或 "V2"
  • 默认值: "V2"
  • 说明: Python Trader API 版本(Rust 策略不使用此字段)
  • 示例:
    trader_version = "V2"

launcher_mode

  • 类型: String
  • 可选值: "Bin" 或 "AlgoRunner"
  • 默认值: "Bin"
  • 说明: 启动模式
  • 示例:
    launcher_mode = "Bin"

Web 配置 [web]

用于配置 NB8 Web 服务连接。

[web]
is_production = false
secret_id = "your_secret_id"
secret_key = "your_secret_key"

字段说明

字段类型必填说明
is_productionbool是否为生产环境
secret_idStringWeb 服务密钥 ID
secret_keyStringWeb 服务密钥

日志配置 [log]

配置日志输出行为和限流。

[log]
file = "logs/strategy"
level = "info"

[log.rate_limit]
max_tokens = 50
interval = 1

字段说明

字段类型默认值说明
fileString (可选)None日志文件路径。如果不指定,输出到标准输出
levelString"info"日志级别: "trace", "debug", "info", "warn", "error"

日志限流 [log.rate_limit]

字段类型默认值说明
max_tokensf6450.0令牌桶最大容量,同时决定初始令牌数
intervalf640.0令牌生成速率(秒)。0 表示不限流(实盘建议设置为 1)

注意: 设置 interval = 0 会禁用日志限流,适合开发调试;生产环境建议设置为 1。


Visitor 访问器配置 [visitor]

基于访问者模式的 API 拦截器配置,用于在请求/响应过程中自动处理数据标准化。访问器按优先级顺序执行,对订单、余额、行情等数据进行预处理和后处理。

v0.11.0 变更说明: 原本在 place_order 等下单接口 params 参数中的 market_order_modemarket_order_slippageprocess_amountprocess_price 字段已移至此配置。

执行顺序

VisitorPriority说明
BaseConverter-2000最先:乘数转换
OrderNormalizer-1000其次:tick 标准化
BalanceNormalizer0响应处理

数据流

策略下单 → [BaseConverter] → [OrderNormalizer] → 交易所
↓ ↓
乘数转换 价格/数量标准化

交易所响应 → [BalanceNormalizer] → [BaseConverter] → 策略接收
↓ ↓
过滤零值余额 乘数换算

完整配置示例

[visitor.base_converter]
enabled = true

[visitor.order_normalizer]
enabled = true
price_rounding = "BuyCeilSellFloor"
amount_rounding = "Round"
market_order_mode = "Safe"
market_order_slippage = 0.002

[visitor.balance_normalizer]
enabled = true

订单标准化配置 [visitor.order_normalizer]

在订单发送至交易所前,自动处理价格和数量的精度标准化。

字段类型默认值说明
enabledbooltrue是否启用订单标准化
price_roundingString"BuyCeilSellFloor"价格舍入策略
amount_roundingString"Round"数量舍入策略
market_order_modeString"Safe"市价单处理模式
market_order_slippagef640.002市价单滑点(0.2%)

舍入策略 (RoundingStrategy)

说明
"BuyCeilSellFloor"根据买卖方向决定:买入向上取整,卖出向下取整
"BuyFloorSellCeil"根据买卖方向决定:买入向下取整,卖出向上取整
"Ceil"始终向上取整
"Floor"始终向下取整
"Round"四舍五入
"None"不进行任何处理

市价单模式 (MarketOrderMode)

说明
"Safe"安全模式:将市价单转换为限价单 + IOC,价格 = 当前价 × (1 ± slippage),需要传递价格
"Normal"普通模式:直接发送市价单,无需传递价格

余额标准化配置 [visitor.balance_normalizer]

处理交易所返回的余额数据,执行以下标准化操作:

  • 稳定币零值保护: 将 USDT/USDC 等稳定币的 0 余额转为 0.0001,避免除 0 错误
  • 默认值填充: 当余额列表为空时,自动填充 USDT/USDC 默认值
字段类型默认值说明
enabledbooltrue是否启用余额标准化

基础币转换配置 [visitor.base_converter]

处理合约乘数/打包币的双向换算,统一为基础币单位。

字段类型默认值说明
enabledbooltrue是否启用基础币转换

功能说明:

  • 请求方向: 将策略的基础单位转换为交易所单位(× multiplier)
  • 响应方向: 将交易所单位转换为基础单位(÷ multiplier)

适用场景:

  • 合约乘数换算: 如 Binance 的 1000PEPE 合约,价格和数量自动换算为 PEPE 单位
  • 统一数据格式: 策略代码无需关心不同交易所的打包币差异

处理范围:

方向处理内容
请求处理(发送订单前)Order / BatchOrder / StopOrder
响应处理(收到数据后)Ticker / BboTicker / Depth / MarkPrice / Kline / Position / Order / StopOrder / WebSocket 回调数据

插件系统 [[plugin.plugins]]

OpenQuant 支持插件系统,可以扩展系统功能。

折扣币插件 (DiscountCoin)

自动管理交易所折扣币(如 BNB、OKB 等),用于抵扣手续费。

[[plugin.plugins]]
name = "DiscountCoin"
enabled = true
priority = 100
auto_restart = false
restart_delay = 5
max_restarts = 3

[plugin.plugins.config]
check_interval = 60

插件通用字段

字段类型默认值说明
nameString-插件名称
enabledboolfalse插件总开关
priorityu32100插件优先级
auto_restartboolfalse是否自动重启
restart_delayu645重启延迟(秒)
max_restartsu323最大重启次数

折扣币插件配置

字段类型默认值说明
check_intervalu6460检查间隔(秒)

交易所配置 [[exchanges]]

配置一个或多个交易所账户。每个交易所需要一个 [[exchanges]] 配置块。

基本配置示例

[[exchanges]]
exchange = "BinanceSwap"
key = "your_api_key"
secret = "your_api_secret"
passphrase = ""
rebate_rate = 0.0
is_colo = false
is_testnet = false
is_unified = false
use_ws_api = false

字段说明

必填字段

字段类型说明
exchangeString交易所名称(见下方支持的交易所列表)
keyStringAPI Key
secretStringAPI Secret
rebate_ratef64返佣比例(小数,如 0.0001 表示 0.01%)

可选字段

字段类型默认值说明
passphraseString""API Passphrase(OKX、Coinbase 等需要)
is_coloboolfalse是否为托管机房环境
is_testnetboolfalse是否为测试网
is_unifiedboolfalse是否为统一账户(如 Bybit 统一账户)
use_ws_apibool自动是否使用 WebSocket API 下单
默认值:BinanceSpot/OkxSwap/OkxSpot/OkxMargin 为 true,其他为 false
ws_api_countusize16WebSocket API 连接数

支持的交易所

v0.11.0 变更说明:自 v0.11.0 起,仅以下 7 个交易所为积极维护状态,其他交易所暂不维护。如需支持其他交易所,请联系交易系统团队。

✅ 积极维护的交易所(7 个)

以下交易所为积极维护状态,全面支持 WebSocket 运行时动态订阅/取消订阅:

交易所现货合约杠杆币本位合约统一账户WS 动态订阅
Binance
OKX
Bitget
Bybit
Coinex
Gate
Huobi

交易所枚举列表

  • Binance: BinanceSwap / BinanceSwapUsd / BinanceSpot / BinanceMargin / BinanceFuture
  • OKX: OkxSwap / OkxSwapUsd / OkxSpot / OkxMargin / OkxFuture
  • Bitget: BitgetSwap / BitgetSpot / BitgetMargin
  • Bybit: BybitSwap / BybitSpot
  • Coinex: CoinexSwap / CoinexSpot
  • Gate: GateSwap / GateSpot / GateMargin
  • Huobi: HuobiSwap / HuobiSpot

⚠️ 暂不维护的交易所

以下交易所代码仍保留,但不再进行积极维护。如有需要,请联系交易系统团队:

Apex, Aster, Bingx, Bitfinex, Bitmart, Bitmex, Coinbase, Coinw, Crypto, Deepcoin, Deribit, Dydx, Hotcoin, HyperLiquid, Kraken, Kucoin, Lbank, Mexc, Phemex, Weex, Whitebit, XT, Zoomex 等

其他特殊类型

  • CoinMarketCap: 市值数据查询(非交易所)
  • SignalCenter: 信号中心连接器
  • PyEx: Python 自定义交易所
  • Backtest: 回测虚拟交易所

多 IP 配置

某些交易所支持通过多个 IP 分散请求,避免触发频率限制。

[[exchanges]]
exchange = "BinanceSwap"
# ... 其他配置 ...
multi_ip = true
ip_indices = [0, 1, 3]
字段类型默认值说明
multi_ipboolfalse是否启用多 IP
ip_indicesVec<usize>[]使用的 IP 索引列表(IP 按字符串排序后的索引)

注意: 启用 multi_ip 后,日志会输出可用 IP 列表及其索引。

自定义域名

用于特殊网络环境或自定义代理。

[[exchanges]]
exchange = "BinanceSwap"
# ... 其他配置 ...
host = "custom-api.example.com"
ws_host = "custom-ws.example.com"
ws_api_host = "custom-wsapi.example.com"
字段类型默认值说明
hostString (可选)NoneHTTP REST API 域名
ws_hostString (可选)NoneWebSocket 数据流域名
ws_api_hostString (可选)NoneWebSocket API 域名

代理配置

支持 HTTP、HTTPS、SOCKS5 代理。

[[exchanges]]
exchange = "BinanceSwap"
# ... 其他配置 ...
proxy = "socks5://username:password@127.0.0.1:1080"

代理格式:

  • HTTP: http://proxy.example.com:8080
  • HTTPS: https://proxy.example.com:8080
  • SOCKS5: socks5://127.0.0.1:1080
  • 带认证: socks5://username:password@127.0.0.1:1080

非标参数 (params)

某些交易所需要特殊参数。

[[exchanges]]
exchange = "BitgetSwap"
# ... 其他配置 ...

[exchanges.params]
cookie = "your_cookie"
code = "invitation_code"
org_id = "organization_id"
version = "v1" # Bitget WebSocket 版本

支持的特殊参数

参数适用交易所说明
cookieBitgetSwap, CoinexSwap, HotcoinSwap, BitmartSwap, GateSwap网页 Cookie
codeBitgetSwap, CoinexSwap, HotcoinSwap, BitmartSwap, GateSwap邀请码(配合 cookie 使用)
org_idBitgetSwap, BitgetSpot, BitgetMargin, CoinexSwap, GateSwap, GateSpot, GateMargin机构 ID
versionBitget 系列WebSocket 订阅版本(设置为 "v1" 可订阅 v1 版本的 depth 和 bbo)
discount各交易所平台币折扣信息

折扣币配置 (discount_coin_config)

为每个交易所单独配置折扣币管理策略。

[[exchanges]]
exchange = "BinanceSwap"
# ... 其他配置 ...

[exchanges.discount_coin_config]
enabled = true
unit = "Quote"
maintenance = 16
buy_multiplier = 0.6
quote_currency = "USDT"
spot_index = 0
quote_back_threshold = 50.0
字段类型默认值说明
enabledboolfalse是否为此交易所启用折扣币管理
unitString"Quote"计算基础:"Quote"(计价币)或 "Token"(折扣币)
maintenancef64200.0维持数量
buy_multiplierf640.6买入乘数阈值(当数量 < 该值 * maintenance 时买入)
quote_currencyString"USDT"计价货币:"USDT", "USDC", "USD"
spot_indexusize (可选)0现货账户 API Key 索引(合约和现货 Key 不通用时)
quote_back_thresholdf6450.0回转金额阈值(合约账户剩余计价币低于此值时回转)

缓存配置 [cache]

配置系统缓存行为。

[cache]
typ = "File"
path = "cache.json"
字段类型默认值说明
typString"File"缓存类型(目前仅支持 "File")
pathString"cache.json"缓存文件路径

数据源配置 [data_source]

配置市场数据源。

[data_source]
typ = "Default"
字段类型默认值说明
typString"Default"数据源类型

执行引擎配置 [execution_engine]

配置订单执行引擎。

[execution_engine]
typ = "Stand"
task_count = 500
字段类型默认值说明
typString"Stand"执行引擎类型
task_countusize500并发任务数量

可观测性配置 [o11y]

配置 OpenTelemetry 遥测数据上报。

[o11y]
enabled = true
endpoint = "http://35.79.151.195:4317"
report_interval = 5
字段类型默认值说明
enabledbooltrue是否启用遥测
endpointString"http://35.79.151.195:4317"OTLP 端点地址
report_intervalu645上报间隔(秒)

回测配置 [backtest]

配置回测模式(可选,仅用于回测)。

[backtest]
start_logic_time = "2024-01-01T00:00:00Z"
end_logic_time = "2024-01-31T23:59:59Z"
wait_seconds_before_start = 5.0

[backtest.report]
# 报告配置

[backtest.server]
# 服务器配置

[[backtest.exchanges]]
# 回测交易所配置

基本字段

字段类型默认值说明
start_logic_timeString-回测开始时间(RFC3339 格式)
end_logic_timeString-回测结束时间(RFC3339 格式)
wait_seconds_before_startf645.0策略启动前等待时间(秒)

完整配置示例

# 策略配置
strategy_path = "examples/depth_imbalance_v2/strategy.py"
strategy_config_path = "examples/depth_imbalance_v2/strategy.toml"
instruments_refresh_sec = 300
trader_version = "V2"

# Web 服务配置
[web]
is_production = false
secret_id = "your_secret_id"
secret_key = "your_secret_key"

# 日志配置
[log]
file = "logs/strategy"
level = "info"

[log.rate_limit]
max_tokens = 50
interval = 1

# Visitor 访问器配置
[visitor.order_normalizer]
enabled = true
price_rounding = "BuyCeilSellFloor"
amount_rounding = "Round"
market_order_mode = "Safe"
market_order_slippage = 0.002

[visitor.balance_normalizer]
enabled = true

[visitor.base_converter]
enabled = true

# 插件配置
[[plugin.plugins]]
name = "DiscountCoin"
enabled = true
priority = 100
auto_restart = false
restart_delay = 5
max_restarts = 3

[plugin.plugins.config]
check_interval = 60

# 交易所配置示例 1: Binance Swap(带多IP和折扣币)
[[exchanges]]
exchange = "BinanceSwap"
key = "your_api_key"
secret = "your_api_secret"
passphrase = ""
rebate_rate = 0.0001
is_colo = false
is_testnet = false
is_unified = false
use_ws_api = false
multi_ip = true
ip_indices = [0, 1, 3]

[exchanges.discount_coin_config]
enabled = true
unit = "Quote"
maintenance = 16

# 交易所配置示例 2: OKX Swap(带 passphrase)
[[exchanges]]
exchange = "OkxSwap"
key = "your_api_key"
secret = "your_api_secret"
passphrase = "your_passphrase"
rebate_rate = 0.0
is_colo = false
is_testnet = false
is_unified = false
use_ws_api = true

# 交易所配置示例 3: Bybit Unified Account
[[exchanges]]
exchange = "BybitSwap"
key = "your_api_key"
secret = "your_api_secret"
passphrase = ""
rebate_rate = 0.0
is_colo = false
is_testnet = false
is_unified = true

# 交易所配置示例 4: Bitget(带特殊参数)
[[exchanges]]
exchange = "BitgetSwap"
key = "your_api_key"
secret = "your_api_secret"
passphrase = ""
rebate_rate = 0.0
is_colo = false
is_testnet = false
is_unified = false

[exchanges.params]
cookie = "your_cookie"
code = "invitation_code"
org_id = "organization_id"

# 缓存配置
[cache]
typ = "File"
path = "cache.json"

# 数据源配置
[data_source]
typ = "Default"

# 执行引擎配置
[execution_engine]
typ = "Stand"
task_count = 500

# 可观测性配置
[o11y]
enabled = true
endpoint = "http://35.79.151.195:4317"
report_interval = 5

与旧版本的差异

新增功能

  1. 插件系统 ([[plugin.plugins]])

    • 支持模块化功能扩展
    • 内置折扣币自动管理插件
  2. 多 IP 支持 (multi_ip, ip_indices)

    • 可通过多个 IP 分散请求
    • 避免触发交易所频率限制
  3. WebSocket API (use_ws_api, ws_api_count)

    • 部分交易所支持通过 WebSocket 下单
    • 降低延迟
  4. 折扣币精细化配置 (discount_coin_config)

    • 每个交易所单独配置
    • 支持多种计算模式和阈值
  5. 可观测性 ([o11y])

    • OpenTelemetry 集成
    • 自动上报遥测数据
  6. 回测模式 ([backtest])

    • 完整的历史数据回测支持
    • Tardis 数据下载集成
  7. 日志限流 ([log.rate_limit])

    • 避免高频日志占用资源
    • 令牌桶限流算法
  8. Rust 策略支持

    • 通过动态库加载 Rust 策略
    • 零 FFI 开销,极致性能

已移除/弃用字段

旧文档中的部分字段可能已移除或重命名,请参考本文档的当前版本。


常见问题

如何选择 trader_version?

  • V1: 旧版 API,功能较少,已不推荐
  • V2: 新版 API,功能更完善,推荐使用
  • 注意: 仅适用于 Python 策略,Rust 策略不使用此字段

是否需要配置所有交易所?

不需要。只配置你实际使用的交易所即可。

multi_ip 如何获取可用 IP 列表?

启用 multi_ip = true 后运行程序,日志会输出可用 IP 列表及其索引。

如何调试配置问题?

  1. 设置 log.level = "debug" 获取详细日志
  2. 设置 log.rate_limit.interval = 0 禁用日志限流
  3. 检查日志输出的错误信息