1. 股票选择参数

这里股票选取所采用的指标主要是市盈率市净率

  • 市盈率
    市盈率(Price Earnings Ratio,简称P/E或PER),也称“本益比”、“股价收益比率”或“市价盈利比率(简称市盈率)”。市盈率是指股票价格除以每股收益(每股收益,EPS)的比率。通常市盈率也有动态市盈率(PETTM),要是上市公司业绩好,行业好的话,从长远角度看,盈利强,动态市盈率一般比静态市盈率低。
  • 市净率
    市净率(Price-to-Book Ratio,简称P/B PBR)指的是每股股价与每股净资产的比率。 市净率可用于股票投资分析,一般来说市净率较低的股票,投资价值较高,相反,则投资价值较低;但在判断投资价值时还要考虑当时的市场环境以及公司经营情况、盈利能力等因素。

2. 参考公式

2.1 市盈率和市净率

市盈率:

市盈率=股价/每股收益市盈率 = 股价/每股收益市盈率=股价/每股收益

市净率:

市净率=股价/每股净资产市净率= 股价/每股净资产市净率=股价/每股净资产

市净率/市盈率:

每股收益/每股净资产每股收益/每股净资产每股收益/每股净资产

我觉得市净率/市盈率的值可以反映出公司对生产成本和产品盈利的关系,这个值越低的话,反映出每股收益低,每股净资产高,这样的话公司的成本高和公司盈利能力低,这个值越高的话,反映出每股收益高,每股净资产低,这样的话公司的成本高和公司盈利能力高。

2.2 行业选择

列出所有行业

#   ---------------------------------   #
#   罗列出股票行业分类
#   运行结果
#   ['银行', '', '交通运输', '汽车', '房地产', '公用事业', '钢铁', '化工', '非银金融', '机械设备', '传媒', '国防军工', '建筑装饰', '通信', '综合', '休闲服务', '医药生物', '商业贸易', '食品饮料', '家用电器', '电子', '轻工制造', '电气设备', '农林牧渔', '计算机', '纺织服装', '有色金属', '采掘', '建筑材料']
#   我选择股票的分类 ['国防军工','医药生物','家用电器','电子','电气设备','计算机']
#   ---------------------------------   #
def industry_list():# 登陆系统lg = bs.login()# 显示登陆返回信息print('login respond error_code:' + lg.error_code)print('login respond  error_msg:' + lg.error_msg)# 获取行业分类数据rs = bs.query_stock_industry()# rs = bs.query_stock_industry(code='sz.002414')print('query_stock_industry error_code:' + rs.error_code)print('query_stock_industry respond  error_msg:' + rs.error_msg)# 打印结果集industry_list_tmp = []industry_list = []while (rs.error_code == '0') & rs.next():# 获取一条记录,将记录合并在一起industry_list_tmp.append(rs.get_row_data())result = pd.DataFrame(industry_list_tmp, columns=rs.fields)for item in result['industry'].values:if item not in industry_list:industry_list.append(item)else:pass# 登出系统bs.logout()print(industry_list)

在以上行业中,我选择股票的分类 [‘国防军工’,‘医药生物’,‘家用电器’,‘电子’,‘电气设备’,‘计算机’]

3. 完整代码

项目目录如下:

其中
sh_gu_piao_id.csv:表明上海证券交易所中所有股票的编号
sz_gu_piao_id.csv:表明上海证券交易所中所有股票的编号
stock_select.py:股票选择代码
select_result.csv:选择股票的结果列表

