BigQuant使用文档

Bigtrader交易引擎API

由qxiao创建,最终由qxiao 被浏览 9 用户

简介

BigTrader 是 BigQuant 推出的专业级量化交易引擎,主要用于策略在历史数据中回测撮合和实盘交易。采用 C++ 核心实现,提供 Python API 接口和回调函数。

核心特性

  • 全市场覆盖:股票、基金、期货、可转债、指数、期权、两融等
  • 多场景适配:回测、模拟交易、仿真交易、实盘交易、绩效分析
  • 多频率支持:日频、分钟级、Tick 级、逐笔交易(Tick2)
  • 同一套代码可用于回测、模拟和实盘,无需修改

交易引擎运行逻辑

BigQuant 回测引擎为时间+数据驱动回测引擎。设定好 K 线频率后,引擎按频率逐根读取数据。每根 K 线时间运行一次回调 handle_data,当前 K 线下单操作会在下一根 K 线开始撮合成交。

回测运行流程:

initialize()                    ← 仅启动时调用一次
│
└─ 每个交易日循环 ──────────────────
    │
    ├─ before_trading_start()   ← 每日盘前处理函数
    │
    ├─ handle_data/handle_tick  ← 每根K线或每个Tick触发
    │   ├─ handle_order()       ← 委托状态变化时触发
    │   └─ handle_trade()       ← 有成交时触发
    │
    └─ after_trading()          ← 盘后处理

交易所代码后缀

交易所 代码后缀 示例 说明
上交所 SSE SH 600000.SH510050.SH000001.SH 股票、基金、可转债、指数
深交所 SZSE SZ 000001.SZ159919.SZ399001.SZ 股票、基金、可转债、指数
上交所 SSE SHO 10000001.SHO ETF期权
深交所 SZSE SZO 90000001.SZO ETF期权
北交所 BSE BJ 920099.BJ 股票、指数
中金所 CFFEX CFE IF2501.CFE、T2503.CFE、IO2501-C-4300.CFE 股指期货、国债期货、股指期权
上期所 SHFE SHF rb2505.SHF、cu2503.SHF、cu2503C65000.SHF 期货和期货期权,小写+2位年+2位月
上能所 INE INE sc2505.INE、sc2505P400.INE 期货和期货期权,小写+2位年+2位月
大商所 DCE DCE a2505.DCE、a2505-C-3400.DCE 期货和期货期权,小写+2位年+2位月
郑商所 CZCE CZC SR505.CZC、SR505P5000.CZC 期货和期货期权,大写+1位年+2位月
广期所 GFEX GFE si2505.GFE、si2505-C-10000.GFE 期货和期货期权,小写+2位年+2位月

一个简单但完整的策略

from bigquant import bigtrader

def initialize(context: bigtrader.IContext):
    """策略初始函数,每次启动时调用一次"""
    context.security = context.instruments[0]

    # 设置股票交易费率
    context.set_commission(bigtrader.PerOrder(buy_cost=0.0003, sell_cost=0.0003, min_cost=5.0, tax_ratio=0.0005))

    # 设置期货交易费率
    context.set_commission(futures_commission=bigtrader.PerContract(cost={"rb": (2, 2, 1), "IF": (0.000023, 0.00015, 0.000023)}))

    # 设置期货保证金率
    context.set_margin_ratio("IF", 0.12)

    # 设置交易滑点
    context.set_slippage_value(slippage_type=2, slippage_value=0.001)

def before_trading_start(context: bigtrader.IContext, data: bigtrader.IBarData):
    """每日盘前处理函数"""
    # 高频回测时订阅Tick:context.subscribe(instruments)
    # 订阅Bar:context.subscribe_bar(instruments)
    pass

def handle_data(context: bigtrader.IContext, data: bigtrader.IBarData):
    """K线处理函数,每根K线时间调用一次"""
    if context.security not in context.portfolio.positions:
        rv = context.order(context.security, 1000)
        if rv < 0:
            context.logger.warning(f"{data.current_dt} order failed rv={rv},{context.get_error_msg(rv)}")
    else:
        rv = context.order(context.security, -800)
        if rv < 0:
            context.logger.warning(f"{data.current_dt} order failed rv={rv},{context.get_error_msg(rv)}")

def handle_trade(context: bigtrader.IContext, trade: bigtrader.ITradeData):
    """成交回报处理函数"""
    pass

