[K-means clustering] 3.시장 레짐 정의 및 거래 전략 수립
본문 바로가기
비트코인 자동매매 프로그램/[전략개발] 인공지능

[K-means clustering] 3.시장 레짐 정의 및 거래 전략 수립

by 코딩 Play 2024. 6. 18.

3주차: 시장 레짐 정의 및 거래 전략 수립

강의 목표: 이번 주차 강의에서는 K-평균 클러스터링을 통해 감지한 시장 레짐을 정의하고, 각 레짐에 맞는 거래 전략을 수립하는 방법을 학습합니다.


1. 시장 레짐 정의

시장 레짐(Market Regime)이란 주식 시장의 상태나 패턴을 의미합니다. 시장 레짐은 주식 시장의 가격 움직임에 따라 여러 가지로 나눌 수 있습니다. 일반적으로 다음과 같은 레짐이 있습니다:

  • 상승장(Uptrend): 주가가 지속적으로 상승하는 시장
  • 하락장(Downtrend): 주가가 지속적으로 하락하는 시장
  • 횡보장(Sideways Market): 주가가 큰 변동 없이 일정한 범위 내에서 움직이는 시장

각 시장 레짐을 정의하는 기준은 다음과 같습니다:

  1. 상승장:
    • 주가가 일정 기간 동안 지속적으로 상승할 때
    • 이동 평균(Moving Average) 사용: 단기 이동 평균이 장기 이동 평균보다 높을 때
    • 예: 50일 이동 평균이 200일 이동 평균보다 높을 때
  2. 하락장:
    • 주가가 일정 기간 동안 지속적으로 하락할 때
    • 이동 평균 사용: 단기 이동 평균이 장기 이동 평균보다 낮을 때
    • 예: 50일 이동 평균이 200일 이동 평균보다 낮을 때
  3. 횡보장:
    • 주가가 큰 변동 없이 일정한 범위 내에서 움직일 때
    • 가격 변동성이 낮을 때
    • 볼린저 밴드(Bollinger Bands) 사용: 주가가 밴드 내에서 움직일 때

이제 기술적 분석 지표를 사용하여 시장 레짐을 정의하는 방법을 소개하겠습니다.


2. 기술적 분석 지표 소개

기술적 분석 지표는 주식의 가격 움직임을 분석하여 미래의 가격 변동을 예측하는 데 사용됩니다. 주요 기술적 분석 지표는 다음과 같습니다:

  1. 이동 평균(Moving Average):
    • 주가의 평균을 구해 일정 기간 동안의 주가 변동을 부드럽게 나타내는 지표
    • 종류: 단순 이동 평균(SMA), 지수 이동 평균(EMA)
    • 예: 50일 SMA, 200일 SMA
  2. 상대 강도 지수(Relative Strength Index, RSI):
    • 주가의 상승과 하락의 속도를 측정하여 과매수(Overbought)와 과매도(Oversold) 상태를 나타내는 지표
    • 보통 0에서 100 사이의 값을 가지며, 70 이상이면 과매수, 30 이하이면 과매도로 간주
  3. 볼린저 밴드(Bollinger Bands):
    • 주가의 변동성을 나타내는 지표로, 이동 평균과 그 위아래로 표준편차를 더한 밴드로 구성
    • 주가가 밴드 바깥으로 벗어나면 변동성이 커졌음을 의미

이제 K-평균 클러스터링을 통해 얻은 클러스터 결과를 해석하여 각 클러스터가 어떤 시장 레짐을 나타내는지 정의해 보겠습니다.


3. 클러스터 결과 해석 및 시장 레짐 정의

이제 K-평균 클러스터링을 통해 얻은 클러스터 결과를 해석하여 각 클러스터가 어떤 시장 레짐을 나타내는지 정의합니다.

from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
import yfinance as yf
import matplotlib.pyplot as plt

# 데이터 다운로드 및 전처리
df = yf.download('AAPL', start='2023-01-01', end='2023-12-31')
df = df[['Open', 'High', 'Low', 'Close', 'Volume']]
df.fillna(method='ffill', inplace=True)
scaler = StandardScaler()
scaled_features = scaler.fit_transform(df)

# K-평균 클러스터링 적용
kmeans = KMeans(n_clusters=3, random_state=0)
df['Cluster'] = kmeans.fit_predict(scaled_features)

# 클러스터 중심값 확인
cluster_centers = scaler.inverse_transform(kmeans.cluster_centers_)
for i, center in enumerate(cluster_centers):
    print(f'클러스터 {i}: 중심값 = {center}')

# 클러스터 결과 시각화
plt.figure(figsize=(10, 5))
plt.scatter(df.index, df['Close'], c=df['Cluster'])
plt.title('Market Regime Clustering')
plt.xlabel('Date')
plt.ylabel('Close Price')
plt.show()

