道一站 道一站
首页
  • 历史文明
  • 自我管理
  • 经济金融
  • 未来科技
  • 李笑来
  • 股票
  • 期货
  • 期权
  • 外盘
  • 量化
  • 区块
  • 认知
  • 数理
  • 收藏
  • 前端

    • JavaScript
    • TypeScript
  • 页面

    • HTML
    • CSS
  • 编程

    • C++
    • Python
    • Shell
    • 小程序开发
  • 笔记

    • 《Git》
    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
  • 技术文档
  • Linux
  • Docker
  • GitHub
  • 博客搭建
  • 效用工具
  • 周易基础
  • 奇门遁甲
  • 收藏资源
  • 学习方法
  • 实用技巧
  • 友情链接
  • 分类
  • 标签
  • 归档
关于

daotoyi

静水流深
首页
  • 历史文明
  • 自我管理
  • 经济金融
  • 未来科技
  • 李笑来
  • 股票
  • 期货
  • 期权
  • 外盘
  • 量化
  • 区块
  • 认知
  • 数理
  • 收藏
  • 前端

    • JavaScript
    • TypeScript
  • 页面

    • HTML
    • CSS
  • 编程

    • C++
    • Python
    • Shell
    • 小程序开发
  • 笔记

    • 《Git》
    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
  • 技术文档
  • Linux
  • Docker
  • GitHub
  • 博客搭建
  • 效用工具
  • 周易基础
  • 奇门遁甲
  • 收藏资源
  • 学习方法
  • 实用技巧
  • 友情链接
  • 分类
  • 标签
  • 归档
关于
  • 股票

  • 期货

  • 期权

  • 外盘

  • 量化

    • Quant24h
    • 平台

      • vnpy
      • vnpy-note
      • vnpy_SQLite_Mongo
      • vnpy_strategy
      • backtrader
      • backtraderArchive
      • Backtrader获取通信达期权数据回测
      • TqSdk
      • JoinQuant
    • 策略

    • 数据

    • 资料

    • 其他

  • 区块

  • 认知

  • 数理

  • 收藏

  • 投资
  • 量化
  • 平台
daotoyi
2023-10-07

Backtrader获取通信达期权数据回测

通达信股票软件有一个“盘后数据下载”的功能,可以下载股票、基金、期权等交易品种的日线和分钟线数据。其它实际使用通达信的券商软件,如招商证券的一户通,也可以使用这个功能下载。下载后的数据放在软件安装目录的vipdoc子目录下。如下图所示:
图1:通达信数据文件目录结构
其中期权日线数据在vipdoc\ds\lday目录下,上交所ETF基金日线数据在vipdoc\sh\lday目录下,深交所ETF基金日线数据在vipdoc\sz\lday目录。注意是‘lday’里的第一个字母是l(lion),不是123的1。

下载下来的数据是一个二进制文件,需要解析转换成回测引擎可以使用的数据。
在通达信软件里,股票、基金和期权的数据格式略有不同,但都是每32个字节一条记录。其中ETF基金日线数据的记录结构如下:
图2:ETF基金日线数据格式
精度1000的意思是转换出来的整数要除以1000才是真实的价格。比如收盘价格解析出来是一个整数3655,那么3655/1000=3.655,这才是真正的收盘价格。

期权数据的结构是:
图3:期权日线数据格式
利用Python的struct模块可以很方便地解析出数据内容。

解析一条ETF基金数据:

d = list(struct.unpack('<IIIIIfII', data[0:32]))
1

解析一条期权数据:

d = list(struct.unpack('<IffffIIf', data[0:32]))
1

完整的解释一个期权数据文件的代码:

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)
1
2
3
4
5
6
7
8
9
10
11

至此,我们就已经获得期权数据文件,可以进行下一步的工作了。

上次更新: 2023/10/10, 14:48:21
backtraderArchive
TqSdk

← backtraderArchive TqSdk→

最近更新
01
置身事内
10-10
02
基础知识|八卦五行天干地支
10-08
03
基础知识|推算年月日时的干支
10-08
更多文章>
Theme by Vdoing | Copyright © 2021-2023 Daotoyi | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式