历史文档

【历史文档】策略-策略回测

由undefined创建,最终由small_q 被浏览 2125 用户

更新

本文内容对应旧版平台与旧版资源,其内容不再适合最新版平台,请查看新版平台的使用说明

新版量化开发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

\

导语

完成了模型训练和股票预测,生成的股票排序,应该在何时买入卖出?行情突变,怎么止盈止损?交易费、成交率等怎么设置?这些都在“回测”模块中找到答案。

如下图所示,在AI策略开发中回测通常是策略构建的最后一步,通过Trade模块实现。回测是利用测试集数据的模型预测结果编写策略,并用测试集的历史数据对策略进行校验的过程。

图1{w:100}{w:100} \n AI策略的编写思路是利用AI模型的预测结果构建买卖交易逻辑,根据AI模型的类别不同,利用模型预测值构建的交易逻辑也不尽相同。例如本例的AI模板策略中根据每日股票的排序预测值构建买卖逻辑,每天卖出持仓中预测排名靠后的股票并买入当日预测排名靠前的股票。

回测机制简介

\n 图2{w:100}{w:100} \n BigQuant交易引擎把每一个K线当做一个事件,按照时间发生先后顺序,即从左往右依次运行。

图3{w:100}{w:100} \n 具体而言,回测程序在第一根K线上会依次调用初始化函数数据准备函数盘前处理函数主函数,从第二根K线起的每根K线会依次调用盘前处理函数和主函数。 \n 注意:最左侧黑色箭头表示只会在第一根K线会执行一次初始化函数。而每根K线上的灰箭头代表每根K线都会执行一次主函数。

函数详解

{w:100}{w:100}

初始化函数:通常设置手续费、滑点、买卖股票数量、换仓周期等全局变量。 数据准备函数:通常计算交易所需的信号、每日交易的股票列表等变量。 盘前处理函数:通常编写订单的撤销/更改等订单处理逻辑。 主函数:通常编写策略的换仓买卖、风险控制等核心交易逻辑。

如下图所示,在回测模块的属性栏中可以看到对应函数的编写位置:

每根K线回调细节,见下图:

{w:100}{w:100}

回测步骤

添加Trade模块

第一步: 在模块列表的 回测与交易 下找到 Trade(回测/模拟) 模块并拖入画布。

图4{w:100}{w:100}

连接模块

第二步:将 证券代码列表 和 StockRanker预测 模块连接至 Trade(回测/模拟) 。注意输入端, Trade(回测/模拟) 第一个输入端只接收 证券代码列表 。

图5{w:100}{w:100}

Trade参数属性设置

第三步:选中 Trade(回测/模拟) ,可在左侧属性栏更改初始资金、回测价格类型、成交率等交易参数;在主函数、数据准备函数、初始化函数中更改交易逻辑。我们先保持默认设置。

图6{w:100}{w:100}

Trade(回测/模拟)模块参数

交易参数设置

开始时间:start_date (str),设定值只在回测模式有效,在模拟实盘模式下为当前日期。一般不需要指定,自动继承证券代码列表模块里的开始日期。

结束时间:end_date (str),设定值只在回测模式有效,在模拟实盘模式下为当前日期。一般不需要指定,自动继承证券代码列表模块里的结束日期。

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

买入点:在何时下单买入。open=开盘买入,close=收盘买入;可选值有: ‘open’,‘close’;默认值是’open’。

卖出点:在何时下单卖出。open=开盘卖出,close=收盘卖出;可选值有: ‘open’,‘close’;默认值是’close’。

初始资金:默认值是1000000.0。

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

回测数据频率:股票、期货暂只支持日线、分钟级回测。

可选值有: ‘daily’和’minute’;默认值是daily。

回测价格类型:回测中买卖下单使用的价格, 支持真实价格或后复权(默认值)价格回测。

回测产品类型:交易品种类型,可选值有股票、期货,默认为股票。

基准代码:策略比较基准,不影响回测结果,一般传入指数代码,如000300.HIX(沪深300) 。更多A股指数代码请查看A股指数代码表。

主函数

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

数据准备函数

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

初始化函数

[回调函数]初始化函数,整个回测中只在最开始时调用一次,用于初始化一些账户状态信息和策略基本参数,context也可以理解为一个全局变量,在回测中存放当前账户信息和策略基本参数

盘前处理函数 \n

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

看不懂回测模块? 请移步回测模块详解 \n 看不懂策略的逻辑? 请移步AI模板策略交易逻辑解读

运行并查看结果

第四步:点击右上角 运行全部 ,等待策略回测完成并查看分析结果。

图7{w:100}{w:100} \n 生成的回测曲线和回测结果如何解读?查看下篇教程查看、分析结果

常见问题

编写策略并回测是策略构建中的核心内容,我们将常用功能和模板案例进行了归纳整理主要包括:

1.如何设置股票买卖比例? \n 2.如何设置手续费和滑点? \n 3.如何设置策略固定周期运行? \n 4.如何设置持仓股票持有固定天数后卖出? \n 5.如何设置下单数量为整百? \n 6.如何实现大盘风控? \n 7.如何实现个股的止盈止损?

如果您有上述策略开发方面的疑惑,请移步宽客学院查看自定义买入卖出专题

小结:至此我们完成了策略构建基本步骤。我们在构建策略后通常还需要对策略进行反复的评价、优化、测试才算完成策略开发。你会发现在BigQuant上开发策略只需调用策略模板、微调参数,然后将99%的时间、精力放在找因子和数据标注上。借助 BigQuant人工智能量化平台 ,你可无门槛使用AI做更好的量化策略。


\

标签

策略回测模型训练股票预测股票排序
评论
  • 如何设置我希望回测的股票集合?(而不是全部股票
  • 回测的日期可否与预测集不同?
  • 必须不同且不能有重叠,否则会未来
{link}