"망고와바나나조"의 두 판 사이의 차이

cdc wiki
이동: 둘러보기, 검색
잔글 (이론적 계산 및 시뮬레이션)
잔글 (상세설계 내용)
139번째 줄: 139번째 줄:
  
 
===상세설계 내용===
 
===상세설계 내용===
 +
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): 로그인 관련 함수, 이하의 로그아웃 관련 함수도 비슷하게 되어있다.
 +
 +
 
* Usecase Diagram
 
* Usecase Diagram
 
: [[파일:UsecaseDiagram.png]]
 
: [[파일:UsecaseDiagram.png]]

2018년 12월 26일 (수) 15:34 판

프로젝트 개요

기술개발 과제

국문 : 가상 화폐 자동 매매 프로그램

영문 : Trading Cryptocurrency using Automated Program

과제 팀명

망고와 바나나

지도교수

안상현 교수님

개발기간

2018년 9월 ~ 2018년 12월 (총 4개월)

구성원 소개

서울시립대학교 컴퓨터공학부·과 2011920030 송웅섭

서울시립대학교 컴퓨터공학부·과 2013866029 이건재

서울시립대학교 컴퓨터공학부·과 2014920013 류미경

서울시립대학교 컴퓨터공학부·과 2015920066 유문박

서론

개발 과제의 개요

개발 과제 요약

  • 가상 화폐 거래소 Open API를 이용해 사용자가 직접 주문을 하지 않아도 사용자가 지정한 조건에 맞는 가상 화폐 거래를 실행한다.
  • 프로그램은 실시간으로 사용자에게 지정된 조건을 만족한 가상 화폐 종목을 알려 준다.
  • 프로그램은 사용자에게 원하는 종목의 거래량 및 거래 금액 추이를 그래프로 알려 준다.
  • 사용자는 자동 주식 거래의 규칙을 지정하여 프로그램이 규칙에 맞는 지점에 매매를 한다.

개발 과제의 배경

  • 가상 화폐의 관심이 증가하여 많은 자본이 가상 화폐 거래에 집중되어 있다.
  • 주식 매매 전략을 가상 화폐 거래에 적용하여 수익을 창출한다.
  • 과거 증권사 혹은 펀드 매니저를 통해 매매 업무를 진행하였으나 그로 인해 거래 규칙이나 거래 내역을 실시간으로 확인하기 어려웠다.
  • 주식 거래자는 뉴스, 가상 화폐 개발부, 거래소 등 다양한 통로로 모아진 정보를 일관적이고 통합적으로 처리할 수 없었다.

개발 과제의 목표 및 내용

  • 사용자에게 일정 조건을 만족하는 종목을 알려줌으로써 사용자의 업무 효율을 높인다.
  • 사용자가 매매를 진행함에 있어 부정확한 종목 정보로 인해 혼란스럽지 않게 거래 가격과 거래량과 같은 종목의 정보를 알려준다.
  • 사용자가 프로그램을 직접 조작하지 않고도 사용자가 원하는 규칙에 맞는 매매를 자동으로 진행한다.
  • 자동 매매 프로그램을 사용하여 잔고가 증가하는 것을 궁극적 목표로 한다.

관련 기술의 현황

관련 기술의 현황 및 분석(State of art)

  • 전 세계적인 기술현황

내용

  • 특허조사 및 특허 전략 분석
  • 특허조사:
  • (공개)자동설정 주식거래 시스템
  • (거절)오픈 API용 리얼타임 자동주식거래방법 및 이를 실행시키기 위한 컴퓨터프로그램
  • (등록)주식 자동 매매 시스템 및 방법, 이를 위한 프로그램을 저장한 저장매체
  • 특허 전략 분석:
