前言
上一节给大家分享了Tushare提供的免费数据接口,可以获取金融数据,本节给大家分享其更多的指标数据。不过有些接口数据Tushare需要积分才能使用,估计是Tushare服务器压力太大,才出此策略。今天我为了使用一些接口数据,一口气注册了4个邮箱,不过这个不是太大问题。废话不多说,下面就让我们来以大A股上证指数为例做一些分析吧。
import tushare as ts
import pandas as pd
from sqlalchemy import create_engine
import matplotlib.pyplot as plt
import seaborn as sns
#设置token,只需要在第一次调用或者token失效时设置
#设置完成后,之后就不再需要这一个命令了
#ts.set_token('*******')
pro = ts.pro_api()
stock_daily = pro.index_daily(ts_code="000001.SH")#获取交易数据
print(stock_daily)
stock_daily_basic = pro.index_dailybasic(ts_code='000001.SH')
print(stock_daily_basic)#获取指标数据
#导入mysql,储存以备后用
engine = create_engine("mysql+pymysql://{}:{}@{}/{}?charset={}".format('root', 'root',
'localhost', 'feng','utf8'))
con = engine.connect()#创建连接
stock_daily.to_sql("stock_daily",con=engine,index=False,if_exists="append",chunksize=100000)
stock_daily_basic.to_sql("stock_daily_basic",con=engine,index=False,if_exists="append",chunksize=100000)
con.close()
可以看到mysql已经储存有我们的数据了
(1)交易数据:stock_daily
image.png
字段解释:
image.png
(2)指标数据:stock_daily_basic
image.png
字段解释:
image.png
2、数据处理
stock_daily.index = pd.to_datetime(stock_daily['trade_date'])#时间格式处理
3、绘制历史收盘价曲线
df.plot(y="close")
image.png
4、绘制均线
下面以60日均线为例
df_daily = df_daily.sort_index(ascending=True)
plt.figure(figsize=(12, 6))
df_daily.close['20150101':].plot()
df_daily.close.rolling(60).mean()['20150101':].plot()
image.png
5、计算估值水平
plt.figure(figsize=(12, 6))
sns.distplot(stock_daily_basic.pe_ttm, bins=100)
plt.axvline(x=stock_daily_basic.pe_ttm[0],color='red')
image.png
可以看到,目前的动态市盈率处于比较低水平,当然也可以看到有很多天的动态市盈率低于目前水平,我们再看下更低水平都出现在哪些时期:
stock_daily_basic.index = pd.to_datetime(stock_daily_basic["trade_date"])
plt.figure(figsize=(12, 6))
plt.plot(stock_daily_basic.pe_ttm)
plt.axhline(y=stock_daily_basic.pe_ttm[0], color="red")
image.png
可以看出,14、15年为底部期间,上证的估值水平比现在还要低。我们来估算一下达到那个位置的跌幅:
now = stock_daily_basic.pe_ttm[0]
min = stock_daily_basic.pe_ttm.min()
ratio = (now - min) / nowprint("ratio:{0:.2f}%".format(ratio * 100))
输出结果:
ratio: 31.38%