이 코드는 주식 데이터에 K-평균 클러스터링을 적용하고 클러스터 결과를 시각화합니다. 이제 각 단계에 대해 자세히 설명하겠습니다:

  1. 데이터 다운로드 및 전처리:
    • yfinance 라이브러리를 사용하여 Apple(AAPL) 주식 데이터를 다운로드합니다.
    • OHLCV 데이터를 선택하고, 결측치를 이전 값으로 채웁니다(fillna(method='ffill')).
    • 데이터를 표준화합니다(StandardScaler).
      df = yf.download('AAPL', start='2023-01-01', end='2023-12-31')
      df = df[['Open', 'High', 'Low', 'Close', 'Volume']]
      df.fillna(method='ffill', inplace=True)
      scaler = StandardScaler()
      scaled_features = scaler.fit_transform(df)
  2. K-평균 클러스터링 적용:
    • KMeans 객체를 생성하고, 10개의 클러스터로 설정하여 클러스터링을 수행합니다.
    • 각 데이터 포인트가 속하는 클러스터를 df['Cluster'] 열에 저장합니다.
      kmeans = KMeans(n_clusters=10, random_state=0)
      df['Cluster'] = kmeans.fit_predict(scaled_features)
  3. 클러스터 중심값 확인:
    • scaler.inverse_transform 메서드를 사용하여 표준화된 중심값을 원래 값으로 변환합니다.
    • 각 클러스터의 중심값을 출력하여 해당 클러스터가 어떤 시장 상태를 나타내는지 이해하는 데 도움을 줍니다.
      cluster_centers = scaler.inverse_transform(kmeans.cluster_centers_)
      for i, center in enumerate(cluster_centers):
        print(f'클러스터 {i}: 중심값 = {center}')
  4. 클러스터 결과 시각화:
    • plt.scatter 함수를 사용하여 클러스터 결과를 시각화합니다. 각 데이터 포인트의 색깔은 해당 포인트가 속하는 클러스터를 나타냅니다.
    • x축은 날짜, y축은 종가(Close Price)로 설정하여 주식 가격의 변동과 클러스터를 시각적으로 확인할 수 있습니다.
      plt.figure(figsize=(10, 5))
      plt.scatter(df.index, df['Close'], c=df['Cluster'])
      plt.title('Market Regime Clustering')
      plt.xlabel('Date')
      plt.ylabel('Close Price')
      plt.show()

이제 클러스터 결과를 바탕으로 시장 레짐을 정의하고 각 레짐에 맞는 거래 전략을 수립해 보겠습니다.

[Output]


4. 거래 전략 수립

이제 각 시장 레짐에 맞는 거래 전략을 수립합니다.

  1. 상승장:
    • 매수 전략(Buy Strategy): 주가가 상승할 때 주식을 매수하여 수익을 얻는 전략
    • 예: 주가가 50일 이동 평균 위에 있을 때 매수
  2. 하락장:
    • 매도 전략(Sell Strategy): 주가가 하락할 때 주식을 매도하여 손실을 최소화하거나 공매도하여 수익을 얻는 전략
    • 예: 주가가 50일 이동 평균 아래에 있을 때 매도
  3. 횡보장:
    • 변동성 전략(Volatility Strategy): 주가가 큰 변동 없이 일정한 범위 내에서 움직일 때, 변동성을 이용한 전략
    • 예: 주가가 볼린저 밴드 내에서 움직일 때 매수 및 매도

다음은 각 클러스터에 따른 거래 전략을 수립하는 Python 코드 예제입니다:

def trading_strategy(cluster):
    if cluster < 3:
        return "Buy"
    elif cluster  < 6:
        return "Sell"
    else:
        return "Hold"

df['Strategy'] = df['Cluster'].apply(trading_strategy)
print(df[['Close', 'Cluster', 'Strategy']])

이 코드는 각 클러스터에 맞는 거래 전략을 정의하고, 이를 데이터프레임에 추가하여 각 데이터 포인트가 어떤 전략을 따르는지 확인할 수 있습니다.

[Output]


결론

이번 주차 강의에서는 K-평균 클러스터링을 통해 감지한 시장 레짐을 정의하고, 각 레짐에 맞는 거래 전략을 수립하는 방법을 학습했습니다. 또한, 기술적 분석 지표를 사용하여 시장 레짐을 정의하고, 이를 바탕으로 매수, 매도, 변동성 전략을 수립하는 방법도 배웠습니다.

 

다음 주차 강의에서는 종합 예제를 통해 배운 내용을 검증하고, 거래 전략을 최적화하는 방법을 학습하겠습니다.

 

여러분이 오늘 배운 내용을 토대로 실습을 해보세요. 시장 레짐을 정의하고 거래 전략을 수립하는 것은 주식 투자에서 매우 중요한 과정입니다. 다음 주에 더 흥미로운 내용으로 찾아뵙겠습니다!

 

질문 및 피드백: 강의 내용에 대한 질문이나 피드백이 있으시면 댓글로 남겨주세요. 이 강의가 마음에 드셨다면 ❤️ 한 번 꾹 눌러주세요! Happy coding!

최근댓글

최근글

skin by © 2024 ttuttak