Bigtrader交易引擎API

简介

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.SH、510050.SH、000001.SH

股票、基金、可转债、指数

深交所 SZSE

SZ

000001.SZ、159919.SZ、399001.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)}))
  • 股票使用PerOrder:buy_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.subscribe或context.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_OPTION或CN_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 - 滑点值)