我有一个非常简单的VIX(S& P500 1个月隐含波动率指数)和#34;政权"执行以下操作的代码:
换句话说,颜色不仅取决于当前状态,而且一旦价格高于或低于上述边界,就会设置并保持。
我的代码附在下面。非常感谢你。
import datetime as datetime
import pandas as pd
import numpy as np
import pandas_datareader.data as web
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")
#%matplotlib inline
df = web.DataReader('^VIX', 'yahoo',datetime.datetime(2016 ,1, 1), datetime.datetime.today())
df = df.drop(df.columns[[0, 1, 2,3,5]], axis=1)
df1 = web.DataReader('spy', 'yahoo',datetime.datetime(2016 ,1, 1), datetime.datetime.today())
df1.rename(columns={'Adj Close': 'SPY'}, inplace=True)
df1 = df1.drop(df1.columns[[0, 1, 2,3,5]], axis=1)
df = pd.merge(df, df1, left_index=True, right_index=True)
df.reset_index(inplace=True)
plt.style.use('seaborn-white')
plt.rcParams["font.family"] = "Times"
plt.figure(figsize=(23,12))
ax1 = plt.subplot2grid((14,1), (0,0), rowspan=10, colspan=7)
plt.title('VIX Risk Off Indicator')
ax3 = ax1.twinx()
ax2 = plt.subplot2grid((14,1), (10,0), rowspan=4, colspan=7,sharex=ax1)
ax2.grid(False)
ax1.grid(False)
ax1.xaxis.set_visible(False)
ax1.legend()
df['16.5'] = np.where(np.logical_and(df['Adj Close'] >= 16.5,df['Adj Close'] <= 19.5),'yes','no')
df['19.5'] = np.where(np.logical_and(df['Adj Close'] >= 19.5,df['Adj Close'] >= 19.5),'yes','no')
df['l19.5'] = np.where(np.logical_and(df['Adj Close'] <= 19.5,df['Adj Close'] >= 16.5),'yes','no')
markers1 = [idx for idx,close in enumerate(df['16.5']) if close == 'yes']
for marker in markers1:
ax1.axvline(marker, color='red',linewidth=1,alpha=.15)
markers1 = [idx for idx,close in enumerate(df['19.5']) if close == 'yes']
for marker in markers1:
ax1.axvline(marker, color='green',linewidth=1,alpha=.5)
markers1 = [idx for idx,close in enumerate(df['l19.5']) if close == 'yes']
for marker in markers1:
ax1.axvline(marker, color='cyan',linewidth=1,alpha=.05)
ax1.plot(df['SPY'],label='SPY', lw=1,color='black')
ax2.plot(df['Adj Close'],'black', label='VIX', lw=1)
ax2.grid(False)
ax2.legend()
pdffile = ('C://VIX.pdf')
plt.savefig(pdffile, format='pdf',transparent=False,bbox_inches='tight')
plt.show()
plt.close()
plt.close("all")
答案 0 :(得分:0)
这里有一些代码可以帮助您入门。在将来,它有助于将您的示例削减到更小的范围,并准确地隔离您正在尝试做的事情。
我在下面创建政权状态的方式是使用“触发器”而不是“状态”。触发器的存在取决于日期 i 上的VIX级别,还取决于日期 i - 1 的级别。你可以将这些触发点向前填充,直到出现下一个触发点。
LaunchActivity
一旦获得状态,您可以查看this从matplotlib文档中绘制多色线条的示例。祝你好运。