首先,我们需要定义一个函数,计算个股高管的持股分析计算。计算最近一年度持股最多的那位高管,连续近几年来是否存在减持的情况。
def 持股分析(code):
path = './data/%s.xls' % code
if not os.path.exists(path):
print("要分析的个股不存在!")
return
stock_data = pd.read_excel(path)
# 第一步, 简单的数据清洗:只取出结束日期最大且持股数据不为0的记录
# 20191231
max_date = stock_data['end_date'].max()
max_date_stock = stock_data.loc[stock_data['end_date'] == max_date].loc[stock_data['hold_vol'] > 0]
if max_date_stock.empty:
return False
# 第二步, 获得高层持股人员数据,我们只取当前持股数最大的高层管理人员(只取一个,多个的分析可以自己完成)
hold_vol_max = max_date_stock['hold_vol'].max()
analy_data_stock = max_date_stock.loc[max_date_stock['hold_vol'] == hold_vol_max]
manager_name = analy_data_stock.iloc[0]['name']
# print(manager_name)
# 第三步, 获得待计算的高层人员历史所有持股数据,按照日期降序排序,且只取前20条数据
last_result_data = stock_data[stock_data.name == manager_name][:20]
# print(last_result_data)
# 如果持股记录数少于20条,则不进行计算
if last_result_data.shape[0] < 20:
return False
last_result_data = last_result_data.sort_values('end_date', ascending=False)
# 将空值转换为0
last_result_data = last_result_data.fillna(0)
# 第四步,判断持股是否存在减少的情况(即减持)
result = cal_hold_vol(last_result_data)
if result:
print("股票:%s,符合要求" % code)
return result
里面涉及的函数cal_hold_vol(),该函数计算的结果为true或false,代表是否满足我们的需求,为true即持股最多的那位高管近几年来没有存在减持的情况,满足要求。为false,近几年来存在减持情况,不满足要求。函数代码如下:
def cal_hold_vol(last_result_data):
origin_data = last_result_data.hold_vol.tolist()
for i in range(len(origin_data)):
if i != len(origin_data) - 1:
cal_result = origin_data[i] - origin_data[i + 1]
if cal_result < 0:
return False
return True
至此,我们的核心代码已经编写完成。我们还需要写一个代码,遍历读取两市的所有股票的进行分析,两市的股票代码我们保存在csv文件中。从文件中读取进行遍历。
# 股票列表数据
data = pd.read_csv("股票列表.csv")
empty_pd = pd.DataFrame(columns=["ts_code", "name"])
for index, row in data.iterrows():
ts_code = row['ts_code']
name = row['name']
result = 持股分析(ts_code)
# result 返回结果:true,符合;false:不符合
if result:
temp = pd.DataFrame({"ts_code": ts_code, "name": name}, index=["0"])
empty_pd = empty_pd.append(temp, ignore_index=True)
empty_pd.to_csv("aly_result.csv")
计算结果,我们存入了aly_result.csv的csv文件中,总共计算得出的满足条件的结果有200多只股票。

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/76854
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!