Source code for pyqqq.backtest.strategy

from pyqqq.backtest.broker import BaseBroker
from pyqqq.backtest.environment import TradingEnvironment
from pyqqq.backtest.logger import Logger, get_logger
from pyqqq.backtest.wallclock import WallClock


[docs] class BaseStrategy: """트레이딩 전략을 구현하기 위한 추상 기본 클래스입니다. 이 클래스는 모든 트레이딩 전략의 기본이 되는 추상 클래스로, 전략 구현에 필요한 기본적인 컴포넌트들을 제공합니다. 구체적인 트레이딩 전략은 이 클래스를 상속받아 구현해야 합니다. Example: .. highlight:: python .. code-block:: python class MyStrategy(BaseStrategy): async def run(self): while self.clock.is_alive(): # 시장 데이터 수집 data = self.broker.get_price("005930") # 전략 로직 실행 if self._should_buy(data): self.broker.create_order( "005930", OrderSide.BUY, quantity=10 ) self.logger.info("Buy order created") # 일정 시간 대기 await self.clock.sleep(60) # 전략 실행 env = BacktestEnvironment( start_time=datetime(2024, 10, 2, 9, 0), end_time=datetime(2024, 10, 21) ) strategy = MyStrategy(env) await strategy.run() """ clock: WallClock """ 시간 관리를 담당하는 시계 인스턴스 """ broker: BaseBroker """ 거래 실행을 담당하는 브로커 인스턴스 """ logger: Logger """ 로깅을 담당하는 로거 인스턴스 """
[docs] def __init__(self, environment: TradingEnvironment): """BaseStrategy 클래스를 초기화합니다. Args: environment (TradingEnvironment): 트레이딩 환경 객체. 실시간 거래 환경이나 백테스팅 환경이 될 수 있습니다. 환경 객체로부터 시계, 브로커, 로거 인스턴스를 초기화합니다. Note: - environment 객체에서 다음 컴포넌트들을 초기화합니다: 1. clock: 시간 관리 컴포넌트 2. broker: 거래 실행 컴포넌트 3. logger: 로깅 컴포넌트 (클래스 이름으로 자동 생성) - 실시간/백테스트 환경 모두에서 동일한 인터페이스 제공 """ self.clock = environment.get_clock() self.broker = environment.get_broker() self.logger = get_logger(self.__class__.__name__, self.clock)
[docs] async def run(self): """전략을 실행합니다. 이 메서드는 반드시 하위 클래스에서 구현되어야 합니다. 전략의 메인 로직을 이 메서드에 구현하며, 일반적으로 다음과 같은 작업들이 포함됩니다: - 시장 데이터 수집 - 전략 로직 실행 - 주문 생성 및 관리 - 포지션 관리 Raises: NotImplementedError: 이 메서드는 반드시 하위 클래스에서 구현되어야 합니다. Note: - 비동기(async) 메서드로 구현되어야 합니다. - clock.is_alive()를 통해 전략 실행 지속 여부를 확인할 수 있습니다. - clock.sleep()을 사용하여 적절한 간격으로 전략을 실행해야 합니다. """ raise NotImplementedError