"호호조"의 두 판 사이의 차이
cdc wiki
(→결과 및 평가) |
|||
(같은 사용자의 중간 판 20개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | |||
− | |||
==프로젝트 개요== | ==프로젝트 개요== | ||
=== 기술개발 과제 === | === 기술개발 과제 === | ||
89번째 줄: | 87번째 줄: | ||
===기술개발 일정 및 추진체계=== | ===기술개발 일정 및 추진체계=== | ||
====개발 일정==== | ====개발 일정==== | ||
− | 내용 | + | {| cellpadding="10" cellspacing="0" border="1" width="50%" align="center" |
+ | |- | ||
+ | ! 단계별 세부개발 내용 !! 담당자 !! 개발기간 !! 비고 | ||
+ | |- | ||
+ | ! 강화학습 환경 설계 | ||
+ | | 이홍석 || 3~4 || | ||
+ | |- | ||
+ | ! 모의투자 환경구성 및 트레이딩 봇 구현 | ||
+ | | 이정한 || 4~5 || | ||
+ | |- | ||
+ | ! 학습진행 및 정확도 개선 | ||
+ | | 이홍석 || 4~6 || | ||
+ | |- | ||
+ | ! 기존의 트레이딩 봇과의 성능 비교 | ||
+ | | 이정한 || 6 || | ||
+ | |- | ||
+ | ! 요인 연구 및 분석 | ||
+ | | 이홍석, 이정한 || 3~6 || | ||
+ | |} | ||
+ | |||
====구성원 및 추진체계==== | ====구성원 및 추진체계==== | ||
− | + | *컴퓨터과학부 2014920044 이홍석 : 작품설계 및 개발 | |
+ | *컴퓨터과학부 2014920037 이정한 : 작품설계 및 개발 | ||
==설계== | ==설계== | ||
113번째 줄: | 131번째 줄: | ||
|} | |} | ||
====설계 사양==== | ====설계 사양==== | ||
− | + | *목적계통도 | |
+ | [[그림:Hoho7.png]] | ||
===개념설계안=== | ===개념설계안=== | ||
− | + | *기존에 연구되어진 시계열 분석 알고리즘을 이용한 결과물들은 제각기 집중하는 부분이 다르기 때문에, 그 정확도가 서로 배타적 일 것이다. 즉 어느 한 알고리즘이 우위의 정확도를 가질 경우 다른 알고리즘은 상대적으로 낮은 정확도를 가질 것이다. | |
+ | **서로 정확성에 있어 배타적일 정도로 다른 시계열 분석 알고리즘을 찾아야한다. | ||
+ | **배타적인 TA 알고리즘 a0~an을 찾고, 구현한다. | ||
+ | *강화학습 예측 모델 | ||
+ | [[그림:Hoho8.png]] | ||
+ | **강화학습을 이용한 시계열 데이터의 학습을 통해 예측 모델을 생성한다. | ||
+ | **예측 모델은 다음과 같이 크게 두가지 단계로 구성된다. | ||
+ | ***직접 시계열 데이터를 분석 / 예측하는 전략적 알고리즘 | ||
+ | ****네이밍: a0, a1, … , an | ||
+ | ****input: {시계열 데이터} | ||
+ | ****output: {예측된 다음 시계열 데이터=o0, o1, …, on} | ||
+ | ***인공신경망을 응용하는, 적절한 전략적 알고리즘에 가중치를 부여하는 알고리즘 | ||
+ | ****네이밍: M | ||
+ | ****input: {시계열 데이터} | ||
+ | ****output: {w0, w1, …, wn} | ||
+ | ****어느 하나의 전략적 알고리즘을 선택하는 방식(hard decision)이 아니라, 여러 전략적 알고리즘의 정확도를 연판정(soft decision)하여 그 비중을 출력한다. | ||
+ | **a의 결과인 O와 b의 결과인 W를 곱하여 최종 예측치를 계산한다. (가중평균) | ||
+ | ***Predict = OW | ||
+ | **이 Agent의 결과에 따라서 전략을 어떤 비율로 선택하게 된다. 이를 조합한 값으로 특정 광물에 대한 매수 혹은 매도할 값을 선택하게 된다. | ||
+ | *강화학습 환경 구성 요소 | ||
+ | **에이전트 | ||
+ | ***state값들을 DNN을 사용하여 전략을 선택할 수 있는 값으로 추출한다. | ||
+ | ***전략개수 의존적 | ||
+ | **환경 | ||
+ | ***한 거래소의 해당 광물의 일봉csv데이터를 시간에 따라서 사용 | ||
+ | ***USD, EUR (KRW 기준) 지수 데이터 | ||
+ | **리워드 공식 | ||
+ | ***해당 광물의 가치와 잔금을 합산한 값을 리워드로 사용한다. | ||
+ | **액션 리스트 | ||
+ | ***양수는 매수, 음수는 매도의 의미로 하나의 출력값을 사용한다. | ||
+ | ****광물 거래는 1주 단위의 이산적인 값을 사용한다. | ||
+ | ****최대, 최소값을 설정한다. | ||
+ | *학습 시나리오 | ||
+ | **매 학습에서 어떤 기간을 랜덤으로 설정한다. | ||
+ | **이 시간동안의 광물시장 데이터를 사용해서 하루 단위로 액션을 진행한다. | ||
+ | **시계열 분석 부분에서 각각의 전략이 매수/매도값을 도출한다. | ||
+ | **강화학습 부분에서 가중치를 도출한다. | ||
+ | **가중치값과 매수/매도값을 각각 곱하고 누적한다. | ||
+ | **해당 값을 통해 매수/매도/유지를 진행한다.매도가 될 때까지 진행하고 매도시 수익률을 구한다. | ||
+ | **수익률이 증가하는 방향으로 학습을 한다. | ||
===이론적 계산 및 시뮬레이션=== | ===이론적 계산 및 시뮬레이션=== | ||
− | + | *강화학습 오픈소스) DQN을 이용한 트레이딩 학습 테스트 | |
+ | **학습개요 | ||
+ | ***아래는 국내 3개 IT기업의 일봉데이터를 대상으로 학습을 진행한 결과이다. | ||
+ | ***구현에서는 가능한 만큼 모두 매수, 매도, 대기하는 액션만 사용하였다. | ||
+ | ***아래의 그래프에서는 초기 투자금을 가지고 시간에 따라서 자산 가치가 어떻게 변하는지 보여준다. | ||
+ | **트레이닝 데이터로 학습 진행 중 자산가치변화 | ||
+ | [[파일:Hoho1.png]] | ||
+ | ***빨간선은 초기 투자 금액이다. | ||
+ | ***초반에는 매우 가치가 크지만 불안정한 트레이딩을 하다가 후에 안정적인 수익률을 보여주는 것을 알 수 있다. | ||
+ | **테스트 데이터에서 거래중 자산가치 변화 | ||
+ | [[파일:Hoho2.png]] | ||
+ | ***빨간 선은 초기 투자 금액이다. | ||
+ | ***테스트 데이터로 트레이딩 했을 때 투자금액 보다 평균 12%의 수익을 올릴 수 있었다. | ||
+ | ***단순 시가만으로 학습을 하는 경우, 위와 같이 매우 불안정하므로 다양한 전략을 통해 개선이 필요하다. | ||
+ | *전략 오픈소스) 10일, 30일 이동평균선 교차점 검출을 이용한 매수 매도 알고리즘 트레이딩 | ||
+ | **방법 | ||
+ | ***현재까지 크롤링한 일봉데이터에서 단기 이동평균선과 장기 이동평균선의 교차점은 중요한 매도, 매수타이밍의 후보가 될 수 있다. 장기적인 추세를 따라가는 것이 미래에 대체로 좋은 방향이 되므로 장기평균선이 상승할 떄 매수, 하락 할 때 매도를 하는 것이 좋다. | ||
+ | ***구현에서는 가능한만큼 모두 매수, 매도, 대기하는 액션만 사용하였다. | ||
+ | **Ta-lib | ||
+ | ***Technical Analysis LIbrary | ||
+ | ***시장분석과 같은 시계열 데이터 알고리즘을 분석하는데 사용하는 라이브러리 | ||
+ | ***내부에서는 기본 시장지표를 받으면 이에 따라서 새로운 보조지표를 만들어주거나 패턴을 검출하는 함수 제공 | ||
+ | ***구현에서 이동평균선 지표를 얻을 때 사용. | ||
+ | **가상트레이딩에 따른 자산가치 변화 | ||
+ | [[파일:Hoho3.png]] | ||
+ | ***빨간선은 초기 투자 금액이다. | ||
+ | ***위와 같이 장기간 트레이딩을 진행하는데 있어서 이동평균선 교차점을 이용한 트레이딩이 좋은 효과를 보이는 것을 알 수 있다. | ||
+ | *광물시장 시가데이터 크롤링 | ||
+ | **한국거래소([http://www.krx.co.kr]) | ||
+ | **거래소홈페이지에서 1년단위의 데이터를 csv로 내려받을 수 있다. | ||
+ | **아래는 2014년 - 2019년의 종가를 그래프로 나타낸 것이다. | ||
+ | [[파일:Hoho4.png]] | ||
+ | *DQN 소스코드를 사용한 광물시장 가상 트레이딩 | ||
+ | **위에서 사용한 DQN방법을 금시장을 대상으로 트레이딩을 진행했다. | ||
+ | **구현방식은 위의 DQN을 이용한 트레이딩 테스트와 같다. | ||
+ | **2000회 트레이닝을 진행하여서 매회 트레이닝마다 다음과 같은 결과를 얻을 수 있었다. | ||
+ | [[파일:Hoho5.png]] | ||
+ | **초기투자금액 10,000,000원으로 학습을 진행했다. | ||
+ | **위에서 트레이닝한 결과를 바탕으로 테스트를 진행했다. | ||
+ | [[파일:Hoho6.png]] | ||
===상세설계 내용=== | ===상세설계 내용=== | ||
− | + | ====유스케이스 다이어그램==== | |
+ | [[파일:hoho10.png]] | ||
+ | * 투자자가 각종 종목과 학습 정책 등을 선택한다. | ||
+ | * 선택을 기반으로 모델을 생성해서 가상 트레이딩을 진행할 때 수익률이 잘 나올 수 있는 지 확인한다. | ||
+ | * 학습 방법에 따른 비교 분석을 진행한다. | ||
+ | * 액터 | ||
+ | ** 액터명 : 투자자 | ||
+ | ** 설명 : 해당 프로그램을 투자의 지표로 사용하고 싶은 사람 | ||
+ | * 각 유스케이스설명 | ||
+ | {| cellpadding="10" cellspacing="0" border="1" width="50%" style="margin: 2em; margin-left: 0 atuo; " | ||
+ | | 이름 | ||
+ | | 종목선택 | ||
+ | | 관련액터 | ||
+ | | 투자자 | ||
+ | |------ | ||
+ | | 설명 | ||
+ | |colspan=3| 투자자가 원하는 종목을 선택함 | ||
+ | |------ | ||
+ | |기본 사건흐름 | ||
+ | |colspan=3| | ||
+ | #투자자가 원하는 종목을 선택한다. | ||
+ | |------ | ||
+ | |사전 조건 | ||
+ | |colspan=3|프로그램 실행 | ||
+ | |} | ||
+ | |||
+ | {| cellpadding="10" cellspacing="0" border="1" width="50%" style="margin: 2em; margin-left: 0 atuo; " | ||
+ | | 이름 | ||
+ | | 강화학습 정책 선택 | ||
+ | | 관련액터 | ||
+ | | 투자자 | ||
+ | |------ | ||
+ | | 설명 | ||
+ | |colspan=3| 투자자가 원하는 강화학습 정책을 선택(PPO,DQN) | ||
+ | |------ | ||
+ | |기본 사건흐름 | ||
+ | |colspan=3| | ||
+ | #투자자가 원하는 강화학습 정책을 선택한다. | ||
+ | |------ | ||
+ | |사전 조건 | ||
+ | |colspan=3|프로그램실행 | ||
+ | |} | ||
+ | |||
+ | {| cellpadding="10" cellspacing="0" border="1" width="50%" style="margin: 2em; margin-left: 0 atuo; " | ||
+ | | 이름 | ||
+ | | 투자 젼략 선택 | ||
+ | | 관련액터 | ||
+ | | 투자자 | ||
+ | |------ | ||
+ | | 설명 | ||
+ | |colspan=3| 투자자가 원하는 전략을 선택함 | ||
+ | |------ | ||
+ | |기본 사건흐름 | ||
+ | |colspan=3| | ||
+ | #투자자가 원하는 전략을 선택한다. | ||
+ | |------ | ||
+ | |사전 조건 | ||
+ | |colspan=3|프로그램실행 | ||
+ | |} | ||
+ | |||
+ | {| cellpadding="10" cellspacing="0" border="1" width="50%" style="margin: 2em; margin-left: 0 atuo; " | ||
+ | | 이름 | ||
+ | | 강화학습 모델 생성 | ||
+ | | 관련액터 | ||
+ | | 투자자 | ||
+ | |------ | ||
+ | | 설명 | ||
+ | |colspan=3| 투자자가 선택한 내용대로 강화학습 모델을 생성함. | ||
+ | |------ | ||
+ | |기본 사건흐름 | ||
+ | |colspan=3| | ||
+ | # 투자자가 선택한 내용을 보여줌 | ||
+ | # 확인 버튼을 누르면 모델을 생성함 | ||
+ | # 모델 생성 성공 팝업을 보여줌 | ||
+ | |------ | ||
+ | |예외 사건흐름 | ||
+ | |colspan=3| | ||
+ | 2.a. 최소 버튼을 누르면 선택화면으로 돌아옴. | ||
+ | |------ | ||
+ | |사전 조건 | ||
+ | |colspan=3| | ||
+ | 프로그램실행 | ||
+ | 종목 선택 | ||
+ | 강화학습 정책 선택 | ||
+ | 투자 전략 선택 | ||
+ | |------ | ||
+ | |사후 조건 | ||
+ | |colspan=3| | ||
+ | 모델 생성에 성공해야 함 | ||
+ | |} | ||
+ | |||
+ | {| cellpadding="10" cellspacing="0" border="1" width="50%" style="margin: 2em; margin-left: 0 atuo; " | ||
+ | | 이름 | ||
+ | | 모델 학습 | ||
+ | | 관련액터 | ||
+ | | 투자자 | ||
+ | |------ | ||
+ | | 설명 | ||
+ | |colspan=3| 투자자가 생성한 모델을 학습함. | ||
+ | |------ | ||
+ | |기본 사건흐름 | ||
+ | |colspan=3| | ||
+ | # 투자자가 원하는 학습 인자를 입력 | ||
+ | # 학습 실행 | ||
+ | # 학습 결과를 보여줌 | ||
+ | |------ | ||
+ | |예외 사건흐름 | ||
+ | |colspan=3| | ||
+ | 2.a. 학습 인자를 형식에 맞게 입력하지 않은 경우 학습 실패를 보여줌. | ||
+ | |||
+ | 2.b. 학습 도중 학습에 실패할 경우 에러 메시지를 보여줌. | ||
+ | |------ | ||
+ | |사전 조건 | ||
+ | |colspan=3| | ||
+ | 모델 생성에 성공 | ||
+ | |------ | ||
+ | |사후 조건 | ||
+ | |colspan=3| | ||
+ | 학습 결과 출력. | ||
+ | |} | ||
+ | |||
+ | {| cellpadding="10" cellspacing="0" border="1" width="50%" style="margin: 2em; margin-left: 0 atuo; " | ||
+ | | 이름 | ||
+ | | 가상 트레이딩 | ||
+ | | 관련액터 | ||
+ | | 투자자 | ||
+ | |------ | ||
+ | | 설명 | ||
+ | |colspan=3| 투자자가 학습한 모델로 가상 트레이딩을 함. | ||
+ | |------ | ||
+ | |기본 사건흐름 | ||
+ | |colspan=3| | ||
+ | # 투자자가 초기금액을 입력한다. | ||
+ | # 기간을 설정한다. | ||
+ | # 한 번당 최대 매수, 매도금액을 입력한다. | ||
+ | # 가상 트레이딩을 실행한다. | ||
+ | |------ | ||
+ | |예외 사건흐름 | ||
+ | |colspan=3| | ||
+ | 4.a. 입력한 형식에 맞지 않는 경우 실행실패를 보여줌. | ||
+ | |||
+ | 4.b. 실행에 실패한 경우 오류메시지를 보여줌. | ||
+ | |------ | ||
+ | |사전 조건 | ||
+ | |colspan=3| | ||
+ | 모델 학습 완료 | ||
+ | |------ | ||
+ | |사후 조건 | ||
+ | |colspan=3| | ||
+ | 실행 결과를 보여줌. | ||
+ | |------ | ||
+ | |참고 사항 | ||
+ | |colspan=3| | ||
+ | CSV에서 Test데이터셋을 만들어서 진행 | ||
+ | |} | ||
+ | |||
+ | {| cellpadding="10" cellspacing="0" border="1" width="50%" style="margin: 2em; margin-left: 0 atuo; " | ||
+ | | 이름 | ||
+ | | 실제 트레이딩 | ||
+ | | 관련액터 | ||
+ | | 투자자 | ||
+ | |------ | ||
+ | | 설명 | ||
+ | |colspan=3| 투자자가 학습한 모델로 현재 상태를 넣었을 때 매수나 매도, 대기를 알려주고, 매수나 매도일 경우 양을 알려줌. | ||
+ | |------ | ||
+ | |기본 사건흐름 | ||
+ | |colspan=3| | ||
+ | # 투자자가 현재 잔액을 입력한다. | ||
+ | # 투자자가 소지한 광물의 양을 입력한다. | ||
+ | # 한 번당 최대 매수, 매도금액을 입력한다. | ||
+ | # 실행 버튼을 누른다. | ||
+ | |------ | ||
+ | |예외 사건흐름 | ||
+ | |colspan=3| | ||
+ | 4.a. 입력한 형식에 맞지 않는 경우 실행실패를 보여줌. | ||
+ | |||
+ | 4.b. 실행에 실패한 경우 오류메시지를 보여줌. | ||
+ | |||
+ | 4.c. 잔액이 없는 경우 투자 실패를 보여줌. | ||
+ | |------ | ||
+ | |사전 조건 | ||
+ | |colspan=3| | ||
+ | 모델 학습 완료 | ||
+ | |------ | ||
+ | |사후 조건 | ||
+ | |colspan=3| | ||
+ | 해당 타이밍의 행동과 양을 출력 | ||
+ | |} | ||
+ | |||
+ | ====소프트웨어 전체 구성도==== | ||
+ | [[파일:hoho11.png]] | ||
+ | * 광물시장 데이터 csv | ||
+ | ** 광물 시장의 가격을 일봉형식으로 나타낸다. | ||
+ | ** csv파일 형식으로 저장되어있다. | ||
+ | * 모의 투자 | ||
+ | ** 강화학습 모델에서 환경을 모의투자 api로 사용할 수 있는 부분이다. | ||
+ | * 학습 및 투자환경 | ||
+ | ** 강화학습 모델에 이용할 수 있는 환경요소로 추상화한다. | ||
+ | * 전략 및 트레이딩 DNN agent | ||
+ | ** 가상화된 환경에서 실제로 매도나 매수등의 결정을 내리는 agent이다. | ||
+ | ** 기본적으로 설정되어있는 다수의 알고리즘과 DNN을 합성하여 판단을 한다. | ||
+ | * 강화학습 정책 | ||
+ | ** 위의 DNN agent를 학습시키는 방법이다. | ||
+ | ** PPO, DQN등의 방법을 사용한다. | ||
+ | |||
+ | |||
+ | |||
+ | ====UI 정의==== | ||
+ | * 메뉴구성 | ||
+ | |||
+ | {|cellpadding="10" cellspacing="0" border="1" width="50%" style="margin: 2em; margin-left: 0 atuo; " | ||
+ | | 시스템 | ||
+ | | Level1 | ||
+ | | Level2 | ||
+ | | Level3 | ||
+ | | Level4 | ||
+ | |----- | ||
+ | |rowspan="4"|사용자용 프로그램 | ||
+ | |rowspan="4"|메인화면 | ||
+ | |강화학습방식 설정 | ||
+ | |모델생성 | ||
+ | |모델학습 | ||
+ | |----- | ||
+ | |사용할 트레이딩 전략 | ||
+ | |모델 불러오기 | ||
+ | |가상 트레이딩 | ||
+ | |----- | ||
+ | |종목선택 | ||
+ | |rowspan="2"|모델저장 | ||
+ | |rowspan="2"|모델저장 | ||
+ | |----- | ||
+ | |모델 불러오기 | ||
+ | |} | ||
+ | |||
+ | * 화면 목록 | ||
+ | |||
+ | {|cellpadding="10" cellspacing="0" border="1" width="50%" style="margin: 2em; margin-left: 0 atuo; " | ||
+ | |화면 ID | ||
+ | |화면명 | ||
+ | |화면설정 | ||
+ | |보안등급 | ||
+ | |액터명 | ||
+ | |권한 | ||
+ | |------ | ||
+ | |UI-01 | ||
+ | |메인화면 | ||
+ | |메인화면 | ||
+ | |평문 | ||
+ | |고객 | ||
+ | |전체권한 | ||
+ | |------ | ||
+ | |UI-02 | ||
+ | |강화학습방식 설정 | ||
+ | |DQN이나 PPO선택 가능 | ||
+ | |평문 | ||
+ | |고객 | ||
+ | |전체권한 | ||
+ | |------ | ||
+ | |UI-03 | ||
+ | |사용할 트레이딩 전략 | ||
+ | |다양한 트레이딩 전략을 선택 | ||
+ | |평문 | ||
+ | |고객 | ||
+ | |전체권한 | ||
+ | |------ | ||
+ | |UI-04 | ||
+ | |종목 선택 | ||
+ | |다양한 종목 선택 | ||
+ | |평문 | ||
+ | |고객 | ||
+ | |전체권한 | ||
+ | |------ | ||
+ | |UI-05 | ||
+ | |모델 불러오기 | ||
+ | |기존에 저장한 모델을 불러옴 | ||
+ | |평문 | ||
+ | |고객 | ||
+ | |전체권한 | ||
+ | |------ | ||
+ | |UI-06 | ||
+ | |모델 생성 | ||
+ | |선택한 정보를 기준으로 모델 생성 | ||
+ | |평문 | ||
+ | |고객 | ||
+ | |전체권한 | ||
+ | |------ | ||
+ | |UI-07 | ||
+ | |모델 저장 | ||
+ | |현재 모델을 저장 | ||
+ | |평문 | ||
+ | |고객 | ||
+ | |전체권한 | ||
+ | |------ | ||
+ | |UI-08 | ||
+ | |모델 학습 | ||
+ | |현재 모델을 학습 | ||
+ | |평문 | ||
+ | |고객 | ||
+ | |전체권한 | ||
+ | |------ | ||
+ | |UI-09 | ||
+ | |가상 트레이딩 | ||
+ | |현재 모델로 가상 트레이딩 | ||
+ | |평문 | ||
+ | |고객 | ||
+ | |전체권한 | ||
+ | |} | ||
+ | |||
+ | *화면 흐름도 | ||
+ | [[파일:hoho12.png]] | ||
+ | |||
+ | |||
+ | ====클래스 다이어그램==== | ||
+ | [[파일:hoho9.png]] | ||
+ | * BaseTrainEnv | ||
+ | ** 실제 시장의 환경을 강화학습에서 모델링하기 위한 베이스 클래스이다. API를 이용한 투자와 csv데이터로 가상화되는 환경의 베이스가 된다. | ||
+ | ** reset()으로 환경을 초기화 한다. | ||
+ | ** step()으로 거래를 전달하면, 다음날의 가격(state), 현재 가치(reward), 시간흐름의 완료(done), 기타정보를 반환한다. | ||
+ | * APITrainEnv | ||
+ | ** 실제 투자API가 구현되는 클래스이다. | ||
+ | * CsvTrainEnv | ||
+ | ** csv 데이터를 이용해 투자 환경이 구현되는 클래스이다. | ||
+ | *CsvTrainSet | ||
+ | ** 투자 환경에 필요한 주가 데이터를 종합한 클래스이다. | ||
+ | ** currency : 기준 통화 | ||
+ | ** exchange_rate : 기준 통화와 다른 통화의 환율 | ||
+ | ** object_price : 거래 대상의 가격데이터 | ||
+ | ** other_object_price : 거래 대상이외의 참고할 대상의 가격데이터 | ||
+ | * PPOTrainModel & DQNTrainModel | ||
+ | ** trainEnv: 사용한 투자환경 클래스이다. | ||
+ | ** agent: 전략별 채택 가중치를 계산할 수 있는 오브젝트이다. | ||
+ | ** tradeStrategies: 트레이딩에서 사용할 전략 알고리즘의 배열이다. | ||
+ | * BaseTradeStrategy | ||
+ | ** 트레이딩에 사용할 수 있는 전략알고리즘을 추상화한 클래스이다. | ||
+ | ** getInvest의 출력값은 +(매수), -(매도)로 나타낸다. | ||
+ | |||
+ | |||
+ | ====CSV데이터 포맷==== | ||
+ | |||
+ | * 최상단 줄에 해당하는 컬럼명 표기. | ||
+ | * 광물시장 가격 데이터 | ||
+ | ** 각 광물별, 거래소, 기준통화별로 파일 관리 | ||
+ | ** 파일내에서 날짜별로 시가, 종가, 고가, 저가, 거래량의 데이터를 가지고 있을 것 | ||
+ | ** 예시 | ||
+ | |||
+ | [[파일:hoho13.png]] | ||
+ | * 환율 데이터 | ||
+ | ** 각 기준통화별로 파일 관리 | ||
+ | ** 컬럼에 변환할 대상통화를 표기 | ||
+ | ** 날짜별로 통화량 표기 | ||
==결과 및 평가== | ==결과 및 평가== | ||
===완료 작품의 소개=== | ===완료 작품의 소개=== | ||
− | ==== | + | ====대표기능 사진==== |
− | + | [[파일:hoho14.png]] | |
− | ==== | + | ===실행=== |
− | + | ====사용가능한 기능들==== | |
+ | ** 모델 생성 | ||
+ | *** 강화학습 방식 설정 | ||
+ | *** 베이스 트레이딩 전략 설정 | ||
+ | *** 종목 설정 | ||
+ | *** 새로운 모델 생성 | ||
+ | ** 모델 폴더 지정 | ||
+ | *** 현재 학습된 모델이 저장될 폴더를 지정 | ||
+ | ** 모델 로딩 | ||
+ | *** 학습 및 트레이딩시 자동으로 지정된 폴더에서 모델을 로드 | ||
+ | *** 기존 모델에 대한 추가학습 옵션으로 새로운 학습, 기존모델에 대한 학습을 선택가능 | ||
+ | ** 모델 학습 | ||
+ | *** 불러오거나 생성한 모델을 학습함 | ||
+ | *** 매 에피소드마다 학습된 모델을 저장. | ||
+ | ** 가상 트레이딩 | ||
+ | *** 학습한 모델을 훈련데이터와 분리한 데이터에서도 학습이 잘 되는지 확인할 수 있음. | ||
+ | ** 학습/결과 그래프 확인 | ||
+ | *** 학습하거나 가상트레이딩을 진행한 그래프를 보여줌 | ||
+ | *** 학습 시에는 에피소드마다, 트레이딩시 마지막 에피소드의 포트폴리오 그래프표시. | ||
+ | *** 그래프 데이터 자동 저장 | ||
− | === | + | ====학습예시==== |
− | + | [[파일:hoho15.png]] | |
+ | ** 위의 화면에 전략, 종목, 사용할 지표를 선택해야 한다. 학습할 에피소드 수, 추가학습이라면 체크박스를 선택한다. 최종적으로 모델 학습 시작을 눌러서 학습시작이라는 메시지를 확인할 수 있다. | ||
+ | [[파일:hoho16.png]] | ||
+ | ** 위와 같이 학습이 진행중일 때에 각각의 에피소드마다의 결과값이 보여지는 것을 확인할 수 있다. | ||
+ | ** 또한 학습 진행중에 그래프를 확인하면 아래와 같은 화면을 확인할 수 있다. 아래와 같은 그래프는 학습 에피소드마다 마지막 포트폴리오 가치가 어떠했는지를 확인할 수 있다. 이로써 모델의 학습이 성공적으로 되고 있는 것인지 추측해볼 수 있다. | ||
+ | ** 이러한 그래프 보기 버튼을 누를 때 프로그램을 실행시킨 폴더에 graph.csv파일이 생성되고, 아래와 같은 그래프 데이터를 저장할 수 있다. | ||
+ | [[파일:hoho17.png]] | ||
+ | |||
+ | ====가상트레이딩 예시==== | ||
+ | * 위와 같이 학습시 선택했던 종목, 지표와 강화학습 방법을 똑같이 선택한다. | ||
+ | ** 만일 이전과 다르게 선택할 시 모델 트레이딩 과정중에 오류가 발생할 수 있다. | ||
+ | * 학습에 필요한 모델이 있는 폴더를 선택한다. 만일 선택하지 않고 트레이딩을 진행하거나 모델파일이 들어있지 않는 폴더를 선택하면, 아래와 같은 오류가 나타나면서 실행이 되지 않는다. | ||
+ | [[파일:hoho18.png]] | ||
+ | * 이 때의 에피소드 수는 여러 번으로 돌림으로써 학습과 유사하게 진행할 수 있으나, 최종적으로 얻는 그래프는 마지막 에피소드에서 테스트 데이터를 기반으로 진행한 트레이딩이기 때문에, 다수의 가상 트레이딩을 하는 것은 큰 의미가 있는 것은 아니다. 그러므로 에피소드 수는 1로 고정된다. | ||
+ | [[파일:hoho19.png]] | ||
+ | * 테스트가 완료되면 위와 같은 화면으로 바뀐다. 마지막 테스트 에피소드의 마지막 틱에서의 포트폴리오 가치가 얼마였는지를 나타낸다. | ||
+ | [[파일:hoho20.png]] | ||
+ | * 위의 그래프에서 초록색 점이 해당 틱에서 매수를 했음을 나타낸다. ma알고리즘에 기반해서 에어전트가 구매를 선택했고 이에 따른 수수료에 의해서 가치가 조금 감소한 것을 확인할 수 있다. | ||
+ | * 위의 그래프에서는 나타나지 않았지만 에어전트가 매도를 시도하게 되면 해당 점에서 붉은 점으로 표시가 된다. | ||
+ | |||
+ | ====그래프 데이터 자동 저장==== | ||
+ | [[파일:hoho21.png]] | ||
+ | * 위의 그래프를 조회하게 되면 프로그램에서 자동으로 그래프 데이터를 저장하는 것을 확인할 수 있다. | ||
===완료작품의 평가=== | ===완료작품의 평가=== | ||
− | + | ||
+ | {|cellpadding="10" cellspacing="0" border="1" width="50%" style="margin: 2em; margin-left: 0 auto; " | ||
+ | |평가항목 | ||
+ | |평가방법 | ||
+ | |적용기준 | ||
+ | |개발 목표치 | ||
+ | |비중(%) | ||
+ | |------ | ||
+ | |1. 선정한 요인들이 충분히 근거가 있는가? | ||
+ | |해당 요인에 대한 논문이나 학술지가 있는지 확인 | ||
+ | | Reference가 불분명하거나 없는 요인의 수 | ||
+ | | 0개 | ||
+ | |20 | ||
+ | |------ | ||
+ | |2. 요인들을 실험할 수 있는 프로토타입 강화학습 모델을 구현하였는가? | ||
+ | |해당 요인들을 환경에 넣어보고 테스트 해본다. | ||
+ | | 환경, 액션, 상태, 리워드 등을 넣었을 때 동작 | ||
+ | |정상 동작 | ||
+ | |20 | ||
+ | |------ | ||
+ | |3. 다른 Trading Bot들과의 성능을 비교`분석하였는가? | ||
+ | |다른 Bot들과 모의투자를 진행하여 일정 시간 대비 수익률을 비교`분석한다. | ||
+ | | Bot들의 수익률 등수 | ||
+ | |1위 | ||
+ | |20 | ||
+ | |------ | ||
+ | |4. 요인들에 대한 연관성을 비교분석하였는가? | ||
+ | |요인들을 테스트해보고 각 요인들과 수익률간의 상관관계와 각 요인들 간의 상관관계를 분석 | ||
+ | | 고려한 관계성이 있는 요인의 수 | ||
+ | | 5개 이상 | ||
+ | |20 | ||
+ | |------ | ||
+ | |5. 모의투자 상황에서 자동으로 Trading이 가능한가? | ||
+ | |모의투자 상황에서 Program을 실행시키고 자동으로 Trading이 되는지 확인함 | ||
+ | | 거래 기록 및 수익률 기록 | ||
+ | | 정상 동작 | ||
+ | |20 | ||
+ | |} | ||
===향후계획=== | ===향후계획=== | ||
− | + | 가. 어려웠던 내용들 | |
+ | * 강화학습에 대한 이해 | ||
+ | * 강화학습에서 비교적 최신 기술이었던 PPO를 구현한 점 | ||
+ | * PPO에 대한 자료가 많이 없었던 점 | ||
+ | * 주식시장이나 광물시장에서 가격에 연관이 있는 요인들 모듈화 | ||
− | + | ||
− | + | 나. 차후 구현할 내용 | |
+ | * PPO, DQN과는 다른 강화학습 방식 적용 및 실험 | ||
+ | * 실제 트레이딩이 가능한 API를 연결함 | ||
+ | * 주식시장과 코인시장에도 적용함 | ||
+ | * 알고리즘적 트레이딩 전략을 다수 추가 |
2019년 6월 20일 (목) 03:45 기준 최신판
프로젝트 개요
기술개발 과제
국문 : 광물시장에서 강화학습을 이용한 트레이딩 봇
영문 : Trading-bot using Reinforcement Learning in a mineral market
과제 팀명
호호
지도교수
이동희 교수님
개발기간
2019년 3월 ~ 2019년 6월 (총 4개월)
구성원 소개
서울시립대학교 컴퓨터과학부 2014920044 이홍석(팀장)
서울시립대학교 컴퓨터과학부 2014920037 이정한
서론
개발 과제의 개요
개발 과제 요약
- 이전부터 사용자들이 많이 사용하던 시계열 분석 알고리즘과 다양한 지표들을 활용하여 강화학습을 이용하여 광물 가격을 예측한다.
- 광물시장에서 시가에 영향을 미치는 다양한 요인이 존재한다.
- 이미 밝혀진 다양한 요인들과 우리들이 생각한 요인들을 정리한다.
- 이러한 요인들을 강화학습을 통해서 상관관계가 있는지 확인하고 실제로 수익을 낼 수 있는 모델과 학습을 진행한다.
- 여러 가지 요인(차트 및 시장표준지수)들과 전략들을 가지고 하나의 광물을 대상으로 수익률이 높을 것으로 예상되는 매수, 매도 타이밍을 찾아낼 수 있는 것을 목표로 한다.
- 다양한 강화학습 알고리즘 중 PPO(Proximal Policy Optimization), DQN(Deep Q Network)을 사용하여 구현해보고 어떤 방식이 더 잘 맞는지 분석해본다.
개발 과제의 배경
- 광물 시장은 매 시간마다 변동함
- 광물 시장의 변동은 어떠한 요인들에 의해 값어치가 올라가기도 하고 내려가기도 함
- 다양한 논문 Research 및 분석을 통해 값에 변화를 주는 요인들을 선별
- 해당 요인들을 강화학습 모델의 환경에 넣어서 학습을 시킴
개발 과제의 목표 및 내용
- 강화학습을 이용하여 트레이딩을 자동으로 하는 봇을 만든다.
- 광물 가격에 영향을 주는 요인들을 찾아보고 어느 정도 연관관계가 있는지 확인한다.
- 연관관계가 있는 요인들을 모아서 강화학습모델에 적용시켜보고 실제로 효과가 있는지 확인해본다.
- 효과가 컸던 요인들을 모아서 모의 투자 상황에서 수익률 분석을 해본다.
관련 기술의 현황
관련 기술의 현황 및 분석(State of art)
- 전 세계적인 기술현황
- 자동 거래 시스템(ATS;Automated Trading System)은 1949년 Richard Donchian이 funds를 사고 파는 일련의 규칙을 사용하여 처음 소개되었다. 1980년대에는 John Henry와 같은 유명한 Trader들이 전략을 사용하기 시작하여, 규칙 기반 거래(Rule Based Trading)라는 개념이 대중화되었다. 현재는 미국 증권 거래소 주식 거래의 75% 이상이 자동 거래 시스템으로 이루어진다.
- 최근에는 AI의 등장으로, 수많은 은행이나 투자자들이 AI를 활용하여 규칙 기반 거래나 직접 거래보다 훨씬 수익률이 높은 모델을 개발중이다. 딥러닝, 머신러닝 등의 기술을 활용하여 Trading Bot을 개발하고 있으며, 강화학습의 등장이후, 다양한 Trading Bot Project에서 강화학습을 도입하려는 움직임을 보이고 있다.
- 특허조사 및 특허 전략 분석
- 기술 로드맵
- 자동으로 거래를 할 수 있는 봇의 형태를 만들어야 하고, 모의투자를 통해 테스트할 수 있는 환경을 만들어야하기 때문에 투자, 증권사 API 및 모의투자 서버가 필요하다. 따라서, 키움증권, 대신증권, 이베스트투자증권 등의 회사의 API를 활용하고, 이 회사들의 모의투자 서버를 통해 수익률을 분석할 수 있다.
- 강화학습은 환경이 주어지고, 해당 환경에 액션을 취하면 그에 따른 보상을 주면서 학습을 시킨다. 일반적인 딥 러닝은 어떤 요인들의 상호관계를 표현하지 못한다. 하지만 강화학습은 환경을 통해 어떤 요인들의 상호관계를 표현할 수 있다. 주식들은 서로 상호관계를 가지고 있으므로 강화학습을 이용하는 것이 유리한 방법이라 할 수 있다.
- 현재에는 차트분석만으로 주식이나 광물시장에서의 매도, 매수타이밍을 잡아서 수익을 낼 수 있는 다양한 방법이 연구되고 있다. 이를 기술적 매매라고 부른다. 이러한 방법을 이용하여 알고리즘으로 구현하면 보다 안정적이고 수익률이 검증된 매매방법을 사용할 수 있다.
시장상황에 대한 분석
- 경쟁제품 조사 비교
- 이러한 제품들은 시장에 공개적으로 나와있는 것을 쉽게 찾을 수 없다. 이러한 트레이딩봇 자체가 실제 주식시장에서 수익을 낼 수 있기 때문이다. 이윤을 창출하는 기업의 입장에서는 이 트레이딩 봇을 직접적으로 사용하지 않을 이유가 없다.
- 또한 많은 사용자가 트레이딩 봇을 사용한다고 가정했을 때 모두가 이익을 볼 수 있는 것은 아니다. 같은 알고리즘을 사용하는 트레이딩 봇이 많으면 수익률이 줄어 들기 때문에 이러한 트레이딩 봇을 상용화하지 않은 것으로 보인다.
알고리즘 | 증권사 API | 비고 | |
---|---|---|---|
브레인듀드의 듀드303, 듀드프로 | 사용자의 조건검색식 사용 | 키움증권 API | |
키움증권의 로보마켓 | 다양한 알고리즘 전략 제시 | 키움증권 API | |
주식몰 오토핫키 | 해당하는 설명이 없음 | 해당하는 설명이 없음 | 마켓팅 위주의 사업 진행 |
- 위와 같이 알고리즘 트레이딩 봇을 만드는 회사 이외에도 증권사나 펀드회사 같은 경우에도 가치투자를 위한 분석자료를 제공하는 서비스를 제공할 수 있다.
- 한국거래소에서는 종목마다 투자가치를 판단할 수 있는 자료를 제공한다. 이에 따라서 우리의 트레이딩봇과 경쟁해야 하는 부분을 가지고 있다.
- 마케팅 전략 제시
- 위와 같이 여러가지 요인을 연구, 분석함에 따라서 트레이딩 봇을 만들 수 있다. 이 요인들의 적당한 조합으로 여러가지 특성을 띠는 트레이딩 봇을 개발할 수 있다.
- 사용자들에게 원하는 이익구조를 선택할 수 있게 한다. 예를 들어 수익률이 크게 높지 않더라도 안정적인 투자를 원하는 사용자가 있고, 위험을 감수하더라도 높은 수익률을 원하는 사용자가 있다. 요인분석에 따라서 얻을 수 있는 특징들을 찾아내고 이러한 요인들로 주식트레이딩의 위험, 최고 수익률등이 결정될 것이다.
개발과제의 기대효과
기술적 기대효과
- 기존의 주식 트레이딩봇들은 우리가 직접 알고리즘을 구현하고 설계함에 따라서 작동했다. 사람의 직관을 이용해서 장기투자를 하는 것이 아니라 짧은 시간의 시장변동을 감지해서 조금씩 수익을 올리는 등의 알고리즘이 만들어져 왔다. 하지만 강화학습과 딥러닝을 사용해서 좀 더 효과적인 방향을 찾을 수 있다.
- 딥러닝에서 사용하는 뉴럴 네트워크는 학습이 완료되었을 때 예측속도가 매우 빠르다는 특징을 갖고 있다. 해당 요인을 성공적으로 학습한 네트워크를 얻은 후에 봇을 사용할 때는 컴퓨팅의 성능을 크게 사용하지 않고 빠른 속도의 트레이딩이 가능하다.
경제적, 사회적 기대 및 파급효과
- 위에서 서술한 대로 만일 강화학습을 이용해서 주식 트레이딩봇이 성공적으로 수익을 낼 수 있는 구조라면, 이와 유사한 트레이딩봇이 많이 등장할 것이다. 더불어서 강화학습에 딥러닝을 적용시키면서 구성할 수 있는 선택의 여지가 많아졌다. 각기 학습하는 방법에 따라서 각기 다른 여러가지 전략이 등장할 수 있는 것이다. 따라서 기존에 알고리즘을 이용해서 매매를 진행하던 투자자들이 새롭게 등장하는 트레이딩봇의 투자전략에 영향을 받을 것이며, 시장의 특성은 더 다양하고 복잡해질 것이다.
기술개발 일정 및 추진체계
개발 일정
단계별 세부개발 내용 | 담당자 | 개발기간 | 비고 |
---|---|---|---|
강화학습 환경 설계 | 이홍석 | 3~4 | |
모의투자 환경구성 및 트레이딩 봇 구현 | 이정한 | 4~5 | |
학습진행 및 정확도 개선 | 이홍석 | 4~6 | |
기존의 트레이딩 봇과의 성능 비교 | 이정한 | 6 | |
요인 연구 및 분석 | 이홍석, 이정한 | 3~6 |
구성원 및 추진체계
- 컴퓨터과학부 2014920044 이홍석 : 작품설계 및 개발
- 컴퓨터과학부 2014920037 이정한 : 작품설계 및 개발
설계
설계사양
제품의 요구사항
번호 | 요 구 사 항 | D or W | 중요도 |
---|---|---|---|
1 | 기존 시계열 분석 논문에 있는 전략(요소, Factor)들을 모듈로 개발 | D | 대 |
2 | 시계열 데이터 분석 모듈을 적용할 수 있는 강화학습 모델을 개발 | D | 대 |
3 | 모델을 학습시킬 수 있는 환경(Env, DB) 개발 | D | 대 |
4 | PPO와 DQN 강화학습 알고리즘을 구현하고 분석 | W | 중 |
설계 사양
- 목적계통도
개념설계안
- 기존에 연구되어진 시계열 분석 알고리즘을 이용한 결과물들은 제각기 집중하는 부분이 다르기 때문에, 그 정확도가 서로 배타적 일 것이다. 즉 어느 한 알고리즘이 우위의 정확도를 가질 경우 다른 알고리즘은 상대적으로 낮은 정확도를 가질 것이다.
- 서로 정확성에 있어 배타적일 정도로 다른 시계열 분석 알고리즘을 찾아야한다.
- 배타적인 TA 알고리즘 a0~an을 찾고, 구현한다.
- 강화학습 예측 모델
- 강화학습을 이용한 시계열 데이터의 학습을 통해 예측 모델을 생성한다.
- 예측 모델은 다음과 같이 크게 두가지 단계로 구성된다.
- 직접 시계열 데이터를 분석 / 예측하는 전략적 알고리즘
- 네이밍: a0, a1, … , an
- input: {시계열 데이터}
- output: {예측된 다음 시계열 데이터=o0, o1, …, on}
- 인공신경망을 응용하는, 적절한 전략적 알고리즘에 가중치를 부여하는 알고리즘
- 네이밍: M
- input: {시계열 데이터}
- output: {w0, w1, …, wn}
- 어느 하나의 전략적 알고리즘을 선택하는 방식(hard decision)이 아니라, 여러 전략적 알고리즘의 정확도를 연판정(soft decision)하여 그 비중을 출력한다.
- 직접 시계열 데이터를 분석 / 예측하는 전략적 알고리즘
- a의 결과인 O와 b의 결과인 W를 곱하여 최종 예측치를 계산한다. (가중평균)
- Predict = OW
- 이 Agent의 결과에 따라서 전략을 어떤 비율로 선택하게 된다. 이를 조합한 값으로 특정 광물에 대한 매수 혹은 매도할 값을 선택하게 된다.
- 강화학습 환경 구성 요소
- 에이전트
- state값들을 DNN을 사용하여 전략을 선택할 수 있는 값으로 추출한다.
- 전략개수 의존적
- 환경
- 한 거래소의 해당 광물의 일봉csv데이터를 시간에 따라서 사용
- USD, EUR (KRW 기준) 지수 데이터
- 리워드 공식
- 해당 광물의 가치와 잔금을 합산한 값을 리워드로 사용한다.
- 액션 리스트
- 양수는 매수, 음수는 매도의 의미로 하나의 출력값을 사용한다.
- 광물 거래는 1주 단위의 이산적인 값을 사용한다.
- 최대, 최소값을 설정한다.
- 양수는 매수, 음수는 매도의 의미로 하나의 출력값을 사용한다.
- 에이전트
- 학습 시나리오
- 매 학습에서 어떤 기간을 랜덤으로 설정한다.
- 이 시간동안의 광물시장 데이터를 사용해서 하루 단위로 액션을 진행한다.
- 시계열 분석 부분에서 각각의 전략이 매수/매도값을 도출한다.
- 강화학습 부분에서 가중치를 도출한다.
- 가중치값과 매수/매도값을 각각 곱하고 누적한다.
- 해당 값을 통해 매수/매도/유지를 진행한다.매도가 될 때까지 진행하고 매도시 수익률을 구한다.
- 수익률이 증가하는 방향으로 학습을 한다.
이론적 계산 및 시뮬레이션
- 강화학습 오픈소스) DQN을 이용한 트레이딩 학습 테스트
- 학습개요
- 아래는 국내 3개 IT기업의 일봉데이터를 대상으로 학습을 진행한 결과이다.
- 구현에서는 가능한 만큼 모두 매수, 매도, 대기하는 액션만 사용하였다.
- 아래의 그래프에서는 초기 투자금을 가지고 시간에 따라서 자산 가치가 어떻게 변하는지 보여준다.
- 트레이닝 데이터로 학습 진행 중 자산가치변화
- 학습개요
- 빨간선은 초기 투자 금액이다.
- 초반에는 매우 가치가 크지만 불안정한 트레이딩을 하다가 후에 안정적인 수익률을 보여주는 것을 알 수 있다.
- 테스트 데이터에서 거래중 자산가치 변화
- 빨간 선은 초기 투자 금액이다.
- 테스트 데이터로 트레이딩 했을 때 투자금액 보다 평균 12%의 수익을 올릴 수 있었다.
- 단순 시가만으로 학습을 하는 경우, 위와 같이 매우 불안정하므로 다양한 전략을 통해 개선이 필요하다.
- 전략 오픈소스) 10일, 30일 이동평균선 교차점 검출을 이용한 매수 매도 알고리즘 트레이딩
- 방법
- 현재까지 크롤링한 일봉데이터에서 단기 이동평균선과 장기 이동평균선의 교차점은 중요한 매도, 매수타이밍의 후보가 될 수 있다. 장기적인 추세를 따라가는 것이 미래에 대체로 좋은 방향이 되므로 장기평균선이 상승할 떄 매수, 하락 할 때 매도를 하는 것이 좋다.
- 구현에서는 가능한만큼 모두 매수, 매도, 대기하는 액션만 사용하였다.
- Ta-lib
- Technical Analysis LIbrary
- 시장분석과 같은 시계열 데이터 알고리즘을 분석하는데 사용하는 라이브러리
- 내부에서는 기본 시장지표를 받으면 이에 따라서 새로운 보조지표를 만들어주거나 패턴을 검출하는 함수 제공
- 구현에서 이동평균선 지표를 얻을 때 사용.
- 가상트레이딩에 따른 자산가치 변화
- 방법
- 빨간선은 초기 투자 금액이다.
- 위와 같이 장기간 트레이딩을 진행하는데 있어서 이동평균선 교차점을 이용한 트레이딩이 좋은 효과를 보이는 것을 알 수 있다.
- 광물시장 시가데이터 크롤링
- 한국거래소([3])
- 거래소홈페이지에서 1년단위의 데이터를 csv로 내려받을 수 있다.
- 아래는 2014년 - 2019년의 종가를 그래프로 나타낸 것이다.
- DQN 소스코드를 사용한 광물시장 가상 트레이딩
- 위에서 사용한 DQN방법을 금시장을 대상으로 트레이딩을 진행했다.
- 구현방식은 위의 DQN을 이용한 트레이딩 테스트와 같다.
- 2000회 트레이닝을 진행하여서 매회 트레이닝마다 다음과 같은 결과를 얻을 수 있었다.
- 초기투자금액 10,000,000원으로 학습을 진행했다.
- 위에서 트레이닝한 결과를 바탕으로 테스트를 진행했다.
상세설계 내용
유스케이스 다이어그램
- 투자자가 각종 종목과 학습 정책 등을 선택한다.
- 선택을 기반으로 모델을 생성해서 가상 트레이딩을 진행할 때 수익률이 잘 나올 수 있는 지 확인한다.
- 학습 방법에 따른 비교 분석을 진행한다.
- 액터
- 액터명 : 투자자
- 설명 : 해당 프로그램을 투자의 지표로 사용하고 싶은 사람
- 각 유스케이스설명
이름 | 종목선택 | 관련액터 | 투자자 |
설명 | 투자자가 원하는 종목을 선택함 | ||
기본 사건흐름 |
| ||
사전 조건 | 프로그램 실행 |
이름 | 강화학습 정책 선택 | 관련액터 | 투자자 |
설명 | 투자자가 원하는 강화학습 정책을 선택(PPO,DQN) | ||
기본 사건흐름 |
| ||
사전 조건 | 프로그램실행 |
이름 | 투자 젼략 선택 | 관련액터 | 투자자 |
설명 | 투자자가 원하는 전략을 선택함 | ||
기본 사건흐름 |
| ||
사전 조건 | 프로그램실행 |
이름 | 강화학습 모델 생성 | 관련액터 | 투자자 |
설명 | 투자자가 선택한 내용대로 강화학습 모델을 생성함. | ||
기본 사건흐름 |
| ||
예외 사건흐름 |
2.a. 최소 버튼을 누르면 선택화면으로 돌아옴. | ||
사전 조건 |
프로그램실행 종목 선택 강화학습 정책 선택 투자 전략 선택 | ||
사후 조건 |
모델 생성에 성공해야 함 |
이름 | 모델 학습 | 관련액터 | 투자자 |
설명 | 투자자가 생성한 모델을 학습함. | ||
기본 사건흐름 |
| ||
예외 사건흐름 |
2.a. 학습 인자를 형식에 맞게 입력하지 않은 경우 학습 실패를 보여줌. 2.b. 학습 도중 학습에 실패할 경우 에러 메시지를 보여줌. | ||
사전 조건 |
모델 생성에 성공 | ||
사후 조건 |
학습 결과 출력. |
이름 | 가상 트레이딩 | 관련액터 | 투자자 |
설명 | 투자자가 학습한 모델로 가상 트레이딩을 함. | ||
기본 사건흐름 |
| ||
예외 사건흐름 |
4.a. 입력한 형식에 맞지 않는 경우 실행실패를 보여줌. 4.b. 실행에 실패한 경우 오류메시지를 보여줌. | ||
사전 조건 |
모델 학습 완료 | ||
사후 조건 |
실행 결과를 보여줌. | ||
참고 사항 |
CSV에서 Test데이터셋을 만들어서 진행 |
이름 | 실제 트레이딩 | 관련액터 | 투자자 |
설명 | 투자자가 학습한 모델로 현재 상태를 넣었을 때 매수나 매도, 대기를 알려주고, 매수나 매도일 경우 양을 알려줌. | ||
기본 사건흐름 |
| ||
예외 사건흐름 |
4.a. 입력한 형식에 맞지 않는 경우 실행실패를 보여줌. 4.b. 실행에 실패한 경우 오류메시지를 보여줌. 4.c. 잔액이 없는 경우 투자 실패를 보여줌. | ||
사전 조건 |
모델 학습 완료 | ||
사후 조건 |
해당 타이밍의 행동과 양을 출력 |
소프트웨어 전체 구성도
- 광물시장 데이터 csv
- 광물 시장의 가격을 일봉형식으로 나타낸다.
- csv파일 형식으로 저장되어있다.
- 모의 투자
- 강화학습 모델에서 환경을 모의투자 api로 사용할 수 있는 부분이다.
- 학습 및 투자환경
- 강화학습 모델에 이용할 수 있는 환경요소로 추상화한다.
- 전략 및 트레이딩 DNN agent
- 가상화된 환경에서 실제로 매도나 매수등의 결정을 내리는 agent이다.
- 기본적으로 설정되어있는 다수의 알고리즘과 DNN을 합성하여 판단을 한다.
- 강화학습 정책
- 위의 DNN agent를 학습시키는 방법이다.
- PPO, DQN등의 방법을 사용한다.
UI 정의
- 메뉴구성
시스템 | Level1 | Level2 | Level3 | Level4 |
사용자용 프로그램 | 메인화면 | 강화학습방식 설정 | 모델생성 | 모델학습 |
사용할 트레이딩 전략 | 모델 불러오기 | 가상 트레이딩 | ||
종목선택 | 모델저장 | 모델저장 | ||
모델 불러오기 |
- 화면 목록
화면 ID | 화면명 | 화면설정 | 보안등급 | 액터명 | 권한 |
UI-01 | 메인화면 | 메인화면 | 평문 | 고객 | 전체권한 |
UI-02 | 강화학습방식 설정 | DQN이나 PPO선택 가능 | 평문 | 고객 | 전체권한 |
UI-03 | 사용할 트레이딩 전략 | 다양한 트레이딩 전략을 선택 | 평문 | 고객 | 전체권한 |
UI-04 | 종목 선택 | 다양한 종목 선택 | 평문 | 고객 | 전체권한 |
UI-05 | 모델 불러오기 | 기존에 저장한 모델을 불러옴 | 평문 | 고객 | 전체권한 |
UI-06 | 모델 생성 | 선택한 정보를 기준으로 모델 생성 | 평문 | 고객 | 전체권한 |
UI-07 | 모델 저장 | 현재 모델을 저장 | 평문 | 고객 | 전체권한 |
UI-08 | 모델 학습 | 현재 모델을 학습 | 평문 | 고객 | 전체권한 |
UI-09 | 가상 트레이딩 | 현재 모델로 가상 트레이딩 | 평문 | 고객 | 전체권한 |
- 화면 흐름도
클래스 다이어그램
- BaseTrainEnv
- 실제 시장의 환경을 강화학습에서 모델링하기 위한 베이스 클래스이다. API를 이용한 투자와 csv데이터로 가상화되는 환경의 베이스가 된다.
- reset()으로 환경을 초기화 한다.
- step()으로 거래를 전달하면, 다음날의 가격(state), 현재 가치(reward), 시간흐름의 완료(done), 기타정보를 반환한다.
- APITrainEnv
- 실제 투자API가 구현되는 클래스이다.
- CsvTrainEnv
- csv 데이터를 이용해 투자 환경이 구현되는 클래스이다.
- CsvTrainSet
- 투자 환경에 필요한 주가 데이터를 종합한 클래스이다.
- currency : 기준 통화
- exchange_rate : 기준 통화와 다른 통화의 환율
- object_price : 거래 대상의 가격데이터
- other_object_price : 거래 대상이외의 참고할 대상의 가격데이터
- PPOTrainModel & DQNTrainModel
- trainEnv: 사용한 투자환경 클래스이다.
- agent: 전략별 채택 가중치를 계산할 수 있는 오브젝트이다.
- tradeStrategies: 트레이딩에서 사용할 전략 알고리즘의 배열이다.
- BaseTradeStrategy
- 트레이딩에 사용할 수 있는 전략알고리즘을 추상화한 클래스이다.
- getInvest의 출력값은 +(매수), -(매도)로 나타낸다.
CSV데이터 포맷
- 최상단 줄에 해당하는 컬럼명 표기.
- 광물시장 가격 데이터
- 각 광물별, 거래소, 기준통화별로 파일 관리
- 파일내에서 날짜별로 시가, 종가, 고가, 저가, 거래량의 데이터를 가지고 있을 것
- 예시
- 환율 데이터
- 각 기준통화별로 파일 관리
- 컬럼에 변환할 대상통화를 표기
- 날짜별로 통화량 표기
결과 및 평가
완료 작품의 소개
대표기능 사진
실행
사용가능한 기능들
- 모델 생성
- 강화학습 방식 설정
- 베이스 트레이딩 전략 설정
- 종목 설정
- 새로운 모델 생성
- 모델 폴더 지정
- 현재 학습된 모델이 저장될 폴더를 지정
- 모델 로딩
- 학습 및 트레이딩시 자동으로 지정된 폴더에서 모델을 로드
- 기존 모델에 대한 추가학습 옵션으로 새로운 학습, 기존모델에 대한 학습을 선택가능
- 모델 학습
- 불러오거나 생성한 모델을 학습함
- 매 에피소드마다 학습된 모델을 저장.
- 가상 트레이딩
- 학습한 모델을 훈련데이터와 분리한 데이터에서도 학습이 잘 되는지 확인할 수 있음.
- 학습/결과 그래프 확인
- 학습하거나 가상트레이딩을 진행한 그래프를 보여줌
- 학습 시에는 에피소드마다, 트레이딩시 마지막 에피소드의 포트폴리오 그래프표시.
- 그래프 데이터 자동 저장
- 모델 생성
학습예시
- 위의 화면에 전략, 종목, 사용할 지표를 선택해야 한다. 학습할 에피소드 수, 추가학습이라면 체크박스를 선택한다. 최종적으로 모델 학습 시작을 눌러서 학습시작이라는 메시지를 확인할 수 있다.
- 위와 같이 학습이 진행중일 때에 각각의 에피소드마다의 결과값이 보여지는 것을 확인할 수 있다.
- 또한 학습 진행중에 그래프를 확인하면 아래와 같은 화면을 확인할 수 있다. 아래와 같은 그래프는 학습 에피소드마다 마지막 포트폴리오 가치가 어떠했는지를 확인할 수 있다. 이로써 모델의 학습이 성공적으로 되고 있는 것인지 추측해볼 수 있다.
- 이러한 그래프 보기 버튼을 누를 때 프로그램을 실행시킨 폴더에 graph.csv파일이 생성되고, 아래와 같은 그래프 데이터를 저장할 수 있다.
가상트레이딩 예시
- 위와 같이 학습시 선택했던 종목, 지표와 강화학습 방법을 똑같이 선택한다.
- 만일 이전과 다르게 선택할 시 모델 트레이딩 과정중에 오류가 발생할 수 있다.
- 학습에 필요한 모델이 있는 폴더를 선택한다. 만일 선택하지 않고 트레이딩을 진행하거나 모델파일이 들어있지 않는 폴더를 선택하면, 아래와 같은 오류가 나타나면서 실행이 되지 않는다.
- 이 때의 에피소드 수는 여러 번으로 돌림으로써 학습과 유사하게 진행할 수 있으나, 최종적으로 얻는 그래프는 마지막 에피소드에서 테스트 데이터를 기반으로 진행한 트레이딩이기 때문에, 다수의 가상 트레이딩을 하는 것은 큰 의미가 있는 것은 아니다. 그러므로 에피소드 수는 1로 고정된다.
- 테스트가 완료되면 위와 같은 화면으로 바뀐다. 마지막 테스트 에피소드의 마지막 틱에서의 포트폴리오 가치가 얼마였는지를 나타낸다.
- 위의 그래프에서 초록색 점이 해당 틱에서 매수를 했음을 나타낸다. ma알고리즘에 기반해서 에어전트가 구매를 선택했고 이에 따른 수수료에 의해서 가치가 조금 감소한 것을 확인할 수 있다.
- 위의 그래프에서는 나타나지 않았지만 에어전트가 매도를 시도하게 되면 해당 점에서 붉은 점으로 표시가 된다.
그래프 데이터 자동 저장
- 위의 그래프를 조회하게 되면 프로그램에서 자동으로 그래프 데이터를 저장하는 것을 확인할 수 있다.
완료작품의 평가
평가항목 | 평가방법 | 적용기준 | 개발 목표치 | 비중(%) |
1. 선정한 요인들이 충분히 근거가 있는가? | 해당 요인에 대한 논문이나 학술지가 있는지 확인 | Reference가 불분명하거나 없는 요인의 수 | 0개 | 20 |
2. 요인들을 실험할 수 있는 프로토타입 강화학습 모델을 구현하였는가? | 해당 요인들을 환경에 넣어보고 테스트 해본다. | 환경, 액션, 상태, 리워드 등을 넣었을 때 동작 | 정상 동작 | 20 |
3. 다른 Trading Bot들과의 성능을 비교`분석하였는가? | 다른 Bot들과 모의투자를 진행하여 일정 시간 대비 수익률을 비교`분석한다. | Bot들의 수익률 등수 | 1위 | 20 |
4. 요인들에 대한 연관성을 비교분석하였는가? | 요인들을 테스트해보고 각 요인들과 수익률간의 상관관계와 각 요인들 간의 상관관계를 분석 | 고려한 관계성이 있는 요인의 수 | 5개 이상 | 20 |
5. 모의투자 상황에서 자동으로 Trading이 가능한가? | 모의투자 상황에서 Program을 실행시키고 자동으로 Trading이 되는지 확인함 | 거래 기록 및 수익률 기록 | 정상 동작 | 20 |
향후계획
가. 어려웠던 내용들
- 강화학습에 대한 이해
- 강화학습에서 비교적 최신 기술이었던 PPO를 구현한 점
- PPO에 대한 자료가 많이 없었던 점
- 주식시장이나 광물시장에서 가격에 연관이 있는 요인들 모듈화
나. 차후 구현할 내용
- PPO, DQN과는 다른 강화학습 방식 적용 및 실험
- 실제 트레이딩이 가능한 API를 연결함
- 주식시장과 코인시장에도 적용함
- 알고리즘적 트레이딩 전략을 다수 추가