【历史文档】算子-回测与交易
由polll创建,最终由small_q 被浏览 1818 用户
{{use_style}}
更新
本文内容对应旧版平台与旧版资源,其内容不再适合最新版平台,请查看新版平台的使用说明
新版量化开发IDE(AIStudio):
https://bigquant.com/wiki/doc/aistudio-aiide-NzAjgKapzW
新版模版策略:
https://bigquant.com/wiki/doc/demos-ecdRvuM1TU
新版数据平台:
https://bigquant.com/data/home
https://bigquant.com/wiki/doc/dai-PLSbc1SbZX
新版表达式算子:
https://bigquant.com/wiki/doc/dai-sql-Rceb2JQBdS
新版因子平台:
https://bigquant.com/wiki/doc/bigalpha-EOVmVtJMS5
\
回测与交易
极速回测(高频)
快速回测引擎,支持高频数据快速回测。不支持模拟交易和实盘。
输入: - input_data:输入数据,包含 date, price(价格), 和 position(仓位)
输出: - data: DataSource,完整交易和绩效数据,可以使用 data.read_df() 读取和查看详细数据。
表名: fastbacktest.v1
类别 | 显示名称 | 名称 | 类型 | 描述 | 必填/默认 |
---|---|---|---|---|---|
输入端 | 数据 | input_data | 通用 | 数据,必须包含price和position字段 | None |
输入参数 | 报表数据显示频率 | report_freq | str | 报表数据显示频率,s=秒,h=小时,d=天,12h表示报表按12小时做resample。用越小的周期数据越多,可能无法完全显示 | 1h |
费率 | commission_rate | float | 费率:小于0.1时表示按金额比例收取,大于等于0.1时表示按手数收取 | 0.0001 | |
无风险利率 | risk_free_rate | float | 无风险利率 | 0.0 | |
显示回测结果图表 | plot_charts | bool | 显示回测结果图表 | True | |
轨迹图显示笔数 | tick_plot_num | int | 轨迹图显示笔数 | 20 | |
持仓动态图显示时间数 | time_tick_plot_num | int | 持仓动态图显示时间数 | 200 | |
输出端 | 回测详细数据 | data | 通用 | 回测详细数据 |
多策略回测
多策略组合收益分析。思想是如果策略之间相关性不是很强,将多个策略的回测结果按策略各自分配的权重进行组合。组合的目的是为了平滑资金曲线。
表名:multi_strategy_analysis.v2
类别 | 显示名称 | 名称 | 类型 | 描述 | 必填/默认 |
---|---|---|---|---|---|
输入端 | 策略收益原始数据第1个 (一般自来于 | raw_perf_1 | 通用 | 策略收益原始数据第1个 (一般自来于 :doc:module_trade 的输出的raw_perf字段) |
None |
策略收益原始数据第2个 (一般自来于 | raw_perf_2 | 通用 | 策略收益原始数据第2个 (一般自来于 :doc:module_trade 的输出的raw_perf字段) |
None | |
策略收益原始数据第3个 (一般自来于 | raw_perf_3 | 通用 | 策略收益原始数据第3个 (一般自来于 :doc:module_trade 的输出的raw_perf字段) |
None | |
输入参数 | 策略收益原始数据列表 (一般自来于 | raw_perfs | code | 策略收益原始数据列表 (一般自来于 :doc:module_trade 的输出的raw_perf字段) |
[默认代码](javascript:void(0);) |
每个回测结果的权重 | weights | str | 每个回测结果的权重 | ||
再平衡周期 | rebalance_period | int | 再平衡周期 | 0 | |
开始日期 | start_date | str | 开始日期,默认是raw_perfs里的最小日期 | None | |
结束日期 | end_date | str | 结束日期,默认是raw_perfs里的最大日期 | None | |
基准指数 | benchmark | str | 基准指数 | 000300.SHA | |
回调函数 | prepare | code | 回调函数,准备数据 | [默认代码](javascript:void(0);) | |
回调函数 | initialize | code | 回调函数,初始化函数 | [默认代码](javascript:void(0);) | |
回调函数 | before_trading_start | code | 回调函数 ,策略交易单位周期开始前执行, I.code_python | [默认代码](javascript:void(0);) | |
初始资金 | capital_base | float | 初始资金 | 1000000.0 | |
自动取消无法成交订单 | auto_cancel_non_tradable_orders | bool | 自动取消无法成交订单:是否自动取消因为停牌等原因不能成交的订单 | True | |
回测数据频率 | data_frequency | choice | 回测数据频率:日线 (daily),分钟线 (minute) | daily | |
回测价格类型 | price_type | choice | 回测价格类型:真实价格(original),后复权(backward_adjusted) | 后复权 | |
回测产品类型 | product_type | choice | 回测产品类型:股票(stock), 期货(future) | 股票 | |
显示回测结果图表 | plot_charts | bool | 显示回测结果图表 | True | |
成交率限制 | volume_limit | float | 成交率限制:执行下单时控制成交量参数,默认值2.5%,若设置为0时,不进行成交量检查 | 0.025 | |
买入点 | order_price_field_buy | choice | 买入点:open=开盘买入,close=收盘买入 | open | |
卖出点 | order_price_field_sell | choice | 卖出点:open=开盘卖出,close=收盘卖出 | close | |
回调函数 | handle_data | code | 回调函数,策略主体逻辑函数 | [默认代码](javascript:void(0);) | |
用户自定义数据 | options | code | 用户自定义数据,在回调函数中要用到的变量,需要从这里传入,并通过 context.options 使用 | [默认代码](javascript:void(0);) | |
输出端 | 回测结果原始数据 | raw_perf | 通用 | 回测结果原始数据 |
Trade (回测/模拟)
量化交易引擎。支持回测和模拟实盘交易
表名:trade.v4
类别 | 显示名称 | 名称 | 类型 | 描述 | 必填/默认 |
---|---|---|---|---|---|
输入端 | 代码列表 | instruments | 通用 | 代码列表,如果提供了 prepare 函数,可以在 prepare 中覆盖此参数提供的值 |
None |
其他输入数据 | options_data | 通用 | 其他输入数据:回测中用到的其他数据,比如预测数据、训练模型等。如果设定,在回测中通过 context.options['data'] 使用 | None | |
回测历史数据 | history_ds | 通用 | 回测历史数据 | None | |
基准数据 | benchmark_ds | 通用 | 基准数据,不影响回测结果 | None | |
交易日历 | trading_calendar | 通用 | 交易日历 | None | |
输入参数 | 开始日期 | start_date | str | 开始日期,设定值只在回测模式有效,在模拟实盘模式下为当前日期,示例:2017-06-01。一般不需要指定,使用 代码列表 里的开始日期 | |
结束日期 | end_date | str | 结束日期,设定值只在回测模式有效,在模拟实盘模式下为当前日期,示例:2017-06-01。一般不需要指定,使用 代码列表 里的结束日期 | ||
初始化函数 | initialize | code | 初始化函数,[回调函数] 初始化函数,整个回测中只在最开始时调用一次,用于初始化一些账户状态信息和策略基本参数,context也可以理解为一个全局变量,在回测中存放当前账户信息和策略基本参数便于会话。 | [默认代码](javascript:void(0);) | |
主函数 | handle_data | code | 主函数,[回调函数] 必须实现的函数,该函数每个单位时间会调用一次, 如果按天回测,则每天调用一次,如果按分钟,则每分钟调用一次,由于我们现在数据只有日K,所以是按天回调。在回测中,可以通过对象data获取单只股票或多只股票的时间窗口价格数据。如果算法中没有schedule_function函数,那么该函数为必选函数。一般策略的交易逻辑和订单生成体现在该函数中。 | [默认代码](javascript:void(0);) | |
数据准备函数 | prepare | code | 数据准备函数,[回调函数] 准备数据函数,运行过程中只调用一次,在 initialize 前调用,准备交易中需要用到数据。目前支持设置交易中用到的股票列表,设置到 context.instruments。更多 | [默认代码](javascript:void(0);) | |
盘前处理函数 | before_trading_start | code | 盘前处理函数,[回调函数] 每个单位时间开始前调用一次,即每日开盘前调用一次,该函数是可选函数。你的算法可以在该函数中进行一些数据处理计算,比如确定当天有交易信号的股票池。 | [默认代码](javascript:void(0);) | |
成交率限制 | volume_limit | float | 成交率限制:执行下单时控制成交量参数,默认值2.5%,若设置为0时,不进行成交量检查 | 0.025 | |
买入点 | order_price_field_buy | choice | 买入点:open=开盘买入,close=收盘买入 | open | |
卖出点 | order_price_field_sell | choice | 卖出点:open=开盘卖出,close=收盘卖出 | close | |
初始资金 | capital_base | float | 初始资金 | 1000000.0 | |
自动取消无法成交订单 | auto_cancel_non_tradable_orders | bool | 自动取消无法成交订单:是否自动取消因为停牌等原因不能成交的订单 | True | |
回测数据频率 | data_frequency | choice | 回测数据频率:日线 (daily),分钟线 (minute) | daily | |
回测价格类型 | price_type | choice | 回测价格类型:前复权(forward_adjusted),真实价格(original),后复权(backward_adjusted) | 真实价格 | |
回测产品类型 | product_type | choice | 回测产品类型:股票(stock), 期货(future), 期权(option), 数字货币(dcc) | 股票 | |
显示回测结果图表 | plot_charts | bool | 显示回测结果图表 | True | |
只在回测模式下运行 | backtest_only | bool | 只在回测模式下运行:默认情况下,Trade会在回测和实盘模拟模式下都运行。如果策略中有多个M.trade,在实盘模拟模式下,只能有一个设置为运行,其他的需要设置为 backtest_only=True,否则将会有未定义的行为错误 | False | |
用户自定义数据 | options | doc | 用户自定义数据,在回调函数中要用到的变量,需要从这里传入,并通过 context.options 使用 | None | |
基准代码 | benchmark | str | 基准代码,不影响回测结果 | ||
输出端 | 回测详细数据 | raw_perf | 通用 | 回测详细数据 |
TradeX(模块化回测交易)
支持函数模块化的量化交易引擎。无缝支持回测和模拟实盘交易
表名: tradex.v1
类别 | 显示名称 | 名称 | 类型 | 描述 | 必填/默认 |
---|---|---|---|---|---|
输入端 | 代码列表 | instruments | 通用 | 代码列表,如果提供了 prepare 函数,可以在 prepare 中覆盖此参数提供的值 |
None |
回测历史数据 | history_ds | 通用 | 回测历史数据,如果不指定,将根据instruments从系统中读取 | None | |
基准数据 | benchmark | 通用 | 基准数据,如果不指定,将使用默认的基准数据。 | None | |
交易日历 | trading_calendar | 通用 | 交易日历,如果不指定,将使用默认交易日历 | None | |
initialize处理函数 | initialize_functions | 通用 | initialize处理函数 | None | |
handle_bar处理函数 | handle_bar_functions | 通用 | handle_bar处理函数 | None | |
输入数据 | options_data | 通用 | 输入数据:一般用来传入策略中要用到的数据。我们建议策略用到的数据在外面批量计算完成,并通过此参数传入使用,例如模型预测数据等。如果设定,在回测中通过 context.options['data'] 使用 | None | |
输入参数 | 开始日期 | start_date | str | 开始日期,设定值只在回测模式有效,在模拟实盘模式下为当前日期,示例:2017-06-01。一般不需要指定,使用 证券代码列表 里的开始日期 | |
结束日期 | end_date | str | 结束日期,设定值只在回测模式有效,在模拟实盘模式下为当前日期,示例:2017-06-01。一般不需要指定,使用 证券代码列表 里的结束日期 | ||
主函数 | handle_data | code | 主函数,[回调函数] 必须实现的函数,该函数每个单位时间会调用一次, 如果按天回测,则每天调用一次,如果按分钟,则每分钟调用一次,由于我们现在数据只有日K,所以是按天回调。在回测中,可以通过对象data获取单只股票或多只股票的时间窗口价格数据。如果算法中没有schedule_function函数,那么该函数为必选函数。一般策略的交易逻辑和订单生成体现在该函数中。 | [默认代码](javascript:void(0);) | |
数据准备函数 | prepare | code | 数据准备函数,[回调函数] 准备数据函数,运行过程中只调用一次,在 initialize 前调用,准备交易中需要用到数据。目前支持设置交易中用到的股票列表,设置到 context.instruments。更多 | [默认代码](javascript:void(0);) | |
初始化函数 | initialize | code | 初始化函数,[回调函数] 初始化函数,整个回测中只在最开始时调用一次,用于初始化一些账户状态信息和策略基本参数,context也可以理解为一个全局变量,在回测中存放当前账户信息和策略基本参数便于会话。 | [默认代码](javascript:void(0);) | |
盘前处理函数 | before_trading_start | code | 盘前处理函数,[回调函数] 每个单位时间开始前调用一次,即每日开盘前调用一次,该函数是可选函数。你的算法可以在该函数中进行一些数据处理计算,比如确定当天有交易信号的股票池。 | [默认代码](javascript:void(0);) | |
成交率限制 | volume_limit | float | 成交率限制:执行下单时控制成交量参数,默认值2.5% | 0.025 | |
买入点 | order_price_field_buy | choice | 买入点:open=开盘买入,close=收盘买入 | open | |
卖出点 | order_price_field_sell | choice | 卖出点:open=开盘卖出,close=收盘卖出 | close | |
初始资金 | capital_base | float | 初始资金 | 1000000.0 | |
自动取消无法成交订单 | auto_cancel_non_tradable_orders | bool | 自动取消无法成交订单:是否自动取消因为停牌等原因不能成交的订单 | True | |
回测数据频率 | data_frequency | choice | 回测数据频率:日线 (daily),分钟线 (minute) | daily | |
回测价格类型 | price_type | choice | 回测价格类型:前复权(forward_adjusted),真实价格(original),后复权(backward_adjusted) | 真实价格 | |
回测产品类型 | product_type | choice | 回测产品类型:股票(stock), 期货(future), 期权(option), 数字货币(dcc) | 股票 | |
显示回测结果图表 | plot_charts | bool | 显示回测结果图表 | True | |
只在回测模式下运行 | backtest_only | bool | 只在回测模式下运行:默认情况下,Trade会在回测和实盘模拟模式下都运行。如果策略中有多个M.trade,在实盘模拟模式下,只能有一个设置为运行,其他的需要设置为 backtest_only=True,否则将会有未定义的行为错误 | False | |
用户自定义数据 | options | doc | 用户自定义数据,在回调函数中要用到的变量,需要从这里传入,并通过 context.options 使用 | None | |
输出端 | 回测详细数据 | raw_perf | 通用 | 回测详细数据 |
初始化函数
设置手续费
设置手续费,如果不设置,则使用默认的
表名:trade_func_set_commission.v1
类别 | 显示名称 | 名称 | 类型 | 描述 | 必填/默认 |
---|---|---|---|---|---|
输入端 | 前置处理函数 | input_functions | 通用 | 前置处理函数 | None |
输入参数 | 收费模式 | mode | choice | 收费模式 | 订单/PerOrder |
买入成本 | buy_cost | float | 买入成本,成交额的比例,PerOrder/PerTrade/PerShare都要使用此参数 | 0.0003 | |
卖出成本 | sell_cost | float | 卖出成本,成交额的比例 | 0.0013 | |
最小成本 | min_cost | float | 最小成本,绝对值 | 5 | |
输出端 | 函数 | functions | 通用 | 函数 |
设置最大杠杆限制
设置资金使用的最大杠杠限制,e.g. 设置最大杠杆限制为2,实际资金是100w,将可以买入200w的股票。一般用于期货或者股票+对冲等策略。需注意正确使用
表名: trade_func_set_max_leverage.v1
类别 | 显示名称 | 名称 | 类型 | 描述 | 必填/默认 |
---|---|---|---|---|---|
输入端 | 前置处理函数 | input_functions | 通用 | 前置处理函数 | None |
输入参数 | 最大杠杆限制 | max_leverage | float | 最大杠杆限制,e.g. 设置最大杠杆限制为2,实际资金是100w,将可以买入200w的股票。一般用于期货或者股票+对冲等策略。需注意正确使用 | 1 |
输出端 | 函数 | functions | 通用 | 函数 |
\