Stock Market Analysis of Microsoft, Zoom, and Snowflake
This post includes code adapted from python for finance and trading algorithms udemy course and python for finance and trading algorithms udemy course notebooks.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
import pandas_datareader
import datetime
import pandas_datareader.data as web
start = datetime.datetime(2019, 1, 1)
end = datetime.datetime(2021, 1, 1)
#start = datetime.datetime(2012, 1, 1)
#end = datetime.datetime(2017, 1, 1)
#tesla = web.DataReader("TSLA", 'yahoo', start, end)
MSFT_stock = web.DataReader('MSFT', 'yahoo', start, end)
MSFT_stock.head()
ZOOM_stock = web.DataReader('ZM', 'yahoo', start, end)
ZOOM_stock.head()
TSLA_stock = web.DataReader('TSLA', 'yahoo', start, end)
TSLA_stock.head()
MSFT_stock['Open'].plot(label='MSFT_stock',figsize=(16,8),title='Open Price')
ZOOM_stock['Open'].plot(label='ZOOM_stock')
TSLA_stock['Open'].plot(label='TSLA_stock')
plt.legend()
MSFT_stock['Volume'].plot(label='MSFT_stock',figsize=(16,8),title='Volume Traded')
ZOOM_stock['Volume'].plot(label='ZOOM_stock')
TSLA_stock['Volume'].plot(label='TSLA_stock')
plt.legend()
MSFT_stock['Volume'].argmax()
MSFT_stock['Total Traded'] = MSFT_stock['Open']*MSFT_stock['Volume']
TSLA_stock['Total Traded'] = TSLA_stock['Open']*TSLA_stock['Volume']
ZOOM_stock['Total Traded'] = ZOOM_stock['Open']*ZOOM_stock['Volume']
MSFT_stock['Total Traded'].plot(label='MSFT_stock',figsize=(16,8))
ZOOM_stock['Total Traded'].plot(label='ZOOM_stock')
TSLA_stock['Total Traded'].plot(label='TSLA_stock')
plt.legend()
plt.ylabel('Total Traded')
ZOOM_stock['Total Traded'].argmax()
MA (Moving Averages)
ZOOM_stock['MA50'] = ZOOM_stock['Open'].rolling(50).mean()
ZOOM_stock['MA200'] = ZOOM_stock['Open'].rolling(200).mean()
ZOOM_stock[['Open','MA50','MA200']].plot(label='ZOOM_stock',figsize=(16,8))
from pandas.plotting import scatter_matrix
car_comp = pd.concat([MSFT_stock['Open'],ZOOM_stock['Open'],SNOW_stock['Open']],axis=1)
car_comp.columns = ['MSFT_stock Open','ZOOM_stock Open','SNOW_stock Open']
# You can use a semi-colon to remove the axes print outs
scatter_matrix(car_comp,figsize=(8,8),alpha=0.2,hist_kwds={'bins':50});
from mpl_finance import candlestick_ohlc
from matplotlib.dates import DateFormatter, date2num, WeekdayLocator, DayLocator, MONDAY
# Rest the index to get a column of January Dates
MSFT_stock_reset = MSFT_stock.loc['2019-01':'2019-01'].reset_index()
# Create a new column of numerical "date" values for matplotlib to use
MSFT_stock_reset['date_ax'] = MSFT_stock_reset['Date'].apply(lambda date: date2num(date))
MSFT_stock_values = [tuple(vals) for vals in MSFT_stock_reset[['date_ax', 'Open', 'High', 'Low', 'Close']].values]
mondays = WeekdayLocator(MONDAY) # major ticks on the mondays
alldays = DayLocator() # minor ticks on the days
weekFormatter = DateFormatter('%b %d') # e.g., Jan 12
dayFormatter = DateFormatter('%d') # e.g., 12
fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.2)
ax.xaxis.set_major_locator(mondays)
ax.xaxis.set_minor_locator(alldays)
ax.xaxis.set_major_formatter(weekFormatter)
candlestick_ohlc(ax, MSFT_stock_values, width=0.6, colorup='g',colordown='r');
# Method 1: Using shift
MSFT_stock['returns'] = (MSFT_stock['Close'] / MSFT_stock['Close'].shift(1) ) - 1
MSFT_stock.head()
MSFT_stock['returns'] = MSFT_stock['Close'].pct_change(1)
MSFT_stock.head()
TSLA_stock['returns'] = TSLA_stock['Close'].pct_change(1)
ZOOM_stock['returns'] = ZOOM_stock['Close'].pct_change(1)
TSLA_stock.head()
ZOOM_stock.head()
TSLA_stock['returns'].hist(bins=50)
MSFT_stock['returns'].hist(bins=50)
ZOOM_stock['returns'].hist(bins=50)
MSFT_stock['returns'].hist(bins=100,label='MSFT_stock',figsize=(10,8),alpha=0.5)
ZOOM_stock['returns'].hist(bins=100,label='ZOOM_stock',alpha=0.5)
TSLA_stock['returns'].hist(bins=100,label='TSLA_stock',alpha=0.5)
plt.legend()
MSFT_stock['returns'].plot(kind='kde',label='MSFT_stock',figsize=(12,6))
ZOOM_stock['returns'].plot(kind='kde',label='ZOOM_stock')
TSLA_stock['returns'].plot(kind='kde',label='TSLA_stock')
plt.legend()
box_df = pd.concat([MSFT_stock['returns'],ZOOM_stock['returns'],TSLA_stock['returns']],axis=1)
box_df.columns = ['MSFT_stock Returns',' ZOOM_stock Returns','TSLA_stock Returns']
box_df.plot(kind='box',figsize=(8,11),colormap='jet')
scatter_matrix(box_df,figsize=(8,8),alpha=0.2,hist_kwds={'bins':50});
scatter_matrix(box_df,figsize=(8,8),alpha=0.2,hist_kwds={'bins':50});
box_df.plot(kind='scatter',x=' ZOOM_stock Returns',y='MSFT_stock Returns',alpha=0.4,figsize=(10,8))
MSFT_stock['Cumulative Return'] = (1 + MSFT_stock['returns']).cumprod()
MSFT_stock.head()
TSLA_stock['Cumulative Return'] = (1 + TSLA_stock['returns']).cumprod()
ZOOM_stock['Cumulative Return'] = (1 + ZOOM_stock['returns']).cumprod()
MSFT_stock['Cumulative Return'].plot(label='MSFT_stock',figsize=(16,8),title='Cumulative Return')
TSLA_stock['Cumulative Return'].plot(label='TSLA_stock')
ZOOM_stock['Cumulative Return'].plot(label='ZOOM_stock')
plt.legend()
from fbprophet import Prophet
MSFT_stock['ds'] = MSFT_stock.index
MSFT_stock['y'] = MSFT_stock.Open
m = Prophet()
m.fit(MSFT_stock)
future = m.make_future_dataframe(periods=365)
future.tail()
forecast = m.predict(future)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()
fig1 = m.plot(forecast)
fig2 = m.plot_components(forecast)
MSFT_stock['Open'].plot()
import statsmodels.api as sm
MSFT_stock_cycle, MSFT_stock_trend = sm.tsa.filters.hpfilter(MSFT_stock['Open'])
MSFT_stock_cycle
MSFT_stock['trend'] = MSFT_stock_trend
MSFT_stock['trend']
MSFT_stock[["trend", "Open"]].plot(figsize=(16,6))
TSLA_stock['ds'] = TSLA_stock.index
TSLA_stock['y'] = TSLA_stock.Open
m = Prophet()
m.fit(TSLA_stock)
# Python
TSLA_stock['cap'] = 8.5
m = Prophet(growth='logistic')
m.fit(TSLA_stock)
# future = m.make_future_dataframe(periods=1826)
# future['cap'] = 600
# fcst = m.predict(future)
# fig = m.plot(fcst)
future = m.make_future_dataframe(periods=365)
future.tail()
forecast = m.predict(future)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()
fig1 = m.plot(forecast)
fig2 = m.plot_components(forecast)
ZOOM_stock['ds'] = ZOOM_stock.index
ZOOM_stock['y'] = ZOOM_stock.Open
m = Prophet()
m.fit(ZOOM_stock)
future = m.make_future_dataframe(periods=365)
future.tail()
forecast = m.predict(future)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()
fig1 = m.plot(forecast)
fig2 = m.plot_components(forecast)