Analisando Criptomoedas com Python: Preços e Volatilidade
Neste artigo, vamos mostrar como usar Python para analisar criptomoedas, obtendo dados históricos, calculando métricas de risco e explorando a volatilidade com gráficos e estatísticas.
1. Por que Analisar Criptomoedas?
As criptomoedas apresentam algumas características únicas:
Alta volatilidade: variações bruscas em curtos períodos de tempo.
Mercado 24/7: ao contrário de bolsas tradicionais, nunca fecha.
Liquidez variável: algumas moedas têm alto volume, outras quase inexistente.
Sensibilidade a notícias e eventos: tweets, regulamentações e atualizações de rede impactam os preços rapidamente.
Para lidar com essas particularidades, Python oferece bibliotecas poderosas para coletar, manipular e visualizar dados financeiros.
2. Preparando o Ambiente
Instale as bibliotecas necessárias:
pip install pandas numpy matplotlib seaborn yfinance requests
3. Coletando Dados de Criptomoedas
3.1 Usando yfinance (Yahoo Finance)
O Yahoo Finance fornece dados históricos de algumas criptos:
import yfinance as yf
# Exemplo: Bitcoin (BTC-USD) e Ethereum (ETH-USD)
btc = yf.download("BTC-USD", start="2021-01-01", end="2023-12-31")
eth = yf.download("ETH-USD", start="2021-01-01", end="2023-12-31")
print(btc.head())
3.2 Usando a API da Binance (para dados em tempo real)
import requests
import pandas as pd
# Coletando dados de 1 dia (kline) do par BTC/USDT
url = "https://api.binance.com/api/v3/klines"
params = {"symbol": "BTCUSDT", "interval": "1d", "limit": 100}
res = requests.get(url, params=params).json()
# Estruturando os dados
colunas = ["timestamp","open","high","low","close","volume","close_time",
"quote_asset_volume","trades","taker_buy_base","taker_buy_quote","ignore"]
df_btc = pd.DataFrame(res, columns=colunas)
df_btc["close"] = df_btc["close"].astype(float)
print(df_btc.head())
📌 Assim, podemos acompanhar dados históricos ou em tempo real diretamente de corretoras.
4. Visualizando Preços
import matplotlib.pyplot as plt
plt.figure(figsize=(12,6))
plt.plot(btc["Close"], label="Bitcoin")
plt.plot(eth["Close"], label="Ethereum")
plt.title("Evolução do Preço - BTC vs ETH")
plt.xlabel("Data")
plt.ylabel("Preço (USD)")
plt.legend()
plt.show()
📊 Esse gráfico nos mostra como os preços se comportaram ao longo do tempo, permitindo identificar tendências e quedas acentuadas.
5. Retornos de Criptomoedas
Os retornos permitem medir ganhos ou perdas em determinado período.
import numpy as np
btc["Retorno_Diario"] = btc["Close"].pct_change()
eth["Retorno_Diario"] = eth["Close"].pct_change()
plt.figure(figsize=(12,6))
plt.hist(btc["Retorno_Diario"].dropna(), bins=100, alpha=0.6, label="BTC")
plt.hist(eth["Retorno_Diario"].dropna(), bins=100, alpha=0.6, label="ETH")
plt.legend()
plt.title("Distribuição dos Retornos Diários")
plt.show()
📌 O histograma mostra a dispersão de retornos, evidenciando a volatilidade maior em cripto comparada a ativos tradicionais.
6. Medindo Volatilidade
A volatilidade é a medida estatística da dispersão dos retornos.
6.1 Volatilidade Realizada
vol_btc = btc["Retorno_Diario"].std() * np.sqrt(252) # anualizada
vol_eth = eth["Retorno_Diario"].std() * np.sqrt(252)
print("Volatilidade Anualizada BTC:", round(vol_btc,2))
print("Volatilidade Anualizada ETH:", round(vol_eth,2))
6.2 Volatilidade Móvel
btc["Vol_Movel"] = btc["Retorno_Diario"].rolling(30).std() * np.sqrt(252)
plt.figure(figsize=(12,6))
plt.plot(btc["Vol_Movel"], label="Volatilidade BTC (30d)")
plt.title("Volatilidade Móvel - Bitcoin")
plt.legend()
plt.show()
📊 Isso ajuda a identificar períodos de maior risco, como crashes ou fases de alta especulação.
7. Correlação entre Criptomoedas
correlacao = btc["Retorno_Diario"].corr(eth["Retorno_Diario"])
print("Correlação BTC x ETH:", round(correlacao,2))
📌 Essa análise mostra se os ativos se movem juntos. Em geral, BTC e ETH têm correlação positiva, mas não perfeita.
8. Simulação de Cenários: Monte Carlo
Podemos projetar cenários futuros de preços usando simulação.
dias = 90
simulacoes = 100
preco_inicial = btc["Close"][-1]
retorno_medio = btc["Retorno_Diario"].mean()
volatilidade = btc["Retorno_Diario"].std()
np.random.seed(42)
resultados = []
for _ in range(simulacoes):
precos = [preco_inicial]
for _ in range(dias):
preco = precos[-1] * (1 + np.random.normal(retorno_medio, volatilidade))
precos.append(preco)
resultados.append(precos)
plt.figure(figsize=(12,6))
for resultado in resultados:
plt.plot(resultado, alpha=0.2, color="blue")
plt.title("Simulação Monte Carlo - Preço BTC (90 dias)")
plt.show()
📊 Esse tipo de simulação é muito usado em gestão de risco e estratégias quantitativas.
9. Conclusão
O mercado de criptomoedas é altamente dinâmico, e sua análise requer ferramentas estatísticas robustas.
Neste artigo, aprendemos a:
Coletar dados de criptomoedas com
yfinancee APIs.Visualizar preços e retornos de ativos digitais.
Calcular volatilidade anualizada e móvel.
Estudar correlação entre diferentes criptos.
Simular cenários futuros com Monte Carlo.
Python se mostra um aliado poderoso para traders e pesquisadores que desejam compreender melhor esse mercado em constante transformação.

Comentários
Postar um comentário