净利润断层
統計2021年1季度凈利潤斷層的股票到今天的漲幅;
凈利潤斷層的定義:一、1季度財報中凈利潤翻倍,二、季報公布的首個交易日股票跳空上漲。
獲取到屬于凈利潤翻倍的股票,再去統計他們的滾動漲幅,將個股的滾動漲幅拼接到一個表中,然后按行計算平均漲幅,畫出圖形。
import tushare as ts import akshare as ak import pandas as pd import matplotlib.pyplot as plt import matplotlib as mpl# 獲取2021年一季度凈利潤翻倍的股票 def get_profit():profit = ak.stock_em_yjbb(date="20210331").loc[:, ['股票代碼', '股票簡稱', '凈利潤-同比增長', '最新公告日期']]profit['最新公告日期'] = pd.to_datetime(profit['最新公告日期'])profit['最新公告日期'] = profit['最新公告日期'].astype(str)profit = profit.set_index('最新公告日期').sort_index().loc['2021-03-31': '2021-04-31'] # 索引的順序一定要注意,否則是空profit = profit[profit['凈利潤-同比增長'] > 50]return profit profit_data = get_profit().reset_index().set_index('股票代碼') # print(profit_data)# 將不是A股的數據清洗掉 def get_Acode(lists):result = pd.DataFrame()for code in lists:if code[:2] in ['00', '60', '30', '68']: # 只要A股tmp = profit_data.loc[[code], :]result = result.append(tmp)# result.set_index('最新公告日期')return result profit_result = get_Acode(profit_data.index) print(profit_result) # profit_result.to_csv('./data/凈利潤翻倍.csv')# 獲取凈利潤翻倍業績公告首日跳空上漲,并且計算到今日的漲幅 def get_upprice():count = 0result = pd.DataFrame()for code, date in zip(profit_result.index.tolist(), profit_result['最新公告日期'].tolist()):# 運行計數count = count + 1print(f'\r進度:%.1f, 代碼:%s' % (count/len(profit_result.index) * 100, code), end='')tmp_data = ak.stock_zh_a_hist(symbol=code,start_date=date,end_date='20211011',adjust="qfq").loc[:, ['日期', '收盤', '最低', '最高']]# 判斷股票第二日最低價是否大于公告日的收盤價tmp_data['收盤'] = tmp_data['收盤'].astype(float)tmp_data['最低'] = tmp_data['最低'].astype(float)tmp_data['最高'] = tmp_data['最高'].astype(float)try:if tmp_data.loc[1, '最低'] > tmp_data.loc[0, '最高']:tmp_data['漲幅'] = (tmp_data['收盤']/tmp_data['收盤'][0] - 1) * 100tmp_data = tmp_data.set_index('日期').loc[:, ['漲幅']].rename(columns={'漲幅': code})result = result.join(tmp_data, how='outer')except:print(code)continuereturn resultresult_up = get_upprice() result_up['總的漲幅'] = result_up.apply(lambda x: x.mean(), axis=1) print(result_up) result_up.to_csv('./data/滾動漲幅.csv')result_up = pd.read_csv('./data/滾動漲幅.csv') .set_index('日期') # 繪圖 個股滾動漲幅 for code in result_up.columns:result_up.index = pd.to_datetime(result_up.index)plt.style.use('seaborn') # 將繪圖樣式設置為seabornmpl.rcParams['font.sans-serif'] = ['SimHei']mpl.rcParams['font.family'] = 'sans-serif'mpl.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示為方塊的問題plt.figure(figsize=(10, 6))plt.subplot()plot = plt.plot(result_up[code], lw=1.5) # 會自動把包含的數據解釋為單獨的數據集plt.title('%s 滾動漲幅' % code)plt.savefig('./data/%s.png' % code)# plt.show()plt.close()result_up['總的漲幅'] = result_up.apply(lambda x: x.mean(), axis=1)這個是按行統計的結果組成一個新列。
?
總結
- 上一篇: 华为nova3计算机怎么算汇率,华为阅读
- 下一篇: 串口 IIC PWM 相关