首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大熊猫信号前沿分析: VIX指数

大熊猫信号前沿分析: VIX指数
EN

Stack Overflow用户
提问于 2018-02-13 02:07:49
回答 1查看 1.1K关注 0票数 0

我有一个非常简单的VIX (S&P 500 1个月隐含波动率指数)“制度”代码,其代码如下:

  1. vix是否超过16.5?如果是的话,颜色图红色。
  2. vix是否超过19.5?如果是的话,颜色图是绿色。
  3. vix降到19.5以下了吗?如果是的话,蓝色海图。
  4. vix是否低于16.5?如果是的话,颜色图是黄色的。

换句话说,颜色不仅取决于当前状态,而且是在价格超过或低于上述边界时设置和持有的。

我的代码附在下面。非常感谢。

代码语言:javascript
复制
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")       
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-13 03:55:53

这里有一些代码可以让你开始。在未来,它会帮助你把你的例子缩减到一些更小的东西上,并把你想要做的事情完全分离出来。

下面我创建政权国家的方式是使用“触发器”而不是“国家”。触发器的存在取决于第一天VIX的级别,但也取决于第一天的VIX级别。这些触发器可以向前填充,直到下一个触发器出现。

代码语言:javascript
复制
import pandas as pd
import pandas_datareader as pdr
import numpy as np
import matplotlib.pyplot as plt

vix = pdr.DataReader('VIXCLS', 'fred').dropna().squeeze()

lower, upper = 16.5, 19.5

# Each term inside parentheses is [False, True, ...]
# Both terms must be True element-wise for a trigger to occur
blue = (vix < upper) & (vix.shift() >= upper)
yellow = (vix < lower) & (vix.shift() >= lower)
green = (vix > upper) & (vix.shift() <= upper)
red = (vix > lower) & (vix.shift() <= lower)

mapping = {1: 'blue', 2: 'yellow', 3: 'green', 4: 'red'}

indicator = pd.Series(np.where(blue, 1., np.where(yellow, 2.,
                      np.where(green, 3., np.where(red, 4., np.nan)))),
                      index=vix.index).ffill().map(mapping).dropna()

vix = vix.reindex(indicator.index)
plt.scatter(vix.index, vix, c=indicator, marker='*')
plt.title('VIX regime')
plt.ylabel('VIX')

一旦获得状态,就可以查看从matplotlib文档绘制多色行的示例。祝好运。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48758427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档