RLTrader 설계
모듈 구조
디렉터리 구조
클래스 다이어그램
환경 모듈 개요
환경 모듈(environment.py)에는 환경 클래스(Environment)가 있다. 환경 클래스는 에이전트가 투자할 종목의 차트 데이터를 관리한다. 에이전트가 과거로 돌아가서 투자하며 그 결과에 따라 학습하려는 것이 목적이므로 환경 클래스에 전체 차트 데이터가 있지만, 과거 시점부터 가장 최근 시점까지 순차적으로 데이터를 제공한다. 즉, 과거로 돌아간 에이전트가 미래의 차트 데이터는 알 수 없다.
에이전트 모듈 개요
에이전트 모듈(agent.py)에는 에이전트 클래스(Agent)가 있다. 에이전트 클래스는 주식을 매수하거나 매도하는 투자자 역할을 하며 초기 자본금, 현금 잔고, 주식 잔고라는 상태가 있다. 현금 잔고와 주식 잔고의 평가액을 합하면 포트폴리오 가치(portfolio value)가 된다. 이를 PV라고 줄여 부른다.
PV = 주식 잔고×현재 주가+현금 잔고
PV가 초기 자본금보다 높으면 수익이 발생한 것이고 낮으면 손실이 발생한 것이다. 즉, 투자의 목표는 PV를 높여 나가는 것이다.
에이전트가 매수를 하면 주식 잔고는 늘어나고 현금 잔고는 줄어들 것이다. 반대로 에이전트가 매도를 하면 주식 잔고는 줄어들고 현금 잔고는 늘어난다.
신경망 모듈개요
신경망 모듈(networks.py)에는 다양한 신경망 클래스들이 있다. 완전 연결 심층 신경망, LSTM, CNN 신경망이 DNN, LSTMNetwork, CNN 클래스에 각각 적용된다.
신경망 클래스는 특정 시점의 주식 데이터(Sample)가 제공됐을 때 매수할지, 또는 매도할지를 결정하는 에이전트의 뇌와 같은 역할을 한다. 신경망 종류에 따라 데이터 학습 방법이 달라지므로 매수와 매도 행위 결정은 달라질 수 있다. 신경망의 학습 목표는 직관적으로 봤을 때 매수와 매도 행위에 대해서 향후 PV를 최대한 높이는 것이.
주식을 매수하면 현금 잔고는 줄어들고 주식 잔고는 늘어난다. 주식 잔고가 많은 상태에서 주가가 상승하면 PV는 크게 높아질 것입니다. 반면에 주가가 하락하면 PV는 크게 줄어들 수 있다. 그래서 주가가 상승할 것으로 생각되면 주식 잔고를 늘리고 하락할 것으로 예상되면 주식 잔고를 줄여서 리스크를 관리하는 것이다.
RLTrader는 가치 신경망과 정책 신경망을 가질 수 있다. 가치 신경망이나 정책 신경망을 통해 주식 잔고를 늘릴지 줄일지를 결정한다. 주식 데이터를 가치 신경망에 넣으면 매수나 매도를 했을 때 향후 획득할 수 있는 수익률을, 정책 신경망에 넣으면 매수와 매도에 대한 확률을 예측한다. 매수가 매도보다 가치나 확률이 높으면 매수를, 그 반대의 경우에는 매도하는 것다.
학습기 모듈 개요
학습기 모듈(learners.py)에는 주요 강화학습 기법을 적용한 학습기 클래스들이 있다. 이 모듈에는 ReinforcementLearner 클래스를 상속한 DQNLearner, PolicyGradientLearner, ActorCriticLearner, A2CLearner, A3CLearner가 포함돼 있다. 이들은 각각 Deep Q-learning, Policy Gradient, Actor-critic, A2C, A3C 강화학습 기법을 구현한 클래스들이다. 주식투자의 특성에 의해 각 기법은 이론에서 약간의 변형이 있을 수 있다.
학습기 클래스는 앞서 소개한 환경, 에이전트, 신경망을 가지고 강화학습을 수행하는 RLTrader의 몸체라고 할 수 있다. 학습기는 학습 데이터를 가지고 있고 보상이 결정됐을 때 학습 데이터로 신경망을 학습시킨다.
(결국 언제 보상을 결정하가 가장 중요할 듯. 2% 수익이 날 경우로 잡을 수도 있지만 5%로 잡을 수도 있다)
데이터 관리 모듈 개요
데이터 관리 모듈(data_manager.py)는 주식투자 강화학습을 위해 차트 데이터를 불러오기 위한 함수와 학습 데이터 생성을 위한 데이터 전처리 함수를 가지고 있다.
가시화 모듈 개요
가시화 모듈(visualizer.py)은 주식 데이터 학습 과정을 직관적으로 파악하기 위해 환경, 에이전트 상태, 가치 신경망 출력, 정책 신경망 출력, PV 등을 그림 파일로 가시화해 준다. 가시화 결과를 순서대로 보면 에포크가 진행됨에 따라 신경망 출력이 포트폴리오 가치를 높이는 방향으로 변하고 그에 따라 포트폴리오 가치가 높아져 가는 것을 확인할 수 있다.
충분한 에포크가 지났음에도 포트폴리오 가치가 높아지지 않는다면 학습이 제대로 이루어지지 않는다고 파악하고 학습 데이터 모델링을 다시 하거나 알고리즘을 개선할 것인지 고려해야 한다.
실행 모듈 개요
실행 모듈(amin.py)은 여러 옵션을 가지고 주식투자 강화학습을 실행하는 모듈이다. 종목 코드, 강화학습 기법, 신경망 종류, 학습 속도, 할인율, 탐험률, 초기 자본금, 에포크 수 등을 정해 강화학습을 실행할 수 있다.
기타 모듈
settings.py: 프로젝트의 기본 경로, 로케일 등을 설정하는 작은 모듈utils.py: 오늘 날짜, 현재 시간을 문자열로 받기 위한 함수들과 시그모이드 함수 등을 구현해 놓은 모듈
'인공지능 > [책] 딥러닝- 강화학습 주식투자' 카테고리의 다른 글
4장 배경 이론: 강화학습을 이용한 주식투자란? (0) | 2025.02.21 |
---|---|
3장. 배경이론: 강화학습이란? (0) | 2025.02.08 |