今天持仓的某只股票发布了预亏公告,我很担心未来走势,突然想到聚宽这边可以量化未来的走势,给心理一个预期,于是我就动手试了试。
到底是利空还是利好还是无波动,量化一下就能心中有数。
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
本社区仅针对特定人员开放
查看需注册登录并通过风险意识测评
5秒后跳转登录页面...