자동설정 주식거래 시스템: [회원인증처리부] [주식 정보 입력부] [데이터 저장부] [매매신호 표시부] 로 이루어져 있다.
자동설정 주식거래 시스템은 종목, 업종, 추세에 관계없이 일관된 매매신호 로직으로부터 주가의 움직임에 따라 매매신호를 정확하게 포착할 수 있는 주가 변동폭을 표시하고 주가 변동폭을 이용하여 주가의 움직임에 따라 신뢰도와 수익률이 높은 매매신호를 발생한다. 이 시스템은 각 주식의 이름이나 신뢰도와 관계없이 주가의 정보를 받아들여 그 정보들로 일종의 그래프 형태를 만든다. 그 그래프들을 토대로 신뢰도와 수익률이 높은 주식을 출력해 사용자에게 알리는 형식이다.
오픈 API용 리얼타임 자동주식거래방법 및 이를 실행시키기 위한 컴퓨터프로그램: [증권사 서버로부터 정보 수신] [실시간 검색으로 관심종목 검출] [주문조건과 잔고를 비교해서 매매주문] [매매주문을 증권사 서버로 자동전송]
증권사 서버로부터 받은 조건검색식을 바탕으로 수정 조건검색식을 생성하는게 특징이다. 원하는 종목을 한번 필터링하여 그 종목 내에서 전체를 한번에 매매하는 방식이다. 매번 서버로부터 조건검색식을 받아올 때 원하는 종목을 걸러내므로 사용자가 원하는 종목만 표출할 수 있다. 그러나 프로그래머라면 만들 수 있는 자동거래와 크게 다른 점이 없으므로 특허가 거절된 것으로 보인다.
주식 자동 매매 시스템 및 방법, 이를 위한 프로그램을 저장한 저장매체: [사용자가 원하는 거래조건, 매매조건 입력] [컴퓨터가 분석해 매매여부 결정, 채결] [위와 같은 시스템, 프로그램을 저장한 저장매체]
웹페이지나 exe등의 실행파일이 아닌 usb 형태로 자동매매 프로그램을 저장한 저장매체대 대한 특허이다. 프로그램에 대한 보안성은 올라갈 것으로 보이나 결국 거래소의 보안성을 올리지는 못한다는 점, 저장매체를 잃어버릴 경우 프로그램에 접근하지 못한다는 점, 저장매체를 주고받으려면 오프라인상에서 판매자와 소비자가 만나야 한다는 점에서 여러 가지 단점이 보인다.
가상화폐 자동거래에 관련된 특허는 많지 않다. 대체로 거래소에 관련된 특허이다. (예시: 당사자간 블록체인을 갖는 디지털 가상화폐의 거래시스템, 가상화폐거래를 이용한 결제 시스템 등) 현재 자동거래를 중심으로 하는 특허는 주식 관련 자동거래가 많아서 주식 쪽을 살펴보았다. 그러나 자동거래 프로그램에 대한 특허(예시: 오픈 API용 리얼타임 자동주식거래방법 및 이를 실행시키기 위한 컴퓨터프로그램)는 대체로 거절되었고, 자동거래 프로그램을 저장매체에 이식하거나 사용자에게 자동알람을 보내는 등 프로그램 외적인 추가 기능이 있는 특허가 많았다.
팀에서는 자동거래시 카카오톡으로 사용자에게 알람을 주거나, 혹은 웹페이지에서 바로 실행가능한 자동거래 등, 편의성으로 방향을 잡을 예정이다.
  • 기술 로드맵
    • Buy Low Sell High (저점매수, 고점매도) 기술: 가상화폐가 저렴할 때 구입해서 고가일 때 판매하는 기술. 그러나 현재 가격이 저점인지, 고점인지 확실히 알 수 없다는 단점이 있다. 그래서 기존의 축적된 매매 데이터를 기반으로 딥러닝 등을 이용해서 예측하는 방법을 사용한다. 대부분의 자동거래는 이 방법을 사용한다.
  • Arbitrage(차익매매) 기술: 공통된 가상화폐에 대해 두 시장이 서로 다른 가격이 발생한 경우, 저렴한 가격의 시장에서 매매하여 비싼 가격의 시장에서 팔아 이익을 보는 것이다. 사람이 직접 하기는 힘들지만 자동거래라면 가능하다.
  • [거래소 API 발급] -> [거래소 모듈 구현] -> [DB저장소] = [NodeJs, Rest 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.png

이론적 계산 및 시뮬레이션

Theoretical calculations.png

<초기 프로그램 화면. 가상화폐에 대한 날짜별 가격 그래프를 그리는 것은 완성했다.>

상세설계 내용

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): 로그인 관련 함수, 이하의 로그아웃 관련 함수도 비슷하게 되어있다.


  • Usecase Diagram
UsecaseDiagram.png
  • UI Diagram - Basic UI
BasicUI.png



- 기본적으로 회원관리, 거래 종목 설정, 거래 방식 설정, 거래소 방문을 할 수 있도록 메뉴 탭을 만들 예정다. 회원 관리는 적절한 로그인을 위한 부분, 거래 종목은 비트코인, 리플 등등 프로그램에 등록된 가상화폐를 거래할 수 있도록 한다. 거래 방식으로는 수동 및 자동 거래 방식을 설정할 수 있도록 합니다. 마지막으로 거래소 방문탭은 가상화폐거래에 필요한 정보들을 쉽게얻을 수 있도록 해당 사이트들을 링크해 둘 예정다. 왼쪽에는 여러 종목의 실시간 가격을 볼 수 있도록 표를 그릴 것이고 중앙에는 가상화폐의 거래추이를 볼 수 있도록 그래프 그릴 예정다. 실거래 내역에는 거래소에서 현재 거래 중인 금액과 수량을 보여 줄 예정이고 사용자의 거래 내역의 경우에는 사용자의 과거 실 거래 내용만 보여준다.

  • UI Diagram - Action UI
동작화면.png



- 이것은 실제 동작본이다.이전 데이터를 1시간 단위로 받아와서 가격 그래프와 거래량 그래프를 그리게 되었다.

현재는 차트 그리기 버튼을 누를 때마다 갱신이 되고 있지만 본 방식은 가장 처음 프로그램을 시작했을 때 자동으로 그리도록 할 예정이다.

결과 및 평가

완료 작품의 소개

프로토타입 사진 혹은 작동 장면

  • Login UI

LoginUI.png

  • Transaction Interface

TransactionUI.png

  • Chart Interface

ChartInterface.png

포스터

Poster.jpg

완료작품의 평가

내용

향후계획

내용