![量化研究体系:以7大模块为核心](https://wfqqreader-1252317822.image.myqcloud.com/cover/955/43737955/b_43737955.jpg)
1.1 股票日频率行情数据下载脚本
本节脚本是基于万得量化接口下载股票日频率行情数据的案例。通过修改万得量化接口中的WSD函数的参数,这个案例就可以改成其他数据下载脚本。
程序的整体流程是:查询数据库的最后更新日期,然后从最后更新日期开始更新到最新日期。如果下载中万得量化接口失去响应,则启动循环尝试的程序,否则自动更新直至完成,最后启动下一个数据更新脚本。
如果进入循环尝试的脚本中,则尝试5次,若依然下载不成功,则关闭本程序,重新启动Matlab程序并再次运行这个脚本;若尝试在5次以内成功,则跳出这个脚本继续运行直至完成,最后启动下一个数据更新脚本。
脚本代码如下。脚本的抬头部分是程序的基本信息和脚本功能说明。
![](https://epubservercos.yuewen.com/6BD6CE/23020635709727606/epubprivate/OEBPS/Images/42052_25_1.jpg?sign=1739341373-NfTqXTQok14Ga4cIRD0Fg2RiWbc0Vm4y-0-e9f41fddd876ab3292544878a824205c)
下面部分是一些下载数据的前期工作,包括清理前一个程序的遗留变量、启动量化接口、连接数据库。
![](https://epubservercos.yuewen.com/6BD6CE/23020635709727606/epubprivate/OEBPS/Images/42052_25_2.jpg?sign=1739341373-ny3b2obtfuezk1XSNGnNuEKzg8m0CDY2-0-a5463726aee08deb8cebb713fb3478b9)
在做好数据更新的准备工作之后,接下来要进行数据的更新,首先获取更新日期及股票代码,然后进行具体的数据更新。
![](https://epubservercos.yuewen.com/6BD6CE/23020635709727606/epubprivate/OEBPS/Images/42052_26_1.jpg?sign=1739341373-AQSVPjp4Ebl2l9CiF8z3gEz4uHPFUso4-0-9a703c431be44e664800c49038653dd0)
下面以新增挂牌股票的更新为例进行演示。
![](https://epubservercos.yuewen.com/6BD6CE/23020635709727606/epubprivate/OEBPS/Images/42052_26_2.jpg?sign=1739341373-fohpcruzvWdrgwDMbFlQZ99Rn5p37pMJ-0-4d67afde90acc4b6790448a6bb34058e)
![](https://epubservercos.yuewen.com/6BD6CE/23020635709727606/epubprivate/OEBPS/Images/42052_27_1.jpg?sign=1739341373-ieLbDV93DvQrg3aSXUe2zMxgY9cYMF8T-0-7de1a95fcf5493e632d074ed8d444e3d)
上面代码中,当判断响应无效后调用repeat_and_quit,这个函数的功能是重新调用5次WSD函数来获取股票数据。如果连续5次依然响应无效,则关闭Matlab程序重新启动一次。输入参数包括量化接口对象w、存储数据的变量temp_data、目标股票new_stock{i}、最新股票列表code_new、起始时间2000-01-04、终止时间end_date、目标数据库stock_daily_market_data、重启程序的批文件stock_market_data_to_sql.bat,最后是目标股票的数据字段。
接下来下载对应的数据。
![](https://epubservercos.yuewen.com/6BD6CE/23020635709727606/epubprivate/OEBPS/Images/42052_27_2.jpg?sign=1739341373-boNL9J268P5uzo0w6PLe4iquuVW2czUK-0-94a9af8eb0445deb6dfef9acaa074606)
![](https://epubservercos.yuewen.com/6BD6CE/23020635709727606/epubprivate/OEBPS/Images/42052_28_1.jpg?sign=1739341373-ILe43y3ohVDdyN0RFMAoLRDibQ0igfoS-0-a29f98629b25ae19a313ccadc5df8c2e)
这一部分用于更新已经挂牌的股票的数据,包括取出股票列表的数字部分、循环MySQL数据库中的历史股票列表、提示历史挂牌股票的更新进度、找到目标股票的最后更新日期、下载目标股票从最后更新日期至end_date的数据。
![](https://epubservercos.yuewen.com/6BD6CE/23020635709727606/epubprivate/OEBPS/Images/42052_28_2.jpg?sign=1739341373-okfViIx85AO8JHWZML7xC7dRa5A13VkE-0-1e4a6a1355d2bd08468f8bd87cecbf5f)
在下载的时候,有些情况需要进行相应的处理,比如数据已经更新到最新,或者没有数据、指标无效、股票已经摘牌,或者接口异常等,具体见下面的代码。
![](https://epubservercos.yuewen.com/6BD6CE/23020635709727606/epubprivate/OEBPS/Images/42052_28_3.jpg?sign=1739341373-ymNnrBtbTgntNnshuiuINtU1HFxWULp4-0-9780c504f1ca054c6fea87f6ed143581)
![](https://epubservercos.yuewen.com/6BD6CE/23020635709727606/epubprivate/OEBPS/Images/42052_29_1.jpg?sign=1739341373-Rv7eO3gDxpdFAzhwwfn54aPVFub021UP-0-aae59049e4dc23fa94fb6f64aefc7ebe)
上面代码中的repeat_and_quit函数,用于在万得响应无效的时候启动尝试下载的模式。后面在本数据更新程序的最后,会详细对这一程序进行介绍。下面接着介绍本程序中进行数据上传之前的准备代码,具体如下。
![](https://epubservercos.yuewen.com/6BD6CE/23020635709727606/epubprivate/OEBPS/Images/42052_29_2.jpg?sign=1739341373-Ef3XnXyzSjjtgbLNWp1cRv6HoKICsEPN-0-1ee052780a35f5b582f01e514517d7c3)
同前面程序注释中说明的,有些万得版本中的第17列数据无法直接在下面调用的datainsert中上传,所以通过tt{:}取出日期再存回,去掉一层元胞。如果使用者的万得接口没有这个问题,可以注释掉下面这几行代码。
![](https://epubservercos.yuewen.com/6BD6CE/23020635709727606/epubprivate/OEBPS/Images/42052_29_3.jpg?sign=1739341373-Tf228JUY03B53TcyzQtIfhkLByBmYNT0-0-e23f9f0a2a4c469be8e8ab5d054ca87c)
接下来向MySQL数据库上传数据,数据更新结束之后,发送邮件提示程序更新结束,并且关闭万得量化接口和数据库。
![](https://epubservercos.yuewen.com/6BD6CE/23020635709727606/epubprivate/OEBPS/Images/42052_29_4.jpg?sign=1739341373-7a4MKOHPGJc0FbdAs4D5mxC3TfPSM27d-0-e39c2a8f411552dac4aeb43cabeb2fe7)
![](https://epubservercos.yuewen.com/6BD6CE/23020635709727606/epubprivate/OEBPS/Images/42052_30_1.jpg?sign=1739341373-VMQyHze97TzElBE1H1yDY1Dhk54N73fC-0-4ad1997b5945b0f3b4a29f3a7d76d445)
前面代码中有一个repeat_and_quit函数,用于在万得响应无效的时候启动尝试下载的模式。代码如下。
![](https://epubservercos.yuewen.com/6BD6CE/23020635709727606/epubprivate/OEBPS/Images/42052_30_2.jpg?sign=1739341373-twYBv8gk0gBHNzkVrHRY1MyYDlFumOep-0-2bb14d2a4fa7a6510660987da7a8a50b)
![](https://epubservercos.yuewen.com/6BD6CE/23020635709727606/epubprivate/OEBPS/Images/42052_31_1.jpg?sign=1739341373-7zd49FKTlj0SW29kZTKZTQ5EJyAgKJTX-0-1804889d5bd4ffd37ba7898ca742dccc)
![](https://epubservercos.yuewen.com/6BD6CE/23020635709727606/epubprivate/OEBPS/Images/42052_32_1.jpg?sign=1739341373-xbA9rmo9Ni18tWtjTkyd5HSpNuAWfWdw-0-5f06b122c8ddc110a02997a3395ff648)
如果连续尝试5次依然显示万得响应无效,repeat_and_quit函数会启动批文件脚本并关闭本脚本。bat文件的代码如下:
![](https://epubservercos.yuewen.com/6BD6CE/23020635709727606/epubprivate/OEBPS/Images/42052_32_2.jpg?sign=1739341373-g7Gtvki3zXjP7ohTlV1WST4qyAFOOn6W-0-7564b91cda986ecd20cc515a71174540)