主入口

# 回测与交易引擎

M.Trade模块是策略回测的主入口。

该模块有几个非常重要的基本方法,分别是主函数(handle_data)、数据准备函数(prepare)、初始化函数(initialize)、盘前处理函数(before_trading_start)。其中,主函数和初始化函数是一个策略能够运行的必要函数,数据准备函数和盘前处理函数是可选函数。

M.trade模块的基本参数包括handle_data、initialize、prepare、before_trading_start,这几个参数需要传入函数(function)对象,因此只要传入相应的函数即可,函数名可以为参数名也可以自定义。

量化交易策略类型繁多,比如技术指标策略、趋势跟踪策略、多因子选股策略、事件驱动策略、套利策略等,Bigquant平台交易引擎可以对类型繁多的量化策略做全面支持,能够保证回测性能和灵活的应用场景。

# Trade (回测/模拟) (v4)

# 主入口

定义

M.trade.v4(start_date='', end_date='', handle_data=None,
instruments=None, options_data=None, history_ds=None,
bench_mark_ds=None, prepare=None, initialize=None,
before_trading_start=None, volume_limit=0.025,
order_price_field_buy='open', order_price_field_sell='close',
capital_base=1000000.0, benchmark='000300.SHA',
auto_cancel_non_tradable_orders=True, data_frequency='daily',
price_type='后复权', plot_charts=True, backtest_only=False, options=None,
amount_integer=None, m_meta_kwargs={})

量化交易引擎主入口。

参数:

  • start_date (str) – 开始日期,设定值只在回测模式有效,在模拟实盘模式下为当前日期。一般不需要指定,使用证券代码列表里的开始日期

  • end_date (str) – 结束日期,设定值只在回测模式有效,在模拟实盘模式下为当前日期。一般不需要指定,使用证券代码列表里的结束日期

  • handle_data (function) – [回调函数]主函数,必须实现的函数,该函数每个单位时间(每根K线)会调用一次, 如果按天回测,则每天调用一次,如果按分钟,则每分钟调用一次。在回测中,可以通过对象data获取单只股票或多只股票的时间窗口价格数据。如果算法中没有schedule_function函数,那么该函数为必选函数。一般策略的交易逻辑和订单生成体现在该函数中;默认值是None

  • instruments (list|DataSource) – 证券代码列表,如果提供了 prepare 函数,可以在 prepare 中覆盖此参数提供的值;默认值是None

  • options_data (DataSource) – 其他输入数据:回测中用到的其他数据,比如预测数据、训练模型等。如果设定,在回测中通过 context.options['data']调用;默认值是None

  • history_ds (DataSource) – 回测有价格撮合过程,需要传入标的价格数据

  • benchmark (DataSource) – 基准数据,不影响回测结果,需要传入自定义的数据作为策略比较基准。暂时不支持参数为字符串(str),需要传入用户自定义的DataSource

  • trading_calendar - 交易日历。默认情况下,为中国A股市场的交易日历,如果是分钟回测或其他市场回测,需要自定义交易日历

  • prepare (function) – [回调函数]数据准备函数,运行过程中只调用一次,在initialize前调用,准备交易中需要用到数据;默认值是None

  • initialize (function) – [回调函数]初始化函数,整个回测中只在最开始时调用一次,用于初始化一些账户状态信息和策略基本参数,context也可以理解为一个全局变量,在回测中存放当前账户信息和策略基本参数便于会话;默认值是None

  • before_trading_start (function) – [回调函数]盘前处理函数,每日开盘前调用一次。该函数是可选函数,在handle_data函数之前运行。你的算法可以在该函数中进行一些数据处理计算,比如确定当天有交易信号的股票池;默认值是None

  • volume_limit (float) – 成交率限制:执行下单时控制成交量参数,若设置为0时,不进行成交量检查;默认值是0.025,下单量如果超过该K线成交量的0.025,多余的订单量会自动取消

  • order_price_field_buy (str) – 买入点:open=开盘买入,close=收盘买入;可选值有: 'open','close';默认值是'open'

  • order_price_field_sell (str) – 卖出点:open=开盘卖出,close=收盘卖出;可选值有: 'open','close';默认值是'close'

  • capital_base (float) – 初始资金;默认值是1000000.0

  • product_type(str) - 交易品种类型,默认为product_type='股票',如果是期货,需要指定product_type='期货',这里股票用stock、期货用future同理

  • auto_cancel_non_tradable_orders (bool) – 自动取消无法成交的订单。是否自动取消因为停牌、一字涨跌停等原因不能成交的订单;默认值是True

  • data_frequency (str) – 回测数据频率,可选值有: 'daily'和'minute';默认值是daily

  • price_type (str) – 回测价格类型:前复权(forward_adjusted),真实价格(original),后复权(backward_adjusted);可选值有: 前复权, 真实价格, 后复权;默认值是后复权。

  • plot_charts (bool) – 显示回测结果图表;默认值是True

  • backtest_only (bool) – 只在回测模式下运行:默认情况下,Trade会在回测和实盘模拟模式下都运行。如果策略中有多个M.trade,在实盘模拟模式下,只能有一个设置为运行,其他的需要设置为 backtest_only=True,否则将会有未定义的行为错误;默认值是False

  • options (dict) – 用户自定义数据,在回调函数中要用到的外部数据(例如生成交易信号的数据),可以从这里传入,并通过 context.options进行调用;默认值是None

  • m_deps(float|str) - 模块依赖项,M开头是模块(Module)的通用标识。为了节省运行时间,采取了缓存机制,每次运行会检查各个模块的参数是否有修改,如果没有修改,就启用缓存数据,如果有修改就重新运行。

如果我们不想击中缓存,每次想重新运行的话就可以修改M.trade模块的各个参数项,最简单的方法就是设置m_deps=np.random.randn(),这样就能保证主函数、初始化函数等函数内部修改以后按最新的代码运行结果。

返回:

.raw_perf: 回测详细数据

返回类型:

Outputs -回测结果数据

股票

  • date - timestamp|datetime 必选 日期
  • instrument - str 必选 股票代码
  • open - float 必选 开盘价
  • high - float 必选 最高价
  • low - float 必选 最低价
  • close - float 必选 收盘价
  • volume - float 必选 成交量
  • adjust_factor - float 必选 复权因子。对于股票回测而言,需要知道价格及复权因子
  • price_limit_status - float 可选 股价在收盘时的涨跌停状态:1表示跌停,2表示未涨跌停,3则表示涨停

回测数据如果是股票,复权因子是需要的,价格涨跌停状态是可选的,因为可以通过价格涨跌停状态数据来进行订单管理,比如涨停并且是收盘买入,那么该笔订单无法成交。

期货

  • date - timestamp|datetime 必选 日期
  • instrument - str 必选 期货名称
  • open - float 必选 开盘价
  • high - float 必选 最高价
  • low - float 必选 最低价
  • close - float 必选 收盘价
  • settle - float 必选 结算价。期货每日有结算制度,因此需要结算价
  • open_intl - float 可选 持仓量
  • volume - float 必选 成交量
  • price_limit_status - float 可选

对于期货而言,复权因子字段不需要。

benchmark为基准数据,需要的字段有:

  • date - timestamp|datetime 必选 日期
  • instrument - str 必选 标的名称
  • close - float 必选 收盘价
  • open - float 可选 开盘价
  • high - float 可选 最高价
  • low - float 可选 最低价
  • volume - float 可选 成交量
  • amount - float 可选 成交额

对于基准数据而言,日期、标的名称、收盘价是必选的字段,其他的都是可选字段。