Публичный аккаунт WeChat: «Python Reading Finance»
Если у вас есть какие-либо вопросы или предложения, пожалуйста, оставьте сообщение в публичном аккаунте
Для друзей, которые используют индекс инвестиций в основной капитал для управления своими финансами, наиболее важным показателем, на который следует обратить внимание, является оценка каждого индекса.Покупайте, когда индекс недооценен, и продавайте, когда он переоценен.Как составить график оценки для отслеживания оценки индекса Что насчет ситуации? В этой статье рассказывается, как использовать от 0 до 1Matplotlib
Нарисуйте красивый график оценки индекса.
Подготовить данные
Прежде всего, подготовьте необходимые данные.Вообще говоря, историческая оценка после раунда бычьих и медвежьих циклов более значима.Поэтому вот рыночные данные индекса Шанхайской фондовой биржи за 2013 год в качестве примера, чтобы продемонстрировать В то же время, использование коэффициента скользящей цены к прибыли является показателем оценки. Источник данных — tushare.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import tushare as ts
%matplotlib inline
#设置显示中文
plt.rcParams['font.sans-serif'] = 'FangSong'
pro = ts.pro_api()
index_df = pro.index_dailybasic(ts_code = "000001.SH",start_date = "20130101",
end_date = "20200311",fields="trade_date,pe_ttm")
index_df.sort_values(by="trade_date",inplace=True)
x = pd.to_datetime(index_df["trade_date"]).values
y = index_df["pe_ttm"].values
По полученным данным можно построить график тренда соотношения цена-прибыль Shanghai Composite Index:
fig,ax = plt.subplots(figsize=(12,8))
ax.plot(x,y)
Далее оценку необходимо разделить на переоцененную область, нормальную область и недооцененную область по определенным правилам.
Разделение интервала оценки
Что касается более распространенных методов деления, в этой статье площадь, превышающая 80-процентный квантиль, считается интервалом переоценки, площадь ниже 20-процентного квантиля — интервалом недооценки, а площадь между ними — нормальным интервалом. Следующий код вычисляет эти ключевые точки данных
max = np.max(y)
pe_80 = np.percentile(y,80)
pe_20 = np.percentile(y,20)
min = np.min(y)
now = y[-1] #为了后续标出当日估值
Рисование
В соответствии с разделенными точками данных можно построить график, который в основном используется здесь.fill_between
Функция рисует цветовую сегментацию каждой области, заполняя завышенную область красными блоками, нормальный интервал - желтыми блоками, а заниженную область - зелеными блоками. При этом для отображения эффекта верхняя и нижняя границы графика устанавливаются на максимальное значение +1 и минимальное значение -1 соответственно.
fig,ax = plt.subplots(figsize=(12,8))
ax.plot(x,y,linewidth=3)
ax.fill_between(x,min-1,pe_20,facecolor = "#00ff80",alpha=0.2)
ax.fill_between(x,pe_20,pe_80,facecolor = "#ffff4d",alpha=0.2)
ax.fill_between(x,pe_80,max+1,facecolor = "#ff69b4",alpha=0.2)
Вышла общая схема всего графика, для лучшего отображения эффекта график нужно еще доработать. Например:
- Удалить масштаб оси и увеличить соответствующий шрифт -->
ax.tick_params
- Удалите пробел между графиком и осями -->
ax.margins()
- Отметьте текущее соотношение цена/прибыль на графике -->
ax.text()
- Удалить рамку с графика -->
plt.box()
- Добавьте заголовок к значку -->
plt.title
Таким образом, на основе предыдущего кода, добавив следующий код настройки, можно получить итоговую карту готового продукта.
fig,ax = plt.subplots(figsize=(12,8))
ax.plot(x,y,linewidth=3)
ax.fill_between(x,min-1,pe_20,facecolor = "#00ff80",alpha=0.2)
ax.fill_between(x,pe_20,pe_80,facecolor = "#ffff4d",alpha=0.2)
ax.fill_between(x,pe_80,max+1,facecolor = "#ff69b4",alpha=0.2)
ax.tick_params(axis='both', which='both',length=0)
ax.tick_params(axis='both', which='major', labelsize=16)
ax.margins(0.01,0)
ax.text(0.75,0.9,"市盈率 = {}".format(now),transform=ax.transAxes,fontdict={'size':18})
plt.xticks(rotation=45)
plt.box(False)
plt.title("上证指数估值图",fontdict={'size':24})
инкапсуляция функций
Кроме того, чтобы повторно использовать приведенный выше код, вы можете инкапсулировать все коды чертежа в функции, а затем вам нужно будет ввести только соответствующий код индекса (который может быть индексом на широкой основе, индексом отрасли) и диапазоном времени, вы можно быстро сгенерировать график Оценочная диаграмма.
from datetime import *
def pe_plot(ts_code = "",name="",period=5):
#准备数据
now = datetime.now()
end_date = str(now.date()).replace("-","")
start_date = str(now.year-period)+end_date[4:]
index_df = pro.index_dailybasic(ts_code = ts_code,start_date = start_date,
end_date = end_date,fields="trade_date,pe_ttm")
index_df.sort_values(by="trade_date",inplace=True)
x = pd.to_datetime(index_df["trade_date"]).values
y = index_df["pe_ttm"].values
#划定分割范围
max = np.max(y)
pe_80 = np.percentile(y,80)
pe_20 = np.percentile(y,20)
min = np.min(y)
now = y[-1]
#绘图
fig,ax = plt.subplots(figsize=(12,8))
ax.plot(x,y,linewidth=3)
ax.fill_between(x,min-1,pe_20,facecolor = "#00ff80",alpha=0.2)
ax.fill_between(x,pe_20,pe_80,facecolor = "#ffff4d",alpha=0.2)
ax.fill_between(x,pe_80,max+1,facecolor = "#ff69b4",alpha=0.2)
ax.tick_params(axis='both', which='both',length=0)
ax.tick_params(axis='both', which='major', labelsize=16)
ax.margins(0.01,0)
ax.text(0.75,0.9,"市盈率 = {}".format(now),
transform=ax.transAxes,fontdict={'size':18})
plt.xticks(rotation=45)
plt.box(False)
plt.title("{}估值图".format(name),fontdict={'size':24})
plt.show()
Например, создайте диаграмму оценки индекса ChiNext за последние 5 лет.
pe_plot(ts_code="399006.SZ",name="创业板指",period=5)
!
Отсканируйте код, чтобы подписаться на официальный аккаунт"Питон Чтение Финансов", получите галантерею в первый раз!