利用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)
這里的指標可以重新寫,重新添加。自己習慣增加。
?