部分量化交易者觉得一些内容不适合写到策略代码中,他们更希望从策略附件中调用这些内容(比如一些事先由“高深莫测的AI”选定的交易标的列表、一些平台还未提供的数据或其他各种“黑盒子因子”)。我们现在用一个excel文件为例(excel文件比txt和csv都复杂,如果您读取excel文件都没问题,那txt和csv都不在话下),介绍怎么读取附件内容。
首先是上传附件,通过代码编辑框上的“上传附件”按钮即可选择文件上传。真格量化允许您上传总共不超过1G的附件,单个附件的大小不能超过100M。这已经可以包含非常多的数据了。
要检查附件是否上传成功,可以点击“管理附件”按钮,能看到文件,说明上传成功。
为了读取excel文件,我们需要导入xlrd库。为了处理日期,我们需要导入datetime库。
然后,我们要定义两个用来读取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
就可以查看表的内容:
现在您就可以自由地在真格量化调用自己积累的各种外部数据和”黑盒子因子“啦。