본문으로 건너뛰기

전략 개발 가이드

타임퍼센트에서 효과적인 퀀트 투자 전략을 개발하는 방법을 알아봅니다.

전략 개발 프로세스

  1. 아이디어 수립: 투자 가설 및 전략 개념
  2. 데이터 수집: 필요한 시장 데이터 수집
  3. 전략 구현: Python 코드로 전략 작성
  4. 백테스팅: 과거 데이터로 검증
  5. 최적화: 파라미터 튜닝 및 개선
  6. 실전 배포: 검증된 전략을 실전에 배포

전략 클래스 구조

모든 전략은 Strategy 클래스를 상속받아 구현합니다:

from timepercent import Strategy

class MyStrategy(Strategy):
def initialize(self):
# 초기화 로직
pass

def on_data(self, data):
# 데이터 처리 로직
pass

def before_market_open(self):
# 시장 개장 전 실행
pass

def after_market_close(self):
# 시장 마감 후 실행
pass

주요 메서드

initialize()

전략이 시작될 때 한 번만 실행됩니다. 여기서:

  • 전략 파라미터 설정
  • 기술적 지표 초기화
  • 거래할 종목 리스트 설정
def initialize(self):
self.symbols = ["AAPL", "GOOGL", "MSFT"]
self.lookback = 20
self.rsi = RSI(period=14)

on_data(data)

새로운 시장 데이터가 들어올 때마다 호출됩니다.

def on_data(self, data):
for symbol in self.symbols:
price = data[symbol].close
rsi_value = self.rsi.update(price)

if rsi_value < 30: # 과매도
self.order_target_percent(symbol, 0.1) # 10% 투자
elif rsi_value > 70: # 과매수
self.order_target_percent(symbol, 0.0) # 청산

기술적 지표 사용

타임퍼센트는 다양한 기술적 지표를 제공합니다:

from timepercent.indicators import (
SMA, EMA, RSI, MACD,
BollingerBands, Stochastic
)

# 이동평균
sma_20 = SMA(period=20)
ema_12 = EMA(period=12)

# RSI
rsi = RSI(period=14)
rsi_value = rsi.update(price)

# MACD
macd = MACD(fast=12, slow=26, signal=9)
macd_line, signal_line, histogram = macd.update(price)

# 볼린저 밴드
bb = BollingerBands(period=20, std=2)
upper, middle, lower = bb.update(price)

주문 실행

기본 주문 메서드

# 지정가 주문
self.order(symbol="AAPL", quantity=100, limit_price=150.0)

# 시장가 주문
self.order_market(symbol="AAPL", quantity=100)

# 비율 기반 주문 (포트폴리오의 10% 투자)
self.order_target_percent(symbol="AAPL", target=0.1)

# 수량 기반 주문 (100주 보유)
self.order_target(symbol="AAPL", target=100)

주문 취소

# 특정 주문 취소
self.cancel_order(order_id)

# 모든 미체결 주문 취소
self.cancel_all_orders()

포지션 관리

# 현재 포지션 확인
position = self.get_position("AAPL")
print(f"보유 수량: {position.quantity}")
print(f"평균 단가: {position.avg_price}")
print(f"현재 가치: {position.market_value}")

# 전체 포지션 확인
positions = self.get_all_positions()
for symbol, position in positions.items():
print(f"{symbol}: {position.quantity}주")

리스크 관리

포지션 크기 제한

def initialize(self):
# 종목당 최대 투자 비율
self.max_position_size = 0.1 # 10%

# 전체 포지션 최대 비율
self.max_portfolio_size = 0.8 # 80%

손절매/익절매

def on_data(self, data):
position = self.get_position("AAPL")

if position.quantity > 0:
current_price = data["AAPL"].close
entry_price = position.avg_price

# 손절매: 5% 손실 시 청산
if current_price < entry_price * 0.95:
self.order_target("AAPL", 0)

# 익절매: 10% 수익 시 청산
elif current_price > entry_price * 1.10:
self.order_target("AAPL", 0)

전략 최적화

파라미터를 최적화하여 전략 성과를 개선할 수 있습니다:

from timepercent.optimization import optimize

# 최적화할 파라미터 범위 정의
param_space = {
'short_window': range(10, 30, 5),
'long_window': range(40, 80, 10),
'rsi_period': range(10, 20, 2)
}

# 최적화 실행
best_params = optimize(
strategy=MyStrategy,
param_space=param_space,
metric='sharpe_ratio' # 최대화할 지표
)

다음 단계