"망고와바나나조"의 두 판 사이의 차이
cdc wiki
잔글 (→상세설계 내용) |
잔글 (→관련 기술의 현황 및 분석(State of art)) |
||
(같은 사용자의 중간 판 10개는 보이지 않습니다) | |||
48번째 줄: | 48번째 줄: | ||
====관련 기술의 현황 및 분석(State of art)==== | ====관련 기술의 현황 및 분석(State of art)==== | ||
*전 세계적인 기술현황 | *전 세계적인 기술현황 | ||
− | + | *목표시장 | |
+ | :*가상화폐와 현실화폐를 환전해주는 곳을 가상화폐 거래소라고 한다. 이런 거래소는 국내외에 다수 존재한다. 그 중에서도 이용자가 많은 거래소를 몇 군데 골라서 가상화폐의 시장성을 알아보려 한다. | ||
+ | |||
+ | *목표시장 현황 | ||
+ | :*원화로 거래되는 가상화폐 거래규모가 상대적으로 크다. 비트코인으로 거래되는 금액이 2017년 12월 17일 기준으로 약 67억달러, 달러화로 거래되는 가상화폐가 약 59억달러, 원화로 거래되는 가상화폐거래는 약 36억달러에 이른다. 국내에서 가상화폐 거래규모가 굉장히 크므로 가상화폐 자동거래를 이용할 잠재적 사용자가 상당수 존재한다는 것을 나타낸다. | ||
+ | :*우리나라 가상화폐 거래 중에서 비트코인 거래가 차지하는 비중이 가장 낮다. 전 세계 가상화폐 거래금액에서 비트코인이 차지하는 비중은 63%이나 국내 가상화폐 시장에서 비트코인 거래 비중은 국내 가상화폐 거래금액의 32.7%에 불과하다. 국내 가상화폐 시장은 다양한 가상화폐에 투자하는 편이다. 다소 이름이 알려지지 않은 가상화폐에 투자할 의도가 있다고 할 수 있지만 현실적으로 한 사람이 모든 코인을 살펴보는 것은 불가능하다. 다소 도전적인 시도를 하는 사람들이 있다는 것과, 다양한 가상화폐를 거래한다는 점에서 자동거래 프로그램을 만든다면 사용할 사람이 충분히 있을 것으로 예상한다. | ||
+ | |||
+ | *기술 로드맵 | ||
+ | :* Buy Low Sell High (저점매수, 고점매도) 기술: 가상화폐가 저렴할 때 구입해서 고가일 때 판매하는 기술. 그러나 현재 가격이 저점인지, 고점인지 확실히 알 수 없다는 단점이 있다. 그래서 기존의 축적된 매매 데이터를 기반으로 딥러닝 등을 이용해서 예측하는 방법을 사용한다. 대부분의 자동거래는 이 방법을 사용한다. | ||
+ | :* Arbitrage(차익매매) 기술: 공통된 가상화폐에 대해 두 시장이 서로 다른 가격이 발생한 경우, 저렴한 가격의 시장에서 매매하여 비싼 가격의 시장에서 팔아 이익을 보는 것이다. 사람이 직접 하기는 힘들지만 자동거래라면 가능하다. | ||
+ | |||
*특허조사 및 특허 전략 분석 | *특허조사 및 특허 전략 분석 | ||
− | |||
* 특허조사: | * 특허조사: | ||
:* (공개)자동설정 주식거래 시스템 | :* (공개)자동설정 주식거래 시스템 | ||
66번째 줄: | 75번째 줄: | ||
: 가상화폐 자동거래에 관련된 특허는 많지 않다. 대체로 거래소에 관련된 특허이다. (예시: 당사자간 블록체인을 갖는 디지털 가상화폐의 거래시스템, 가상화폐거래를 이용한 결제 시스템 등) 현재 자동거래를 중심으로 하는 특허는 주식 관련 자동거래가 많아서 주식 쪽을 살펴보았다. 그러나 자동거래 프로그램에 대한 특허(예시: 오픈 API용 리얼타임 자동주식거래방법 및 이를 실행시키기 위한 컴퓨터프로그램)는 대체로 거절되었고, 자동거래 프로그램을 저장매체에 이식하거나 사용자에게 자동알람을 보내는 등 프로그램 외적인 추가 기능이 있는 특허가 많았다. | : 가상화폐 자동거래에 관련된 특허는 많지 않다. 대체로 거래소에 관련된 특허이다. (예시: 당사자간 블록체인을 갖는 디지털 가상화폐의 거래시스템, 가상화폐거래를 이용한 결제 시스템 등) 현재 자동거래를 중심으로 하는 특허는 주식 관련 자동거래가 많아서 주식 쪽을 살펴보았다. 그러나 자동거래 프로그램에 대한 특허(예시: 오픈 API용 리얼타임 자동주식거래방법 및 이를 실행시키기 위한 컴퓨터프로그램)는 대체로 거절되었고, 자동거래 프로그램을 저장매체에 이식하거나 사용자에게 자동알람을 보내는 등 프로그램 외적인 추가 기능이 있는 특허가 많았다. | ||
: 팀에서는 자동거래시 카카오톡으로 사용자에게 알람을 주거나, 혹은 웹페이지에서 바로 실행가능한 자동거래 등, 편의성으로 방향을 잡을 예정이다. | : 팀에서는 자동거래시 카카오톡으로 사용자에게 알람을 주거나, 혹은 웹페이지에서 바로 실행가능한 자동거래 등, 편의성으로 방향을 잡을 예정이다. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
====시장상황에 대한 분석==== | ====시장상황에 대한 분석==== | ||
131번째 줄: | 131번째 줄: | ||
===개념설계안=== | ===개념설계안=== | ||
− | |||
− | |||
===이론적 계산 및 시뮬레이션=== | ===이론적 계산 및 시뮬레이션=== | ||
149번째 줄: | 147번째 줄: | ||
*거래 관련 함수 | *거래 관련 함수 | ||
− | + | *algo_trade(): 가상거래 알고리즘의 총 동작 함수. | |
:bithistory = pd.read_csv("./get_bitcoin_data_day.csv", parse_dates=True, index_col='time'): 비트코인에서 데이터를 읽어오는 코드. 이후 이 데이터로 정리하여 그래프로 그린다. | :bithistory = pd.read_csv("./get_bitcoin_data_day.csv", parse_dates=True, index_col='time'): 비트코인에서 데이터를 읽어오는 코드. 이후 이 데이터로 정리하여 그래프로 그린다. | ||
160번째 줄: | 158번째 줄: | ||
:알고리즘에서 어느 시점부터 어느 시점의 데이터를 이용해 테스트 할 것인지 설정하는 코드이다. | :알고리즘에서 어느 시점부터 어느 시점의 데이터를 이용해 테스트 할 것인지 설정하는 코드이다. | ||
− | + | *initialize(context): 실제 이동선 평균 알고리즘을 테스트하기 위한 함수. 주요 기능 설명의 2번을 담당하고 있다. | |
− | + | * handle_data(context, data): 거래 알고리즘을 실행하는 함수. 아래 거래 알고리즘이 포함되어있다. 아래의 거래 알고리즘은 골든크로스/데드크로스 시점에서 매수/매도를 하도록 프로그래밍 되어있다. | |
if ma5 > ma20 and context.hold==False: | if ma5 > ma20 and context.hold==False: | ||
order_target(context.asset, 10) | order_target(context.asset, 10) | ||
170번째 줄: | 168번째 줄: | ||
context.hold = False | context.hold = False | ||
− | + | *UI 관련 함수 | |
− | class MyWindow(QWidget): 전체적인 창을 실행하는 대함수 | + | *class MyWindow(QWidget): 전체적인 창을 실행하는 대함수 |
− | def __init__(self): 과거의 데이터를 초기화하는 함수 | + | *def __init__(self): 과거의 데이터를 초기화하는 함수 |
− | def initUI(self): UI를 처음 실행할때 작동하는 함수. | + | *def initUI(self): UI를 처음 실행할때 작동하는 함수. |
loginAction = QAction('Log In', self) | loginAction = QAction('Log In', self) | ||
loginAction.setShortcut('Ctrl+L') | loginAction.setShortcut('Ctrl+L') | ||
loginAction.setStatusTip('로그인합니다') | loginAction.setStatusTip('로그인합니다') | ||
loginAction.triggered.connect(self.loginaction) | loginAction.triggered.connect(self.loginaction) | ||
− | 로그인 관련 코드는 이상과 같다. 버튼을 누를 때, 단축키를 사용했을 때 실행하는 것이 기본이며 로그아웃도 이상과 유사하다. | + | :로그인 관련 코드는 이상과 같다. 버튼을 누를 때, 단축키를 사용했을 때 실행하는 것이 기본이며 로그아웃도 이상과 유사하다. |
− | 선형 그래프와 막대형 그래프중 원하는 쪽을 선택해서 볼 수도 있는데 그 코드도 이상의 로그인 관련 코드와 유사하다. | + | :선형 그래프와 막대형 그래프중 원하는 쪽을 선택해서 볼 수도 있는데 그 코드도 이상의 로그인 관련 코드와 유사하다. |
189번째 줄: | 187번째 줄: | ||
grid.addWidget(graphui,0,0) | grid.addWidget(graphui,0,0) | ||
self.show() | self.show() | ||
− | 내부배치를 위해 그리드를 추가하고, 그 안에 위젯을 넣는다. 이 프로그램에서 사용하는 위젯은 그래프 출력 위젯이다. | + | :내부배치를 위해 그리드를 추가하고, 그 안에 위젯을 넣는다. 이 프로그램에서 사용하는 위젯은 그래프 출력 위젯이다. |
+ | |||
+ | *def pushButtonClicked(self): 버튼을 클릭하면 그래프를 출력한다. | ||
+ | :df= pd.read_csv('./get_bitcoin_data_1hour.csv', index_col=0) : 1시간 단위의 데이터를 불러오는 코드이다. 이렇게 불러온 데이터를 그래프로 출력하기 좋게 정리하는 기능도 함수에 포함되어있다. | ||
+ | *def loginaction(self): 로그인 관련 함수, 이하의 로그아웃 관련 함수도 비슷하게 되어있다. | ||
+ | |||
+ | 3.소프트웨어 구조 설명 | ||
+ | |||
+ | *동작구조 | ||
+ | :*외부 : | ||
+ | :가격 그래프 : 거래대상이 되는 가상화폐 5종에 대한 Pid, Ask 등 가격 정보에 관한 그래프 | ||
+ | :거래량 그래프 : 거래대상이 되는 가상화폐 5종의 시간에 따른 거래량을 보여주는 그래프 | ||
+ | :컨트롤 인터페이스 : 유저의 컨트롤 인터페이스 | ||
+ | :*내부: | ||
+ | :네트워크 : 거래소(korbit)을 통한 데이터 요청 등 | ||
+ | :거래 알고리즘 : 레리 윌리엄스의 ‘변동성 돌파전략’에 기반한 가상화폐 단기 투자 알고리즘 | ||
− | + | *사용자 관점의 동작구조 | |
− | + | :사용자 -> 컨트롤 인터페이스 -> 네트워크 -> 거래 기록 -> 그래프 정보 -> 사용자의 흐름으로 프로그램이 동작 | |
− | |||
+ | *자동화 관점의 동작구조 | ||
+ | : 사용자<->컨트롤 인터페이스<->[거래기록->거래 알고리즘-> 네트워크 -> 거래기록 (싸이클)]의 구조로 프로그램이 동작 | ||
− | * | + | *네트워크 |
− | : | + | :거래소(korbit) RestAPI -> 인증, 거래 정보, 지갑 상태, 주문 등의 모듈 구현 |
− | + | :인증 : 유저의 개인 정보를 입력하여 거래소에 인증후 거래가 가능해 진다. | |
− | : | + | :거래 정보 : |
− | + | :::Ticker() _ 원하는 종목, 원하는 시간의 거래 정보를 요청한다. | |
− | + | :::Constant() _ korbit에서 거래가 이루어지는 모든 가상화폐의 실시간 거래 정보를 요청한다. | |
+ | :지갑 상태 : 유저의 현 화폐 보유현황을 요청한다. | ||
+ | :주문 : 매도, 매수, 주문 취소등의 주문을 요청한다. | ||
− | + | :요청하여 수신한 거래관련 데이터는 csv 파일로 저장한후 거래 알고리즘을 적용하여 주문등으로 이어진다. | |
− | : | ||
− | |||
− | |||
− | |||
==결과 및 평가== | ==결과 및 평가== | ||
222번째 줄: | 234번째 줄: | ||
====포스터==== | ====포스터==== | ||
− | [[파일: | + | [[파일:poster2.jpg]] |
===완료작품의 평가=== | ===완료작품의 평가=== | ||
− | + | [[파일:Evaluation.png]] | |
===향후계획=== | ===향후계획=== | ||
− | + | * 볼린저 밴드 거래 알고리즘을 구현하여 사용자에게 다양한 거래 알고리즘을 선택할 수 있게 한다. | |
+ | * 가상화폐의 시장이 상승장, 평행장, 하락장인지 구분할 수 있도록 거래장 평가 기능을 추가한다. | ||
+ | * 거래량을 기반으로 한 거래 알고리즘을 추가한다. |
2018년 12월 26일 (수) 16:15 기준 최신판
프로젝트 개요
기술개발 과제
국문 : 가상 화폐 자동 매매 프로그램
영문 : Trading Cryptocurrency using Automated Program
과제 팀명
망고와 바나나
지도교수
안상현 교수님
개발기간
2018년 9월 ~ 2018년 12월 (총 4개월)
구성원 소개
서울시립대학교 컴퓨터공학부·과 2011920030 송웅섭
서울시립대학교 컴퓨터공학부·과 2013866029 이건재
서울시립대학교 컴퓨터공학부·과 2014920013 류미경
서울시립대학교 컴퓨터공학부·과 2015920066 유문박
서론
개발 과제의 개요
개발 과제 요약
- 가상 화폐 거래소 Open API를 이용해 사용자가 직접 주문을 하지 않아도 사용자가 지정한 조건에 맞는 가상 화폐 거래를 실행한다.
- 프로그램은 실시간으로 사용자에게 지정된 조건을 만족한 가상 화폐 종목을 알려 준다.
- 프로그램은 사용자에게 원하는 종목의 거래량 및 거래 금액 추이를 그래프로 알려 준다.
- 사용자는 자동 주식 거래의 규칙을 지정하여 프로그램이 규칙에 맞는 지점에 매매를 한다.
개발 과제의 배경
- 가상 화폐의 관심이 증가하여 많은 자본이 가상 화폐 거래에 집중되어 있다.
- 주식 매매 전략을 가상 화폐 거래에 적용하여 수익을 창출한다.
- 과거 증권사 혹은 펀드 매니저를 통해 매매 업무를 진행하였으나 그로 인해 거래 규칙이나 거래 내역을 실시간으로 확인하기 어려웠다.
- 주식 거래자는 뉴스, 가상 화폐 개발부, 거래소 등 다양한 통로로 모아진 정보를 일관적이고 통합적으로 처리할 수 없었다.
개발 과제의 목표 및 내용
- 사용자에게 일정 조건을 만족하는 종목을 알려줌으로써 사용자의 업무 효율을 높인다.
- 사용자가 매매를 진행함에 있어 부정확한 종목 정보로 인해 혼란스럽지 않게 거래 가격과 거래량과 같은 종목의 정보를 알려준다.
- 사용자가 프로그램을 직접 조작하지 않고도 사용자가 원하는 규칙에 맞는 매매를 자동으로 진행한다.
- 자동 매매 프로그램을 사용하여 잔고가 증가하는 것을 궁극적 목표로 한다.
관련 기술의 현황
관련 기술의 현황 및 분석(State of art)
- 전 세계적인 기술현황
- 목표시장
- 가상화폐와 현실화폐를 환전해주는 곳을 가상화폐 거래소라고 한다. 이런 거래소는 국내외에 다수 존재한다. 그 중에서도 이용자가 많은 거래소를 몇 군데 골라서 가상화폐의 시장성을 알아보려 한다.
- 목표시장 현황
- 원화로 거래되는 가상화폐 거래규모가 상대적으로 크다. 비트코인으로 거래되는 금액이 2017년 12월 17일 기준으로 약 67억달러, 달러화로 거래되는 가상화폐가 약 59억달러, 원화로 거래되는 가상화폐거래는 약 36억달러에 이른다. 국내에서 가상화폐 거래규모가 굉장히 크므로 가상화폐 자동거래를 이용할 잠재적 사용자가 상당수 존재한다는 것을 나타낸다.
- 우리나라 가상화폐 거래 중에서 비트코인 거래가 차지하는 비중이 가장 낮다. 전 세계 가상화폐 거래금액에서 비트코인이 차지하는 비중은 63%이나 국내 가상화폐 시장에서 비트코인 거래 비중은 국내 가상화폐 거래금액의 32.7%에 불과하다. 국내 가상화폐 시장은 다양한 가상화폐에 투자하는 편이다. 다소 이름이 알려지지 않은 가상화폐에 투자할 의도가 있다고 할 수 있지만 현실적으로 한 사람이 모든 코인을 살펴보는 것은 불가능하다. 다소 도전적인 시도를 하는 사람들이 있다는 것과, 다양한 가상화폐를 거래한다는 점에서 자동거래 프로그램을 만든다면 사용할 사람이 충분히 있을 것으로 예상한다.
- 기술 로드맵
- Buy Low Sell High (저점매수, 고점매도) 기술: 가상화폐가 저렴할 때 구입해서 고가일 때 판매하는 기술. 그러나 현재 가격이 저점인지, 고점인지 확실히 알 수 없다는 단점이 있다. 그래서 기존의 축적된 매매 데이터를 기반으로 딥러닝 등을 이용해서 예측하는 방법을 사용한다. 대부분의 자동거래는 이 방법을 사용한다.
- Arbitrage(차익매매) 기술: 공통된 가상화폐에 대해 두 시장이 서로 다른 가격이 발생한 경우, 저렴한 가격의 시장에서 매매하여 비싼 가격의 시장에서 팔아 이익을 보는 것이다. 사람이 직접 하기는 힘들지만 자동거래라면 가능하다.
- 특허조사 및 특허 전략 분석
- 특허조사:
- (공개)자동설정 주식거래 시스템
- (거절)오픈 API용 리얼타임 자동주식거래방법 및 이를 실행시키기 위한 컴퓨터프로그램
- (등록)주식 자동 매매 시스템 및 방법, 이를 위한 프로그램을 저장한 저장매체
- 특허 전략 분석:
- 자동설정 주식거래 시스템: [회원인증처리부] [주식 정보 입력부] [데이터 저장부] [매매신호 표시부] 로 이루어져 있다.
- 자동설정 주식거래 시스템은 종목, 업종, 추세에 관계없이 일관된 매매신호 로직으로부터 주가의 움직임에 따라 매매신호를 정확하게 포착할 수 있는 주가 변동폭을 표시하고 주가 변동폭을 이용하여 주가의 움직임에 따라 신뢰도와 수익률이 높은 매매신호를 발생한다. 이 시스템은 각 주식의 이름이나 신뢰도와 관계없이 주가의 정보를 받아들여 그 정보들로 일종의 그래프 형태를 만든다. 그 그래프들을 토대로 신뢰도와 수익률이 높은 주식을 출력해 사용자에게 알리는 형식이다.
- 오픈 API용 리얼타임 자동주식거래방법 및 이를 실행시키기 위한 컴퓨터프로그램: [증권사 서버로부터 정보 수신] [실시간 검색으로 관심종목 검출] [주문조건과 잔고를 비교해서 매매주문] [매매주문을 증권사 서버로 자동전송]
- 증권사 서버로부터 받은 조건검색식을 바탕으로 수정 조건검색식을 생성하는게 특징이다. 원하는 종목을 한번 필터링하여 그 종목 내에서 전체를 한번에 매매하는 방식이다. 매번 서버로부터 조건검색식을 받아올 때 원하는 종목을 걸러내므로 사용자가 원하는 종목만 표출할 수 있다. 그러나 프로그래머라면 만들 수 있는 자동거래와 크게 다른 점이 없으므로 특허가 거절된 것으로 보인다.
- 주식 자동 매매 시스템 및 방법, 이를 위한 프로그램을 저장한 저장매체: [사용자가 원하는 거래조건, 매매조건 입력] [컴퓨터가 분석해 매매여부 결정, 채결] [위와 같은 시스템, 프로그램을 저장한 저장매체]
- 웹페이지나 exe등의 실행파일이 아닌 usb 형태로 자동매매 프로그램을 저장한 저장매체대 대한 특허이다. 프로그램에 대한 보안성은 올라갈 것으로 보이나 결국 거래소의 보안성을 올리지는 못한다는 점, 저장매체를 잃어버릴 경우 프로그램에 접근하지 못한다는 점, 저장매체를 주고받으려면 오프라인상에서 판매자와 소비자가 만나야 한다는 점에서 여러 가지 단점이 보인다.
- 가상화폐 자동거래에 관련된 특허는 많지 않다. 대체로 거래소에 관련된 특허이다. (예시: 당사자간 블록체인을 갖는 디지털 가상화폐의 거래시스템, 가상화폐거래를 이용한 결제 시스템 등) 현재 자동거래를 중심으로 하는 특허는 주식 관련 자동거래가 많아서 주식 쪽을 살펴보았다. 그러나 자동거래 프로그램에 대한 특허(예시: 오픈 API용 리얼타임 자동주식거래방법 및 이를 실행시키기 위한 컴퓨터프로그램)는 대체로 거절되었고, 자동거래 프로그램을 저장매체에 이식하거나 사용자에게 자동알람을 보내는 등 프로그램 외적인 추가 기능이 있는 특허가 많았다.
- 팀에서는 자동거래시 카카오톡으로 사용자에게 알람을 주거나, 혹은 웹페이지에서 바로 실행가능한 자동거래 등, 편의성으로 방향을 잡을 예정이다.
시장상황에 대한 분석
- 경쟁제품 조사 비교
- 크립토 에셋 로보 어드바이저 ‘헤이비트’
- 전설적인 트레이더 래리 윌리암스(Larry R.Williams)의 변동성 돌파전략을 투자 전략의 기본으로 시스템 트레이딩을 통해 암호회폐의 자동매매를 수행하는 어플리케이션
- 중국 가상 화폐 거래 플랫폼 UPBTC
- 배경 및 현황
- All digital currency exchanges volume ranking을 따르면 중국에서 가장 활성화된 가상 화폐 거래 플랫폼은 Binance 와 Huobi이다. 그런데 Binance는 가상화폐 간 거래만 가능하고 Huobi는 가상화폐 간 거래가뿐만 아니라 일반 통화와 가상 화폐 간 거래도 가능하다.
- 참조 웹페이지 주소 : https://www.coinhills.com/market/exchange/
- 마케팅 전략 제시
- 네이버 포스트를 통한 지속적 포스팅
- 가상 화폐 자동 거래 프로그램 및 가상 화폐 관련 네이버 포스트에 지속적인 게시글 작성을 통해 가상 화폐에 관심있는 잠재적 사용자들에게 노출시킨다.
- 참조 웹페이지 주소 :
- https://m.post.naver.com/viewer/postView.nhn?volumeNo=13485077&memberNo=40921089&vType=VERTICAL
- 카카오 벤처스, KB인베스트먼트, DSC인베스트먼트등 벤처캐피탈의 투자로 인한 간접적 홍보효과
- 카카오 벤쳐스 혹은 킥스타터과 같은 펀딩 단체를 통해 개발 자금 확보 및 해당 플랫폼을 이용한 홍보 효과를 기대한다.
- 참조 웹페이지 주소 :
- https://blog.naver.com/denpojan/221362142528
- 각종 홍보 이벤트를 통해 사용자를 모집한다.
- 사용자이 친구가 추천하면 일정한 수수료를 면제한다.
- 사용자이 친구가 추천하면 친구의 당일 거래 수수료 몇%(예.10%) 주기 한다. 또한 사용자의 친구이 친구가 추천하면 사용자 도 당일 거래 수수료 몇%(예.5%) 주기 한다.
개발과제의 기대효과
기술적 기대효과
- 기존의 주식매매 이론을 기초한 알고리즘을 암호화폐 매매로 최적화시킨다. 기존 주식 매매 이론과 더불어 가상 화폐의 특성인 높은 변동성을 극복하는 전략 및 알고리즘이 추가된다.
- 기존 시장의 자동매매 프로그램은 각종 버그를 포함하여 소비자의 불신을 사고 있다. 따라서 가상 화폐 자동 거래 프로그램은 버그를 최소화하여 사용자가 원하는 기능을 충실히 실행되는 프로그램 구현한다.
경제적, 사회적 기대 및 파급효과
- 안정적인 전략 운용과 투자자 보호장치를 통해 가상화폐로의 투자 위험을 낮춤
- 24시간, 365일 동안 쉬지 않는 투자 프로그램으로 투자자의 암호 자산을 지키며, 거래를 성공시키는 동작을 통해 투자자의 수익뿐 아니라 사용자의 삶의 질 향상에도 기여한다.
기술개발 일정 및 추진체계
개발 일정
구성원 및 추진체계
- 송웅섭, 유문박 – 프로그램의 전체적인 Concept 및 UI Design을 총괄한다. 또한 사용자가 직접적으로 프로그램과 사용 시 기능적인 불편함을 느끼지 않으면서 심미적인 만족감을 느낄 수 있도록 설계한다.
- 이건재 – 가상 화폐 거래소 Open API를 통해 실시간으로 종목 데이터를 받아오고 사용자의주문 거래 정보를 거래소에 전송하는 부분을 담당한다.
- 류미경 – 가상 화폐 투자 알고리즘을 구현하며 이후 테스팅을 통해 알고리즘을 수정한다.
- 송웅섭 – 프로젝트의 아이디어를 보다 쉽게 구현하기 위해서 사용할 수 있는 Open Source 및 API를 알아보고 구현된 프로젝트의 테스팅을 전담한다.
설계
설계사양
개발 환경
- 파이썬 3.6
- 수학 및 그래프 라이브러리 - Matplotlib, Numpy
- 네트워크 라이브러리 – Urllib
- UI 디자인 프로그램 – PyQt
- 테스팅 라이브러리 – Zipline
개념설계안
이론적 계산 및 시뮬레이션
- <초기 프로그램 화면. 가상화폐에 대한 날짜별 가격 그래프를 그리는 것은 완성했다.>
상세설계 내용
1.소프트웨어 구조
- 주요 기능 설명
- - 현재 관심있는 코인의 가격, 거래량 변동 그래프
- - 과거 데이터를 사용해서 프로그램에 설정되어있는 거래 알고리즘을 실행해보고, 그에 따른 수익을 나타내는 그래프
- - 로그인 기능. 저장되어있는 회원 정보로 로그인 가능.
- - 자동거래 기능. 프로그램에 설정되어있는 거래 알고리즘을 이용해 네트워크로 거래. 로그인한 회원 정보를 토대로 거래를 진행한다.
2.주요 함수 설명
- 거래 관련 함수
- algo_trade(): 가상거래 알고리즘의 총 동작 함수.
- bithistory = pd.read_csv("./get_bitcoin_data_day.csv", parse_dates=True, index_col='time'): 비트코인에서 데이터를 읽어오는 코드. 이후 이 데이터로 정리하여 그래프로 그린다.
start = new_data.index[0] end = new_data.index[-1] print("start 의 값 : : ",start) print("start 의 타입 : ", type(start)) print("end 의 값 : : ",end) print("end 의 타입 : ", type(end))
- 알고리즘에서 어느 시점부터 어느 시점의 데이터를 이용해 테스트 할 것인지 설정하는 코드이다.
- initialize(context): 실제 이동선 평균 알고리즘을 테스트하기 위한 함수. 주요 기능 설명의 2번을 담당하고 있다.
- handle_data(context, data): 거래 알고리즘을 실행하는 함수. 아래 거래 알고리즘이 포함되어있다. 아래의 거래 알고리즘은 골든크로스/데드크로스 시점에서 매수/매도를 하도록 프로그래밍 되어있다.
if ma5 > ma20 and context.hold==False: order_target(context.asset, 10) context.hold = True elif ma5 < ma20 and context.hold == True: order_target(context.asset, -10) context.hold = False
- UI 관련 함수
- class MyWindow(QWidget): 전체적인 창을 실행하는 대함수
- def __init__(self): 과거의 데이터를 초기화하는 함수
- def initUI(self): UI를 처음 실행할때 작동하는 함수.
loginAction = QAction('Log In', self) loginAction.setShortcut('Ctrl+L') loginAction.setStatusTip('로그인합니다') loginAction.triggered.connect(self.loginaction)
- 로그인 관련 코드는 이상과 같다. 버튼을 누를 때, 단축키를 사용했을 때 실행하는 것이 기본이며 로그아웃도 이상과 유사하다.
- 선형 그래프와 막대형 그래프중 원하는 쪽을 선택해서 볼 수도 있는데 그 코드도 이상의 로그인 관련 코드와 유사하다.
grid=QGridLayout() self.setLayout(grid)
graphui=graphsetupui.MyWindow(parent=self) grid.addWidget(graphui,0,0) self.show()
- 내부배치를 위해 그리드를 추가하고, 그 안에 위젯을 넣는다. 이 프로그램에서 사용하는 위젯은 그래프 출력 위젯이다.
- def pushButtonClicked(self): 버튼을 클릭하면 그래프를 출력한다.
- df= pd.read_csv('./get_bitcoin_data_1hour.csv', index_col=0) : 1시간 단위의 데이터를 불러오는 코드이다. 이렇게 불러온 데이터를 그래프로 출력하기 좋게 정리하는 기능도 함수에 포함되어있다.
- def loginaction(self): 로그인 관련 함수, 이하의 로그아웃 관련 함수도 비슷하게 되어있다.
3.소프트웨어 구조 설명
- 동작구조
- 외부 :
- 가격 그래프 : 거래대상이 되는 가상화폐 5종에 대한 Pid, Ask 등 가격 정보에 관한 그래프
- 거래량 그래프 : 거래대상이 되는 가상화폐 5종의 시간에 따른 거래량을 보여주는 그래프
- 컨트롤 인터페이스 : 유저의 컨트롤 인터페이스
- 내부:
- 네트워크 : 거래소(korbit)을 통한 데이터 요청 등
- 거래 알고리즘 : 레리 윌리엄스의 ‘변동성 돌파전략’에 기반한 가상화폐 단기 투자 알고리즘
- 사용자 관점의 동작구조
- 사용자 -> 컨트롤 인터페이스 -> 네트워크 -> 거래 기록 -> 그래프 정보 -> 사용자의 흐름으로 프로그램이 동작
- 자동화 관점의 동작구조
- 사용자<->컨트롤 인터페이스<->[거래기록->거래 알고리즘-> 네트워크 -> 거래기록 (싸이클)]의 구조로 프로그램이 동작
- 네트워크
- 거래소(korbit) RestAPI -> 인증, 거래 정보, 지갑 상태, 주문 등의 모듈 구현
- 인증 : 유저의 개인 정보를 입력하여 거래소에 인증후 거래가 가능해 진다.
- 거래 정보 :
- Ticker() _ 원하는 종목, 원하는 시간의 거래 정보를 요청한다.
- Constant() _ korbit에서 거래가 이루어지는 모든 가상화폐의 실시간 거래 정보를 요청한다.
- 지갑 상태 : 유저의 현 화폐 보유현황을 요청한다.
- 주문 : 매도, 매수, 주문 취소등의 주문을 요청한다.
- 요청하여 수신한 거래관련 데이터는 csv 파일로 저장한후 거래 알고리즘을 적용하여 주문등으로 이어진다.
결과 및 평가
완료 작품의 소개
프로토타입 사진 혹은 작동 장면
- Login UI
- Transaction Interface
- Chart Interface
포스터
완료작품의 평가
향후계획
- 볼린저 밴드 거래 알고리즘을 구현하여 사용자에게 다양한 거래 알고리즘을 선택할 수 있게 한다.
- 가상화폐의 시장이 상승장, 평행장, 하락장인지 구분할 수 있도록 거래장 평가 기능을 추가한다.
- 거래량을 기반으로 한 거래 알고리즘을 추가한다.