본문 바로가기
무모한 도전-주식 인공지능 만들기

RLtrader의 제작 part1

by 인터넷떠돌이 2018. 10. 18.
반응형

안녕하세요?


일단 지난번에는 파이썬을 설치해서 어떻게 무모한 도전의 첫 삽을 떴는데, 이번 포스팅 부터는 진짜로 주식 인공지능의 역할을 하는 RLtrader를 책을 보면서 만드는 과정을 포스팅 하고자 합니다. 그런데 한개의 포스팅에 다 끝내기에는 너무 작업량이 많아서 하는 수 없이 몇 개의 포스팅으로 나누어서 올리고자 합니다.



먼저 해야 되는 작업이 있는데, 활용하고자 하는 trial이라는 가상환경에서 matplotlib이라고 해서 데이터를 시각화 시켜주는 모듈이 설치가 되어 있는지에 대해서 알아봐야 했는데, 아니나 다를까, 이것도 설치가 되어 있지 않았기 때문에 Anaconda Prompt에서 이를 설치해 주도록 합니다.



그리고 나서 위 스크린샷에서 testAI라는 프로젝트 명을 우클릭해서 뜨는 메뉴에서 New를 선택, Directory를 먼서 선택해서 폴더를 만들어 보도록 합니다.



먼저 제일 상위 폴더로 rltrader라는 폴더를 만드는데 성공했습니다.




같은 방법으로 rltrader아래에 있는 4개의 폴더를 만들어 주도록 합니다. 먼저 chart_data에서는 차트 데이터를 저장할 폴더이며, logs폴더는 강화학습 과정을 텍스트로 기록하는 로그 저장소이며, epoch_summary라는 폴더는 에포크라고 해서 강화학습을 시행할 때 마다 나오는 시각화(가시화)결과를 저장하는 폴더입니다. 


마지막으로 나와 있는 models라는 폴더는 바로 강화학습으로 나오는 모델을 저장하는 폴더로, 여기서 만들어 나온 신경망 모델을 저장하는 폴더가 됩니다.



그 다음에는 Python File이라는 것을 생성하는 것으로 모듈을 만들어 보도록 합니다.



rltrader에서 사용을 하는 5개의 모듈-아무 내용도 없는 빈 모듈을 만드는 데는 성공했다는 생각이 듭니다.




먼저 환경모듈(environment)의 코딩에 들어간 스크린샷입니다. 여기서 먼저 언급을 해야 하는 것은 우선 속성(attribute)라고 하는 것으로, 다른 이름으로는 객체 변수(instance variable)이라고 불리는 변수가 있는데, 클래스 내에서 정의가 되었으면서 각각 별개의 copy나 인스턴스를 지니는 객에체 연관된 변수입니다.


여기서 사용이 되는 변수는 chart_data: 주식 종목의 차트 데이터, observation: 현재 관극자, idx: 차트 데이터의 현재 위치를 나타내는데, 여기까지 보면, 이 환경 모듈(environment)는 주식의 데이터를 가지고 와서, rltrader에서 사용하기 위한 모듈이라는 것을 알 수 있습니다.


거기다가 있는 __init__()이라는 메소드는 클래스 initializer라고 부르며, 인스턴스 변수를 초기화 하거나 객체의 초기 상태를 만들기 위한 문장들을 실행하는데, 마치 C#의 start()와 같은 메소드가 아닌가 하는 생각이 듭니다. 그리고 사소하지만 특별한 것으로 파이썬은 기본적으로 모든 메소드가 public인데, private로 만들고 싶다면, 메소드 앞에서 _를 2번 붙인 __를 붙이기만 하면 됩니다.


다음으로 여기서 사용이 된 함수는 다음과 같은 기능이 있습니다. reset(): idx와 observation을 초기화 하는 메소드이며, observe(): idx를 다음 위치로 이동하고, observation을 업데이트를 하는 메소드이며, get_price(): 현재 observation에서 종가를 획득하는 메소드입니다. 여기까지는 바로 위 코드에서 사용하는 사용자 정의 함수 입니다.



그래서 class 클래스이름: 이라는 식으로 클래스를 선언할 수 있으며, 위 스크린샷에서 보이는 pass라는 것은 아무런 내용이 없을 때 그냥 빈 클래스라는 것을 의미합니다. 여기까지 클래스는 C#에서와 같이 특별한 것은 없어 보입니다. 다만, Tap키를 눌러서 앞칸을 띄워쓰는 것은 오류를 정의할 수 있는 상당히 중요한 요소인 것을 생각해 보면, 이는 그냥 넘길 수는 없는 요소입니다.



이번 포스팅에서 마지막으로 올리고자 하는 내용입니다. 여기서 클래스 변수라는 것을 볼 수 있는데, 객체 변수와 마찬가지로 클래스 안에서 정의가 되는데, 차이점이라면 1개의 copy만 존재하는 변수로, 인스턴스가 얼마나 있든지 간에 1개의 copy만 있다는 것 입니다.

반응형