BigQuant使用文档

BigTrader API AI讲解

由jliang创建,最终由jliang 被浏览 6 用户

介绍

  • 大模型:cluade sonnet 4
  • 提示词:读取 bigtrader 文档 https://bigquant.com/wiki/doc/4ESrglWGeZ ,生成讲解
  • ⚠️注意:本文完全由AI自动生成,可能有错误和幻觉,请谨慎使用,见 BigTrader API 参考

BigTrader API 完整讲解指南

概述

BigTrader是BigQuant平台的核心量化交易引擎,提供了完整的回测、模拟交易和实盘交易功能。这份API参考文档定义了所有可用的接口、数据结构和配置选项。

核心概念

1. 运行模式 (RunMode)

BigTrader支持三种运行模式:

  • BACKTEST: 回测模式 - 使用历史数据进行策略回测
  • PAPER_TRADING: 模拟交易 - 实时数据但不涉及真实资金
  • LIVE_TRADING: 实盘交易 - 真实资金的线上交易

2. 市场类型 (Market)

支持多个市场的交易:

  • CN_STOCK: 中国A股市场
  • CN_FUTURE: 中国期货市场
  • CN_OPTION: 中国期权市场
  • HK_STOCK: 香港股票市场
  • US_STOCK: 美国股票市场
  • CC_SPOT: 加密货币现货市场
  • CC_FUTURE_UM/CM: 加密货币期货市场

3. 数据频率 (Frequency)

  • TICK: 逐笔数据(最细粒度)
  • MINUTE: 分钟级数据
  • HOUR: 小时级数据
  • DAILY: 日级数据
  • WEEK: 周级数据

核心数据结构

订单相关

IOrderReq - 订单请求

# 订单请求包含的关键字段
account_id: str          # 账户ID
trading_code: str        # 交易代码
exchange: str           # 交易所
instrument: str         # 交易标的
order_price: float      # 委托价格
order_qty: int          # 委托数量
order_type: OrderType   # 订单类型
direction: Direction    # 买卖方向
offset_flag: OffsetFlag # 开平仓标志

IOrderData - 订单状态

# 订单执行状态信息
order_status: OrderStatus  # 订单状态
filled_qty: int           # 成交数量
avg_price: float          # 成交均价
filled_money: float       # 成交金额

ITradeData - 成交记录

# 单笔成交信息
trade_id: str            # 成交编号
filled_price: float      # 成交价格
filled_qty: int          # 成交数量
commission: float        # 手续费
realized_pnl: float      # 已实现盈亏

持仓管理

IPositionData - 持仓信息

# 持仓详细信息
current_qty: int         # 当前持仓量
cost_price: float        # 持仓成本价
last_price: float        # 最新价格
position_pnl: float      # 持仓盈亏
market_value: float      # 市值
profit_ratio: float      # 盈利率
hold_days: int          # 持仓天数

市场数据

ITickData - 逐笔数据

# 实时行情数据
last_price: float        # 最新价
volume: int             # 成交量
bid_price1-5: float     # 五档买价
ask_price1-5: float     # 五档卖价
bid_volume1-5: int      # 五档买量
ask_volume1-5: int      # 五档卖量

IBarData - K线数据访问接口

# 访问历史和当前数据的方法
current(instrument, fields)                    # 获取当前值
history(instrument, fields, bar_count, freq)   # 获取历史数据
get_daily_value(instrument, field, dt)         # 获取日线数据

核心交易接口 (IContext)

账户管理

# 账户相关操作
add_account(acct_type, account_id, capital_base)  # 添加账户
login_account(account_setting)                   # 登录实盘账户
get_balance(account_id)                          # 获取账户余额
get_available_cash(account_id)                   # 获取可用资金

持仓查询

# 持仓查询
get_position(instrument, direction)              # 获取特定持仓
get_positions(instruments, account_id)           # 获取所有持仓
set_initial_positions(positions, account_id)     # 设置初始持仓

订单交易

基础下单方法

# 通用下单
order(instrument, volume, limit_price, offset_flag, order_type)

# 按比例下单
order_percent(instrument, percent, limit_price)

# 按金额下单  
order_value(instrument, value, limit_price)

# 目标持仓下单
order_target(instrument, target, limit_price)
order_target_percent(instrument, target, limit_price)
order_target_value(instrument, target, limit_price)

