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,可以构建出稳健高效的量化交易策略。