3.6.3. 나만의 커스텀 보조 지표 만들기

이 섹션에서는 자신만의 보조 지표를 개발하는 방법을 안내합니다. 기존 지표의 한계를 극복하고, 시장 특성에 맞는 지표를 만들 수 있습니다. 창의적인 아이디어를 코드로 구현하여 자동매매 전략의 경쟁력을 높여보세요.

기존 보조 지표는 모든 시장 상황에 최적화되어 있지 않습니다. 특정 자산이나 시장에 더 적합한 지표가 필요할 수 있습니다. 자신만의 지표를 개발하면 이러한 요구를 충족할 수 있습니다. 시장의 숨겨진 패턴을 발견하고, 더 정확한 매매 신호를 포착할 수 있습니다.

커스텀 지표 개발은 데이터 분석 능력 향상에도 도움이 됩니다. 시장 데이터를 깊이 있게 이해하고, 자신만의 시각을 갖게 됩니다. 파이썬 프로그래밍 능력 또한 향상됩니다.

1단계: 아이디어 구상 및 정의

가장 먼저, 어떤 시장 상황을 분석하고 싶은지 정의합니다. 어떤 종류의 매매 신호를 얻고 싶은지 명확히 합니다. 기존 지표의 단점을 보완하거나, 새로운 관점을 제시하는 아이디어를 구상합니다. 아이디어를 구체화하고, 지표의 계산 로직을 설계합니다.

예를 들어, 거래량과 가격 변동성을 결합한 지표를 만들 수 있습니다. 특정 시간 동안의 거래량 변화율을 계산합니다. 이를 가격 변동폭과 함께 분석하여 매수/매도 강도를 판단합니다. 또 다른 예로, 소셜 미디어 감성 분석을 활용할 수 있습니다. 특정 가상화폐에 대한 긍정적/부정적 언급 빈도를 분석합니다. 이를 가격 데이터와 결합하여 투자 심리를 파악합니다.

2단계: 데이터 확보 및 전처리

지표 개발에 필요한 데이터를 확보합니다. 업비트, 바이낸스 API를 통해 가상화폐 시세 데이터를 수집합니다. 소셜 미디어 데이터를 수집하려면 해당 API를 사용하거나 웹 스크래핑을 활용합니다. 수집된 데이터는 Pandas 데이터프레임으로 저장합니다. 결측치, 이상치 등 데이터 품질을 확인하고 전처리합니다.

import pandas as pd
# 예시: 업비트 API를 통해 BTC/KRW 1분봉 데이터 수집
import pyupbit
df = pyupbit.get_ohlcv("KRW-BTC", interval="minute1", count=1000)
print(df.head())

3단계: 파이썬 코드로 구현

설계한 로직을 파이썬 코드로 구현합니다. Pandas, NumPy 등 데이터 분석 라이브러리를 활용합니다. TA-Lib 라이브러리의 기존 함수를 활용할 수도 있습니다. 코드를 작성할 때는 가독성을 높이고, 주석을 상세하게 작성합니다.

import numpy as np

def custom_indicator(df, period=14):
  """거래량과 가격 변동성을 결합한 커스텀 지표를 계산합니다.

  Args:
      df (pd.DataFrame): 가격 데이터프레임. 'close', 'volume' 컬럼이 필요합니다.
      period (int): 계산 기간.

  Returns:
      pd.Series: 계산된 커스텀 지표 값.
  """
  # 가격 변동폭 계산
  price_change = df['close'].diff()
  # 거래량 변화율 계산
  volume_change = df['volume'].pct_change()
  # 지표 계산 (예시)
  indicator = (price_change * volume_change).rolling(window=period).mean()
  return indicator

# 커스텀 지표 계산
df['custom_indicator'] = custom_indicator(df)
print(df[['close', 'volume', 'custom_indicator']].tail())

4단계: 백테스팅 및 검증

개발한 지표를 백테스팅 환경에서 검증합니다. 과거 데이터를 이용하여 지표의 성능을 평가합니다. 수익률, MDD, 승률 등 다양한 지표를 분석합니다. 백테스팅 결과를 바탕으로 지표를 개선하고 최적화합니다. 3.8 섹션의 백테스팅 환경 구축 내용을 참고합니다.

# 간단한 백테스팅 예시 (매수/매도 조건은 예시)
def backtest(df):
  """커스텀 지표를 이용한 간단한 백테스팅 함수입니다.

  Args:
      df (pd.DataFrame): 가격 데이터프레임. 'custom_indicator' 컬럼이 필요합니다.

  Returns:
      float: 총 수익률.
  """
  initial_balance = 1000000  # 초기 자본
  balance = initial_balance
  position = False  # 포지션 보유 여부
  buy_price = 0

  for i in range(1, len(df)):
    if df['custom_indicator'][i-1] < 0 and df['custom_indicator'][i] > 0 and not position:
      # 매수 조건: 지표가 0 이하에서 0 이상으로 상승
      buy_price = df['close'][i]
      position = True
      print(f"{df.index[i]} 매수: {buy_price}")

    elif df['custom_indicator'][i-1] > 0 and df['custom_indicator'][i] < 0 and position:
      # 매도 조건: 지표가 0 이상에서 0 이하로 하락
      sell_price = df['close'][i]
      profit = (sell_price - buy_price) / buy_price
      balance += balance * profit
      position = False
      print(f"{df.index[i]} 매도: {sell_price}, 수익률: {profit:.4f}")

  final_return = (balance - initial_balance) / initial_balance
  print(f"총 수익률: {final_return:.4f}")
  return final_return

backtest(df)

5단계: 실전 적용 및 개선

백테스팅 결과가 만족스럽다면, 소액으로 실전 매매에 적용합니다. 실전 데이터를 통해 지표의 성능을 검증합니다. 시장 상황 변화에 따라 지표를 지속적으로 개선합니다.

주의사항: 커스텀 지표는 과최적화될 가능성이 높습니다. 과거 데이터에만 맞춰진 지표는 미래 시장에서 제대로 작동하지 않을 수 있습니다. 다양한 시장 상황에서 지표의 성능을 검증해야 합니다.

이 섹션에서는 자신만의 보조 지표를 개발하는 과정을 안내했습니다. 창의적인 아이디어를 바탕으로, 시장을 분석하고, 효과적인 매매 전략을 구축해보세요.

위로 스크롤