利用Backtrader进行期权回测之一:获取期权数据
程序员文章站
2022-11-05 20:07:21
最近在学习一些期权方面的知识,希望有一个期权的回测环境,方便自己做一些测试。初步做了一些功课之后,打算从通达信软件获得期权数据,并使用backtrader进行回测。编程语言使用python。下载期权数据通达信股票软件有一个“盘后数据下载”的功能,可以下载股票、基金、期权等交易品种的日线和分钟线数据。其它实际使用通达信的券商软件,如招商证券的一户通,也可以使用这个功能下载。下载后的数据放在软件安装目录的vipdoc子目录下。如下图所示:其中期权日线数据在vipdoc\ds\lday目录下,上交所ETF...
最近在学习一些期权方面的知识,希望有一个期权的回测环境,方便自己做一些测试。初步做了一些功课之后,打算从通达信软件获得期权数据,并使用backtrader进行回测。编程语言使用python。
下载期权数据
通达信股票软件有一个“盘后数据下载”的功能,可以下载股票、基金、期权等交易品种的日线和分钟线数据。其它实际使用通达信的券商软件,如招商证券的一户通,也可以使用这个功能下载。下载后的数据放在软件安装目录的vipdoc子目录下。如下图所示:
其中期权日线数据在vipdoc\ds\lday目录下,上交所ETF基金日线数据在vipdoc\sh\lday目录下,深交所ETF基金日线数据在vipdoc\sz\lday目录。注意是‘lday’里的第一个字母是l(lion),不是123的1。
解析期权数据
下载下来的数据是一个二进制文件,需要解析转换成回测引擎可以使用的数据。
在通达信软件里,股票、基金和期权的数据格式略有不同,但都是每32个字节一条记录。其中ETF基金日线数据的记录结构如下:
精度1000的意思是转换出来的整数要除以1000才是真实的价格。比如收盘价格解析出来是一个整数3655,那么3655/1000=3.655,这才是真正的收盘价格。
期权数据的结构是:
利用Python的struct模块可以很方便地解析出数据内容。
解析一条ETF基金数据:
d = list(struct.unpack('<IIIIIfII', data[0:32]))
解析一条期权数据:
d = list(struct.unpack('<IffffIIf', data[0:32]))
完整的解释一个期权数据文件的代码:
import struct
data_file = 'c:\zd_zsone\\vipdoc\ds\lday\9#90000262.day'
with open(data_file, mode='rb') as file:
data = file.read()
daily_data = []
daily_size = 32
for num in range( int(len(data) / daily_size) ):
d = list(struct.unpack('<IffffIIf', data[num * daily_size:(num+1) * daily_size]))
daily_data.append(d)
至此,我们就已经获得期权数据文件,可以进行下一步的工作了。
本文地址:https://blog.csdn.net/luoqingyong/article/details/107441948