performance = bigtrader.run(
    market=bigtrader.Market.CN_STOCK,
    frequency=bigtrader.Frequency.DAILY,
    start_date="2025-08-15",
    end_date="2025-10-15",
    capital_base=100000,
    instruments=["000001.SZ"],
    benchmark="000300.SH",
    initialize=initialize,
    before_trading_start=before_trading_start,
    handle_data=handle_data,
    handle_trade=handle_trade,
)

一个完整的策略,最主要就是在 handle_data 里实现调仓逻辑。若对某个对象或函数不了解,可使用 help(context) 或 help(pos_data) 等查看文档。

bigtrader.run() 启动函数

performance = bigtrader.run(
    market=Market.CN_STOCK,            # Market 枚举,交易市场
    frequency=Frequency.DAILY,         # Frequency 枚举,K线频率
    start_date="2025-01-01",           # str,回测开始日期 "YYYY-MM-DD"
    end_date="2025-06-01",             # str,回测结束日期 "YYYY-MM-DD"
    capital_base=100000,               # float,初始资金
    instruments=None,                  # list[str],标的代码列表
    initialize=initialize,             # 初始化回调函数
    before_trading_start=before_trading_start,  # 盘前回调函数
    handle_data=handle_data,           # K线回调函数
    handle_tick=handle_tick,           # L2Snapshot Tick快照行情回调函数
    handle_l2trade=handle_l2trade,     # L2Trade 逐笔成交行情回调函数
    handle_l2order=handle_l2order,     # L2Order 逐笔委托行情回调函数
    handle_order=handle_order,         # 委托回报回调函数
    handle_trade=handle_trade,         # 成交回报回调函数
    after_trading=after_trading,       # 盘后回调函数
    benchmark="000300.SH",             # str,基准代码
    account_type=AccountType.NONE,     # AccountType 枚举,账户类型(两融回测必须指定 AccountType.CREDIT)
    volume_limit=0.025,                # float,Bar撮合时单笔最大成交比例(分钟级回测建议设置为1.0)
    data=None,                         # any,用户数据,可在 context.data 中访问
    user_data=None,                    # Dict,用户自定义行情数据回测
    order_price_field_buy="open",      # str,Bar撮合买入成交参考价字段:open / close / vwap
    order_price_field_sell="close",    # str,Bar撮合卖出成交参考价字段:open / close / vwap
)

返回值:performance为回测绩效结果对象,包含收益曲线、交易记录等。

策略回调函数

initialize(context: bigtrader.IContext)

策略初始化函数,只触发一次。可在此函数中初始化变量、读取配置、设置交易费率、设置滑点等。

参数:context — 策略上下文对象

before_trading_start(context: bigtrader.IContext, data: bigtrader.IBarData)

盘前交易函数,每日盘前触发一次。可在此处理当日交易前的准备,如高频回测时订阅行情等。

参数:context — 策略上下文对象,data — 数据对象

handle_data(context: bigtrader.IContext, data: bigtrader.IBarData)

K 线行情通知函数,频率支持日线和N分钟。注册多个合约时,handle_data 会等待所有合约数据到齐后统一触发一次。

参数:context — 策略上下文对象,data — 数据对象(IBarData)

handle_tick(context: bigtrader.IContext, tick: bigtrader.ITickData)

Tick 快照行情通知函数,每个标的的行情有变化时触发。此函数的触发依赖于交易所实时行情推送。

参数:context — 策略上下文对象,tick — TickData 数据对象

handle_l2order(context: bigtrader.IContext, l2order: bigtrader.IL2OrderData)

L2Order 逐笔委托行情通知函数,每个标的的逐笔委托行情有变化时触发。

参数:context — 策略上下文对象,l2order — L2OrderData 数据对象

handle_l2trade(context: bigtrader.IContext, l2trade: bigtrader.IL2TradeData)

L2Trade 逐笔成交行情通知函数,每个标的的逐笔成交行情有变化时触发。

参数:context — 策略上下文对象,l2trade — L2TradeData 数据对象

handle_order(context: bigtrader.IContext, order: bigtrader.IOrderData)

委托回报通知函数,每个订单状态有变化时触发。

参数:context — 策略上下文对象,order — 委托数据对象(OrderData)

handle_trade(context: bigtrader.IContext, trade: bigtrader.ITradeData)