期货专用下单方法

# 明确开平仓方向
buy_open(instrument, volume, limit_price)    # 买开
buy_close(instrument, volume, limit_price)   # 买平
sell_open(instrument, volume, limit_price)   # 卖开
sell_close(instrument, volume, limit_price)  # 卖平

订单管理

# 订单管理
cancel_order(order_param)              # 撤销订单
cancel_all(only_from_this)             # 撤销所有订单
get_open_orders(instrument)            # 查询未成交订单
get_orders(instrument)                 # 查询所有订单
get_trades(instrument)                 # 查询成交记录

市场数据订阅

# 数据订阅
subscribe(instruments, subscribe_flags)        # 订阅行情数据
subscribe_bar(instruments, period, callback)   # 订阅K线数据
unsubscribe(instruments, subscribe_flags)      # 取消订阅

# 合约查询
get_contract(instrument)                       # 获取合约信息
get_all_contracts(product_code)               # 获取所有合约
get_dominant(product_code)                     # 获取主力合约

期权相关

# 期权功能
get_option_contracts(underlying)               # 获取期权合约
get_option_strike_prices(underlying, year_month)  # 获取行权价
get_atm_option_contract(underlying, year_month, price, option_type)  # 获取平值期权
exercise(instrument, volume)                  # 期权行权

策略回调函数

主要回调函数

def initialize(context):
    """策略初始化函数 - 程序启动时执行一次"""
    # 设置基准、手续费、滑点等
    # 计算因子数据,进行批量数据加载
    pass

def before_trading_start(context, data):
    """每个交易日开盘前调用"""
    # 可用于盘前数据准备
    pass

def handle_data(context, data):
    """主要交易逻辑函数 - 每个数据周期调用"""
    # 实现具体的交易策略逻辑
    pass

def handle_trade(context, trade):
    """成交回调 - 每次成交时调用"""
    # 处理成交事件
    pass

def handle_order(context, order):
    """订单状态回调 - 订单状态变化时调用"""
    # 处理订单状态变化
    pass

def handle_tick(context, tick):
    """tick数据回调 - 实时数据更新时调用"""
    # 处理实时行情数据
    pass

def after_trading(context, data):
    """每个交易日收盘后调用"""
    # 可用于日终处理
    pass

回测配置

手续费模型

# 股票手续费(按交易额计算)
PerOrder(buy_cost=0.0003, sell_cost=0.0013, min_cost=5.0)

# 期货手续费(按合约计算)
PerContract(cost={'IF': (0.000023, 0.000115, 0.000023)})
# 参数:(开仓费率, 平仓费率, 平今费率)

# 设置手续费
context.set_commission(
    equities_commission=PerOrder(...),
    futures_commission=PerContract(...)
)

滑点设置

# 设置滑点模型
context.set_slippage(tick_slippage=..., bar_slippage=...)

# 设置固定滑点值
context.set_slippage_value(slippage_type='fixed', slippage_value=0.01)

其他回测参数

# T+1交易限制
context.set_stock_t1(1)  # 启用T+1

# 分红再投资
context.set_dividend_reinvestment(1)  # 启用分红再投资

# 虚拟撮合时机
context.set_vmatch_at(VMatchAt.NEXT)  # 下一个bar撮合

# 保证金比例
context.set_margin_rate(instrument, margin_ratio)

调仓周期管理

BigTrader提供了灵活的调仓周期类:

# 交易日调仓
TradingDaysRebalance(days=5)              # 每5个交易日

# 自然日调仓  
NaturalDaysRebalance(days=7)              # 每7个自然日

# 周度调仓
WeeklyRebalance(weekday=1)                # 每周一
WeeklyTradingDaysRebalance(weekday=1)     # 每周第一个交易日

# 月度调仓
MonthlyRebalance(day=1)                   # 每月1号
MonthlyTradingDaysRebalance(day=1)        # 每月第一个交易日

# 季度/年度调仓
QuarterlyRebalance(day=1)                 # 每季度第一天
YearlyRebalance(day=1)                    # 每年第一天

预置策略模板

权重配置策略

# 基于权重的调仓策略
def initialize(context):
    # 准备包含 date, instrument, weight 列的数据
    context.data = your_weight_data
    # 可选:设置调仓周期
    context.rebalance_period = TradingDaysRebalance(5)

