利用akshare的数据源,可以获取所有的股票数据以及公开的财务数据,可以进行条件筛选,获取满足条件的股票。
这套模板可以用于价值投资,指标选股。选股周期为日线级别。然后结果可以邮箱发送。
import time
import akshare as ak
## A 股上市公司的实时行情数据
stock_zh_a_spot_df = ak.stock_zh_a_spot()
#print(stock_zh_a_spot_df)
##取前300测试
##取前300测试
df_stock = stock_zh_a_spot_df[['代码','名称']][:20]
anyData = {'stock':'00','name':'name_test','指标1':'var1','指标1':'var1','指标2':'var2','指标3':'var3','指标4':'var4','综合评估':'varAll'}
dfResult = pd.DataFrame(anyData,index=[0])for row_index, row in df_stock.iterrows():try:# print(row['code'])# print(row['name'])r_code = row['代码'][2:]r_name = row['名称']print(r_code)##指标1 - 过去5年来平均净资产收益率高于14%df = ak.stock_financial_analysis_indicator(r_code)# 财务指标数据 工行财报# print(df.head())df = df.set_index(df['日期'])print(df.head())df1 = df[df.index>'2015-01-01']['净资产收益率(%)']df1_sum = df1.replace('--',0).astype(float).sum(axis = 0, skipna = True)df1_count = df1.count()var1 = (df1_sum / df1_count)>14##指标2- 市盈率低于30 并且大于 0 day = (datetime.datetime.now()- datetime.timedelta(days=30))dateStart = datetime.datetime(day.year, day.month, day.day, 0, 0, 0)##过去30天的数据dateStart = datetime.datetime.strptime(str(dateStart),'%Y-%m-%d %H:%M:%S')dateStart = datetime.datetime.date(dateStart) df2 = ak.stock_a_lg_indicator("601398")df2_mean = df2[df2.trade_date >dateStart ].pe.mean()var2 = df2_mean >0 and df2_mean < 30#指标3:经营现金流为正df3 = df#财务指标数据var3 = float( df3['每股经营性现金流(元)'].iat[1] ) > 0# print(var3)#指标4:新期的净利润大于前5年的净利润 取万元var4_1 = float(df3['扣除非经常性损益后的净利润(元)'].iat[1])/ 10000 var4_2 = df3['扣除非经常性损益后的净利润(元)'].iloc[2:8].astype(np.float).max()/10000 var4 = var4_1 > var4_2##综合评估varAll = var1 and var2 and var3 and var4if varAll == True:print(row)anyData = {'stock':r_code,'name':r_name,'指标1':var1,'指标1':var1,'指标2':var2,'指标3':var3,'指标4':var4,'综合评估':varAll}df_idex = row_index+1dfResult.loc[df_idex] = anyDataprint(dfResult)except:continue#time.sleep(7)
这里的指标可以重新写,重新添加。自己习惯增加。