买点和卖点、仓位控制对于股票投资来说是非常重要的,有的时候,特别是调仓时,如果能掌握目前市场的估值,可以说是有不小的帮助
1) 我们先得到市场中所有的股票市值和净利润(每一个季度),然后计算他们的和,TTM,及PE值
2) 当然如果要更进一步,可以按行业或指数进行划分,这样的数据会更加完整和有价值
3) 对于市值,也可以更加细分,比如按周读取,或按月读取
# 我们先加载需要用到的库
import pandas as pd
pd.set_option('display.width', None)
pd.set_option('precision', 2)
# 初始化一个query,提取需要用到的数据表
q = query(
valuation.day,
valuation.code,
valuation.market_cap,
indicator.adjusted_profit,
)
# 初始化一个DataFrame, 用于存储取得的数据
quarter = ['q1', 'q2', 'q3', 'q4']
ap = pd.DataFrame(index=[str(y1)+q1 for y1 in range(2005, 2020) for q1 in quarter])
ap.index.set_names('date', inplace=True)
# 拉取数据,并存储在DataFrame,用于计算和显示
for x in list(ap.index):
codes = ['000001.XSHE', '000002.XSHE']
df = get_fundamentals(
q.filter(
# indicator.code.in_(codes)
), statDate=x ) # type: pd.DataFrame
if not df.empty:
ap.loc[x,'market_cap'] = df['market_cap'].sum()
ap.loc[x,'adjusted_profit'] = df['adjusted_profit'].sum()
ap.loc[x,'nums'] = len(df)
print('读取了{}支股票,总的收益是{}'.format(len(df), ap.loc[x,'adjusted_profit']))
# 去掉空数据
ap = ap[ap['nums']>0]
读取了1354支股票,总的收益是47942726849.28 读取了1365支股票,总的收益是50829170564.6277 读取了1356支股票,总的收益是41194898543.2423 读取了1351支股票,总的收益是5244156514.715 读取了1350支股票,总的收益是39355170116.73999 读取了1350支股票,总的收益是59284322803.520004 读取了1371支股票,总的收益是82476520387.28 读取了1411支股票,总的收益是105680397023.55391 读取了1434支股票,总的收益是122376587189.435 读取了1455支股票,总的收益是175236488972.21002 读取了1495支股票,总的收益是174617683426.7655 读取了1527支股票,总的收益是323819989521.6841 读取了1549支股票,总的收益是262533725731.47122 读取了1585支股票,总的收益是237940735294.75 读取了1602支股票,总的收益是299212869456.595 读取了1603支股票,总的收益是-39523191583.31 读取了1603支股票,总的收益是187616778018.56622 读取了1601支股票,总的收益是255816393731.5202 读取了1628支股票,总的收益是282369972448.75 读取了1693支股票,总的收益是249894646844.15503 读取了1786支股票,总的收益是331346133176.12756 读取了1870支股票,总的收益是368313504287.97144 读取了1955支股票,总的收益是408493087861.53625 读取了2041支股票,总的收益是379047083362.66 读取了2130支股票,总的收益是460113126481.42993 读取了2208支股票,总的收益是487053151177.99994 读取了2273支股票,总的收益是470294607083.5299 读取了2318支股票,总的收益是353713101583.229 读取了2369支股票,总的收益是481093877645.53 读取了2424支股票,总的收益是483030833104.62 读取了2469支股票,总的收益是457781846482.8199 读取了2472支股票,总的收益是395202025429.74 读取了2471支股票,总的收益是529347563410.39496 读取了2469支股票,总的收益是545324622529.3451 读取了2469支股票,总的收益是554163881811.59 读取了2470支股票,总的收益是445116984737.5099 读取了2518支股票,总的收益是578041407654.07 读取了2521支股票,总的收益是627446064246.428 读取了2550支股票,总的收益是597581963355.1571 读取了2593支股票,总的收益是423819182266.515 读取了2664支股票,总的收益是598744397285.264 读取了2777支股票,总的收益是720201509550.3159 读取了2782支股票,总的收益是538497947540.5 读取了2810支股票,总的收益是348948083319.22 读取了2834支股票,总的收益是597263849855.3575 读取了2870支股票,总的收益是661478569765.3624 读取了2935支股票,总的收益是655544468605.863 读取了3034支股票,总的收益是513336999023.647 读取了3169支股票,总的收益是750392764794.4421 读取了3280支股票,总的收益是808989435668.4523 读取了3383支股票,总的收益是827154912161.1252 读取了3469支股票,总的收益是608212068842.9445 读取了3505支股票,总的收益是870933932335.4661 读取了3528支股票,总的收益是952568911726.374 读取了3551支股票,总的收益是891378791543.3 读取了3563支股票,总的收益是321517638105.94995 读取了3596支股票,总的收益是958488076959.8
# 计算TTM
ap['adjusted_profit_ttm'] = ap['adjusted_profit'] + \
ap['adjusted_profit'].shift(1) + \
ap['adjusted_profit'].shift(2) + \
ap['adjusted_profit'].shift(3)
# 计算PE
ap['pe'] = ap['market_cap']*1e8/ap['adjusted_profit_ttm']
ap
market_cap | adjusted_profit | nums | adjusted_profit_ttm | pe | |
---|---|---|---|---|---|
date | |||||
2005q1 | 36983.92 | 4.79e+10 | 1354.0 | NaN | NaN |
2005q2 | 33480.79 | 5.08e+10 | 1365.0 | NaN | NaN |
2005q3 | 35550.39 | 4.12e+10 | 1356.0 | NaN | NaN |
2005q4 | 34282.14 | 5.24e+09 | 1351.0 | 1.45e+11 | 23.61 |
2006q1 | 37398.15 | 3.94e+10 | 1350.0 | 1.37e+11 | 27.37 |
2006q2 | 46981.18 | 5.93e+10 | 1350.0 | 1.45e+11 | 32.38 |
2006q3 | 57851.15 | 8.25e+10 | 1371.0 | 1.86e+11 | 31.04 |
2006q4 | 103254.94 | 1.06e+11 | 1411.0 | 2.87e+11 | 36.00 |
2007q1 | 146560.99 | 1.22e+11 | 1434.0 | 3.70e+11 | 39.63 |
2007q2 | 194038.32 | 1.75e+11 | 1455.0 | 4.86e+11 | 39.94 |
2007q3 | 314147.25 | 1.75e+11 | 1495.0 | 5.78e+11 | 54.36 |
2007q4 | 399894.54 | 3.24e+11 | 1527.0 | 7.96e+11 | 50.23 |
2008q1 | 275222.17 | 2.63e+11 | 1549.0 | 9.36e+11 | 29.40 |
2008q2 | 218147.22 | 2.38e+11 | 1585.0 | 9.99e+11 | 21.84 |
2008q3 | 181841.59 | 2.99e+11 | 1602.0 | 1.12e+12 | 16.19 |
2008q4 | 148164.73 | -3.95e+10 | 1603.0 | 7.60e+11 | 19.49 |
2009q1 | 193897.07 | 1.88e+11 | 1603.0 | 6.85e+11 | 28.30 |
2009q2 | 243838.01 | 2.56e+11 | 1601.0 | 7.03e+11 | 34.68 |
2009q3 | 236714.11 | 2.82e+11 | 1628.0 | 6.86e+11 | 34.49 |
2009q4 | 289654.17 | 2.50e+11 | 1693.0 | 9.76e+11 | 29.69 |
2010q1 | 287381.09 | 3.31e+11 | 1786.0 | 1.12e+12 | 25.67 |
2010q2 | 229159.63 | 3.68e+11 | 1870.0 | 1.23e+12 | 18.60 |
2010q3 | 274552.73 | 4.08e+11 | 1955.0 | 1.36e+12 | 20.22 |
2010q4 | 304075.07 | 3.79e+11 | 2041.0 | 1.49e+12 | 20.45 |
2011q1 | 317753.77 | 4.60e+11 | 2130.0 | 1.62e+12 | 19.66 |
2011q2 | 303606.75 | 4.87e+11 | 2208.0 | 1.73e+12 | 17.50 |
2011q3 | 266011.94 | 4.70e+11 | 2273.0 | 1.80e+12 | 14.81 |
2011q4 | 249183.86 | 3.54e+11 | 2318.0 | 1.77e+12 | 14.07 |
2012q1 | 260454.61 | 4.81e+11 | 2369.0 | 1.79e+12 | 14.53 |
2012q2 | 260287.17 | 4.83e+11 | 2424.0 | 1.79e+12 | 14.56 |
2012q3 | 246041.91 | 4.58e+11 | 2469.0 | 1.78e+12 | 13.86 |
2012q4 | 267188.55 | 3.95e+11 | 2472.0 | 1.82e+12 | 14.70 |
2013q1 | 269131.41 | 5.29e+11 | 2471.0 | 1.87e+12 | 14.43 |
2013q2 | 244325.68 | 5.45e+11 | 2469.0 | 1.93e+12 | 12.67 |
2013q3 | 274527.84 | 5.54e+11 | 2469.0 | 2.02e+12 | 13.56 |
2013q4 | 271910.98 | 4.45e+11 | 2470.0 | 2.07e+12 | 13.11 |
2014q1 | 268362.67 | 5.78e+11 | 2518.0 | 2.12e+12 | 12.64 |
2014q2 | 276519.70 | 6.27e+11 | 2521.0 | 2.20e+12 | 12.54 |
2014q3 | 327755.87 | 5.98e+11 | 2550.0 | 2.25e+12 | 14.58 |
2014q4 | 426951.90 | 4.24e+11 | 2593.0 | 2.23e+12 | 19.17 |
2015q1 | 532769.06 | 5.99e+11 | 2664.0 | 2.25e+12 | 23.70 |
2015q2 | 651331.02 | 7.20e+11 | 2777.0 | 2.34e+12 | 27.83 |
2015q3 | 466437.52 | 5.38e+11 | 2782.0 | 2.28e+12 | 20.45 |
2015q4 | 584040.48 | 3.49e+11 | 2810.0 | 2.21e+12 | 26.47 |
2016q1 | 499189.88 | 5.97e+11 | 2834.0 | 2.20e+12 | 22.64 |
2016q2 | 507551.95 | 6.61e+11 | 2870.0 | 2.15e+12 | 23.65 |
2016q3 | 532315.95 | 6.56e+11 | 2935.0 | 2.26e+12 | 23.52 |
2016q4 | 556520.67 | 5.13e+11 | 3034.0 | 2.43e+12 | 22.92 |
2017q1 | 591997.14 | 7.50e+11 | 3169.0 | 2.58e+12 | 22.94 |
2017q2 | 589523.97 | 8.09e+11 | 3280.0 | 2.73e+12 | 21.61 |
2017q3 | 629064.59 | 8.27e+11 | 3383.0 | 2.90e+12 | 21.69 |
2017q4 | 631467.32 | 6.08e+11 | 3469.0 | 2.99e+12 | 21.09 |
2018q1 | 621318.52 | 8.71e+11 | 3505.0 | 3.12e+12 | 19.94 |
2018q2 | 559209.62 | 9.53e+11 | 3528.0 | 3.26e+12 | 17.16 |
2018q3 | 544721.89 | 8.91e+11 | 3551.0 | 3.32e+12 | 16.39 |
2018q4 | 486844.08 | 3.22e+11 | 3563.0 | 3.04e+12 | 16.03 |
2019q1 | 624362.63 | 9.58e+11 | 3596.0 | 3.12e+12 | 19.99 |
# 数据可视化
import matplotlib.pyplot as plt
n=8
ap['pe'].plot()
plt.show()
ap['adjusted_profit_ttm'].plot()
plt.show()
ax = plt.gca()
ax.set_xticks(range(0, len(list(ap.index)), n))
ap['market_cap'].plot()
plt.show()
# 数据平衡一下,可以显示在一张图里
for x in list(ap.columns):
ap[x] = ap['market_cap'].max() / ap[x].max() * ap[x]
ap.plot()
plt.show()
本社区仅针对特定人员开放
查看需注册登录并通过风险意识测评
5秒后跳转登录页面...