成交回报通知函数,有成交时触发。

参数:context — 策略上下文对象,trade — 成交数据对象(TradeData)

after_trading(context: bigtrader.IContext, data: bigtrader.IBarData)

盘后处理函数,每日盘后运行一次。适用于日终汇总与清理任务。

参数:context — 策略上下文对象,data — 数据对象

context: bigtrader.IContext 对象

context 是策略的运行时上下文对象,每个回调函数都会接收 context 作为第一个参数。通过 context 提供的属性或接口,可以访问交易数据、下单、查询账户/持仓/委托/成交等。

context 的属性

属性 类型 说明
instruments list[str] 策略标的代码列表(来自 bigtrader.run 的 instruments 参数)
portfolio Portfolio 组合对象,包含 cash、positions 等属性
portfolio.cash float 可用现金
portfolio.positions dict[str, PositionData] 当前持仓字典,key 为 instrument 代码
user_store dict 持久化变量存储(模拟/实盘跨日保存)
logger object Python 日志对象
data object 用户传入的自定义数据(bigtrader.run 时传入的 data 参数)

下单交易接口

所有下单函数返回 int 类型,小于 0 时表示下单失败,可使用 context.get_error_msg(ret_code) 获取错误信息。

context.order(instrument, order_qty, limit_price=None, order_type=None) -> int

标准下单接口。order_qty 为正买入,为负卖出。当指定 limit_price 时表示下限价单,报上交所股票市价单时,limit_price 为保护价并指定 order_type=bigtrader.OrderType.Market。

参数 类型 说明
instrument str 标的代码,如 000001.SZ
order_qty int 委托数量,正数买入,负数卖出
limit_price float, optional 限价,None 为市价
order_type OrderType, optional 委托价格类型

context.order_target(instrument, target, limit_price=None, order_type=None) -> int

按目标数量下单。

context.order_target_percent(instrument, percent, limit_price=None, order_type=None) -> int

按目标百分比仓位下单。

context.order_target_value(instrument, value, limit_price=None, order_type=None) -> int

按目标市值下单。

context.order_value(instrument, value, limit_price=None, order_type=None) -> int

按金额下单。

context.order_percent(instrument, percent, limit_price=None, order_type=None) -> int

按账户百分比下单。

期货/期权专用开平仓下单接口

函数 说明
buy_open(instrument, order_qty, limit_price=None, order_type=None) 买入开仓
sell_open(instrument, order_qty, limit_price=None, order_type=None) 卖出开仓
buy_close(instrument, order_qty, limit_price=None, order_type=None) 买入平仓
sell_close(instrument, order_qty, limit_price=None, order_type=None) 卖出平仓

注意:order_qty 应该为正,因为接口本身已包含买卖方向。

两融专用交易接口

函数 说明
margin_trade(instrument, order_qty, limit_price=None, order_type=None) 两融交易
margincash_open(instrument, order_qty, limit_price=None, order_type=None) 融资买入
margincash_close(instrument, order_qty, limit_price=None, order_type=None) 卖券还款
marginsec_open(instrument, order_qty, limit_price=None, order_type=None) 融券卖出
marginsec_close(instrument, order_qty, limit_price=None, order_type=None) 买券还券
marginsec_direct_refund(instrument, order_qty) 直接还券
margincash_direct_refund(value) 直接还款

撤单接口

context.cancel_order(order_param) -> int

撤销委托。order_param 可以是 order 对象、order_key 字符串或撤单请求。

context.cancel_all(instrument="") -> int

撤销所有委托。instrument 不为空时只撤销此 instrument 相关的所有委托。

其它委托接口

context.exercise(instrument, order_qty) -> int

期权行权委托。

查询类接口

函数 返回类型 说明
get_trading_account() FundData 获取资金账户数据
get_marginasset_data() dict 获取两融负债资产数据
get_balance() float 总资金(可用资金 + 冻结资金)
get_available_cash() float 可用资金
get_portfolio_value() float 总资产
get_position(instrument, direction=None) PositionData 获取单个持仓
get_positions() dict[instrument, PositionData] 获取全部持仓
get_long_positions() dict[instrument, PositionData] 获取全部多头持仓
get_short_positions() dict[instrument, PositionData] 获取全部空头持仓
get_orders(instrument="") list[OrderData] 获取当日委托
get_open_orders(instrument="") list[OrderData] 获取未成交委托
get_trades(instrument="") list[TradeData] 获取当日成交
get_last_price(instrument) float 获取最新价
get_contract(instrument) ContractData 获取合约信息
get_trading_day() str 获取当前交易日 (YYYYmmdd)

