¿ES BITCOIN UN JUEGO UTILIZADO EN NASDAQ? Investigación econométrica con Python | de Lachezar Haralampiev, MSc | enero, 2023

  • Descargue datos y edite las marcas de tiempo de Bitcoin a través de la combinación.
  • Agrega datos a un nivel diario.
  • Calcule las devoluciones de registro tanto para Bitcoin como para Nasdaq.
  • Realizar análisis de correlación y regresión.
import os
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
plt.style.use('ggplot')

data_folder = 'E:/data_folder'

1. Descarga de datos de precios de 1 minuto de Nasdaq y Bitcoin.

qqq_df = pd.read_csv(os.path.join(data_folder, 'qqq_1min_data.csv'))

btc_df = pd.read_csv(os.path.join(data_folder, 'btc_1min_data.csv'))

btc_df

2. Filtre el marco de datos de Bitcoin para que coincida con la sesión de negociación intradía de EE. UU. y el horario de lunes a viernes.

btc_df = qqq_df[[]].merge(btc_df, right_index=True, left_index=True)

btc_df

3. Únase a ambos DataFrames como Diario.

qqq_daily = qqq_df.groupby(pd.Grouper(freq='1D'))\
.agg({'open':'first',
'low':'min',
'high':'max',
'close':'last',
'volume':'sum'}).dropna()

btc_daily = qqq_df[[]].merge(btc_df,
right_index=True,
left_index=True)\
.groupby(pd.Grouper(freq='1D'))\
.agg({'open':'first',
'low':'min',
'high':'max',
'close':'last',
'volume':'sum'}).dropna()

4. Visualice la correlación móvil de 30 días entre Nasdaq y Bitcoin.

(qqq_daily['close'].rolling(30).corr(btc_daily['close'])).plot(figsize=(16,4))

plt.title('30-Day Rolling Correlation Just Gone Back Into Positive Territory', fontsize=20)

plt.ylabel('Correlation Coefficient')

plt.show()

5. Calcule los rendimientos logarítmicos y ajuste un modelo de mínimos cuadrados ordinarios, luego analice el coeficiente y la varianza explicados por R-Square.

Y = ((np.log(btc_daily['close'])-np.log(btc_daily['close'].shift(1)))).rename('btc_log_ret')[1:]

X = ((np.log(qqq_daily['close'])-np.log(qqq_daily['close'].shift(1)))).rename('nasdaq_log_ret')[1:]

X = sm.add_constant(X)

results = sm.OLS(Y,X).fit()

results.summary()

6. Agregue una variable de control ficticia para un bloqueo de FTX en el próximo mes para capturar los efectos residuales de un bloqueo potencial.

start_date = pd.to_datetime('2022-11-11')

end_date = start_date+pd.DateOffset(30)

index = pd.date_range(start_date, end_date)

ftx_crash_dummy = pd.Series(1, index=index, name='ftx_crash_dummy')

X = X.merge(ftx_crash_dummy, left_index=True, right_index=True, how='left').replace(np.nan, 0)

results = sm.OLS(Y,X).fit()

results.summary()

Leave a Reply

Your email address will not be published. Required fields are marked *