En este gráfico se puede observar claramente la covarianza entre BTC y otras altcoins como: 'ETH-USD', 'BNB-USD', 'ADA-USD', 'XRP-USD', 'SOL-USD', 'DOT-USD', 'LTC-USD', 'AVAX-USD', 'LINK-USD', 'ICP-USD'. Es claro cómo BTC marca siempre la tendencia y las demás le siguen.
Para quienes estén interesados en correr el código en su propio entorno, acá está el código:
import pandas as pd import numpy as np import yfinance as yf from datetime import datetime import matplotlib.pyplot as plt
def get_historical_data_yahoo(days=5*365): """ Obtiene la capitalización de mercado histórica de BTC y varias criptomonedas usando Yahoo Finance.
Args: days (int): Número de días hacia atrás desde hoy para obtener los datos.
Returns: DataFrame: Contiene fechas, precio de cierre de BTC y la media de las criptomonedas seleccionadas. """ # Fechas de inicio y finalización end_date = datetime.now() start_date = end_date - pd.Timedelta(days=days)
try: # Obtener datos históricos de BTC btc_data = yf.download('BTC-USD', start=start_date, end=end_date) btc_data.reset_index(inplace=True) btc_data['date'] = btc_data['Date'].dt.date btc_data = btc_data[['date', 'Close']] btc_data.rename(columns={'Close': 'btc_price'}, inplace=True) except Exception as e: print(f"Error obteniendo datos históricos de BTC: {e}") return pd.DataFrame()
try: # Lista de criptomonedas seleccionadas (incluye más que el top 10) crypto_symbols = ['ETH-USD', 'BNB-USD', 'ADA-USD', 'XRP-USD', 'SOL-USD', 'DOT-USD', 'LTC-USD', 'AVAX-USD', 'LINK-USD', 'ICP-USD']
# Descargar los datos históricos de cada criptomoneda market_data = [] for symbol in crypto_symbols: data = yf.download(symbol, start=start_date, end=end_date) data.reset_index(inplace=True) data['date'] = data['Date'].dt.date data = data[['date', 'Close']] data.rename(columns={'Close': f'{symbol.lower()}_price'}, inplace=True) market_data.append(data)
# Unir todos los datos en un solo DataFrame combined_data = market_data[0] for data in market_data[1:]: combined_data = pd.merge(combined_data, data, on='date', how='inner')
# Calcular la media de las criptomonedas seleccionadas para representar el mercado price_columns = [f'{symbol.lower()}_price' for symbol in crypto_symbols] combined_data['market_price'] = combined_data[price_columns].mean(axis=1) combined_data = combined_data[['date', 'market_price']] except Exception as e: print(f"Error obteniendo datos del mercado total: {e}") return pd.DataFrame()
# Unir BTC con el proxy del mercado merged_data = pd.merge(combined_data, btc_data, on='date', how='inner')
return merged_data
def calculate_volatility(df, price_column): """ Calcula la volatilidad diaria a partir del precio.
Args: df (DataFrame): DataFrame que contiene los precios. price_column (str): Nombre de la columna de precios.
Returns: Series: Volatilidad diaria. """ returns = df[price_column].pct_change().dropna() volatility = returns.rolling(window=7).std() # Volatilidad en base a una ventana de 7 días return volatility
def main(): # Ajustar el periodo de análisis a 5 años (5 * 365 días) DAYS = 5 * 365 # Cambiado de 1095 días (3 años) a 5 años
# Obtener datos históricos usando Yahoo Finance print("Obteniendo datos históricos...") data = get_historical_data_yahoo(days=DAYS)
if data.empty: print("No se pudieron obtener datos históricos.") return
# Alinear los datos de volatilidades data = data.drop_duplicates(subset='date') # Asegurarse de que las fechas sean únicas volatility_df = data[['date', 'btc_volatility', 'market_volatility']].dropna().set_index('date')
# Calcular la correlación entre las volatilidades print("Calculando la correlación entre volatilidades...") correlation_volatility = volatility_df['btc_volatility'].corr(volatility_df['market_volatility'])
print(f"Correlación entre la volatilidad de BTC y el mercado de criptomonedas (últimos {DAYS} días): {correlation_volatility}")
# Graficar las volatilidades plt.figure(figsize=(14, 7)) plt.plot(volatility_df.index, volatility_df['btc_volatility'], label='Volatilidad BTC', alpha=0.7) plt.plot(volatility_df.index, volatility_df['market_volatility'], label='Volatilidad del Mercado Cripto', alpha=0.7) plt.title('Volatilidad Diaria: BTC vs Mercado de Criptomonedas (Varios Tokens)') plt.xlabel('Fecha') plt.ylabel('Volatilidad (Desviación Estándar)') plt.legend() plt.grid(True) plt.tight_layout() plt.show()
As informações e publicações não devem ser e não constituem conselhos ou recomendações financeiras, de investimento, de negociação ou de qualquer outro tipo, fornecidas ou endossadas pela TradingView. Leia mais em Termos de uso.