注意:获取期货多头/空头持仓时,应使用 context.get_position(instr, PosiDirection.LONG) 或 .SHORT,否则获取出来的是包括多空持仓的复合对象。

配置类接口

set_commission — 设置费率

设置股票费率(回测基金时可将 tax_ratio 设置为 0 表示无印花税):

context.set_commission(PerOrder(buy_cost=0.0003, sell_cost=0.0003, min_cost=5, tax_ratio=0.0005))

设置期货费率:

context.set_commission(futures_commission=PerContract(cost={"rb": (2, 2, 1), "IF": (0.000023, 0.00015, 0.000023)}))
  • 股票使用PerOrderbuy_cost买入费率,sell_cost卖出费率,min_cost最少费用,tax_ratio印花税率
  • 期货使用PerContract:字典 Key 为品种代码,值为 Tuple (开仓费率, 平仓费率, 平今费率),费率 < 0.1 时按金额收取,否则按手数收取设置保证金比例:
context.set_margin_ratio("rb", 0.1)

add_account — 添加更多回测账号

用于多资产回测,如股票 + 期货、ETF期权 + 股票 组合回测:

场景 使用 说明
股票+期货 add_account(AccountType.FUTURE, capital_base=1e6) run() 指定 market=Market.CN_STOCK,策略中再添加期货账号
期权+股票 add_account(AccountType.STOCK, capital_base=1e6) run() 指定 market=Market.CN_STOCK_OPTION,策略中再添加股票账号

注意:交易期货+期货期权或股指期权时,不需要额外账号,只需在 run() 中指定 market=Market.CN_FUTURE_OPTION。

set_slippage — 设置撮合滑点

# 固定价格撮合模型,无条件按策略指定的价格成交,一般用于交割单回测

context.set_slippage_name("fixed")

# 固定滑点值

context.set_slippage_value(slippage_type=1, slippage_value=1.0)

# 设置百分比滑点

context.set_slippage_value(slippage_type=2, slippage_value=0.005)
  • slippage_type=1:固定滑点
  • slippage_type=2:滑点百分比

is_backtest_mode() -> bool

判断是否为回测模式。

get_error_msg(error_id: int) -> str

传入错误 ID 获取错误信息。

行情订阅接口

高频回测时一定要在每日盘前处理函数中订阅当日要交易的代码列表,包括策略新选出来的代码和持仓代码列表。Tick 回测时调用 subscribe,分钟回测调用 subscribe_bar。

订阅 Level2 逐笔数据时,需要将 subscribe_flags 使用 XOR 指定多个标志位,比如:

subscribe_flags=SubscribeFlag.L2Snapshot | SubscribeFlag.L2Trade | SubscribeFlag.L2Order
函数 说明
subscribe(instruments, subscribe_flags=SubscribeFlag.DEFAULT) 订阅 Tick 数据
subscribe_bar(instruments, period="1m") 订阅分钟 Bar 数据
unsubscribe(instruments) 取消订阅

data: bigtrader.IBarData 数据对象

在 handle_data 回调中通过 data 参数访问 K 线数据。注意,data 不是一个 K 线数据,而是一个可以访问 K 线数据的对象。

data 属性

属性 类型 说明
current_dt datetime 当前 Bar 的日期时间
trading_day_dt datetime 当前交易日

data 接口

data.current(instrument, field) -> float | int | str

获取当前 Bar 某字段值。

参数 类型 说明
instrument str 标的代码,如 000001.SZ
field str K 线字段:open, close, high, low, volume, amount, name 等

data.history(instrument, fields, count, frequency, expect_ndarray=True)

获取历史 N 根 Bar 的值。

参数 类型 说明
instrument str 标的代码
fields str 或 list[str] 字段名或字段列表
count int 历史 Bar 数量
frequency str 频率:1d(日线)或 1m(分钟线)
expect_ndarray bool True 时返回 numpy array

data.get_daily_value(instrument, field) -> float | int | str

获取日 K 线的值(一般用于高频回测时需要访问日K线数据的场景)。