def handle_data(context, data):
    HandleDataLib.handle_data_weight_based(context, data)

信号驱动策略

# 基于信号的交易策略
def initialize(context):
    # 准备包含 date, instrument, signal, weight 列的数据
    # signal: 1=买入, 0=持有, -1=卖出
    context.data = your_signal_data

def handle_data(context, data):
    HandleDataLib.handle_data_signal_based(
        context, data,
        max_hold_days=20,      # 最大持仓天数
        take_profit=0.1,       # 止盈比例
        stop_loss=0.05,        # 止损比例
        max_open_weights_per_day=1.0  # 每日最大开仓权重
    )

完整策略示例

import bigtrader as bt

def initialize(context):
    """策略初始化"""
    # 设置基准
    context.benchmark = '000300.SH'
    
    # 设置手续费
    context.set_commission(PerOrder(buy_cost=0.0003, sell_cost=0.0013, min_cost=5.0))
    
    # 准备股票池和权重数据
    context.stocks = ['000001.SZ', '000002.SZ', '600000.SH']
    
def handle_data(context, data):
    """主要交易逻辑"""
    # 获取当前持仓
    positions = context.get_positions()
    
    # 等权重配置股票池
    target_weight = 1.0 / len(context.stocks)
    
    for stock in context.stocks:
        # 获取当前价格
        current_price = data.current(stock, 'close')
        if current_price > 0:  # 确保股票正常交易
            context.order_target_percent(stock, target_weight)
    
    # 卖出不在股票池的持仓
    for instrument in positions:
        if instrument not in context.stocks:
            context.order_target_percent(instrument, 0)

# 运行策略
performance = bt.run(
    market=bt.Market.CN_STOCK,
    frequency=bt.Frequency.DAILY,
    start_date='2023-01-01',
    end_date='2023-12-31',
    capital_base=1000000,
    initialize=initialize,
    handle_data=handle_data,
    benchmark='000300.SH'
)

# 查看结果
performance.render('chart')

高级功能

Level-2数据处理

def handle_l2trade(context, l2trade):
    """处理Level-2逐笔成交数据"""
    print(f"成交: {l2trade.instrument} {l2trade.price} {l2trade.volume}")

def handle_l2order(context, l2order):
    """处理Level-2订单数据"""
    print(f"订单: {l2order.instrument} {l2order.price} {l2order.volume}")

# 订阅Level-2数据
context.subscribe(
    instruments=['000001.SZ'], 
    subscribe_flags=bt.SubscribeFlag.L2Trade | bt.SubscribeFlag.L2Order
)

多账户管理

def initialize(context):
    # 添加股票账户
    context.add_account(bt.AccountType.STOCK, 'stock_account', 500000)
    
    # 添加期货账户
    context.add_account(bt.AccountType.FUTURE, 'future_account', 500000)

def handle_data(context, data):
    # 在不同账户执行不同策略
    # 股票策略
    with context.account('stock_account'):
        context.order('000001.SZ', 100, None)
    
    # 期货策略  
    with context.account('future_account'):
        context.buy_open('rb2410.SHF', 1, None)

性能分析

# 运行回测后获取性能对象
performance = bt.run(...)

# 渲染图表
performance.render('chart')

# 渲染表格
performance.render('table', table_max_rows=50)

# 访问原始性能数据
raw_data = performance.raw_perf
account_performances = performance.account_raw_performances

最佳实践

1. 数据准备

  • initialize函数中进行批量数据计算,利用向量化操作提升性能
  • 使用dai.query等工具进行大规模数据查询和处理

2. 性能优化

  • 合理设置before_start_days预加载历史数据
  • 对于复杂策略,考虑使用C++引擎(engine='cpp'

3. 风险控制

  • 设置合理的volume_limit控制单日交易量
  • 使用止盈止损和最大持仓天数限制
  • 定期监控和记录交易日志

4. 调试技巧

  • 使用context.record_log记录关键信息
  • 利用show_progress参数显示回测进度
  • 合理使用各种回调函数进行事件处理

BigTrader提供了完整而强大的量化交易框架,支持从数据获取、策略开发、回测验证到实盘交易的全流程。通过合理使用这些API,可以构建出稳健高效的量化交易策略。

标签

量化交易
{link}