import osimport baostock as bs
import pandas as pd
import numpy as np
import datetimedef get_data(stock_id='sz.002414', start_data=None, end_date=None):now = datetime.datetime.now()now_year = now.yearnow_month = now.monthnow_day = now.dayconnect = '-'if end_date == None:end_date = connect.join((str(now_year), str(now_month), str(now_day)))if start_data == None:previous_year = now_year - 3start_data = connect.join((str(previous_year), str(now_month), str(now_day)))login_error_code = 1# 登陆系统while login_error_code != 0:lg = bs.login()# 显示登陆返回信息print('login respond error_code:' + lg.error_code)login_error_code = int(lg.error_code)print('login respond  error_msg:' + lg.error_msg)# 获取沪深A股历史K线数据# 参数说明:http://baostock.com/baostock/index.php/Python_API%E6%96%87%E6%A1%A3#.E8.8E.B7.E5.8F.96.E5.8E.86.E5.8F.B2A.E8.82.A1K.E7.BA.BF.E6.95.B0.E6.8D.AE.EF.BC.9Aquery_history_k_data_plus.28.29rs = bs.query_history_k_data_plus(stock_id,"date,code,peTTM,pbMRQ,isST",start_date=start_data, end_date=end_date,frequency="d", adjustflag="1")print('query_history_k_data_plus respond error_code:' + rs.error_code)print('query_history_k_data_plus respond  error_msg:' + rs.error_msg)# 打印结果集data_list = []while (rs.error_code == '0') & rs.next():# 获取一条记录,将记录合并在一起data_list.append(rs.get_row_data())result = pd.DataFrame(data_list, columns=rs.fields)# 登出系统bs.logout()# result.to_csv('./data_for_error_stockdata.csv')# 处理结果# 一年中股市开盘大概是在250天左右days_open = 250columns_all = result.columnscolumns_need = columns_all[-3:]data_need = result[columns_need]result = data_need.applymap(lambda x: np.NAN if x == '' else x)result = result.dropna(axis=0, how='any')stock_isST = result.iloc[-1, :]['isST']stock_PER = np.sum(np.array(result.loc[-250:, columns_all[-3]].values).astype(float)) / len(np.array(result.loc[-250:, columns_all[-3]].values).astype(float))data_profit_value = np.array(result[columns_all[-2]].values).astype(float) / np.array(result[columns_all[-3]].values).astype(float)for index, item in enumerate(data_profit_value):if item < 0:data_profit_value[index] = 0step = int(len(data_profit_value) / 3)data_year_avg = (np.sum(data_profit_value[0:step]) / step, np.sum(data_profit_value[step:2 * step]) / step,np.sum(data_profit_value[2 * step:]) / len(data_profit_value[2 * step:]))return stock_id, stock_isST, data_year_avg, stock_PERdef select_stock(stock_id, data_year_avg, stock_PER):# 是否选择这只股票selected = 0grow_rate = 0if industry_select(stock_id):if data_year_avg[0] < data_year_avg[1] < data_year_avg[2]:first_grow = data_year_avg[1] / data_year_avg[0]second_grow = data_year_avg[2] / data_year_avg[1]if second_grow > first_grow:grow_rate = second_grow / first_growif 0 < stock_PER < 14:selected = 1return selected, stock_id, grow_rate, stock_PERreturn selected, stock_id, grow_rate, 0def stock_id_list():data = pd.read_csv('./sh_gu_piao_id.csv')data_sh_stock_id_tmp = np.array(data[data.columns[0]])data_sh_stock_id = []for stock_id in data_sh_stock_id_tmp:data_sh_stock_id.append('sh.' + str(stock_id))data_sz_stock_id = []data = pd.read_csv('./sz_gu_piao_id.csv')data_sz_stock_id_tmp = np.array(data[data.columns[0]])for stock_id in data_sz_stock_id_tmp:if len(str(stock_id)) != 6:different = 6 - len(str(stock_id))new_stock_id = ''.join(np.append(np.array('0').repeat(different), str(stock_id)))data_sz_stock_id.append('sz.' + str(new_stock_id))return {'sh': data_sh_stock_id,'sz': data_sz_stock_id}def to_csv(selected, stock_id, grow_rate, stock_PER):path = os.getcwd()path = os.path.join(path, 'select_result.csv')if selected == 1:if not os.path.exists(path):data_obj = {}data_obj['stock_id'] = stock_iddata_obj['grow_rate'] = grow_ratedata_obj['stock_PER'] = stock_PERdata = pd.DataFrame(data_obj, pd.Index(range(1)))data.to_csv(path, index=False)else:data = pd.read_csv(path)print(data)if stock_id in data['stock_id'].values:data_index = data[data['stock_id'] == stock_id].indexdata.loc[data_index, 'grow_rate'] = grow_ratedata.loc[data_index, 'stock_PER'] = stock_PERelse:data_to_add = {}data_to_add['stock_id'] = stock_iddata_to_add['grow_rate'] = grow_ratedata_to_add['stock_PER'] = stock_PERdata_to_add = pd.DataFrame(data_to_add, pd.Index(range(1)))print(data_to_add)data = data.append(data_to_add, ignore_index=True)print(data)data.to_csv(path, index=False)#   ---------------------------------   #
#   罗列出股票行业分类
#   运行结果
#   ['银行', '', '交通运输', '汽车', '房地产', '公用事业', '钢铁', '化工', '非银金融', '机械设备', '传媒', '国防军工', '建筑装饰', '通信', '综合', '休闲服务', '医药生物', '商业贸易', '食品饮料', '家用电器', '电子', '轻工制造', '电气设备', '农林牧渔', '计算机', '纺织服装', '有色金属', '采掘', '建筑材料']
#   我选择股票的分类 ['国防军工','医药生物','家用电器','电子','电气设备','计算机']
#   ---------------------------------   #
def industry_list():# 登陆系统lg = bs.login()# 显示登陆返回信息print('login respond error_code:' + lg.error_code)print('login respond  error_msg:' + lg.error_msg)# 获取行业分类数据rs = bs.query_stock_industry()# rs = bs.query_stock_industry(code='sz.002414')print('query_stock_industry error_code:' + rs.error_code)print('query_stock_industry respond  error_msg:' + rs.error_msg)# 打印结果集industry_list_tmp = []industry_list = []while (rs.error_code == '0') & rs.next():# 获取一条记录,将记录合并在一起industry_list_tmp.append(rs.get_row_data())result = pd.DataFrame(industry_list_tmp, columns=rs.fields)for item in result['industry'].values:if item not in industry_list:industry_list.append(item)else:pass# 登出系统bs.logout()print(industry_list)def industry_select(stock_id):login_error_code = 1selected = 0better_industry = ['国防军工', '医药生物', '家用电器', '电子', '电气设备', '计算机']while login_error_code != 0:lg = bs.login()# 显示登陆返回信息print('login respond error_code:' + lg.error_code)login_error_code = int(lg.error_code)print('login respond  error_msg:' + lg.error_msg)# 获取行业分类数据rs = bs.query_stock_industry(code=stock_id)# rs = bs.query_stock_basic(code_name="浦发银行")print('query_stock_industry error_code:' + rs.error_code)print('query_stock_industry respond  error_msg:' + rs.error_msg)# 打印结果集industry_list_tmp = []while (rs.error_code == '0') & rs.next():# 获取一条记录,将记录合并在一起industry_list_tmp.append(rs.get_row_data())result = pd.DataFrame(industry_list_tmp, columns=rs.fields)if result['industry'].values in better_industry and result['industryClassification'].values == '申万一级行业':selected = 1return selectedelse:return selectedif __name__ == '__main__':# 打印股票行业分类# industry_list()stock_id_list = stock_id_list()for i in stock_id_list['sh']:stock_id, stock_isST, data_year_avg, stock_PER = get_data(stock_id=i)print(stock_PER)if not int(stock_isST):print(stock_id)selected, stock_id, grow_rate, stock_PER = select_stock(stock_id, data_year_avg, stock_PER / 2)to_csv(selected, stock_id, grow_rate, stock_PER)else:continuefor i in stock_id_list['sz']:stock_id, stock_isST, data_year_avg, stock_PER = get_data(stock_id=i)if not int(stock_isST):selected, stock_id, grow_rate, stock_PER = select_stock(stock_id, data_year_avg, stock_PER / 3)to_csv(selected, stock_id, grow_rate, stock_PER)else:continue

