Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pandas as pd
- import matplotlib.pyplot as plt
- import pandas_datareader as web
- from datetime import date
- import dateutil.relativedelta
- interval = 30
- level = 3
- # read csv
- tickers = pd.read_csv('stock.csv').to_records(index=False)
- tickers = [i[0] for i in tickers]
- # get figure
- today = date.today()
- start_date = today + dateutil.relativedelta.relativedelta(days=-1 * interval * (level + 1))
- stocks = web.DataReader(tickers, 'yahoo', start=start_date, end=today)['Adj Close']
- print('info')
- print(stocks.info())
- # calc returns
- stocks_returns = stocks.resample(str(interval) + 'D').ffill().pct_change()
- # calc risks
- days = stocks_returns.index
- rows = []
- for i in range(len(days) - 1):
- price_in_period = stocks.loc[days[i]:days[i + 1]]
- risks = price_in_period.pct_change().std()
- for symbol in risks.index:
- r = stocks_returns.loc[days[i + 1]]
- row = {'Date': days[i + 1], 'Symbols': symbol,
- 'Return': r.loc[symbol],
- 'Risk': risks.loc[symbol]}
- rows.append(row)
- df = pd.DataFrame(rows)
- print('df')
- print(df)
- symbols = df.Symbols.unique()
- colors = ['b', 'r', 'k', 'y', 'g']
- date = df.Date.unique()
- # plot line chart
- for s in range(len(symbols)):
- color = colors[s]
- symbol_data = df.loc[df['Symbols'] == symbols[s]]
- for i in range(len(date) - 1):
- plt.plot([symbol_data['Risk'].iloc[i], symbol_data['Risk'].iloc[i + 1]],
- [symbol_data['Return'].iloc[i], symbol_data['Return'].iloc[i + 1]], color + '-')
- last_data = symbol_data.iloc[len(date) - 1]
- plt.text(last_data['Risk'], last_data['Return'], symbols[s], fontsize=9)
- # add 0 return line
- plt.axhline(y=0, color='k', linestyle='-')
- plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement