部分量化交易者觉得一些内容不适合写到策略代码中,他们更希望从策略附件中调用这些内容(比如一些事先由“高深莫测的AI”选定的交易标的列表、一些平台还未提供的数据或其他各种“黑盒子因子”)。我们现在用一个excel文件为例(excel文件比txt和csv都复杂,如果您读取excel文件都没问题,那txt和csv都不在话下),介绍怎么读取附件内容。

文件内容

首先是上传附件,通过代码编辑框上的“上传附件”按钮即可选择文件上传。真格量化允许您上传总共不超过1G的附件,单个附件的大小不能超过100M。这已经可以包含非常多的数据了。

上传文件

要检查附件是否上传成功,可以点击“管理附件”按钮,能看到文件,说明上传成功。

查看文件

为了读取excel文件,我们需要导入xlrd库。为了处理日期,我们需要导入datetime库。

导入库

然后,我们要定义两个用来读取excel文件的函数。

首先是打开excel文件的函数:

打开excel

其次是逐行读取excel文件内容的函数:

读取excel

比如我们excel文件内容是这样的:

Excel内容

假设我们需要读取的数据在“Sheet1"表:

读取代码

我们给定附件名称(直接写文件名即可,无需路径),和数据表名(比如”Sheet1“),然后只要一行代码就能把表的内容读出来:

g.tables=excel_table_byname(filename, 0, sheetname)

我们将表的内容以全局变量的形式存在g.tables,这样我们在策略代码的其他地方都能调用表的内容。

因为xlrd直接读取excel的日期会将其转为浮点数,如果有需要,我们可以通过一个循环将excel表第一列的表示日期的浮点数转成datetime形式或者日期字符串形式。

datestring=datetime.datetime(*xldate_as_tuple(row[0],0))

row[0]=datestring.strftime('%Y-%m-%d')

根据需要g.tables=excel_table_byname(filename, 0, sheetname)这个语句可以放在OnStart或者OnMarketQuotationInitialEx部分或者您需要读取表内容的任何地方。

我们用

for item in g.tables:


    print item

就可以查看表的内容:

已经读取内容

现在您就可以自由地在真格量化调用自己积累的各种外部数据和”黑盒子因子“啦。