2017-02-20 1 views
0

J'essaie de tracer deux cours boursiers sur un graphique d'indice. Cette parcelle est très commune car elle commence les deux stocks avec des prix différents, au même endroit.Décalage de l'index

Voir ci-dessous pour un graphique d'IBM par rapport à TSLA

def get_historical_closes(ticker, start_date, end_date): 
    # get the data for the tickers. This will be a panel 
    p = wb.DataReader(ticker, "yahoo", start_date, end_date) 
    # convert the panel to a DataFrame and selection only Adj Close 
    # while making all index levels columns 
    d = p.to_frame()['Adj Close'].reset_index() 
    # rename the columns 
    d.rename(columns={'minor': 'Ticker', 'Adj Close': 'Close'}, inplace=True) 
    # pivot each ticker to a column 
    pivoted = d.pivot(index='Date', columns='Ticker') 
    # and drop the one level on the columns 
    pivoted.columns = pivoted.columns.droplevel(0) 
    return pivoted 

tickers = ['IBM','TSLA'] 
start = '2015-12-31' 
end  ='2016-12-22' 

df_ret=get_historical_closes(tickers,start,end).pct_change().replace('NaN',0) 
df_ret=np.cumprod(1+df_ret) 
df_ret.plot() 

Comme vous pouvez le voir, les deux commencent à 1,00.

Ce que je voudrais faire est d'avoir la convergence à 1.00 à un point quelconque de l'index de date. Par exemple, j'aimerais voir le même graphique, sauf que les lignes convergent à 1 le 31 juillet 2016. Ainsi, la convergence de l'indice est compensée à un point donné.

Est-ce que quelqu'un a une idée de la façon d'accomplir cela?

Répondre

0

Était essayer de rendre plus difficile que ce qu'il devrait être. Voir ci-dessous:

  df_day=df_ret[df_ret.index=='2016-03-31'] 

      df_plot = pd.DataFrame(index=df_ret.index, columns=df_ret.columns) 

      for col in df_ret.columns:  # For each factor 
       df_plot[col]=df_ret[col]/df_day[col].values 

      df_plot.plot()