ITPub博客

首页 > 数据库 > 数据库开发技术 > 用程序帮你炒股(2)

用程序帮你炒股(2)

原创 数据库开发技术 作者:Crossin的编程教室 时间:2015-06-28 15:31:35 0 删除 编辑

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的编程教室 ====#

微信ID:crossincode

论坛:http://crossin.me

QQ群:151139659



感谢UPYUN对本微信的支持。UPYUN是国内领先的云服务提供商,专注于为开发者提供静态文件的云存储、云处理和CDN加速服务。现在注册,即可免费体验!

原文作者:Crossin的编程教室;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2015-06-05

  • 博文量
    498
  • 访问量
    200470