历史文档

【历史文档】算子样例-自定义运行模块使用简介

由clearyf创建,最终由small_q 被浏览 715 用户

更新

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

新版量化开发IDE(AIStudio):

https://bigquant.com/wiki/doc/aistudio-aiide-NzAjgKapzW

新版模版策略:

https://bigquant.com/wiki/doc/demos-ecdRvuM1TU

新版数据平台:

https://bigquant.com/wiki/doc/dai-PLSbc1SbZX

新版表达式算子:

https://bigquant.com/wiki/doc/dai-sql-Rceb2JQBdS

新版因子平台:

https://bigquant.com/wiki/doc/bigalpha-EOVmVtJMS5

\

导语

在因子开发或策略改进过程中除了参数寻优,有时我们可能希望多因子、模型等多个变量组合进行批量化并行计算。本文给大家介绍自定义运行模块,它可以方便地将已有的一个可视化策略并行化,给你的开发效率带来显著的提升。

并行计算功能介绍

在并行计算时,我们将一个可视化流程转化为bq_graph对象,与此同时我们建立了一个T.Graph字典用来记录流程中的模块和对应的参数。

  • 每个计算任务都可以用一个T.Graph参数字典表达,字典中记录了该任务中bq_graph流程中的每个模块和对应的参数。
  • 多个计算任务可以通过建立一系列参数列表parameters_list定义,列表中的每一项都是一个T.Graph参数字典。

我们将参数列表parameters_list和bq_graph对象传给T.parallel_map函数,就可以将每个任务自动分发给远程计算集群,由计算集群进行分布式计算并将每个任务的计算结果以列表形式返回。

并行计算功能示例

新建策略并导入模块

第一步:新建一个AI可视化策略,并从高级优化中拖入自定义运行模块,如图所示。

该模块不需要连接其它模块。拖入模块后通过代码模式查看策略:

可以发现,拖入自定义运行模块后,策略增加了一个T.graph对象,对象以字典的方式记录了流程中的模块和对应的参数。

例如上图中,m1模块是证券代码模块,此模块有start_date、end_date、market、instrument_list和max_count等变量。

修改函数

第二步:修改自定义运行模块中的自定义运行函数:

如图所示,在属性栏中我们可以自定义修改run函数。

我们以单因子测试并行任务并行为例,介绍run函数的编写流程:

run函数示例代码:

def bigquant_run(bq_graph, inputs):

    features =['pe_ttm_0', 'shift(close_0,5)/close_0','mean(close_0,10)/close_0']

    parameters_list = []
     
    for feature in features:
        parameters = {'m3.features':feature}
        parameters_list.append({'parameters': parameters})

    def run(parameters):
        try:
            print(parameters)
            return g.run(parameters)
        except Exception as e:
            print('ERROR --------', e)
            return None
        
    results = T.parallel_map(run, parameters_list, max_workers=2, remote_run=True, silent=True)

    return results


代码解读:

  • 首先定义需要并行的参数,我们将需要并行的因子存储在features列表中;
  • 明确任务需要并行的模块参数,本例中我们需要并行特征因子列表模块编号为m3,我们通过代码查看可以知道我们需要并行的模块参数为m3.features
  • 使用循环语句,构建参数组合字典并存储在parameters_list 列表中,每一个字典参数表示了一个任务。
  • 定义每个并行任务需要执行的函数即run函数,本例中我们使用try,except语句容错,如果任务计算成功则显示该任务计算的因子,如果任务计算失败则显示ERROR。
  • 通过T.parallel_map函数将并行任务发给网站/远程集群服务器计算,并将结果返回给自定义运行模块。
  • max_workers是并行的任务数量,
  • remote_run默认为False表示采用网站分配的资源计算;True表示采用集群服务器资源并行计算。由于平台资源有限因此进行了账号权限管理,需要使用并行计算功能的用户请联系小Q获取高级会员权限。
  • silent选项用来控制是否输出每个任务的过程日志。如果设置为True则输出每个任务的运行过程日志,如果设置为False则只会显示并行任务的运行进度条。

运行策略

第三步:定义run函数后运行策略,特别强调:这里必须运行整个画布,不能只运行“自定义运行”这个模块,否则会出异常。运行过程中会显示进度和日志。

结果查看

第四步:策略运行完毕后,我们可以进行结果查看。各任务的计算结果以列表的形式存储在自定义运行模块m4的缓存中,可以通过如下代码查看运行结果。

查看结果代码示例:

# 查看所有并行任务的运算结果
m4.result

# 查看第一个并行任务的运算结果
m4.result[0]

# 查看第一个并行任务的预测结果前5条记录
m4.result[0].predictions.read_df().head()

# 查看第一个并行任务的运算结果中m19回测模块的回测曲线
m4.result[0]['m19'].display()

自定义运行模块功能

提示:自定义运行属于高级优化模块,其调用的是整个可视化画布,因此不能单独运行该模块,而是点击 运行全部。

策略案例

https://bigquant.com/experimentshare/7464a1d10003468f9240f0236573028b

\

标签

多因子模型
评论
  • ```python T.parallel_map(run, parameters_list, max_workers=2, remote_run=True, silent=True) 这里面的parameters_list参数只能支持一个参数的修改? 比如像这样可以吗?我运行不报错,但很快就结束了 {'parameters':[{'m13.features':fruits_df.tolist()},{'m17.test_ds':'m6.left_data'},{'m17.number_of_trees':50}]} ``` \
  • 好像想明白了:如果是要修改多个参数,只要对parameters遍历,用g.run来设置就OK了。 g.run(parameters)
  • 不行,没有输出。
{link}