庆祝qa club开张,发一些财报策略代码
发布于 3 个月前 作者 barretthugh 221 次浏览 来自 代码实现

EPS在过去5季都大于5

num_of_quarter = 5
EPS = 5
para = lambda x: x > EPS

方法1
df.data.groupby(level=1).tail(num_of_quarter).query("基本每股收益 > 5").groupby('code').filter(lambda x: len(x) == num_of_quarter)
df.data.groupby(level=1).tail(5).query("基本每股收益 > 2").groupby('code').filter(lambda x: len(x) == 5)['stock_code'].value_counts().index.tolist()

方法2
d = df.data.groupby(level=1).tail(num_of_quarter)
d[d['基本每股收益']>EPS].groupby('code').filter(lambda x: len(x) == num_of_quarter)
d[d['基本每股收益'].apply(para)].groupby('code').filter(lambda x: len(x) == num_of_quarter)

EPS 较去年同期增加10%以上

df.data['past_EPS_pct_c'] = round(df.data.groupby(level=1)['基本每股收益'].pct_change(periods=4) * 100, 2)
df.data.groupby(level=1).tail(1).query('past_EPS_pct_c > 10')

营业利润增长率 连续N个季度高于上一季

df.data.rename({'营业利润增长率(%)':'OPGR'}, axis=1, inplace=True)
df.data.groupby(level=1).tail(3).query('OPGR > 0').groupby('code').filter(lambda x: len(x) == 3)

营业收入增长率 连续N个季度高于去度同期

num_of_quarter = 3
df.data.rename({'营业收入增长率(%)':'ORS_contrast'}, axis=1, inplace=True)
df.data.groupby(level=1).tail(3).query('ORS_contrast > 0').groupby('code').filter(lambda x: len(x) == 3)

累计营业收入 比去年同期增加30%以上

df.data['past_OR_pct_c'] = round(df.data.groupby(level=1)['其中:营业收入'].pct_change(periods=4) * 100, 2)
df.data.groupby(level=1).tail(1).query('past_OR_pct_c > 30')

连续N个季度亏损,转盈余

num_of_lose = 3
# 转盈余
num_of_profit = 1

if profit:
    num = num_of_lose + num_of_profit
else:
    num = num_of_lose

if num == num_of_lose:
    df.data.groupby(level=1).tail(num).query('营业收入 < 0').groupby('code').filter(lambda x: len(x) == num)
else:
    date_l = list(set(df.data['report_date']))
    date_l.sort()
    # N个季度亏损
    df.data.groupby(level=1).tail(num).query('report_date < ' + lst[-1*num_of_profit].strftime('%Y%m%d')).query('营业收入 < 0').groupby('code').filter(lambda x: len(x) == num)
    # 转盈余
    df.data.groupby(level=1).tail(num_of_profit).query('营业收入 > 0')
6 回复

牛皮牛皮 欢迎分享

给大佬点赞加冰阔落@barretthugh

虽然看不懂,仍然表示强烈的支持!

赞,👍,感谢🙏。

df 的获得是下面的代码,

import QUANTAXIS as QA
from QUANTAXIS.QAUtil import (DATABASE)

coll_stock_day = DATABASE.stock_day
stock_list = DATABASE.stock_list
code_list = coll_stock_day.distinct('code')
df=QA.QA_fetch_financial_report_adv(code_list,'2017-01-01','2019-10-01',ltype ='CN')

新版QA里面返回的dataframe里面有个重复的code,只要reset_index 就可以了 image.png EPS在过去5季都大于5

d = df.data.groupby(level=1).tail(num_of_quarter)
d[d['基本每股收益']>2].reset_index(drop = True).groupby('code').filter(lambda x: len(x) == num_of_quarter)

image.png

回到顶部