python实现股票选取相关推荐

  1. Python在股票池选取中的应用

    Python是一种广泛应用于数据科学.人工智能.机器学习等领域的高级编程语言.在股票投资中,Python也有着非常广泛的应用,其中之一就是在股票池的选择中.本文将介绍Python在股票池选取中的具体应 ...

  2. python支持向量机 股票_小蛇学python(4)利用SVM预测股票涨跌

    最近接了一个私活,指导学妹完成毕业设计.核心思想就是利用SVM模型来预测股票涨跌,并完成策略构建,自动化选择最优秀的股票进行资产配置. 在做这个项目的过程中,我体会到想成为一个合格的数据分析或者数据挖 ...

  3. Python预测股票走势

    最新代码:股票预测配套代码(jupyter版)-机器学习文档类资源-CSDN下载 视频:基于python进行股票趋势预测_哔哩哔哩_bilibili Python的功能可谓相当强大,在很多行业具有相当 ...

  4. 如何去使用Python分析股票数据?学到就是赚到

    对于炒股的同学来说,必须会看懂数据才能避免入坑.今天小千就来教大家如何去使用Python分析股票数据,学到就是赚到.(小千提醒,股市有风险,请谨慎投资) 这次的美股例子就选择了美国显卡制造商英伟达,其 ...

  5. Python获取股票数据并绘制相应K线图,看这个就够了!

    Python对股票的K线可视化 前言 说明 注意 数据获取 Tushare获取股票数据 获取医疗器械板块数据(代码部分) 获取股票数据(代码部分) 数据预处理 变量中文化(代码部分) K线绘制 代码部 ...

  6. 使用Python生成股票K线图

    可视化股票数据,这里只做简单的处理,只显示k线图.选取的是海通证券(600837)2020年1月1日之后150个交易日的数据.这里代码不多,没有封装成方法,代码如下.数据是提前获取的,获取方法见:使用 ...

  7. garch预测 python_【2019年度合辑】手把手教你用Python做股票量化分析

    引言 不知不觉,2019年已接近尾声,Python金融量化公众号也有一年零两个月.公众号自设立以来,专注于分享Python在金融量化领域的应用,发布了四十余篇原创文章,超过两万人关注.这一路走来,有过 ...

  8. python股票自动买卖视频教程_十分钟学会用Python交易股票

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 本文通过讲述 [单股票均线策略] 在 Ricequant 量化平台的实现,熟悉平台并快速入门.创建自己的量化策略代码 .难易度:入门级.从一下几点说起: ...

  9. Python实现股票查询

    Python实现股票查询 需求: 根据输入的名字,进行模糊查询股票 根据输入的公式,筛选出符合条件的股票,筛选项包括:当前价.涨跌幅.换手率!比如输入当前价>30 能够重复查询,并对符合条件的股 ...

