암호화폐 시장에서 페어 트레이딩 전략: 가격 비효율성을 활용하는 방법 (2), 과거 데이터 분석

Jupyter Notebook을 이용해 과거 바이낸스 데이터 중, 주요 암호화폐의 데이터를 분석해 보자.

  1. 분석에 활용할 패키지 import.
### Pair Trading Strategy
import pandas as pd
import numpy as np
import scipy.stats as st
from matplotlib import pyplot as plt
import matplotlib.dates as mdates

#통계 모델링을 위한 포괄적인 패키지
import statsmodels.api as sm
import requests

# 시계열 분석을 위한 특화된 도구 모음
import statsmodels.tsa.stattools as ts 
# 다변량 시계열 분석을 위한 모듈
from statsmodels.tsa.vector_ar.vecm import coint_johansen
import warnings
warnings.filterwarnings("ignore")

2. 과거 데이터 로드
crypto = pd.read_csv("./data/crypto_hourly.csv")
crypto.head()

3. 가격 데이터 재구성, 종가 기준으로 날짜별, 종가별

crypto_prices =\
(
    crypto
    .reset_index()
    .pivot(index = "Date",
           columns = "Assets",
           values = "close")
)

crypto_prices.index = pd.to_datetime(crypto_prices.index)
crypto_prices.head()

4. Drop NaN Data

missing_values_per_column = crypto_prices.isna().sum()

5. 데이터 전처리 과정에서 결측치(missing values)를 처리

# – 데이터 품질 향상: 결측치가 있는 열을 제거하여 분석의 신뢰성 확보
# – 분석 준비: 결측치가 없는 완전한 데이터셋 생성
# – 에러 방지: 이후 분석 과정에서 결측치로 인한 오류 예방

missing_values_per_column = crypto_prices.isna().sum()
columns_without_missing_values = missing_values_per_column[missing_values_per_column == 0].index
crypto_prices_cleaned = crypto_prices[columns_without_missing_values]

6. 정규화 (Normalization)

"""
이 코드는 암호화폐 가격을 정규화(normalize)하는 작업을 수행합니다. :

1) `crypto_prices_cleaned.iloc[-1]`
- `iloc[-1]`: 데이터프레임의 마지막 행(가장 최근 날짜의 가격)을 선택
- 각 암호화폐의 최종 가격을 기준값으로 사용

2) `crypto_prices_cleaned.divide()`
- 모든 가격을 마지막 날짜의 가격으로 나눔
- 이를 통해 각 가격을 상대적인 비율로 변환

정규화의 효과:
- 모든 가격이 마지막 날짜를 기준(1.0)으로 표현됨
- 서로 다른 가격대의 암호화폐들을 동일한 스케일에서 비교 가능
- 상대적인 가격 변동을 쉽게 파악 가능
  - 1보다 큰 값: 최종 가격보다 높았던 시점
  - 1보다 작은 값: 최종 가격보다 낮았던 시점

정규화를 통해 특히 가격대가 매우 다른 암호화폐들의 가격을 비교합니다.
"""

norm_prices = crypto_prices_cleaned.divide(crypto_prices_cleaned.iloc[-1])

7. 시각화 및 분석

"""
정규화된 암호화폐 가격 데이터를 시각화하는 작업을 수행합니다. 
각 요소를 상세히 설명하겠습니다:

assets 리스트 정의

13개의 다른 암호화폐 티커(BTCUSDT, ETHUSDT 등)를 포함
각 티커는 USDT(테더)에 대한 해당 암호화폐의 가격을 나타냄


그래프 생성 및 설정

plt.figure(figsize = (15, 10)): 15x10 인치 크기의 그래프 생성
plt.plot(norm_prices): 정규화된 가격 데이터를 선 그래프로 표시
plt.xlabel('days'): x축 레이블을 'days'로 설정
plt.title('Performance of cryptocurrencies'): 그래프 제목 설정
plt.legend(assets): 각 선에 대한 범례를 assets 리스트의 이름으로 표시

그래프의 특징:

Y축: 정규화된 가격 (1.0이 기준점)
X축: 시간 (일자)
각 선: 개별 암호화폐의 가격 변동 추이
모든 선이 마지막 지점에서 1.0으로 수렴 (정규화의 결과)

이 시각화를 통해:

여러 암호화폐의 상대적 성과를 한눈에 비교 가능
시간에 따른 가격 변동 패턴 파악 가능
특정 시점의 상대적 고점과 저점 확인 가능
"""

assets = ['BTCUSDT', 'ETHUSDT', 'SOLUSDT', 'ADAUSDT', 'BNBUSDT', 
          'LTCUSDT', 'NOTUSDT','XLMUSDT','BCHUSDT',
          'LINKUSDT','XRPUSDT','YGGUSDT','EOSUSDT']
plt.figure(figsize = (15, 10))
plt.plot(norm_prices)

plt.xlabel('days')
plt.title('Performance of cryptocurrencies')
plt.legend(assets)

plt.show()

7-1) 그래프 분석

To be continued…

Leave a Reply

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