import akshare as ak
import pandas as pd
df_stop = ak.stock_zh_a_stop_em()
d1 = df_stop[['代码','名称']]
col=['code','name']
d1.columns=col
d1.set_index('code',inplace=True)
print(type(d1.index))
print(d1.index.str)
d1 = d1.sort_index()
d1
<class 'pandas.core.indexes.base.Index'>
<pandas.core.strings.accessor.StringMethods object at 0x000001F9D341B640>
|
name |
| code |
|
| 400002 |
长 白 5 |
| 400005 |
海国实 5 |
| 400006 |
京中兴1 |
| 400007 |
华 凯 1 |
| 400008 |
水仙A 5 |
| ... |
... |
| 420103 |
*ST舜喆B |
| 420108 |
退市鹏起B |
| 420120 |
绿庭B5 |
| 420140 |
东海B3 |
| 420153 |
海创B3 |
154 rows × 1 columns
df_now = ak.stock_zh_a_spot_em()
df_now.columns
Index(['序号', '代码', '名称', '最新价', '涨跌幅', '涨跌额', '成交量', '成交额', '振幅', '最高', '最低',
'今开', '昨收', '量比', '换手率', '市盈率-动态', '市净率', '总市值', '流通市值', '涨速', '5分钟涨跌',
'60日涨跌幅', '年初至今涨跌幅'],
dtype='object')
d2 = df_now[['代码','名称']]
col=['code','name']
d2.columns=col
d2.set_index('code',inplace=True)
d2 = d2.sort_index()
d2 = d2[~(d2.index.str.startswith('001'))]
d2 = d2[~(d2.index.str.startswith('003'))]
d2 = d2[~(d2.index.str.startswith('400'))]
d2 = d2[~(d2.index.str.startswith('420'))]
d2 = d2[~(d2.index.str.startswith('430'))]
d2 = d2[~(d2.index.str.startswith('689'))]
d2 = d2[~(d2.index.str.startswith('83'))]
d2 = d2[~(d2.index.str.startswith('87'))]
d2.columns
Index(['name'], dtype='object')
d2.index
Index(['000001', '000002', '000003', '000004', '000005', '000006', '000007',
'000008', '000009', '000010',
...
'688786', '688787', '688788', '688789', '688793', '688798', '688799',
'688800', '688819', '688981'],
dtype='object', name='code', length=4940)
d3 = df_now.loc[df_now['代码'].isin(d2.index),['代码']]
d3['股票名称'] = df_now.loc[df_now['代码'].isin(d2.index),['名称']]
d3['交易日期'] = pd.Timestamp.today().strftime('%Y-%m-%d')
d3['开盘价'] = df_now.loc[df_now['代码'].isin(d2.index),['今开']]
d3['收盘价'] = df_now.loc[df_now['代码'].isin(d2.index),['最新价']]
d3['昨收'] = df_now.loc[df_now['代码'].isin(d2.index),['昨收']]
d3['流通市值'] = df_now.loc[df_now['代码'].isin(d2.index),['流通市值']]
d3['总市值'] = df_now.loc[df_now['代码'].isin(d2.index),['总市值']]
col=['code','name','date_trade','open','close','close_yesterday','value_liquidity','value_total']
d3.columns=col
d3.set_index('code',inplace=True)
d3 = d3.sort_index()
d3['equity_liquidity'] = d3['value_liquidity'] / d3['close']
d3['equity_total'] = d3['value_total'] / d3['close']
d3
|
name |
date_trade |
open |
close |
close_yesterday |
value_liquidity |
value_total |
equity_liquidity |
equity_total |
| code |
|
|
|
|
|
|
|
|
|
| 000001 |
平安银行 |
2022-10-10 |
11.87 |
11.84 |
11.86 |
2.297617e+11 |
2.297661e+11 |
1.940555e+10 |
1.940592e+10 |
| 000002 |
万 科A |
2022-10-10 |
17.54 |
17.83 |
17.15 |
1.732605e+11 |
2.073755e+11 |
9.717361e+09 |
1.163071e+10 |
| 000003 |
PT金田A |
2022-10-10 |
NaN |
NaN |
2.71 |
NaN |
NaN |
NaN |
NaN |
| 000004 |
ST国华 |
2022-10-10 |
8.36 |
8.44 |
8.36 |
9.818123e+08 |
1.121237e+09 |
1.163285e+08 |
1.328480e+08 |
| 000005 |
ST星源 |
2022-10-10 |
1.67 |
1.68 |
1.67 |
1.777350e+09 |
1.778342e+09 |
1.057946e+09 |
1.058537e+09 |
| ... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
| 688798 |
艾为电子 |
2022-10-10 |
91.73 |
90.40 |
91.80 |
8.604724e+09 |
1.500640e+10 |
9.518500e+07 |
1.660000e+08 |
| 688799 |
华纳药厂 |
2022-10-10 |
31.24 |
31.48 |
31.23 |
1.741253e+09 |
2.952824e+09 |
5.531300e+07 |
9.380000e+07 |
| 688800 |
瑞可达 |
2022-10-10 |
136.00 |
130.00 |
136.00 |
9.227140e+09 |
1.471042e+10 |
7.097800e+07 |
1.131571e+08 |
| 688819 |
天能股份 |
2022-10-10 |
34.12 |
32.90 |
34.51 |
4.279480e+09 |
3.198209e+10 |
1.300754e+08 |
9.721000e+08 |
| 688981 |
中芯国际 |
2022-10-10 |
37.51 |
37.78 |
37.56 |
7.395067e+10 |
2.992704e+11 |
1.957403e+09 |
7.921399e+09 |
4940 rows × 9 columns
dnan = d3.loc[d3['value_total'].isnull()]
dnan
|
name |
date_trade |
open |
close |
close_yesterday |
value_liquidity |
value_total |
equity_liquidity |
equity_total |
| code |
|
|
|
|
|
|
|
|
|
| 000003 |
PT金田A |
2022-10-10 |
NaN |
NaN |
2.71 |
NaN |
NaN |
NaN |
NaN |
| 000013 |
*ST石化A |
2022-10-10 |
NaN |
NaN |
2.47 |
NaN |
NaN |
NaN |
NaN |
| 000015 |
PT中浩A |
2022-10-10 |
NaN |
NaN |
6.85 |
NaN |
NaN |
NaN |
NaN |
| 000018 |
神城A退 |
2022-10-10 |
NaN |
NaN |
0.27 |
NaN |
NaN |
NaN |
NaN |
| 000024 |
招商地产 |
2022-10-10 |
NaN |
NaN |
40.50 |
NaN |
NaN |
NaN |
NaN |
| ... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
| 603996 |
退市中新 |
2022-10-10 |
NaN |
NaN |
0.39 |
NaN |
NaN |
NaN |
NaN |
| 688152 |
麒麟信安 |
2022-10-10 |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
| 688291 |
金橙子 |
2022-10-10 |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
| 688372 |
伟测科技 |
2022-10-10 |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
| 688426 |
康为世纪 |
2022-10-10 |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
198 rows × 9 columns
df_newstock = dnan[dnan['value_total'].isnull() & dnan['close_yesterday'].isnull()]
df_newstock = df_newstock[df_newstock.index != '000508']
df_newstock
|
name |
date_trade |
open |
close |
close_yesterday |
value_liquidity |
value_total |
equity_liquidity |
equity_total |
| code |
|
|
|
|
|
|
|
|
|
| 301223 |
中荣股份 |
2022-10-10 |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
| 301230 |
泓博医药 |
2022-10-10 |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
| 301367 |
怡和嘉业 |
2022-10-10 |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
| 301379 |
天山电子 |
2022-10-10 |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
| 301389 |
隆扬电子 |
2022-10-10 |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
| 688152 |
麒麟信安 |
2022-10-10 |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
| 688291 |
金橙子 |
2022-10-10 |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
| 688372 |
伟测科技 |
2022-10-10 |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
| 688426 |
康为世纪 |
2022-10-10 |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
df_closed = dnan[(~dnan['close_yesterday'].isnull())|(dnan.index == '000508')]
df_closed
|
name |
date_trade |
open |
close |
close_yesterday |
value_liquidity |
value_total |
equity_liquidity |
equity_total |
| code |
|
|
|
|
|
|
|
|
|
| 000003 |
PT金田A |
2022-10-10 |
NaN |
NaN |
2.71 |
NaN |
NaN |
NaN |
NaN |
| 000013 |
*ST石化A |
2022-10-10 |
NaN |
NaN |
2.47 |
NaN |
NaN |
NaN |
NaN |
| 000015 |
PT中浩A |
2022-10-10 |
NaN |
NaN |
6.85 |
NaN |
NaN |
NaN |
NaN |
| 000018 |
神城A退 |
2022-10-10 |
NaN |
NaN |
0.27 |
NaN |
NaN |
NaN |
NaN |
| 000024 |
招商地产 |
2022-10-10 |
NaN |
NaN |
40.50 |
NaN |
NaN |
NaN |
NaN |
| ... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
| 601268 |
*ST二重 |
2022-10-10 |
NaN |
NaN |
2.35 |
NaN |
NaN |
NaN |
NaN |
| 601299 |
中国北车 |
2022-10-10 |
NaN |
NaN |
29.98 |
NaN |
NaN |
NaN |
NaN |
| 601558 |
退市锐电 |
2022-10-10 |
NaN |
NaN |
0.25 |
NaN |
NaN |
NaN |
NaN |
| 603157 |
退市拉夏 |
2022-10-10 |
NaN |
NaN |
0.59 |
NaN |
NaN |
NaN |
NaN |
| 603996 |
退市中新 |
2022-10-10 |
NaN |
NaN |
0.39 |
NaN |
NaN |
NaN |
NaN |
189 rows × 9 columns
d4 = d3.loc[~d3.index.isin(df_newstock.index)]
d4 = d4.sort_index()
d4
|
name |
date_trade |
open |
close |
close_yesterday |
value_liquidity |
value_total |
equity_liquidity |
equity_total |
| code |
|
|
|
|
|
|
|
|
|
| 000001 |
平安银行 |
2022-10-10 |
11.87 |
11.84 |
11.86 |
2.297617e+11 |
2.297661e+11 |
1.940555e+10 |
1.940592e+10 |
| 000002 |
万 科A |
2022-10-10 |
17.54 |
17.83 |
17.15 |
1.732605e+11 |
2.073755e+11 |
9.717361e+09 |
1.163071e+10 |
| 000003 |
PT金田A |
2022-10-10 |
NaN |
NaN |
2.71 |
NaN |
NaN |
NaN |
NaN |
| 000004 |
ST国华 |
2022-10-10 |
8.36 |
8.44 |
8.36 |
9.818123e+08 |
1.121237e+09 |
1.163285e+08 |
1.328480e+08 |
| 000005 |
ST星源 |
2022-10-10 |
1.67 |
1.68 |
1.67 |
1.777350e+09 |
1.778342e+09 |
1.057946e+09 |
1.058537e+09 |
| ... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
| 688798 |
艾为电子 |
2022-10-10 |
91.73 |
90.40 |
91.80 |
8.604724e+09 |
1.500640e+10 |
9.518500e+07 |
1.660000e+08 |
| 688799 |
华纳药厂 |
2022-10-10 |
31.24 |
31.48 |
31.23 |
1.741253e+09 |
2.952824e+09 |
5.531300e+07 |
9.380000e+07 |
| 688800 |
瑞可达 |
2022-10-10 |
136.00 |
130.00 |
136.00 |
9.227140e+09 |
1.471042e+10 |
7.097800e+07 |
1.131571e+08 |
| 688819 |
天能股份 |
2022-10-10 |
34.12 |
32.90 |
34.51 |
4.279480e+09 |
3.198209e+10 |
1.300754e+08 |
9.721000e+08 |
| 688981 |
中芯国际 |
2022-10-10 |
37.51 |
37.78 |
37.56 |
7.395067e+10 |
2.992704e+11 |
1.957403e+09 |
7.921399e+09 |
4931 rows × 9 columns
df_all = d4
df_all['is_closed'] = False
df_all['is_closed'] = df_all['value_total'].isnull()
df_all
|
name |
date_trade |
open |
close |
close_yesterday |
value_liquidity |
value_total |
equity_liquidity |
equity_total |
is_closed |
| code |
|
|
|
|
|
|
|
|
|
|
| 000001 |
平安银行 |
2022-10-10 |
11.87 |
11.84 |
11.86 |
2.297617e+11 |
2.297661e+11 |
1.940555e+10 |
1.940592e+10 |
False |
| 000002 |
万 科A |
2022-10-10 |
17.54 |
17.83 |
17.15 |
1.732605e+11 |
2.073755e+11 |
9.717361e+09 |
1.163071e+10 |
False |
| 000003 |
PT金田A |
2022-10-10 |
NaN |
NaN |
2.71 |
NaN |
NaN |
NaN |
NaN |
True |
| 000004 |
ST国华 |
2022-10-10 |
8.36 |
8.44 |
8.36 |
9.818123e+08 |
1.121237e+09 |
1.163285e+08 |
1.328480e+08 |
False |
| 000005 |
ST星源 |
2022-10-10 |
1.67 |
1.68 |
1.67 |
1.777350e+09 |
1.778342e+09 |
1.057946e+09 |
1.058537e+09 |
False |
| ... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
| 688798 |
艾为电子 |
2022-10-10 |
91.73 |
90.40 |
91.80 |
8.604724e+09 |
1.500640e+10 |
9.518500e+07 |
1.660000e+08 |
False |
| 688799 |
华纳药厂 |
2022-10-10 |
31.24 |
31.48 |
31.23 |
1.741253e+09 |
2.952824e+09 |
5.531300e+07 |
9.380000e+07 |
False |
| 688800 |
瑞可达 |
2022-10-10 |
136.00 |
130.00 |
136.00 |
9.227140e+09 |
1.471042e+10 |
7.097800e+07 |
1.131571e+08 |
False |
| 688819 |
天能股份 |
2022-10-10 |
34.12 |
32.90 |
34.51 |
4.279480e+09 |
3.198209e+10 |
1.300754e+08 |
9.721000e+08 |
False |
| 688981 |
中芯国际 |
2022-10-10 |
37.51 |
37.78 |
37.56 |
7.395067e+10 |
2.992704e+11 |
1.957403e+09 |
7.921399e+09 |
False |
4931 rows × 10 columns
df_all.loc[df_all.index.isin(['000001','000003','000508'])]
|
name |
date_trade |
open |
close |
close_yesterday |
value_liquidity |
value_total |
equity_liquidity |
equity_total |
is_closed |
| code |
|
|
|
|
|
|
|
|
|
|
| 000001 |
平安银行 |
2022-10-10 |
11.87 |
11.84 |
11.86 |
2.297617e+11 |
2.297661e+11 |
1.940555e+10 |
1.940592e+10 |
False |
| 000003 |
PT金田A |
2022-10-10 |
NaN |
NaN |
2.71 |
NaN |
NaN |
NaN |
NaN |
True |
| 000508 |
琼民源A |
2022-10-10 |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
True |
df_all.index[0]
'000001'
df_all.loc[df_all.index[0],'name']
'平安银行'
df_all.loc[df_all.index[0]]
name 平安银行
date_trade 2022-10-10
open 11.87
close 11.84
close_yesterday 11.86
value_liquidity 229761675888.0
value_total 229766071464.0
equity_liquidity 19405546950.0
equity_total 19405918197.972973
is_closed False
Name: 000001, dtype: object
df_all.iloc[0]['close_yesterday']
11.86
for i in range(0,len(df_all)):
if pd.isna(df_all.iloc[i]['close_yesterday']):
code_full = 'sz'+ df_all.index[i]
df_day = ak.stock_zh_index_daily(symbol=code_full)
df_day.sort_values(by='date')
print(df_day.sort_values(by='date').tail(3))
print(df_all.iloc[i]['close_yesterday'])
df_all.loc[df_all.index[i],'close_yesterday'] = df_day.sort_values(by='date').tail(1)['close'].iloc[0]
print(df_all.iloc[i]['close_yesterday'])
date open high low close volume
937 1997-02-26 24.15 25.48 24.12 25.41 10165400
938 1997-02-27 26.00 26.18 24.90 25.22 10688600
939 1997-02-28 24.80 24.80 22.70 23.50 56362000
nan
23.5
df_all.loc['000508']
d_test = df_all.loc[df_closed.index]
d_test.iloc[0]['close_yesterday']
2.71
d_test = df_all.loc[df_closed.index]
for i in range(0,len(d_test)):
code_now = d_test.index[i]
code_full = ''
if code_now.startswith('6'):
code_full = 'sh' + code_now
else:
code_full = 'sz' + code_now
df_day = ak.stock_zh_index_daily(symbol=code_full)
if(d_test.loc[d_test.index[i]]['close_yesterday'] != df_day.sort_values(by='date').tail(1)['close'].iloc[0]):
print(d_test.loc[d_test.index[i]])
print('Nice!')
Nice!
def get_daily_163(code,start='19900101',end=''):
if code.startswith('6'):
code = '0'+code
else:
code = '1'+code
url_mod="http://quotes.money.163.com/service/chddata.html?code=%s&start=%s&end=%s"
url=url_mod%(code,start,end)
df=pd.read_csv(url, encoding = 'gb2312')
df.loc[df.index[-1],['前收盘']] = 1
df.index = pd.to_datetime(df.日期)
df.sort_index()
df = df[['股票代码','名称','日期','开盘价','收盘价','前收盘','流通市值','总市值']]
df['股票代码'] = code[1:]
df['流通股本'] = df['流通市值'] / df['收盘价']
df['总股本'] = df['总市值'] / df['收盘价']
df['未开张'] =~((df['开盘价'] > 0) & (df['收盘价'] > 0))
df.loc[df['未开张'],'流通股本'] = np.nan
df.loc[df['未开张'],'总股本'] = np.nan
df = df.fillna(method='ffill')
df = df.rename(columns={'名称':'股票名称'})
df = df.rename(columns={'前收盘':'前收盘价'})
df = df.sort_index()
df.rename(columns={'股票代码':'code',
'股票名称':'name',
'日期' :'date_trade',
'开盘价' :'open',
'收盘价' :'close',
'前收盘价':'close_before',
'流通市值':'value_liquidity',
'总市值' :'value_total',
'流通股本':'equity_liquidity',
'总股本' :'equity_total',
'未开张' :'is_closed'},
inplace=True)
return df
df_his = get_daily_163('000003')
df_his
|
code |
name |
date_trade |
open |
close |
close_before |
value_liquidity |
value_total |
equity_liquidity |
equity_total |
is_closed |
| 日期 |
|
|
|
|
|
|
|
|
|
|
|
| 1991-01-02 |
000003 |
深金田A |
1991-01-02 |
189.66 |
189.66 |
1.00 |
1.147986e+10 |
1.894926e+10 |
6.052864e+07 |
9.991174e+07 |
False |
| 1991-01-03 |
000003 |
深金田A |
1991-01-03 |
188.25 |
188.25 |
189.66 |
1.139452e+10 |
1.880839e+10 |
6.052864e+07 |
9.991174e+07 |
False |
| 1991-01-04 |
000003 |
深金田A |
1991-01-04 |
187.31 |
187.31 |
188.25 |
1.133762e+10 |
1.871447e+10 |
6.052864e+07 |
9.991174e+07 |
False |
| 1991-01-09 |
000003 |
深金田A |
1991-01-09 |
0.00 |
0.00 |
187.31 |
1.133762e+10 |
1.871447e+10 |
6.052864e+07 |
9.991174e+07 |
True |
| 1991-01-10 |
000003 |
深金田A |
1991-01-10 |
0.00 |
0.00 |
187.31 |
1.133762e+10 |
1.871447e+10 |
6.052864e+07 |
9.991174e+07 |
True |
| ... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
| 2002-04-22 |
000003 |
PT金田A |
2002-04-22 |
0.00 |
0.00 |
2.58 |
4.953879e+08 |
6.687277e+08 |
1.920108e+08 |
2.591968e+08 |
True |
| 2002-04-23 |
000003 |
PT金田A |
2002-04-23 |
0.00 |
0.00 |
2.58 |
4.953879e+08 |
6.687277e+08 |
1.920108e+08 |
2.591968e+08 |
True |
| 2002-04-24 |
000003 |
PT金田A |
2002-04-24 |
0.00 |
0.00 |
2.58 |
4.953879e+08 |
6.687277e+08 |
1.920108e+08 |
2.591968e+08 |
True |
| 2002-04-25 |
000003 |
PT金田A |
2002-04-25 |
0.00 |
0.00 |
2.58 |
4.953879e+08 |
6.687277e+08 |
1.920108e+08 |
2.591968e+08 |
True |
| 2002-04-26 |
000003 |
PT金田A |
2002-04-26 |
2.71 |
2.71 |
2.58 |
5.203493e+08 |
7.024233e+08 |
1.920108e+08 |
2.591968e+08 |
False |
2770 rows × 11 columns
df_snapshot = df_all.iloc[:0]
df_snapshot
|
name |
date_trade |
open |
close |
close_yesterday |
value_liquidity |
value_total |
equity_liquidity |
equity_total |
is_closed |
| code |
|
|
|
|
|
|
|
|
|
|
for i in range(0,len(df_closed)):
d = get_daily_163(df_closed.index[i])
d = d.loc[~d['is_closed']].tail(1)
d.set_index('code',inplace=True)
df_snapshot = pd.concat([df_snapshot,d])
df_snapshot['is_closed'] = True
df_snapshot = df_snapshot.sort_index()
df_snapshot
|
name |
date_trade |
open |
close |
close_yesterday |
value_liquidity |
value_total |
equity_liquidity |
equity_total |
is_closed |
close_before |
| code |
|
|
|
|
|
|
|
|
|
|
|
| 000003 |
PT金田A |
2002-04-26 |
2.71 |
2.71 |
NaN |
5.203493e+08 |
7.024233e+08 |
1.920108e+08 |
2.591968e+08 |
True |
2.58 |
| 000013 |
*ST石化A |
2004-04-28 |
2.45 |
2.47 |
NaN |
1.267703e+08 |
6.683696e+08 |
5.132400e+07 |
2.705950e+08 |
True |
2.50 |
| 000015 |
PT中浩A |
2001-06-08 |
6.85 |
6.85 |
NaN |
1.798988e+08 |
9.273079e+08 |
2.626260e+07 |
1.353734e+08 |
True |
6.80 |
| 000018 |
神城A退 |
2020-01-06 |
0.27 |
0.27 |
NaN |
3.721804e+08 |
4.585262e+08 |
1.378446e+09 |
1.698245e+09 |
True |
0.27 |
| 000024 |
招商地产 |
2015-12-07 |
40.60 |
40.50 |
NaN |
4.158946e+10 |
1.043260e+11 |
1.026900e+09 |
2.575951e+09 |
True |
39.50 |
| ... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
| 601268 |
*ST二重 |
2014-04-28 |
2.22 |
2.35 |
NaN |
3.971500e+09 |
5.389606e+09 |
1.690000e+09 |
2.293450e+09 |
True |
2.24 |
| 601299 |
中国北车 |
2015-05-06 |
32.88 |
29.98 |
NaN |
3.035800e+11 |
3.675482e+11 |
1.012608e+10 |
1.225978e+10 |
True |
32.60 |
| 601558 |
退市锐电 |
2020-06-23 |
0.25 |
0.25 |
NaN |
1.507650e+09 |
1.507650e+09 |
6.030600e+09 |
6.030600e+09 |
True |
0.25 |
| 603157 |
退市拉夏 |
2022-05-17 |
0.65 |
0.59 |
NaN |
1.962358e+08 |
3.231263e+08 |
3.326030e+08 |
5.476716e+08 |
True |
0.64 |
| 603996 |
退市中新 |
2022-05-17 |
0.40 |
0.39 |
NaN |
1.170585e+08 |
1.170585e+08 |
3.001500e+08 |
3.001500e+08 |
True |
0.39 |
189 rows × 11 columns
df_all.loc[df_snapshot.index] = df_snapshot
df_all
|
name |
date_trade |
open |
close |
close_yesterday |
value_liquidity |
value_total |
equity_liquidity |
equity_total |
is_closed |
| code |
|
|
|
|
|
|
|
|
|
|
| 000001 |
平安银行 |
2022-10-10 |
11.87 |
11.84 |
11.86 |
2.297617e+11 |
2.297661e+11 |
1.940555e+10 |
1.940592e+10 |
False |
| 000002 |
万 科A |
2022-10-10 |
17.54 |
17.83 |
17.15 |
1.732605e+11 |
2.073755e+11 |
9.717361e+09 |
1.163071e+10 |
False |
| 000003 |
PT金田A |
2002-04-26 |
2.71 |
2.71 |
NaN |
5.203493e+08 |
7.024233e+08 |
1.920108e+08 |
2.591968e+08 |
True |
| 000004 |
ST国华 |
2022-10-10 |
8.36 |
8.44 |
8.36 |
9.818123e+08 |
1.121237e+09 |
1.163285e+08 |
1.328480e+08 |
False |
| 000005 |
ST星源 |
2022-10-10 |
1.67 |
1.68 |
1.67 |
1.777350e+09 |
1.778342e+09 |
1.057946e+09 |
1.058537e+09 |
False |
| ... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
| 688798 |
艾为电子 |
2022-10-10 |
91.73 |
90.40 |
91.80 |
8.604724e+09 |
1.500640e+10 |
9.518500e+07 |
1.660000e+08 |
False |
| 688799 |
华纳药厂 |
2022-10-10 |
31.24 |
31.48 |
31.23 |
1.741253e+09 |
2.952824e+09 |
5.531300e+07 |
9.380000e+07 |
False |
| 688800 |
瑞可达 |
2022-10-10 |
136.00 |
130.00 |
136.00 |
9.227140e+09 |
1.471042e+10 |
7.097800e+07 |
1.131571e+08 |
False |
| 688819 |
天能股份 |
2022-10-10 |
34.12 |
32.90 |
34.51 |
4.279480e+09 |
3.198209e+10 |
1.300754e+08 |
9.721000e+08 |
False |
| 688981 |
中芯国际 |
2022-10-10 |
37.51 |
37.78 |
37.56 |
7.395067e+10 |
2.992704e+11 |
1.957403e+09 |
7.921399e+09 |
False |
4931 rows × 10 columns
df_all.loc[df_all.index.isin(['000001','000003','000508','000015','603157','300264'])]
|
name |
date_trade |
open |
close |
close_yesterday |
value_liquidity |
value_total |
equity_liquidity |
equity_total |
is_closed |
| code |
|
|
|
|
|
|
|
|
|
|
| 000001 |
平安银行 |
2022-10-10 |
11.87 |
11.84 |
11.86 |
2.297617e+11 |
2.297661e+11 |
1.940555e+10 |
1.940592e+10 |
False |
| 000003 |
PT金田A |
2002-04-26 |
2.71 |
2.71 |
NaN |
5.203493e+08 |
7.024233e+08 |
1.920108e+08 |
2.591968e+08 |
True |
| 000015 |
PT中浩A |
2001-06-08 |
6.85 |
6.85 |
NaN |
1.798988e+08 |
9.273079e+08 |
2.626260e+07 |
1.353734e+08 |
True |
| 000508 |
琼民源A |
1997-02-28 |
24.80 |
23.50 |
NaN |
4.404452e+09 |
1.314976e+10 |
1.874235e+08 |
5.595642e+08 |
True |
| 300264 |
佳创视讯 |
2022-10-10 |
4.98 |
4.90 |
4.98 |
1.746294e+09 |
2.024190e+09 |
3.563866e+08 |
4.131000e+08 |
False |
| 603157 |
退市拉夏 |
2022-05-17 |
0.65 |
0.59 |
NaN |
1.962358e+08 |
3.231263e+08 |
3.326030e+08 |
5.476716e+08 |
True |
def get_daily_sina(code):
code_full = ''
if code.startswith('6'):
code_full = 'sh' + code
else:
code_full = 'sz' + code
df_day = ak.stock_zh_index_daily(symbol=code_full)
df_day['date'] = pd.to_datetime(df_day['date'])
df_day.set_index('date',inplace=True)
df_day = df_day.sort_index()
return df_day
code = '000003'
df_fenhong = ak.stock_history_dividend_detail(symbol=code)
df_fenhong
|
公告日期 |
送股 |
转增 |
派息 |
进度 |
除权除息日 |
股权登记日 |
红股上市日 |
| 0 |
1996-07-10 |
2 |
0 |
0 |
实施 |
1996-07-27 |
1996-07-26 |
1996-07-31 |
| 1 |
1995-07-28 |
2 |
0 |
1 |
实施 |
1995-08-21 |
1995-08-18 |
NaT |
| 2 |
1994-05-06 |
4 |
0 |
1 |
实施 |
1994-05-20 |
1994-05-19 |
NaT |
df_fenhong = df_fenhong[~((df_fenhong['送股'] == 0) & (df_fenhong['转增'] == 0))]
i = df_fenhong[pd.isna(df_fenhong['红股上市日'])].index
print(i)
df_fenhong.loc[i,'红股上市日'] = df_fenhong.loc[i,'除权除息日']
df_fenhong = df_fenhong.sort_values(by=['红股上市日'],ascending=[False])
df_fenhong
Int64Index([1, 2], dtype='int64')
|
公告日期 |
送股 |
转增 |
派息 |
进度 |
除权除息日 |
股权登记日 |
红股上市日 |
| 0 |
1996-07-10 |
2 |
0 |
0 |
实施 |
1996-07-27 |
1996-07-26 |
1996-07-31 |
| 1 |
1995-07-28 |
2 |
0 |
1 |
实施 |
1995-08-21 |
1995-08-18 |
1995-08-21 |
| 2 |
1994-05-06 |
4 |
0 |
1 |
实施 |
1994-05-20 |
1994-05-19 |
1994-05-20 |
d_compare_a = pd.DataFrame()
d_compare_a['日期'] = df_fenhong['红股上市日']
d_compare_a['股票代码'] = code
d_compare_a['股票名称'] = ''
d_compare_a['送股'] = df_fenhong['送股']
d_compare_a['转增'] = df_fenhong['转增']
d_compare_a['收盘价'] = 0
d_compare_a['前收盘价'] = 0
d_compare_a['流通市值'] = 0
d_compare_a['总市值'] = 0
d_compare_a['流通股本'] = 0
d_compare_a['总股本'] = 0
d_compare_a.set_index('日期',inplace=True)
d_compare_a
|
股票代码 |
股票名称 |
送股 |
转增 |
收盘价 |
前收盘价 |
流通市值 |
总市值 |
流通股本 |
总股本 |
| 日期 |
|
|
|
|
|
|
|
|
|
|
| 1996-07-31 |
000003 |
|
2 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
| 1995-08-21 |
000003 |
|
2 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
| 1994-05-20 |
000003 |
|
4 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
code = '000003'
df_his = get_daily_163(code)
print(type(d_compare_a.index))
print(type(df_his.index))
print(d_compare_a.index)
print(df_his.index)
<class 'pandas.core.indexes.base.Index'>
<class 'pandas.core.indexes.datetimes.DatetimeIndex'>
Index([1996-07-31, 1995-08-21, 1994-05-20], dtype='object', name='日期')
DatetimeIndex(['1991-01-02', '1991-01-03', '1991-01-04', '1991-01-09',
'1991-01-10', '1991-01-11', '1991-01-14', '1991-01-15',
'1991-01-16', '1991-01-17',
...
'2002-04-15', '2002-04-16', '2002-04-17', '2002-04-18',
'2002-04-19', '2002-04-22', '2002-04-23', '2002-04-24',
'2002-04-25', '2002-04-26'],
dtype='datetime64[ns]', name='日期', length=2770, freq=None)
d_compare_a['股票名称'] = df_his.loc[d_compare_a.index,'name']
d_compare_a['收盘价'] = df_his.loc[d_compare_a.index,'close']
d_compare_a['前收盘价'] = df_his.loc[d_compare_a.index,'close_before']
d_compare_a['流通市值'] = df_his.loc[d_compare_a.index,'value_liquidity']
d_compare_a['总市值'] = df_his.loc[d_compare_a.index,'value_total']
d_compare_a['流通股本'] = df_his.loc[d_compare_a.index,'equity_liquidity']
d_compare_a['总股本'] = df_his.loc[d_compare_a.index,'equity_total']
d_compare_a
|
股票代码 |
股票名称 |
送股 |
转增 |
收盘价 |
前收盘价 |
流通市值 |
总市值 |
流通股本 |
总股本 |
| 日期 |
|
|
|
|
|
|
|
|
|
|
| 1996-07-31 |
000003 |
深金田A |
2 |
0 |
5.90 |
6.18 |
1.131883e+09 |
1.529261e+09 |
191844499.0 |
259196782.0 |
| 1995-08-21 |
000003 |
深金田A |
2 |
0 |
4.42 |
5.55 |
4.710848e+08 |
6.773085e+08 |
106580275.0 |
153237208.0 |
| 1994-05-20 |
000003 |
深金田A |
4 |
0 |
7.82 |
11.16 |
4.733339e+08 |
7.813098e+08 |
60528637.0 |
99911741.0 |
for j in range(len(d_compare_a)):
row = d_compare_a.iloc[j]
if j == 0:
print( (df_all.loc[row['股票代码'],'equity_total'] - row['总股本']) <= 0.000001)
else:
last = d_compare_a.iloc[j-1]
print(row['总股本'] - last['总股本']/(1+last['送股']/10+last['转增']/10) <= 0.000001)
True
True
True
#关于复权,这里看一个问题
其中的第一条,日期为 1996-07-31的数据如下:
日期: 1996-07-31
收盘价: 5.9
流通市值:1131882544.1
总市值: 1529261013.8 //经过计算得到下面两组数据
流动股本:192010804.0
总股本: 259196782.0
我们来计算一下1995-08-21 这天的数据
看看查出来的数据跟算出来的数据是否一样呢?
1996-07-31做了10 送2 在这之后,再就没查到分红配股信息了
我们认为这之后的股本总数是不变的,则分红前:
流动股本:192010804.0 / (1+送股/10+转增/10)= 192010804.0 / 1.2= 160009003.33333334
总股本:259196782.0/ (1+送股/10+转增/10)= 259196782.0/ 1.2= 215997318.33333337
计算 1995-08-21的 收盘价为 4.42 则
流动市值 = 4.42160009003.33333334 = 707239794.7333333
总市值 = 4.42215997318.33333337 = 954708147.0333335
整理如下:
日期: 1995-08-21
收盘价: 4.42
流通市值:707239794.73
总市值: 954708147.03
流动股本:160009003.33
总股本: 215997318.33
这个跟表中查询出来的结果相差也太多了(流通市值4.710848e+08,总市值:6.773085e+08)
所有评论(0)