Introdução
A Microsoft, que começou desenvolvendo um interpretador BASIC para o Altair 8800, rapidamente expandiu seu portfólio com o sistema operacional MS-DOS, fundamental para o sucesso do IBM PC. Esse marco foi seguido pelo lançamento do sistema operacional Windows, que se tornou uma plataforma dominante na computação pessoal e corporativa. Ao longo dos anos, a Microsoft diversificou sua atuação, incluindo produtos de software como o Microsoft Office, serviços de nuvem com o Azure, dispositivos como o Surface e o console Xbox, além de envestimentos significativos em inteligência artificial e outras tecnologias de ponta. Com sede em Redmond, Washington, a empresa continua sendo uma líder em inovação e soluções tecnológicas.
O conjunto de dados analisado oferece um registro abrangente das variações no preço das ações da Microsoft nos últimos 38 anos. Ele inclui colunas essenciais como: Data, Preço de Abertura, Máxima do Dia, Mínima do Dia, Preço de Fechamento, Preço de Fechamento Ajustado e Volume de Negociações.
Esses dados são valiosos para realizar análises históricas, prever o desempenho futuro das ações e copmreender as tendências de mercado de longo prazo relacionadas às ações da Microsoft.
Sumário das Visualizações
- Visualização do Preço das Ações: Mostra a tendência histórica dos preços, permitindo analisar movimentos e padrões de valor.
- Visualização do Volume: Representa o volume de negociações ao longo do tempo, fornecendo insights sobre atividade de mercado e liquidez.
- Visualização do Valor de Mercado: Exibe a capitalização de mercado ao longo do tempo, indicando o valor total da empresa e sua evolução.
- Visualização da Volatilidade: Ilustra o nível de flutuação dos preços, ajudando a avaliar a magnitude e a frequência das variações.
- Visualização do Retorno Acumulado: Demonstra o ganho acumulado do investimento ao longo do tempo.
- Visualização do Retorno Mensal: Exibe a média dos retornos mensais, permitindo observar tendências ou padrões sazonais.
- Visualização do Retorno Anual: Mostra a média dos retornos anuais, facilitando a avaliação do desempenho e a identificação de tendências de longo prazo.
- Visualização por Dia da Semana: Apresenta o retorno médio segregado por dia da semana, ajudando a analisar o desempenho em dias específicos.
- Médias Móveis (10, 20, 50 e 100): Plota as médias móveis dos preços em diferentes períodos, suavizando os dados e identificando tendências e possíveis níveis de suporte/resistência.
- Variação Diária do Preço: Mostra a mudança percentual diária do preço de fechamento.
Gráfico de Linhas do Preço de Fechamento
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(20, 8))
ax.plot(dados['Date'], dados['Close'], color='green')
ax.xaxis.set_major_locator(plt.MaxNLocator(15))
ax.set_xlabel('Data', fontsize=14)
ax.set_ylabel('Preço em USD', fontsize=14)
plt.title('Preço das Ações da Microsoft', fontsize=18)
plt.grid(True)
plt.show()
# Gráfico de barras
fig2, ax = plt.subplots(figsize=(20, 8))
ax.bar(dados['Date'], dados['Close'], color='green')
ax.xaxis.set_major_locator(plt.MaxNLocator(15))
ax.set_xlabel('Data', fontsize=14)
ax.set_ylabel('Preço em USD', fontsize=14)
plt.title('Preço das Ações da Microsoft', fontsize=18)
plt.grid(True)
plt.show()
Volume de Negociações
fig, ax = plt.subplots(figsize=(20, 8))
ax.plot(dados['Date'], dados['Volume'])
ax.xaxis.set_major_locator(plt.MaxNLocator(15))
ax.set_xlabel('Data', fontsize=14)
ax.set_ylabel('Volume', fontsize=14)
plt.title('Tendência do Volume da Microsoft', fontsize=18)
plt.grid(True)
plt.show()
# Gráfico de barras
fig2, ax = plt.subplots(figsize=(20, 8))
ax.bar(dados['Date'], dados['Volume'])
ax.xaxis.set_major_locator(plt.MaxNLocator(15))
ax.set_xlabel('Data', fontsize=16)
ax.set_ylabel('Volume', fontsize=16)
plt.title('Tendência do Volume da Microsoft', fontsize=18)
plt.grid(True)
plt.show()
Cálculo do Valor de Mercado
dados['Market Cap'] = dados['Open'] * dados['Volume']
fig, ax = plt.subplots(figsize=(20, 8))
ax.plot(dados['Date'], dados['Market Cap'], color='black')
ax.xaxis.set_major_locator(plt.MaxNLocator(15))
ax.set_xlabel('Data', fontsize=14)
ax.set_ylabel('Valor de Mercado', fontsize=14)
plt.title('Valor de Mercado', fontsize=18)
plt.grid(True)
plt.show()
fig2, ax = plt.subplots(figsize=(20, 8))
ax.bar(dados['Date'], dados['Market Cap'], color='orange')
ax.xaxis.set_major_locator(plt.MaxNLocator(15))
ax.set_xlabel('Data', fontsize=14)
ax.set_ylabel('Valor de Mercado', fontsize=14)
plt.title('Valor de Mercado', fontsize=18)
plt.grid(True)
plt.show()
Volatilidade Diária
dados['vol'] = (dados['Close'] / dados['Close'].shift(1)) - 1
fig, ax = plt.subplots(figsize=(20, 8))
ax.plot(dados['Date'], dados['vol'], color='purple')
ax.xaxis.set_major_locator(plt.MaxNLocator(15))
plt.title('Volatilidade', fontsize=14)
plt.grid(True)
plt.show()
fig1, ax = plt.subplots(figsize=(20, 8))
ax.bar(dados['Date'], dados['vol'], color='purple')
ax.xaxis.set_major_locator(plt.MaxNLocator(15))
plt.title('Volatilidade', fontsize=14)
plt.grid(True)
plt.show()
Histograma da Volatilidade
plt.figure(figsize=(10, 6))
dados['vol'].hist(bins=1000, color='blue')
plt.title('Distribuição da Volatilidade', fontsize=14)
plt.xlabel('Volatilidade')
plt.ylabel('Frequência')
plt.show()
Retorno Acumulado
dados['Cumulative Return'] = (1 + dados['vol']).cumprod()
fig, ax = plt.subplots(figsize=(20, 8))
ax.bar(dados['Date'], dados['Cumulative Return'], color='Brown')
ax.xaxis.set_major_locator(plt.MaxNLocator(15))
ax.set_xlabel('Data', fontsize=14)
ax.set_ylabel('Retorno Acumulado', fontsize=14)
plt.title('Retorno Acumulado', fontsize=14)
plt.grid(True)
plt.show()
Retorno Diário e Aálise Mensal
dados['Return'] = dados['Close'].pct_change()
dados['Month'] = dados['Date'].dt.month_name()
dados['Year'] = dados['Date'].dt.year
retornos_mensais = dados.groupby(['Month', 'Year'])['Return'].mean().reset_index()
ordem_meses = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
retornos_mensais['Month'] = pd.Categorical(retornos_mensais['Month'], categories=ordem_meses, ordered=True)
retornos_mensais = retornos_mensais.sort_values('Month')
plt.figure(figsize=(12, 6))
sns.barplot(data=retornos_mensais, x='Month', y='Return')
plt.title('Média dos Retornos Mensais')
plt.xlabel('Mês')
plt.ylabel('Retorno')
plt.show()
Análise Anual
dados['Year'] = dados['Date'].dt.year
retornos_anuais = dados.groupby(['Year'])['Return'].mean().reset_index()
retornos_anuais = retornos_anuais.sort_values('Year')
plt.figure(figsize=(12, 6))
sns.barplot(data=retornos_anuais, x='Year', y='Return')
plt.title('Média dos Retornos Anuais')
plt.xlabel('Ano')
plt.ylabel('Retorno')
plt.show()
Análise de Dados
Médias Móveis
dados['MA for 10 days'] = dados['Open'].rolling(10).mean()
dados['MA for 20 days'] = dados['Open'].rolling(20).mean()
dados['MA for 50 days'] = dados['Open'].rolling(50).mean()
dados['MA for 100 days'] = dados['Open'].rolling(100).mean()
dados_reduzidos = dados.truncate()
dados_reduzidos[['Adj Close', 'MA for 10 days', 'MA for 20 days', 'MA for 50 days', 'MA for 100 days']].plot(subplots=False, figsize=(12, 5))
plt.title('Ações Microsoft: Preço Ajustado e Médias Móveis')
plt.xlabel('Data')
plt.ylabel('Preço')
plt.show()
Bandas de Bollinger
media_moveis = dados['Close'].rolling(window=20).mean()
desvio_padrao = dados['Close'].rolling(window=20).std()
banda_superior = media_moveis + (desvio_padrao * 2)
banda_inferior = media_moveis - (desvio_padrao * 2)
fig, ax = plt.subplots(figsize=(10,6))
ax.plot(dados.index, dados['Close'], label='Fechamento')
ax.plot(media_moveis.index, media_moveis, label='Média Móvel')
ax.fill_between(media_moveis.index, banda_superior, banda_inferior, alpha=0.4, color='gray', label='Bandas de Bollinger')
ax.legend()
plt.show()
Variação Diária do Preço
plt.figure(figsize=(12, 6))
plt.plot(dados['Date'], dados['Return'], marker='h', color='g')
plt.title('Variação Diária do Preço da Microsoft')
plt.show()
Previsão de Preços
!pip install Prophet
dados_prophet = dados.reset_index()
dados_prophet = dados[['Date', 'Close']]
dados_prophet = dados_prophet.rename(columns={'Date': 'ds', 'Close': 'y'})
from prophet import Prophet
modelo = Prophet()
modelo.fit(dados_prophet)
futuro = modelo.make_future_dataframe(periods=365)
previsao = modelo.predict(futuro)
Visualização da Previsão
fig1 = modelo.plot(previsao)
plt.title('Previsão de Preço com Prophet')
plt.xlabel('Data')
plt.ylabel('Preço MSFT (USD)')
plt.show()