前几天写了一篇介绍股票交易策略的图文「赚钱是刚需,如何正确的交易股票?」,引起一些关注者的兴趣,时不时在后台留言 “今天沪深300分位数” 到达什么位置了?授人与鱼不如授人与渔,所以我写了另外一篇图文「如何通过Matlab验证自己的交易策略」,开源了相应代码。众所周知 Matlab 是一个大部头软件,安装下来大概需要 3.6G 左右的硬盘空间,仅仅计算一下 沪深300历史交易数据 的分位数却要安装一套Matlab,得不偿失。怎么办呢?


掌握一种技能,相当于为自己增加一个竞争维度。遇到问题就是促成自己成长的机会。

想不想自己写代码来实现一下呢?

如果你愿意在接下来的七天暑假时间里暂时离开舒适区,来扩展自己的竞争维度。就跟我一起来开发一套「股票数据分析软件」吧。

我坚信:一件事情如果无法证明其是错误的,就要坚持去做,上天不会欺负“傻子”!这是技术人员的信仰!


好了,我们先规划一下,这套分析软件要满足的功能:
- 数据的获取。从新浪财经把股票的数据爬取下来,存入数据库中。
- 数据的分析。对数据库中的数据进行分析,并把计算结果更新到数据库中。
- 数据的可视化。从数据库中读取分析的结果,并绘制蜡烛图、折线图、直方图等。

今天,我带着大家做「数据的获取」部分,主要内容为 数据的爬取 和 数据的存储。

首先,看看 沪深300(000300)历史交易数据 的URL地址。

http://vip.stock.finance.sina.com.cn/corp/go.php/vMS_MarketHistory/stockid/000300/type/S.phtml?year=2018&jidu=3

我们对比一下 上证指数(000001)历史交易数据 的URL地址。

http://vip.stock.finance.sina.com.cn/corp/go.php/vMS_MarketHistory/stockid/000001/type/S.phtml?year=2018&jidu=3

可以发现,/stockid/000300/stockid/000001中的数字部分是股票代码。参数year=2018jidu=3是数据的时间范围。

这样我们就可以写一个函数,把 股票代码 以及 年份季度 作为参数得到不同股票,不用年份和季度的历史交易数据。

private IHtmlDocument GetHtmlDocument(string stockid, int year, int jidu)
{string url = "http://vip.stock.finance.sina.com.cn/corp/go.php/vMS_MarketHistory/stockid/"+ stockid + "/type/S.phtml?year=" + year + "&jidu=" + jidu;IHtmlDocument document;try{document = new JumonyParser().LoadDocument(url);}catch{document = null;}return document;
}

沪深300历史交易数据的网页如下:

我们可以看到,年份和季度都需要从下拉列表中选择。但不同股票可选择的年份不同,原因很简单,不同股票上市的时间不同,所以起始年份必然不同。这样,我们就需要写一个方法,先把年份下拉列表中的数据得到,从而得到爬取数据的时间范围。

private int[] GetYears(string stockid)
{DateTime dt = DateTime.Now;int year = dt.Year;IHtmlDocument doc = GetHtmlDocument(stockid, year, GetCurrentJiDu());List<IHtmlElement> lists = doc.Find("select[name=year] option").ToList();int count = lists.Count;List<int> years = new List<int>();for (int i = 0; i < count; i++){int a = int.Parse(lists[i].InnerHtml());years.Add(a);}return years.ToArray();
}private int GetCurrentJiDu()
{DateTime dt = DateTime.Now;int month = dt.Month;int jidu = 1;switch (month){case 4:case 5:case 6:jidu = 2;break;case 7:case 8:case 9:jidu = 3;break;case 10:case 11:case 12:jidu = 4;break;}return jidu;
}

注明:我这里用的 HTML 解析器是 Jumony Core。可以到 https://github.com/Ivony/Jumony 下载。
这个解析器非常简单,给一个网址进去,就能够得到该网址请求的 DOM Tree,利用 JQuery 选择器语法,很方便地定位到要爬取的数据内容。

以上,数据的爬取就搞定了,下面介绍数据的存储。

为了避免数据的重复存储,除了建立 沪深300_000300 这张数据表来存储爬取的数据外,还需要建立一张数据表 Stock_InputLog 用来存储数据导入的日志。

Stock_InputLog 包含字段:
- 股票代码
- 年份
- 季度
- 开始日期
- 结束日期
- 备注

沪深300_000300 包含字段:
- 日期
- 年份
- 季度
- 开盘价
- 最高价
- 收盘价
- 最低价
- 平均价1 [=(开盘价+最高价+收盘价+最低价)/4]
- 交易量
- 交易金额
- 平均价2 [=交易金额/交易量]
- 分位数25
- 分位数40
- 分位数50
- 分位数60
- 分位数75
- 当前分位数

数据爬取下来之后,进行导入的流程如下:
1. 根据 Stock_InputLog 日志选出要导入的数据,即只导入仍未导入的数据。
2. 把未导入的数据导入沪深300_000300表中。
3. 更新 Stock_InputLog 日志。

我做了一个简单的 Demo 如下:

爬取:根据选定的年份和季度,从sina财经把沪深300的数据爬取下来。如下图所示:

保存入库:把未保存的数据保存到数据库中。

查看日志:查看保存数据的日志。如下图所示:

查看数据:查看导入的数据是否完整。如下图所示:

导出数据:把爬取的数据导出到EXCEL中。如下图所示:


到这里,「数据的获取」部分就结束了。大家可以尝试着写写这块的代码,遇到问题给我留言,我给大家解答。下次,介绍分析部分。See You!

七天学会「股票数据分析软件」的开发(上)相关推荐

  1. 七天学会「股票数据分析软件」的开发(下)

    昨天下午把<我不是药神>这部电影看了,搞得我哭的稀里哗啦,里面有一些情节触痛了内心中最薄弱的地方.药厂没有错,他们要收回前期投入的研发成本.主人公 程勇 只能算是整个事件的牺牲品,通过他的 ...

  2. 七天学会「股票数据分析软件」的开发(中)

    两天前,我写了 七天学会「股票数据分析软件」的开发(上),号召大家尝试着写写代码,不知道大家进度如何. 如果存在掌握一种技能的刚需,而且知道正确的学习方法,经过刻意练习,这门技能很快就能玩儿的有模有样 ...

  3. php获取股票接口数据接口,「股票数据」 使用Sina API获取新浪财经的证券股票数据接口(时价 K线等)...

    在互联网上找到的新浪API的财务API表示Mark,以供将来参考 ++ e.sina.com.cn/downxls.php?date=2011-07-08&symbol=sh600900 收购 ...

  4. 新浪股票java接口,「股票历史数据接口」搜狐股票历史数据接口

    搜狐股票历史数据接口 public class StockConnection { public static void main(String[] args) { URL ur = null; tr ...

  5. 数据来源渠道及采集工具_GrowingIO「转化数据回传」| 平台对接免开发,优化投放更便捷...

    GrowingIO「广告监测」为我们准确监测投放质量.通过「转化数据回传」功能,我们能够快速完成广告平台对接工作,让广告效果优化更为高效. -- 某社交平台明星企业 随头条.腾讯等各广告平台逐步推出 ...

  6. FusionInsight怎么帮「宇宙行」建一个好的「云数据平台」?

    摘要:基于数据湖架构,应用效率得以极大提升.经过几年发展,当前集群规模已经达到1000多节点,数据量几十PB,日均处理作业数大概是10万,赋能于180多个总行应用和境内外41家分行及子公司. 本文分享 ...

  7. 重磅发布!36氪中国新基建之王「大数据领域」TOP50企业揭晓

    后信息技术时代,谁是数据海里的小白条? 制榜 | 贺卓媛 制图 | 王茹 出品 | 36氪创投研究院 封面来源 | IC photo 全球逐步进入以"数字化"为代表的后信息技术时代 ...

  8. 股票数据接口是怎么开发的?

    一般来说,股票量化投资市场上常常会使用到java来开发股票数据接口,而这些接口解决方案是专门为查看肉眼可能会错过的最细微的市场细节而设计的.当然这也是一件好事,因为它表明市场波动通常不易识别,从原本会 ...

  9. 【githubshare】基于「源样黑体」进行开发设计,整体风格看起来清晰自然

    GitHub 上一款开源的繁体字体:「繁媛黑體」,基于「源样黑体」进行开发设计,整体风格看起来清晰自然,还能满足 "一简对多繁" 的需求.一款开源的繁体字体:「繁媛黑體」,基于「源 ...

最新文章

  1. 服务器信息采集协议,服务器信息采集
  2. leetcode算法题--用两个栈实现队列
  3. wxWidgets:wxMessageDialog类用法
  4. EJB 3.x:生命周期和并发模型(第2部分)
  5. 三月提示:提防挂马网站 关注账号安全
  6. 挑战 TensorFlow、PyTorch,“后浪”OneFlow 有没有机会?
  7. 2018百度之星程序设计大赛 - 资格赛 P1006三原色图(MST,并查集)
  8. java编译异常和运行时异常_浅谈异常结构图、编译期异常和运行期异常的区别...
  9. Vquery PHP 简单爬虫类
  10. 有哪些实用的电脑软件值得推荐?
  11. 【递归练习】算24点
  12. 中文拼音的正则表达式
  13. 计算机网络第五章说课稿,任务二 了解计算机网络的作用说课稿【一等奖】
  14. 2021年中国家具行业现状及未来趋势分析:线上渠道将成为新增长点[图]
  15. L1-075 强迫症
  16. Matlab中如何将长字符串换行写
  17. l流程图平行四边形_关于写作那些事之快速上手Mermaid流程图
  18. 为什么1个字节(Byte)等8位(Bit)?
  19. SpringCloud-Zuul常用路由网关
  20. How OS technology is being deployed in science?

热门文章

  1. Pycurl的简单使用与对比
  2. CountDownLatch
  3. Idea开发springBoot 中使用 thymeleaf 模板$表达式报红波浪线解决方案
  4. 部门管理中非递归搜索部门以及所管辖下部门
  5. 《周志明的软件架构课》学习笔记 Day13
  6. 什么是图论和图论在数字图像中的应用
  7. 2019 年百度之星·程序设计大赛 - 初赛一 解题报告
  8. 高等数学学习笔记——第四讲——初等函数(2. 初等函数)
  9. 如何利用业余时间学习Python,有没有比较完整的规划。。
  10. 2022年华中杯思路