經盈利能力調整的估值選股
風險提示與說明:
1、以下內容為作者因個人愛好和投資需要而整理的ETF交易策略數據。
2、以下內容僅供數據分享與策略討論用,不作為任何投資建議,不宜被讀者作為投資決策依據使用;如有讀者堅持使用如下內容作為任何形式的投資決策依據,所造成的盈虧,作者不承擔責任。
3、本文發布時間晚於文中數據的獲取時間,也晚於作者本人依據數據做出投資決定和交易操作的時間。
這是為了做作業順便寫的一段選股代碼,用來根據目前最新的估值和盈利數據,依據根據盈利能力調整的估值,選擇其中估值比較低的股票。
我個人不會(其實是不敢,哈哈)重倉任何個股,因為怕個股公司內部有外界不知道的幺蛾子,單憑几個參數恐怕難以規避這種具體的風險。
這個代碼和運行結果po上來僅供娛樂啦,不要當真(千萬別根據這個買!!!)
代碼使用python3.6和tushare庫編寫,如果發現了代碼中的邏輯紕漏請告訴我哦,謝謝!
## 引入要使用的庫
import tushare as ts
import pandas as pd
import numpy as ny
## 獲得股票基本數據表
basics=ts.get_stock_basics().sort_index()
## 去掉不需要的參數
basics.drop([ reserved, reservedPerShare,undp,
perundp,holders],axis=1,inplace=True)
## 開始使用盈利和估值數據篩選股票
basics.query(profit>0 and rev>0 and esp>0,inplace=True)
##此處如果報錯,應該是python3版本問題,可以去掉inplace參數,改為basics=basics.query()語句實現。以下同。.
print (盈利為正,且收入和盈利都增長的股票有%s只. %basics.shape[0])
basics[PEG]=basics[pe]/basics[profit]
basics.query(PEG<=0.8,inplace=True)
print (其中PEG不高於0.8的股票有%s只.%basics.shape[0])
basics[PEGR]=basics[pe]/basics[rev]
basics.query(PEGR<0.8,inplace=True)
print (其中PEG不高於0.8且PE/收入增長率不高於0.8的股票有%s只.%basics.shape[0])
basics[ROE]=basics[esp]/basics[bvps]
basics.query(pb>0 and ROE>0,inplace=True)
basics[PBCoverage]=ny.log(basics[pb])/ny.log(1+basics[ROE])
basics.query(PBCoverage<=8 and PBCoverage>0 and ROE>=0.05,inplace=True)
print (再考慮PB,估值低的股票有%s只.%basics.shape[0])
## 開始使用現金流數據從另一個角度篩選股票
cashflow=ts.get_cashflow_data(2017,3)
cashflow.query(cf_nm>1.5,inplace=True)
print(現金流良好的股票有%s只. %cashflow.shape[0])
## 獲得兩種角度篩選出來的股票的交集
codes1=set(basics.index.values)
codes2=cashflow.code.values
codes=codes1.intersection(codes2)
print(估值低且經營現金流良好的股票有%s只. %len(codes))
stockPool=basics.loc[codes]
## 生成並顯示股票池
stockPool = stockPool[stockPool.name.str.contains(ST)==False]
print(去掉ST後剩餘股票有%s只. %stockPool.shape[0])
#stockPool.sort_values(by=PBCoverage,ascending=True,inplace=True)
print (顯示股票池(以2017年三季度數據為基礎):)
print (stockPool)
##保存股票池表格
stockPool.to_csv(stockPool.csv)
推薦閱讀:
※投資中的天時、地利、人和(二)——公司分析的三個維度
※【路遙說】人工智慧是否會開啟人類的新紀元
※巴菲特如何能贏得「十年賭約」?
※我所理解的價值投資