A. 如何搭建自己的股票高频数据库(Python)
二话不说,先上结果。本文阐述了以下几个方面:
下图是编写好的数据接口提取数据的示例。该数据接口支持多标的、多品种(股票、指数一起提取)、多字段、多时间提取。并且支持不复权、后复权、等比前复权提取(前复权不太实用就没有做)。而且速度巨快,没有数据量的限制。如果你也觉得很香,请接着往下看,本文将手把手教你搭建这样的数据库。
数据库搭建需要用到一些第三方库,在各位动手之前请安装:
本文的方法不涉及到常用的数据库(不涉及MySQL、MongoDB),思路非常简单,请各位放心食用。主要是使用pyarrow来加强代码性能。虽然不涉及到常用数据库,但这是我目前能想到的最有效的方法。
正所谓“巧妇难为无米之炊”,想搭建高频数据库,就需要一个数据源获取高频数据。在此,我推荐聚宽作为我们的数据源。 聚宽账号的申请请点这里。新人用户有每日100万条数据,DataFrame的一行算一条,请各位务必珍惜自己的数据量。(不过我是正式用户了,每天两个亿,就不太在意这一点哈哈。)
非会员的100万条数据量能干啥?我们来简单计算以下:每个交易日有240条数据(4个小时,240条分钟k线),假设一年有250个交易日,每只股票每年需要占用60000条数据。也即一日的数据量能够提取一只股票16年(100/6=16.66667)左右的股票分钟数据。相当于数据库的搭建过程还是相当艰难的,每天耗尽数据量只能下载好一只股票的数据。(白嫖是这样的啦,如果有条件可以联系聚宽客服,购买正式账号)
我们这里假设我们的数据库记录2015年至今的股票分钟数据。(当然我自己的数据库记录的是2005年1月1日的全A股分钟数据)这里,我们以贵州茅台(股票代码 600519.XSHG)为例,演示数据的提取与保存。先看看数据如何从接口提取出来(这里需要用到各位申请的聚宽账号):
来看看代码运行的结果。
数据提取后,自然需要把数据保存起来。pandas.DataFrame有很多方便的方法可以将数据保存下来。为做对比,这里将数据保存为csv格式和ftr格式。
相对应的,我们可以用这样的代码将保存好的数据读取进来。虽然pandas有read_feather函数,可以直接将ftr文件读取进来,但这个速度比直接调用pyarrow的更慢一些。考虑到代码性能,这里直接从pyarrow调用read_feather函数。
虽然两种格式都能将数据完整地保存下来,但读取速度上,ftr文件占据着绝对的优势。因此,我们考虑到数据库的性能以及数据库所占空间,我们选择使用ftr格式储存数据。feather正如他的名称,像羽毛一样轻,它所占的空间会比csv更小。这是一种不占空间,读取速度又快的文件格式,太香了!
在前文中我提到了行情数据的提取、保存方法,并强调了一定要提取不复权的数据。这是为了与复权因子结合,还原各种形式的复权数据。至于复权的详细定义,请参看 网络。
随便打开一个股票看盘软件,大致会有3种复权方式,即前复权、不复权、后复权。按照我自己的想法,可以这么理解:
在这样的情况下,如果记录价格数据,记录前复权的数据是最没有意义的,因为隔一段时间,历史的价格就全变了。如果只做收益率相关研究的话,记录后复权数据是可以的。然而,我们这里要搭建数据库,所以采取“记录不复权数据”加上“复权因子”还原的方法。
我们着手提取复权因子。在提取之前,不妨再理顺一下思路:
思路理顺了,我们来看看后复权因子的提取方法:
有了复权因子,如何计算复权价格?请接着看第3节——数据接口编写。
提取了行情数据和复权因子数据,应当找个地方把它们存放起来。我分了两个文件夹来保存我的数据。
在你搜集了足够多只股票的分钟数据后,就能够来到这一步,编写一个数据接口方便调用数据。
数据接口的编写重难点在于股票价格复权的计算。这里同样以贵州茅台(股票代码 600519.XSHG)为例来演示如何进行复权的计算。复权的核心在于下面这个公式:
[公式]
先来看看我们如何提取贵州茅台在一段时间(这里为2015-01-01至2021-09-08)内的后复权分钟数据。(这里千万不能将交易量和交易额一起拿去复权了。只有价格数据需要复权。(我不太确定交易量要不要,要的话我就改一改嘿嘿))
看看代码运行的效果。
那么,等比前复权该如何实现呢?其实很简单,只需要在框定了复权因子的时间后,让复权因子全序列除以最后一个复权因子,即得到前复权因子。将这个前复权因子乘上不复权的价格,即可得到等比前复权的价格数据。
以下是数据接口的全部代码,里面有挺多细节(但挺简单的),我就不再赘述了。
要更新数据库的数据,则是将数据库中的所有数据文件逐个读取进来,取最后一天作为start_date,然后取今天作为end_date。将新数据合并到原有的DataFrame中并保存就完成了数据的更新。数据更新比较耗时,也需要一定的数据量。不过,不论如何,我们来看看数据更新的代码。
在编写完这些代码后,我把这些代码整合成了一个python文件【high_freq_db.py】放在了site-package中,方便以后数据的调用和更新。
亲爱的读者,感谢你读到这里。本文讲述了我搭建我的股票高频数据库的方法。毕竟我的专业是金融而非计算机,难免会有不足的地方,恳请大家在评论区指出。(华工封校了,我也快疯了,所以一天写了两篇东西。。。。)
另外,这个数据库完全搭建起来之后会非常大(行情数据占80GB左右,包含指数和个股ftr文件),维护起来也比较费时费力,就不对外公布了(我也不知道怎么公布【手动捂脸】)。如确有需要,可以和我私信。
再次感谢大家的阅读!
——————————————————
2022年5月27日更新:
有不少小伙伴想要这个数据,目前我已经整理好上传至网络网盘啦。数据和完整代码私聊获取。
获取数据请只用于学习,勿直接用于投资决策!
B. 怎么做实时的股票数据库
如果主站提供有相关的接口的话,可以调主站的接口.如果主站不提供相关接口.那就不不断抓取.获取最新的信息了.
C. 镶$エ鏁版嵁搴
镶$エ鏁版嵁搴撴槸涓绉崭笓闂ㄧ敤浜庡瓨鍌ㄣ佺$悊鍜屽垎鏋愯偂绁ㄧ浉鍏虫暟鎹镄勬暟鎹搴撶郴缁熴
镶$エ鏁版嵁搴撶殑镙稿绩锷熻兘鏄鎻愪緵鍏ㄩ溃銆佸嗳纭鍜屽疄镞剁殑镶$エ鏁版嵁銆傝繖浜涙暟鎹鍖呮嫭浣嗕笉闄愪簬镶$エ浠锋牸銆佹垚浜ら噺銆佸竞鍊笺佸竞鐩堢巼銆佹疮镶℃敹鐩娿佽偂鎭鐜囩瓑锘烘湰淇℃伅锛岃缮鍖呮嫭鍏鍙哥殑璐㈠姟鏁版嵁銆佹柊闂诲姩镐併佸垎鏋愬笀鎶ュ憡绛夋繁鍏ヤ俊鎭銆傞氲繃镶$エ鏁版嵁搴掳纴鎶曡祫钥呭彲浠ユ柟渚垮湴銮峰彇镓闇鏁版嵁锛屼负鎶曡祫鍐崇瓥鎻愪緵链夊姏鏀鎸併
镶$エ鏁版嵁搴撶殑璁捐¢氩父闇瑕佽冭槛鍒版暟鎹镄勭粨鏋勫寲鍜屾爣鍑嗗寲銆傝繖镒忓懗镌鏁版嵁闇瑕佷互涓瀹氱殑瑙勫垯鍜屾牸寮忚繘琛屽瓨鍌锛屼互渚垮悗缁镄勬煡璇㈠拰鍒嗘瀽銆傚悓镞讹纴鏁版嵁搴撹缮闇瑕佸叿澶囬珮鏁堢殑鏁版嵁澶勭悊鑳藉姏锛岃兘澶熷簲瀵瑰ぇ閲忕殑鏁版嵁璇诲啓镎崭綔锛岀‘淇濇暟鎹镄勫疄镞舵у拰鍑嗙‘镐с
鍦ㄥ疄闄呭簲鐢ㄤ腑锛岃偂绁ㄦ暟鎹搴揿箍娉涘簲鐢ㄤ簬閲戣瀺鍒嗘瀽銆侀噺鍖栦氦鏄撱侀庨橹绠$悊绛夐嗗烟銆备緥濡傦纴閲戣瀺鍒嗘瀽甯埚彲浠ラ氲繃镶$エ鏁版嵁搴撴煡璇㈢壒瀹氲偂绁ㄧ殑铡嗗彶浠锋牸鏁版嵁锛岃繘琛岃秼锷垮垎鏋愬拰棰勬祴銆傞噺鍖栦氦鏄撹呭彲浠ュ埄鐢ㄦ暟鎹搴扑腑镄勫疄镞舵暟鎹锛岀紪鍐欎氦鏄撶瓥鐣ュ苟杩涜屽洖娴嬨傞庨橹绠$悊浜哄憳鍒椤彲浠ラ氲繃鏁版嵁搴撶洃鎺ц偂绁ㄥ竞鍦虹殑娉㈠姩鍜岄庨橹锛屽强镞堕噰鍙栧簲瀵规帾鏂姐
镐讳箣锛岃偂绁ㄦ暟鎹搴撴槸閲戣瀺棰嗗烟涓嶅彲鎴栫己镄勯吨瑕佸伐鍏凤纴瀹冩彁渚涗简鍏ㄩ溃銆佸嗳纭鍜屽疄镞剁殑镶$エ鏁版嵁锛屼负鎶曡祫钥呭拰閲戣瀺链烘瀯鎻愪緵浜嗗己澶х殑鍐崇瓥鏀鎸併傞殢镌绉戞妧镄勮繘姝ュ拰閲戣瀺甯傚満镄勫彂灞曪纴镶$エ鏁版嵁搴撶殑锷熻兘鍜屽簲鐢ㄤ篃灏嗕笉鏂镓╁𪾢鍜屾繁鍖栥
D. 开发炒股软件,从哪里获得股票数据
行情数据源在上交所和深交所。需要购买。而且很贵。
象我们平常看到行情,是券商营业部所买,我们连到他们服务器,而接收到数据。
P2P数据接口使用说明(1)2009-03-18 08:58接口使用说明:
1. 压缩包包含四个文件,分别为P2P.exe,P2P.CFG,zlib.dll和使用说明.txt,可以解压到任意盘任意目录下使用。
2. 支持的行情分析软件有:
(1) 分析家2006,2005等,要求分析家主窗口标题最前面的几个字是"分析家 -",是否是破解版关系不大,最好是下载分析家官方网站的正版分析家,网址是http://www.fxj.com.cn,分析家其他版本号是否支持,我也没全做试验。
(2) 飞狐交易师,支持飞狐交易师,要求飞狐交易师主窗口标题最前面的几个字是"飞狐交易师"或"证券分析师",是否是破解版关系不大,最好是支持正版,用正版的。
(3) 大智慧新一代,要求大智慧主窗口标题最前面的几个字是"大智慧Level" 支持的版本号有 09.0226,08.0907,08.0801,07.0205 共四个。
注:如果分析软件的窗口标题不符合上面说的,则分析软件无法接收数据。以上三个分析软件最好都是正版的,只要下载正版的软件,安装后,无需做任何修改即可使用。接口再次说明一下,接口中的四个文件解压到任意目录下使用都可以,而无需解压到某个分析软件的某个目录下,或替代某个分析软件的某个文件。接口完全是绿色的,无需安装,也不会在注册表中留下任何信息。
3. 每天9:15分以后用行情软件中的数据管理功能先清除当天的行情数据,然后把右下角“发送数据”发送数据前面的钩选上。
4. 如果不能在开盘前打开该软件,比如10点半才打开,那么该接口会自动补充10点半之前的行情数据,为了能够尽快的把前面的数据补充完毕,请把速度调节到100以上。但如果是飞狐,则把该值调低一些,否则飞狐会来不及处理数据,把大量的数据放到内存中,造成飞狐使用内存越来越大,最后由于内存耗完造成飞狐或接口非法退出。大智慧和分析家则不存在这个问题。
5. 收盘后,该接口具有白天行情的回放功能,回放前,最好先清除行情软件中当天的行情数据。
6. 该接口由于是P2P接收数据,因此数据接收需要种子,只有和别的种子连上了,你就能接收数据了,你至少要和一个种子连上,当然,你连上别的种子后,你也就能称为种子了,你也就能为别的人提供数据服务功能了。
7. 两个人要连接成功,最好两个人中有一个人的IP地址是公网地址,如果两个全是内网地址则相互无法直接联通,必须借助第三方才能联通,该方法这里不再介绍了。
8. 如果网络情况比较良好,则行情数据的延时一般不会大于0.5秒。
9. 接口的P2P连接信息中的字段说明
(1). 远程完成--为该IP接收到完整数据包的个数。
(2). 远程请求--为该IP请求你发送的数据包序号。
(3). 本机请求--为本机请求远程发送数据包序号。
(4). 请求返回--远程响应本机请求的次数。
E. 如何开发股票交易软件
股票软件开发的方法如下:
1、股票软件开发定制分析:然后把它用软件工程开发语言(形式功能规约,软件需求分析就是回答做什么的问题。一个对用户的需求进行去粗取精、去伪存真、正确理解。即需求规格说明书)表达进去的过程。本阶段的基本任务是和用户一起确定要解决的问题,建立软件的逻辑模型,编写需求规格说明书文档并最终得到用户的认可。需求分析的主要方法有结构化分析方法、数据流程图和数据字典等方法。本阶段的工作是根据需求说明书的要求,设计建立相应的软件系统的体系结构,并将整个系统分解成若干个子系统或模块,定义子系统或模块间的接口关系,对各子系统进行具体设计定义,编写软件概要设计和详细设计说明书,数据库或数据结构设计说明书,组装测试计划;
2、股票软件开发设计:也可以是可组合、可分解和可更换的功能单元。模块,股票软件设计可以分为概要设计和详细设计两个阶段。实际上软件设计的主要任务就是将软件分解成模块是指能实现某个功能的数据和程序说明、可执行程序的顺序单元。可以是一个函数、过程、子程序、一段带有顺序说明的独立的顺序和数据。然后进行模块设计。概要设计就是结构设计,其主要目标就是给出软件的模块结构,用软件结构图表示。详细设计的首要任务就是设计模块的顺序流程、算法和数据结构,主要任务就是设计数据库,常用方法还是结构化顺序设计方法;
3、股票软件开发定制编码:即写成以某一顺序设计语言表示的“源程序清单”充沛了解软件开发语言、工具的特性和编程风格,软件编码是指把软件设计转换成计算机可以接受的顺序。有助于开发工具的选择以及保证软件产品的开发质量;
4、股票软件开发测试:关键在于理解测试方法。不同的测试方法有不同的测试用例设计方法。两种常用的测试方法是白盒法测试对象是源程序,股票软件测试的目的以较小的代价发现尽可能多的错误。要实现这个目标的关键在于设计一套出色的测试用例(测试数据和预期的输出结果组成了测试用例)如何才干设计出一套出色的测试用例。依据的顺序内部的逻辑结构来发现软件的编程错误、结构错误和数据错误。结构错误包括逻辑、数据流、初始化等错误。用例设计的关键是以较少的用例覆盖尽可能多的内部顺序逻辑结果。白盒法和黑盒法依据的软件的功能或软件行为描述,发现软件的接口、功能和结构错误。其中接口错误包括内部、外部接口、资源管理、集成化以及系统错误;
5、股票软件开发与维护:对软件产品所进行的一些软件工程的活动。即根据软件运行的情况,维护是指在已完成对软件的研制(分析、设计、编码和测试)工作并交付使用以后。对软件进行适当修改,以适应新的要求,以及纠正运行中发现的错误。编写软件问题演讲、软件修改演讲。
F. 在哪里可以找到股票历史数据形成的数据库
在股票行情软件中,通过K线图可以查看历史数据,步骤如下:
1. 打开股票行情软件;
2. 输入要查看的股票代码,并按【ENTER】键;
3. 进入股票分时走势图,点击F5即可查看日K线图;
4. 在日K线图上,通过按上下方向键调整时间,向下键可以显示上市以来的所有日K线,向上键则显示最近的日K线,同时按向上键还会放大日K线,使数据更清晰可见;
5. 将鼠标移到每一根日K线上,可以查看当日的K线详情,包括最高价、最低价、成交价、成交量、涨跌幅及换手率等数据;
6. 双击K线,还可以查看当日的股票走势图,更加直观地了解股价变化。
此外,除了软件自带的K线图功能,还可以访问各大财经网站或专业的数据平台获取更详尽的历史数据。这些平台通常会提供丰富的历史数据资源,包括但不限于股票的价格走势、交易量、财务指标等,帮助投资者进行深入的分析和研究。
对于投资者而言,掌握这些工具和资源至关重要。通过分析历史数据,投资者可以更好地理解市场趋势,做出更加明智的投资决策。无论是个人投资者还是机构投资者,都可以从历史数据中找到宝贵的信息,为自己的投资策略提供支持。
因此,无论是通过软件自带功能还是访问专业平台,获取股票历史数据都是十分必要的。这些数据不仅有助于投资者了解市场的过去,还能为预测未来的市场走势提供重要的参考依据。
G. 量化投研基础设施:股票日频数据库的搭建
搭建本地股票日频数据库,为量化投研提供坚实基础
背景与需求
本文旨在手搓一个股票日频数据库,以满足量化投资书籍编写与本地数据接口实现的需求。使用tushare作为数据源,提供稳定可靠的数据,同时,通过代码实现数据库搭建,便于后续章节的深入探讨与因子计算。
准备工作
选用tushare作为数据来源,安装库并获取token。考虑数据储存方式,推荐使用交易日为单位的文件夹结构,结合feather文件提高读取速度,确保高效数据接口的实现。复权数据处理也纳入考量,为量化分析提供完整数据集。
数据库搭建与优化
采用交易日为更新单位,简化数据库维护流程。选择feather文件格式,利用pandas的高效性能,实现数据的快速读写。在数据接口设计上,支持按股票代码、日期、复权方式与字段查询,确保研究需求的灵活满足。复权操作确保数据的准确性和分析的可靠性。
Python实现与功能
代码实现包括数据提取、数据接口设计与数据更新功能。数据提取部分遍历交易日,合并股票日度行情与复权因子,保存至feather文件。数据接口提供按参数查询所需数据的能力,数据更新功能确保数据库的及时更新,满足研究与分析需求。
测试与应用
通过示例展示了如何调用接口获取特定股票的后复权数据与全市场数据,验证了数据接口的灵活性与高效性。量化研究应聚焦于核心问题,而非基础设施层面的细节,确保在这些基础上深入研究,实现真正意义上的价值。
H. 如何下载股票历史成交数据到Excel或txt
以华中智能股票软件为例:(以Think pad X13 锐龙版笔记本电脑,Windows 10 操作为例)首先切换到要下载数据的股票K线形态,按“F1”进入“日线某某股票历史成交”,点击鼠标右键->数据导出->导出所有数据->在“请选择导出的类型”中选择excel或txt
补充资料:
如何获取所有股票历史数据:
如果要对股市进行分析,首先就要获取所有股票的历史数据,只有通过股票的历史数据,我们才能分析出股市的规律。
(以Think pad X13 锐龙版笔记本电脑,Windows 10 操作为例)
一、工具/原料
1、EXCEL2007或者以上版本,不能使用WPS
2、电脑1g内存1核处理器及以上配置
3、拥有较强逻辑分析能力以及少量智慧及以上的大脑一颗
方法/步骤:
第一步,获取股票代码,复制其中一部分到第一个工作表A4到A127,然后通过程序把每一个代码写入到不同的工作表A2位置,并对该工作表以该股票代码命名。程序如下:
Sub 工作表命名()
For i = 4 To 127
Sheets(i).Range("a2") = "'" & Sheets(1).Range("a" & i)
Next i
For i = 4 To Sheets.Count
Sheets(i).Name = Sheets(i).Range("a2").Value
Next
End Sub
第二步,获取股票历史数据。代码如下:
Private Function GetSource(sURL As String) As String
Dim oXHTTP As Object
Set oXHTTP = CreateObject("MSXML2.XMLHTTP")
oXHTTP.Open "GET", sURL, False
oXHTTP.Send
GetSource = oXHTTP.responsetext
Set oXHTTP = Nothing
End Function
Sub 历史数据()
Dim objXML As Object
Dim txtContent As String
Dim i As Integer
Dim strCode As String
Dim gp As String
Dim kaishihang
Dim arr, arr1, arr2, arr3, arr4, arr5, arr6, arr7, arr8, arr9, arr10, arr11
On Error Resume Next
EndRow = Range("a65536").End(xlUp).Row
startRow = 4
If startRow <= EndRow Then
Range(Cells(startRow, 1), Cells(EndRow, 11)).Value = ""
Else
Exit Sub
End If
Set objXML = CreateObject("Microsoft.XMLHTTP")
gp = [A2]
For h = 1 To 4
For m = 1 To 4
kaishihang = [A65535].End(xlUp).Row
nian = Replace(Str(Year(Now) + 1 - h), " ", "")
ji = Replace(Str(4 + 1 - m), " ", "")
With objXML
.Open "GET", "http://quotes.money.163.com/trade/lsjyj_" + gp + ".html?year=" + nian + "&season=" + ji + "", False
.Send
If objXML.Status = 200 Then
txtContent = .responsetext
arr = Split(txtContent, "'>