전략 개발 가이드
타임퍼센트에서 효과적인 퀀트 투자 전략을 개발하는 방법을 알아봅니다.
전략 개발 프로세스
- 아이디어 수립: 투자 가설 및 전략 개념
- 데이터 수집: 필요한 시장 데이터 수집
- 전략 구현: Python 코드로 전략 작성
- 백테스팅: 과거 데이터로 검증
- 최적화: 파라미터 튜닝 및 개선
- 실전 배포: 검증된 전략을 실전에 배포
전략 클래스 구조
모든 전략은 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' # 최대화할 지표
)