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()
The information and publications are not meant to be, and do not constitute, financial, investment, trading, or other types of advice or recommendations supplied or endorsed by TradingView. Read more in the Terms of Use.