参数 类型 说明
instrument str 标的代码
field str K 线字段:open, close, volume 等

一些交易说明

  • 高频回测需要在每日盘前处理函数中使用context.subscribecontext.subscribe_bar订阅当日要交易的代码列表,订阅的代码列表中,除了你新选出的股票外,若持仓里的股票要交易,也需要一并订阅
  • 不要在策略函数中阻塞等待接口执行结果,如下单后等待成交或撤单后等待订单状态发生变更。因为底层只有一个事件队列,在策略函数回调完成后再从队列中处理下一个事件
  • 实验选项:设置股票T+0交易:context.set_stock_t1(0)

融资融券回测

  • run 的参数中market=Market.CN_STOCK,额外再指定account_type=AccountType.CREDIT
  • 当日融的券当日不能还
  • 直接还券时,可以使用当日买入的券还(不受T+1限制)
  • 系统为简便处理,每日直接扣除负债的利息

期权回测

  • run 的参数中market=Market.CN_STOCK_OPTIONCN_FUTURE_OPTION
  • run 的参数中instruments需指定期权的标的代码,而不是期权交易代码
  • ETF期权需要单独的资金账号,股指期权和期货期权则使用期货账号交易

自定义数据回测

  • run 的参数中指定user_data
  • 其中 key 可以是"trading_days","basic_info","bar1d","bar1m","tick"
  • 其中 val 则是 pandas DataFrame 格式,df 中各字段名参考 dai 数据平台中的各表的字段

合约代码到期处理

  • 股票退市:按退市价格自动平仓,释放资金=持仓市值,生成一条成交记录,成交类型=TradeType.ExpireClose
  • 期货退市:按退市价格自动平仓,释放资金=保证金,生成一条成交记录,成交类型=TradeType.ExpireClose
  • 期权退市:权利仓实值时自动行权否则放弃,义务仓实值时自动被行权否则放弃并释放保证金

分红送股处理

按 cn_stock_dividend 表的分红送信息对持仓进行处理。对于配股时则使用 adjust_factor 变化比例对持仓进行处理。

股息红利税的计算:回测时简便处理,直接按 20% 的税率计算。注意,转股因为不属于利润分配,因此无需缴红利税,而送股作为股息红利所得,因此需要缴纳。

变量持久化对象 context.user_store 使用说明

  • 建议在initialize()函数里使用context.user_store.init_once(**kwargs)

    进行变量初始化,因为回测时initialize

    只会被调用一次,而模拟盘每天运行时都会调用一次,init_once

    能保证变量只初始化一次

  • user_store 对象可以像字典一样使用

  • user_store 对象里存储的 kv 必须是可被 jsonalize 的,且存储大小有限

获取上一次委托请求时的本地唯一编号

使用 context.get_last_order_key() -> str

因为下单接口返回的是 int 类型表示是否发单成功(发单成功不代表委托成功,只代表订单正常发送出去),可以使用此接口唯一编号,便于和未来的委托回报和成交回报关联。


数据结构定义

FundData(资金数据)

字段 类型 说明
account_id str 资金账户
account_type AccountType 账户类型
balance float 总资金
available float 可用资金
frozen_cash float 冻结资金
portfolio_value float 总资产
total_market_value float 总市值
total_margin float 总保证金
commission float 当日总交易费用
positions_pnl float 持仓盈亏

PositionData(持仓数据)

字段 类型 说明
account_id str 资金账户
instrument str 内部代码
posi_direction PosiDirection 持仓方向:'1'-LONG多头,'2'-SHORT空头
current_qty int 持仓数量
avail_qty int 可用数量
today_qty int 今仓数量
cost_price float 持仓均价
last_price float 最新价
market_value float 市值
margin float 保证金占用
position_pnl float 持仓盈亏(按持仓均价计算)
open_date int 开仓日期 (YYYYmmdd)
open_price float 开仓均价
liability float 两融负债
financing_qty int 融资持仓数量
financing_avail_qty int 融资持仓可平数量

OrderData(委托数据)

