Advertisement
Guest User

Untitled

a guest
Oct 17th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.67 KB | None | 0 0
  1. import pandas as pd
  2. import matplotlib.pyplot as plt
  3. import pandas_datareader as web
  4. from datetime import date
  5. import dateutil.relativedelta
  6.  
  7. interval = 30
  8. level = 3
  9.  
  10. # read csv
  11. tickers = pd.read_csv('stock.csv').to_records(index=False)
  12. tickers = [i[0] for i in tickers]
  13.  
  14. # get figure
  15. today = date.today()
  16. start_date = today + dateutil.relativedelta.relativedelta(days=-1 * interval * (level + 1))
  17. stocks = web.DataReader(tickers, 'yahoo', start=start_date, end=today)['Adj Close']
  18.  
  19. print('info')
  20. print(stocks.info())
  21.  
  22. # calc returns
  23. stocks_returns = stocks.resample(str(interval) + 'D').ffill().pct_change()
  24.  
  25. # calc risks
  26. days = stocks_returns.index
  27. rows = []
  28. for i in range(len(days) - 1):
  29. price_in_period = stocks.loc[days[i]:days[i + 1]]
  30. risks = price_in_period.pct_change().std()
  31. for symbol in risks.index:
  32. r = stocks_returns.loc[days[i + 1]]
  33. row = {'Date': days[i + 1], 'Symbols': symbol,
  34. 'Return': r.loc[symbol],
  35. 'Risk': risks.loc[symbol]}
  36. rows.append(row)
  37.  
  38. df = pd.DataFrame(rows)
  39. print('df')
  40. print(df)
  41.  
  42. symbols = df.Symbols.unique()
  43. colors = ['b', 'r', 'k', 'y', 'g']
  44. date = df.Date.unique()
  45.  
  46. # plot line chart
  47. for s in range(len(symbols)):
  48. color = colors[s]
  49. symbol_data = df.loc[df['Symbols'] == symbols[s]]
  50.  
  51. for i in range(len(date) - 1):
  52. plt.plot([symbol_data['Risk'].iloc[i], symbol_data['Risk'].iloc[i + 1]],
  53. [symbol_data['Return'].iloc[i], symbol_data['Return'].iloc[i + 1]], color + '-')
  54.  
  55. last_data = symbol_data.iloc[len(date) - 1]
  56. plt.text(last_data['Risk'], last_data['Return'], symbols[s], fontsize=9)
  57.  
  58. # add 0 return line
  59. plt.axhline(y=0, color='k', linestyle='-')
  60. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement