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

时间:2018-02-13 02:07:49

标签: python pandas matplotlib finance

我有一个非常简单的VIX(S& P500 1个月隐含波动率指数)和#34;政权"执行以下操作的代码:

  1. vix是否高于16.5?如果是,则颜色图表为红色。
  2. vix是否高于19.5?如果是,请将颜色图表设为绿色。
  3. vix是否低于19.5?如果是,请将颜色图表显示为蓝色。
  4. vix是否低于16.5?如果是,则颜色图表为黄色。
  5. 换句话说,颜色不仅取决于当前状态,而且一旦价格高于或低于上述边界,就会设置并保持。

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

    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")       
    

1 个答案:

答案 0 :(得分:0)

这里有一些代码可以帮助您入门。在将来,它有助于将您的示例削减到更小的范围,并准确地隔离您正在尝试做的事情。

我在下面创建政权状态的方式是使用“触发器”而不是“状态”。触发器的存在取决于日期 i 上的VIX级别,还取决于日期 i - 1 的级别。你可以将这些触发点向前填充,直到出现下一个触发点。

LaunchActivity

enter image description here

一旦获得状态,您可以查看this从matplotlib文档中绘制多色线条的示例。祝你好运。