股票量化分析(二)PE和流通市值
第一步股票量化分析(一)获取A股列表 篇我们获取了所有的A股上市的代码列表 ,第二步需要从所有的股票列表中进一步缩小范围,将2千多支股票缩小到三四十支股票,并从中获取目标股票。
一、分析
1、动静分析
stock中有很多指标,比如市盈率(PE)、流通市值、委比、量比、换手率、获利比率、财物指标等等。其中一部分属于短期内变化不大的指标,如PE、流通市值。所以这类参数,我们可以将这类参数看为静态参数,可以一到一周其一次值的数据。像时时变化的委比、量比、换手率等为动态数据,这部分需要时时刷新的。
2、参数信息
本次实现的目标为:
市盈率:0 ~ 20 之间
总流通市值:50亿以下
为什么选取这两个值,先看下网上的介绍:
市盈率指在一个考察期(通常为12个月的时间)内,股票的价格和每股收益的比例,也称为拖动PE。投资者通常利用该比例值估量某股票的投资价值。一般来说,市盈率水平为
一般来说,市盈率水平为:
- 0-13-即价值被低估
- 14-20-即正常水平
- 21-28-即价值被高估
- 28+-反映股市出现投机性泡沫
市盈率极高(如大于100倍)的股票,其股息收益率为零。因为当市盈率大于100倍,表示投资者要超过100年的时间才能回本,股票价值被高估,没有股息派发。
第二个值,流通市值为什么也要取小一些的呢?因为总股本越低,股价也较容易被拉升。像中石油、中石化这种流通市值在千亿的股票机构想要操作很困难。所以选取了这两个指标。
3、选取采集源
可以采集的数据源有深沪两市官方站、sina财经、东方财富、大智慧、同花顺、qq财经等。比较了两家后选取了同花顺,因为其PE值和官方数据同步(其他站上发现也和这个值相同),而sina财经的值比官方值略大。另外一个原因是其分析出的数据格式比较接近于json格式,略做处理就可以json化分析。
其实时行情页面为:http://stockpage.10jqka.com.cn/stockid/,例如:http://stockpage.10jqka.com.cn/600030/ ,对应的类 json js页面地址为:http://d.10jqka.com.cn/v2/realhead/hs_stockid/last.js ,如http://d.10jqka.com.cn/v2/realhead/hs_600030/last.js ,具体看下图(点击图片看大图):
json中的键值对应关系为:
12034120:市盈率
23475914:流通市值 以元为单位,需除以(/1000/1000/100)得到亿元单位
310:当前价
4461256:委比
51968584:换手率
更多对应关系可以通过JSON值和页面值比对取得。
二、采集分析
由于这里只取两个静态值进行范围缩小,其代码写起来也比较简单,如下:
1[root@361way stock]# more get_pe.py
2#!/usr/bin/python
3#coding=utf-8
4# code by 运维之路(www.361way.com)
5# 1、pe在 0~20 之间的企业
6# 2、流通股本小于50亿的企业
7import urllib2
8import time
9import json
10#header段代码进行了伪装,避免被源站墙掉
11def get_pe(stockid):
12 try:
13 url = 'http://d.10jqka.com.cn/v2/realhead/hs_%s/last.js' % stockid
14 send_headers = {
15 'Host':'d.10jqka.com.cn',
16 'Referer':'http://stock.10jqka.com.cn/',
17 'Accept':'application/json, text/javascript, */*; q=0.01',
18 'Connection':'keep-alive',
19 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36',
20 'X-Forwarded-For':'124.160.148.178',
21 'X-Requested-With':'XMLHttpRequest'
22 }
23 req = urllib2.Request(url,headers=send_headers)
24 f = urllib2.urlopen(req)
25 data = f.read().split('items":',1)[1]
26 data = data.split('})',1)[0]
27 J_data = json.loads(data)
28 #J_data = json.dumps(data,indent=4,encoding='utf-8')
29 stockpe = J_data['2034120']
30 stockname = J_data['name']
31 sumvalue = J_data['3475914']
32 currentprice = J_data['10']
33 #print stockid,stockname,stockpe
34 return stockname,stockpe,sumvalue,currentprice
35 except urllib2.HTTPError, e:
36 #return stockid ,'get happed httperror'
37 return e.code
38if __name__ == '__main__':
39 print 'stockid stockname currentprice stockpe Billvalue'
40 stockids = [line.strip() for line in open("stock_exp.txt", 'r')]
41 for stockid in stockids:
42 try:
43 stockname,stockpe,sumvalue,currentprice = get_pe(stockid)
44 if sumvalue:
45 Billvalue = round(float(sumvalue)/1000/1000/100)
46 else:
47 Billvalue = 0
48 if stockpe:
49 if float(stockpe) > 0 and float(stockpe) < 20 and Billvalue < 50 :
50 print stockid,stockname,currentprice,stockpe,Billvalue
51 #else:
52 # print stockid
53 except TypeError ,e:
54 print stockid ,'get is error'
执行后,得到的结果类似如下结果:
写在最后:
这里只用了两个指标相对比较简单,可以再通过增加财物指标分析,范围缩到10支以内。不过代码和程序是死的,只不过其根据人的意志减少人力分析的过程,帮助我们更快更优的找到结果,并最终决策。在真正操作时,可能还会涉及到政策、行业前景、牛熊行情等综合分析。
另外程序方面也还有优化的余地,这里只是一个简单的遍历版,采集效率不高。在动态数据采集时,如果使用这种方法,显然延时会较高。后续可以考虑加入多进程或多线程进行并发执行。
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/stock-analysis/4602.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.