专栏首页Crossin的编程教室用程序帮你炒股(2)

用程序帮你炒股(2)

6月26日A股大跌,据估算市值蒸发4.5万亿。当日的领涨板块,你们感受一下:

银行 -4.66%

食品饮料 -6.94%

建筑装饰 -7.14%

有入市的朋友,不知是否腿脚够快,躲过此劫。

本主题之前一篇文章讲了如何从雪球抓取投资组合。不过现在看来,在市场面前,非理性的人类是靠不住的。这两周的暴跌,雪球上大部分的组合也没有多好的表现。大多数人都会在买卖之前预测涨跌,并根据预计的结果选择操作。但未来是无法预测的,对于没有很强专业技能、只依赖道听途说的小散户来说,这种操作方式近乎于赌博,而且还是那种不经概率计算的赌博。

所以,作为一个程序员,只有真实的数据和理性的逻辑推理可以依赖。无法预测未来,但你可以总结历史规律。

那么问题来了。首先,你得有历史数据。

老办法,先去找搜索引擎。搜一下诸如“股票历史数据”、“历史K线数据”之类的关键词,就会有不少文章,里面提到一些可以使用的接口。实时行情接口有些是需要购买,但历史数据没有很高的时效性,可以找到不少免费的。

在一篇叫做《获取历史K线数据的几个方法》的文章中,说到一个和讯网的历史数据接口:

http://flashquote.stock.hexun.com/Quotejs/DA/1_000001_DA.html

试了可用,于是就用它来抓取历史数据。地址中的 1_000001,1 表示沪市,2 表示深市,后面六位是股票代码。

这个接口的使用很简单,完全公开,没有什么验证,直接 urllib 的 urlopen 就可获取内容:

req = urllib.urlopen(url) data = req.read()

在浏览器中访问下接口,看到它的数据格式是:

refreshDataStr('000001','1','DA','[[19901219,0.00,96.05,99.98,95.79,99.98,126000,494000], ... ,[20140828,2209.47,2210.48,2219.47,2194.86,2195.82,12422901400,109266624772]]');

有规律,但不是标准数据格式,所以要稍为处理一下。可以写正则去匹配,或者就数一下前后字数,直接用字符串截断,掐头去尾:

data = data[36:-5]

得到的数据在分割为 list:

dataset = data.split('],[')

每一条数据里,数值含义依次为:

交易日期、昨收盘、开盘、最高、最低、最新价、成交量、成交额

按自己的需要去存储就可以了。

实际抓取过程中遇到的一些问题

1. 抓取一些老股票的数据时,数据只到 2014 年。估计是因为数据量太大,到了默认上限。于是去和讯网上看了下网页上请求时的参数,发现有一个 start 的参数。当设置成 start=201601010000(一个比今天日期还大的时间)时,就可以拿到所有数据。但参数具体含义并不清楚,不知道是否对所有请求都有效。

2. 这些数据是“除权”后的数据,也就是说有的时候上一个条数据的最新价是 30,但下一条的昨收盘就变成 20 了。这对于之后分析历史数据是有很大影响的。我没有找到可以获取复权数据的参数或方法,用了一个解决方案就是在存储时比较上一条最新价和下一条昨收盘直接的差异,自行进行向后复权处理。(除权复权的具体含义可自行了解)

3. 我仍然用了之前的 django 框架对抓下来的数据进行建模和存储,便于以后的使用和分析。并且把抓取的功能结合在了 django 自带的 admin 系统上。对于从 Github 上下载的代码,可参考其中的抓取部分。若想使用存储部分,需配置好 django 1.8,这里我不再赘述。

4. 添加诸如 matplotlib 的绘图模块,你可以把数据用坐标画出来。并非要做一个行情查看软件,所以我这里就只很简单的显示一下。

相关代码继续加在之前的 Github 项目中:

github.com/crossin/avalanche

有了这些数据之后可以干什么?

最想要的当然就是预测走势!有很多成熟的理论,什么MACD、均线、成交量……你也可以自己捣鼓一套模型,比如用统计概率去归纳啦、用导数去推算啦、用贝塞尔曲线去拟合啦、用隐马尔可夫模型去预测啦……用本人高中数学老师的一句话来说就是:反正你也就是碰运气,你自己瞎蒙不如让我来帮你蒙,蒙对的概率还大一点。

更实际的用处就是验证交易策略。不管你依据什么方式来交易,哪怕是用飞镖往钉在墙上的证券报纸上扔来选择股票,用掷骰子来决定买卖,都可以通过程序在历史数据上进行验证,而不需要去市场上交学费被打脸。

当你建立了强壮的交易模型,经过众多历史数据的反复验证和不断修正,有着很高的成功率之后,就可以带着你的程序去真金白银的市场上了。到那个时候,股市就是你的提款机。

怎么样,听上去是不是碉堡了。

然而,这并没有什么卵用。

上帝不掷骰子。但你不是上帝。

本文分享自微信公众号 - Crossin的编程教室(crossincode),作者:Crossin

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-06-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 极简 Github 上手教程

    随着你写的代码越来越多,就需要去管理这些代码,可能要在不同的电脑上编写同一份代码,可能要和别人合作开发,也可能想把项目分享给别人。更进一步地,你可能还会需要管理...

    Crossin先生
  • 用程序帮你炒股

    最近在知乎上看到一个问题:如何使用 Python 抓取雪球网页? 雪球是国内一个人气很高的股票财经类网站,上面有个投资组合功能,很多民间股神在上面设定自己的投资...

    Crossin先生
  • 实现财务自由,这个工作是我们未来几年最好的选择

    5月8日,谷歌召开一年一度的Google I/O大会,谷歌CEO直接祭出了这次大会的王牌——AI。

    Crossin先生
  • 多范式数据科学的应用:ThrustSSC超音速汽车工程

    本文译自Wolfram技术沟通与战略总监Jon McLoone于2018年9月11日的博客文章:Thrust Supersonic Car Engineerin...

    WolframChina
  • 深度学习能用于界面设计吗?

    最近看到在“Baidu Create 2019”的百度AI交互设计论坛上,设计师分享了他们的最新成果:百度人工智能交互设计院与百度研究院商业智能实验室合作,基于...

    mixlab
  • 「微服务架构」微服务架构中的数据一致性

    在微服务中,一个逻辑上原子操作可以经常跨越多个微服务。即使是单片系统也可能使用多个数据库或消息传递解决方案。使用多个独立的数据存储解决方案,如果其中一个分布式流...

    首席架构师智库
  • 分布式缓存--一致性hash原理和hash槽,以及算法实现

    我们在使用n台存储设备存储数据的时候,常规做法有将数据根据key%n这样计算放在哪台服务器,但是在扩容的时候就会遇到数据迁移的问题,比如扩容m台服务器,以前是k...

    yingzi_code
  • Intent 属性详解(上)

    Android应用将会根据Intent来启动指定组件,至于到底启动哪个组件,则取决于Intent的各属性。本期将详细介绍Intent的各属性值,以及 A...

    分享达人秀
  • Android:检查通知权限并跳转到通知设置界面

    好久没有更新内容了啊。。。 封面是广东南澳岛的风景, 感觉很漂亮。我生于内陆长于内陆,对于大海有着无限的向往,羡慕海边的人可以赶海,可以捡贝壳,可以抓海鲜,还有...

    CnPeng
  • 2751: [HAOI2012]容易题(easy)

    2751: [HAOI2012]容易题(easy) Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1087 ...

    HansBug

扫码关注云+社区

领取腾讯云代金券