Analisando Criptomoedas com Python: Preços e Volatilidade

As criptomoedas transformaram o mercado financeiro com sua natureza descentralizada e volátil. Bitcoin, Ethereum e milhares de outros ativos digitais são negociados 24 horas por dia, em escala global. Para traders, analistas e cientistas de dados, compreender o comportamento dos preços e a volatilidade é essencial para identificar oportunidades e gerenciar riscos.

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:

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)

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

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 yfinance e 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

Postagens mais visitadas deste blog

Python para Computação Quântica: Introdução com Qiskit

Gerando Relatórios em PDF com Python (ReportLab e FPDF)

Estrutura Básica de um Programa C# com exemplos