字段 类型 说明
account_id str 资金账户
instrument str 内部代码
direction Direction 方向:'1'-BUY,'2'-SELL
offset_flag OffsetFlag 开平标志:'0'-OPEN,'1'-CLOSE,'2'-CLOSETODAY
order_type OrderType 委托价格类型:'0'-限价,'U'-市价五档即成剩撤
order_qty int 委托数量
filled_qty int 成交数量
order_price float 委托价格
order_status OrderStatus 委托状态
order_sysid str 系统报单编号
order_key str 本地唯一标识
insert_date int 报单日期 (YYYYmmdd)
order_time int 报单时间 (HHMMSSmmm)
trading_day int 交易日 (YYYYmmdd)
status_msg str 报单状态消息

TradeData(成交数据)

字段 类型 说明
account_id str 资金账户
instrument str 内部代码
direction Direction 方向
offset_flag OffsetFlag 开平标志
trade_type TradeType 成交类型
filled_qty int 成交数量
filled_price float 成交价格
filled_money float 成交金额
trade_id str 成交编号
trade_key str 本地唯一成交编号
order_key str 本地唯一单号
trade_date int 成交日期 (YYYYmmdd)
trade_time int 成交时间 (HHMMSSmmm)
trading_day int 交易日 (YYYYmmdd)

TradeType 值说明:

常量 说明
'0' TradeType.Common 普通成交
'1' TradeType.OptionsExecution 期权行权成交
'C' TradeType.Cancelled 撤单成交
'D' TradeType.DR 除权除息
'E' TradeType.ExpireClose 退市平仓
'F' TradeType.ForceClose 强平
'R' TradeType.MTDirectRefund 直接还款还券
'S' TradeType.StopProfitLoss 止盈止损成交

TickData 快照行情数据

字段 类型 说明
instrument str 内部代码
datetime datetime 日期时间
time int tick 时间 (HHMMSSmmm)
action_day int tick 自然日期 (YYYYmmdd)
trading_day int tick 交易日 (YYYYmmdd)
last_price float 最新价
open_price float 开盘价
high_price float 最高价
low_price float 最低价
volume int 成交量
amount float 成交额
open_interest int 持仓量
pre_close float 昨收盘
upper_limit float 涨停价
lower_limit float 跌停价
ask_price1~10 float 卖1~10价
ask_volume1~10 int 卖1~10量
bid_price1~10 float 买1~10价
bid_volume1~10 int 买1~10量

L2OrderData 逐笔委托行情数据

字段 类型 说明
instrument str 内部代码
datetime datetime 日期时间
time int tick 时间 (HHMMSSmmm)
channel_no int 频道号
volume int 委托数量
price float 委托价格
seq_num int 委托序号
bs_flag L2BSFlag 买卖标志:78-未知,66-买入,83-卖出
ord_type L2OrdType 价格类型:SH(65-新增,68-撤单),SZ(49-市价,50-限价,51-本方最优)

L2TradeData 逐笔成交行情数据

字段 类型 说明
instrument str 内部代码
datetime datetime 日期时间
channel_no int 频道号
volume int 成交数量
price float 成交价格
money float 成交金额
seq_num int 成交序号
bid_seq_num int 买方委托序号
ask_seq_num int 卖方委托序号
exec_type L2ExecType SZ成交类型:70-正常成交,52-撤单成交
bs_flag L2BSFlag 买卖标志:78-未知,66-买入,83-卖出

ContractData(合约数据)

字段 类型 说明
instrument str 内部代码
product_code str 产品代码
product_type ProductType 产品类型:股票 / 基金 / 可转债 / 期货
multiplier float 合约乘数
price_tick float 最小变动价格
name str 合约名称
day_trading bool 日内回转交易
buy_unit int 买数量单位
sell_unit int 卖数量单位
underlying str 标的代码
option_cp OptionCP 期权类型(认购 / 认沽)
strike_price float 期权行权价格

枚举类型

所有枚举和辅助类均从 bigquant.bigtrader 导入:

from bigquant.bigtrader import (
    Market, Frequency, AccountType,
    Direction, OffsetFlag, OrderType, OrderStatus,
    PosiDirection, TradeType, OptionCP,
    PerOrder, PerContract,
)

Market(交易市场)

常量 说明
'cn_stock' Market.CN_STOCK A股
'cn_fund' Market.CN_FUND 基金
'cn_cbond' Market.CN_CBOND 可转债
'cn_future' Market.CN_FUTURE 期货
'cn_future_option' Market.CN_FUTURE_OPTION 期货期权
'cn_stock_option' Market.CN_STOCK_OPTION ETF期权
'hk_stock' Market.HK_STOCK 港股