最新文章

  1. 清华直博,10年深耕于Al,对话自动驾驶独角兽创始人
  2. 框架:springboot组合spring、springmvc、mybatis的一个小demo
  3. Angular No provider for EffectsRootModule错误消息的出现原因和修复方式
  4. 酷睿i7cpu适合的linux,CPU性能篇 - Core i7-4770K Linux之旅:有喜有忧_Linux新闻_Linux公社-Linux系统门户网站...
  5. 递归 尾递归_递归,递归,递归
  6. VB获取系统目录的简单方法
  7. gyp安装,及breakpad上的使用方法
  8. python学习手册 简记
  9. visa虚拟卡生成器_虚拟银行卡汇总
  10. Ubuntu系统安装Java JDK和HDFView
  11. 中国计算机类核心期刊
  12. 【爬虫】如何解决爬虫爬取图片时遇到百度安全验证的问题?即页面上没有显示图片的源地址,没有img标签,只有div标签
  13. 【项目实战课】基于Pytorch的InceptionNet花卉图像分类实战
  14. 法甲体育bway周末前瞻 欧塞尔对战洛里昂 升班马令人着急
  15. SSH服务移植到ARM单板
  16. xlsx无法导入MySQL?
  17. google 天气rss
  18. JavaScript字符串操作,把短线(-)命名格式改变为驼峰命名
  19. 关于unity 放入system.data.dll 文件报错问题,报错 Microsoft (R) Visual C# Compiler version 2.9.1.65535 (9d34608e)
  20. 学院旅行计算机学院,计算机学院学生会 | 关于我们,你所不知道的……

热门文章

  1. 解决鼠标右键新建里没有word,excel,ppt
  2. Android画布画圆,android_studio的canvas画圆
  3. Pcap文件的magic_number
  4. 精选9个值得学习的 HTML5 效果【附源码】
  5. JavaWeb课设咖啡点单系统
  6. 模拟扑克牌游戏的洗牌
  7. [QA]测试用例设计
  8. 天龙八部游戏服务器防护DDos有哪些方法?
  9. 启动u盘还原成普通u盘(Windows Diskpart)
  10. 821.字符的最短距离