투자정보

엔초비 알고리즘(Anchovy Algorithm, AA)을 사용해 S&P 500 지수를 매수 및 매도하는 간단한 퀀트 트레이딩 알고리즘

aiproductmanager 2025. 3. 16. 15:23
728x90
반응형

 

엔초비 알고리즘(Anchovy Algorithm)은 주로 메타휴리스틱 최적화(metaheuristic optimization) 분야에서 사용되는 알고리즘입니다. 이 알고리즘은 실제 엔초비(멸치)의 무리 행동에서 영감을 받아 개발되었으며, 집단 지능(swarm intelligence) 기반 기법 중 하나입니다.

핵심 원리

엔초비는 먹이를 찾기 위해 집단적으로 움직이는 습성이 있습니다. 이를 모방한 알고리즘은 다음과 같은 주요 행동 패턴을 기반으로 동작합니다:

  1. 탐색 (Exploration): 군집이 넓은 영역을 탐색해 가능한 솔루션을 찾습니다.
  2. 활동성 유지 (Dynamic Activity): 환경 변화에 민감하게 반응하면서 새로운 기회를 찾습니다.
  3. 수렴 (Convergence): 최적의 위치로 집단 전체가 점진적으로 수렴합니다.

엔초비 알고리즘의 장점

  • 글로벌 최적화 능력이 뛰어나 지역 최적해(local optimum)에 빠질 가능성이 적습니다.
  • 탐색과 수렴 간의 균형이 잘 잡혀 있습니다.
  • 다차원 문제나 복잡한 최적화 문제에 효과적입니다.

적용 분야

  • 공학 최적화 문제 (예: 로봇 경로 계획, 네트워크 최적화)
  • 기계 학습 (예: 하이퍼파라미터 튜닝)
  • 금융 분야 (예: 투자 포트폴리오 최적화)

유사 알고리즘

  • 입자 군집 최적화 (PSO, Particle Swarm Optimization): 비슷한 집단 지능 기반 알고리즘.
  • 개미 군집 최적화 (ACO, Ant Colony Optimization): 개미의 먹이 찾기 행동을 모방한 알고리즘.

=============================================================================

 

엔초비 알고리즘(Anchovy Algorithm, AA)을 사용해 S&P 500 지수를 매수 및 매도하는 간단한 퀀트 트레이딩 알고리즘 코드를 작성해 드리겠습니다.

알고리즘 구조

  1. 데이터 수집: S&P 500 지수 데이터를 가져옵니다.
  2. 신호 생성: 엔초비 알고리즘을 사용해 최적의 매수/매도 시점을 탐색합니다.
  3. 포지션 관리: 매수 및 매도 결정에 따라 포트폴리오를 업데이트합니다.
  4. 수익률 평가: 전략의 성과를 평가합니다.

필요한 라이브러리 설치

먼저 필요한 라이브러리를 설치해야 합니다:

bash
복사편집
pip install yfinance pandas numpy matplotlib

엔초비 알고리즘 기반 S&P 500 트레이딩 코드

python
복사편집
import yfinance as yf
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# S&P 500 데이터 다운로드
data = yf.download('^GSPC', start='2020-01-01', end='2024-12-31')
prices = data['Close']

# 엔초비 알고리즘 클래스
class AnchovyAlgorithm:
    def __init__(self, population_size, iterations, buy_threshold, sell_threshold):
        self.population_size = population_size
        self.iterations = iterations
        self.buy_threshold = buy_threshold
        self.sell_threshold = sell_threshold
        self.best_solution = None

    def optimize(self, data):
        best_profit = -np.inf
        best_signal = []

        # 초기 무리 생성
        population = [np.random.uniform(-1, 1, len(data)) for _ in range(self.population_size)]

        for iteration in range(self.iterations):
            new_population = []

            for agent in population:
                signal = np.where(agent > self.buy_threshold, 1, 0)  # 매수
                signal = np.where(agent < self.sell_threshold, -1, signal)  # 매도
                
                profit = self.calculate_profit(data, signal)

                if profit > best_profit:
                    best_profit = profit
                    best_signal = signal

                # 엔초비의 무리 행동 모방 (랜덤 탐색)
                new_agent = agent + np.random.uniform(-0.1, 0.1, len(data))
                new_population.append(new_agent)

            population = new_population

        self.best_solution = best_signal
        return best_signal

    @staticmethod
    def calculate_profit(prices, signals):
        positions = signals[:-1] * np.diff(prices)
        return np.sum(positions)

# 알고리즘 실행
aa = AnchovyAlgorithm(population_size=50, iterations=100, buy_threshold=0.5, sell_threshold=-0.5)
signals = aa.optimize(prices)

# 포지션 및 수익 계산
positions = pd.Series(signals, index=prices.index)
returns = positions.shift(1) * prices.pct_change()
cumulative_returns = (1 + returns.fillna(0)).cumprod()

# 결과 시각화
plt.figure(figsize=(12, 6))
plt.plot(prices, label='S&P 500 Price')
plt.plot(cumulative_returns, label='Strategy Returns')
plt.title('S&P 500 Anchovy Algorithm Trading Strategy')
plt.legend()
plt.show()

코드 설명

  1. AnchovyAlgorithm 클래스:
    • optimize() 함수: 최적의 매수 및 매도 타이밍을 찾습니다.
    • calculate_profit() 함수: 특정 신호에 따른 총 수익을 계산합니다.
  2. 매수/매도 신호:
    • 에이전트 값이 buy_threshold보다 크면 매수.
    • 에이전트 값이 sell_threshold보다 작으면 매도.
  3. 성과 평가:
    • 전략에 따라 누적 수익률을 계산해 시각화합니다.

개선 방향

  • 이동 평균, RSI 등의 기술적 지표를 추가해 성능을 높일 수 있습니다.
  • 리스크 관리(예: 손절매, 이익 실현) 전략을 적용할 수 있습니다.
  • 하이퍼파라미터 최적화를 통해 수익률을 개선할 수 있습니다.

이 코드를 실제 투자에 사용하기 전에 반드시 백테스트와 함께 충분한 검증이 필요합니다. 필요하다면 더 발전된 기능도 추가할 수 있습니다!

728x90
반응형