Frequency(交易频率)

常量 说明
'1d' Frequency.DAILY 日频
'1m' Frequency.MINUTE 分钟频
'5m' Frequency.MINUTE5 5分钟频
'15m' Frequency.MINUTE15 15分钟频
'30m' Frequency.MINUTE30 30分钟频
'60m' Frequency.MINUTE60 60分钟频
'tick' Frequency.TICK Tick频(Level1快照)
'tick2' Frequency.TICK2 Tick2频(Level2快照)

AccountType(账户类型)

常量 说明
'0' AccountType.STOCK 股票(现货)账户
'1' AccountType.FUTURE 期货账户,可交易期货期权和股指期权
'2' AccountType.OPTION 股票期权账户
'3' AccountType.CREDIT 融资融券账户

PosiDirection(持仓方向)

常量 说明
'1' PosiDirection.LONG 多头方向(买)
'2' PosiDirection.SHORT 空头方向(卖)

Direction(买卖方向)

常量 说明
'1' Direction.BUY 买入
'2' Direction.SELL 卖出
'3' Direction.FinancingBuy 融资买入
'4' Direction.SellRepay 卖券还款
'5' Direction.LoanSell 融券卖出
'6' Direction.BuyRedeliver 买券还券
'7' Direction.CashDirectRefund 直接还款
'8' Direction.SecDirectRefund 直接还券

OffsetFlag(开平标志)

常量 说明
'0' OffsetFlag.OPEN 开仓
'1' OffsetFlag.CLOSE 平仓
'2' OffsetFlag.CLOSETODAY 平今
'3' OffsetFlag.CLOSEYESTERDAY 平昨

OrderType(委托价格类型)

常量 说明
'0' OrderType.LIMIT 限价
'U' OrderType.MARKET 市价五档即成剩撤
'S' OrderType.MKT2LMT 市价五档即时成交剩余转限价(实盘时仅上交所支持)
'T' OrderType.MARKET_FAK 市价即时成交剩余撤单(实盘时仅深交所支持)
'V' OrderType.MARKET_FOK 市价全额成交或撤单(实盘时仅深交所支持)

OrderStatus(委托状态)

常量 说明
0 NOTTRADED 未成交
1 PARTTRADED 部分成交
2 ALLTRADED 全部成交
3 PARTCANCELLED 部分撤单
4 CANCELLED 全部撤单
5 REJECTED 废单
6 UNKNOWN 未知
10 NOTPLACE 未报
11 PLACING 正报
12 PENDINGPLACE 待报
15 PARTPENDINGPLACE 部分待撤
16 PENDINGCANCEL 待撤销

SubscribeFlag(订阅行情标志位)

常量 说明
0 DEFAULT 默认值
2 L2Snapshot Level2 快照
4 L2Trade Level2 逐笔成交
8 L2Order Level2 逐笔委托
16 L2OrderQueue Level2 委托队列
32 BarData Level2 K线数据
64 MDIndex Level2 指数快照

撮合规则

通用规则

  • 日频/分钟频回测时使用K线数据撮合,Tick回测时则使用盘口多档行情撮合
  • 未成交/部分成交的委托可撤单
  • 日内收市后未成交的委托自动作废
  • 市价委托未成交部分自动撤销
  • 设置固定价格滑点时,成交价格 ± 固定滑点值;设置百分比滑点时,成交价格 × (1 + 百分比滑点值)

基于 Bar 行情撮合

  • 成交规则:市价时 Bar 的volume > 0或 买入限价 >low或 卖出限价 <high
  • 成交价格 = Bar 的open/close/vwap价格 或 限价价格
  • 成交数量 = 当次 Bar 的成交量 × 成交比例volume_limit
  • 未成交部分,市价单自动撤单,限价单则继续在下根K线撮合,直至收盘后作废

基于 Tick 快照行情撮合

  • 以对手盘口价格一档开始撮合,取决于盘口深度,最多五或十档
  • 发出订单后立即撮合,限价单未成部分在后续Tick中继续撮合
  • 涨停/跌停按规则处理排队/成交

关于成交滑点

  • 设置固定价格滑点时:买入价格 + 滑点值,卖出价格 - 滑点值
  • 设置百分比滑点时:买入价格 × (1 + 滑点值),卖出价格 × (1 - 滑点值)

\

{link}