완전히 다시 시작.
알고리즘
- Clean RL 오픈소스 기반으로 전부 재설계. 그래프만 기존 코드 반영
- DQN부터 시작해서, DQN으로 끝까지 가보고 그 다음 다른 알고리즘으로 넘어가자.
데이터
- 비트코인 2020~2025년 5월까지 데이터
- 1시간 봉 사용
리워드
- 기존방식은, 초기 투자금과 현재 계좌의 가치 차이만큼 리워드로 부여함
reward = (self.net_worth - self.initial_balance) / self.initial_balance
- 그러나 너무 초반에 사서 들고만 있으려는 성질이 강하다. 비트코인 가격이 계속 올랐기 때문에 들고 있어도 좋았지만, 나는 능동적으로 자주 사고 파는 Agent를 만들고 싶다.
- 따라서, 어차피 학습시에는 미래 가격을 알 수 있다는 점을 활용하여 특정 시점의 미래 가격 대비해서 현재가 고점인데도 팔지 않았으면 마이너스 리워드를 주고, 저점인데 안샀으면 마찬가지로 마이너스 리워드를 부여했다.
Observation 설계
- Reward 만큼이나 자유도가 많은 부분..
- 일단 과거 30일치의 1시간 봉 데이터 + 현재 들고 있는 코인, 현금 정보만 입력
- 아래는 앞으로 실험해볼 observation
- 볼린저 밴드 대비 현재 가격 정보
- 이평선 대비 현재 가격 정보
- 과거 고점 가격 대비 현재 가격 정보
- 거래량 변동 정보
- 하이킨 아시 정보
- 과거 K 시간 동안의 가격 변동률
위 데이터들을 각각 어떻게 넣을지도 선택지가 너무 많다.. 하나씩 넣어보면서 결과가 좋아지는지 봐야할듯
아키텍처
- QNetwork(
(network): Sequential(
(0): Linear(in_features=724, out_features=3072, bias=True)
(1): ReLU()
(2): Linear(in_features=3072, out_features=3072, bias=True)
(3): ReLU()
(4): Linear(in_features=3072, out_features=1024, bias=True)
(5): ReLU()
(6): Linear(in_features=1024, out_features=3, bias=True)
)
) - DQN이기 때문에 모델은 하나만 필요
- 3층보다 더 쌓으면 오히려 결과가 구림
- LR, Batch, Epoch 등 조절해야 하는 파라미터가 산더미..
중간 결과
- 24년 12월까지 학습, 25년 이후 데이터로 평가
- 처음에 하락할 때는 사지 않고 기다리다가, 저점에서 사서 딱 한번만 팔고 계속 가지고 있는 상황, 결국 26%이상 수익
'프로젝트 > 강화학습 코인 트레이더' 카테고리의 다른 글
[20250316] PPO 추가, 아키텍처 체인지 (0) | 2025.03.16 |
---|---|
[20250304] 관망만 하는 에이전트 (0) | 2025.03.05 |
[2025.02.28] 시작 (0) | 2025.02.28 |