请 [注册] 或 [登录]  | 返回主站

量化交易吧 /  数理科学 帖子:3364762 新帖:0

浅析业绩预亏预减公告的股价波动影响

执着技术派发表于:5 月 10 日 02:46回复(1)

今天持仓的某只股票发布了预亏公告,我很担心未来走势,突然想到聚宽这边可以量化未来的走势,给心理一个预期,于是我就动手试了试。
到底是利空还是利好还是无波动,量化一下就能心中有数。

q= query(jy.LC_PerformanceForecast).order_by(jy.LC_PerformanceForecast.InfoPublDate.desc()).limit(3)
df = jy.run_query(q)

以上代码,可以通过聚宽的股票数据库查询公告。

顺便附上相关业绩预告规则。

一、业绩预告及修正

(一)应披露业绩预告的情形

板块

应披露业绩预告的情形

深主板

1、净利润为负值;

2、实现扭亏为盈;

3、实现盈利,且净利润与上年同期相比上升或者下降50%以上;

4、期末净资产为负值;

5、年度营业收入低于1,000万元。

注:

公司如预计出现上述第3项情形,但属于下列较小比较基数的,经深交所同意可以豁免披露:

(1)上一年度每股收益低于或等于0.05元;

(2)上一年度前三季度每股收益低于或等于0.04元;

(3)上一年度半年度每股收益低于或等于0.03元;

(4)上一年度第一季度每股收益低于或等于0.02元。

中小板

1、公司应披露半年度、前三季度、年度业绩预告。

2、公司预计第一季度业绩将出现下列情形之一的,应披露第一季度业绩预告:

(1)净利润为负值;

(2)净利润与上年同期相比上升或者下降50%以上;

(3)与上年同期相比实现扭亏为盈。

注:

上市公司预计出现上述第(2)项情形,比较基数较小(即上一年第一季度基本每股收益绝对值低于或等于0.02元人民币)且净利润变动金额较小的,可免于披露。

创业板

公司应披露一季度、半年度、前三季度、年度业绩预告。

沪主板

1、公司预计年度经营业绩将出现下列情形之一的,应当进行业绩预告;

(1)净利润为负值;

(2)净利润与上年同期相比上升或者下降50%以上;

(3)实现扭亏为盈。

2、预计中期和第三季度业绩出现上述情形之一的,可以进行业绩预告。

注:

公司出现上述第(2)项情形,但属于下列较小比较基数的,经上交所同意可以豁免披露:

(1)上一年年度报告每股收益绝对值低于或等于0.05元;

(2)上一期中期报告每股收益绝对值低于或等于0.03元;

(3)上一期年初至第三季度报告期末每股收益绝对值低于或等于0.04元。

根据近2000 组数据分析可得知,在股价发布预亏公告的30天和60天后波动并不会太大,而发布公告的5天内有平均近2%的跌幅。

from jqdata import finance
from sklearn import linear_model
from jqdata import *
import scipy.stats as stats
import numpy as np
import pandas as pd
import math
import time;

q= query(jy.LC_PerformanceForecast).order_by(jy.LC_PerformanceForecast.InfoPublDate.desc()).limit(3)
df = jy.run_query(q)

df.head(3)
ID CompanyCode InfoPublDate EndDate ForcastType ForcastReason ResultStatement ForcastContent XGRQ JSID ... EEarningFloor EEarningCeiling EProfitFloor EProfitCeiling EEPSFloor EEPSCeiling ForecastObject NPYOYConsistentForecast EGrowRateFloorC EGrowthRateCeilC
0 608674619904 416 2019-04-16 2019-03-31 7 None 净利润亏损:3572万元-4522万元 预计2019年1月1日至2019年3月31日归属于上市公司股东的净利润亏损:3572... 2019-04-15 20:16:59 608674619905 ... NaN NaN -45220000 -35720000 -0.07 -0.06 10 NaN 32.23 46.47
1 608674308865 1214 2019-04-16 2019-12-31 6 None 营业收入35亿元 公司2019年度计划实现营业收入35亿元,发生期间费用4.7亿元。 2019-04-15 20:11:48 608674308867 ... 3500000000 3500000000 NaN NaN NaN NaN 20 NaN NaN NaN
2 608672503563 74744 2019-04-16 2019-06-30 4 None 净利润变动幅度13.02%至68.66% 2019年1-6月归属于上市公司股东的净利润变动幅度13.02%至68.66%\r\... 2019-04-15 19:41:41 608672503564 ... NaN NaN 65000000 97000000 NaN NaN 10 NaN NaN NaN

3 rows × 22 columns

def pct(start_date,stock,days): #计算股价涨跌幅
    start_date = datetime.datetime.strptime(start_date,'%Y-%m-%d %H:%M:%S')
    end_date = str(start_date + (datetime.timedelta(days)))
    p = get_price(stock,start_date = start_date,end_date = end_date)
    pct = p.close.pct_change().sum()
    return pct
#print pct_change('2019-01-25 00:00:00','000001.XSHE')
secu_category = [1] # 证券类别:1-A股,SecuMain表中的字段

incode = jy.run_query(query(
            jy.SecuMain.SecuCode,
            jy.SecuMain.CompanyCode,
        ).filter(
            jy.SecuMain.SecuCategory.in_(secu_category),
        ))
# print(incode)
q = query(
        jy.LC_PerformanceForecast
    ).filter(
        jy.LC_PerformanceForecast.CompanyCode.in_(incode['CompanyCode']), # 股票代码
        jy.LC_PerformanceForecast.ForcastType == 8, #8为公告为eps预减
    ).order_by(jy.LC_PerformanceForecast.InfoPublDate.desc() # 公告发布日期
    ).limit(3000)

df = jy.run_query(q).fillna(value=0, method=None, axis=0) 
df2 = pd.merge(incode, df, on='CompanyCode')
DF = df2[['SecuCode','InfoPublDate','ResultStatement']]
DF = DF.copy()
DF['date'] = DF.T.apply(lambda x:(str(x.InfoPublDate).split('+')[0]))
DF['code'] = DF.T.apply(lambda x:normalize_code(x.SecuCode))
DF['pct5'] = DF.T.apply(lambda x: pct(x.date,x.code,5)) #5天(非交易日)之后股价涨跌幅
DF['pct30'] = DF.T.apply(lambda x: pct(x.date,x.code,30)) #30天(非交易日)之后股价涨跌幅
DF['pct60'] = DF.T.apply(lambda x: pct(x.date,x.code,60)) #60天(非交易日)之后股价涨跌幅
DF = DF[(DF['pct30'] != 0)]
#print DF[['code','date','pct']]

print DF.pct5.describe() 
print DF.pct30.describe() 
print DF.pct60.describe() 
count    2833.000000
mean       -0.018255
std         0.055024
min        -0.300003
25%        -0.044585
50%        -0.011738
75%         0.011578
max         0.298593
Name: pct5, dtype: float64
count    2833.000000
mean        0.004703
std         0.151579
min        -1.020249
25%        -0.082817
50%        -0.011449
75%         0.084021
max         1.239200
Name: pct30, dtype: float64
count    2833.000000
mean       -0.002034
std         0.213625
min        -1.481788
25%        -0.129419
50%        -0.020600
75%         0.106050
max         1.320719
Name: pct60, dtype: float64
 

全部回复

0/140

量化课程

    移动端课程