평상시에 관심있어 하는 코인들이 오를땐 다 같이 오르고 내릴때도 다 같이 내리는 경우가 많은데, 그래도 그 중에서 어떤 코인이 많이 오르거나 적게 내리는지 궁금한 적이 많았습니다.
그리고 오늘 법무부의 일탈(?)로 인해 발생한 엄청난 해프닝을 계기로 그동안 미뤄왔던 숙제를 해버렸네요.
어떻게 보면 파이썬을 이용한 투자( #kr-systemtraing)에서 처음으로 데이터를 분석하는 포스팅이기도 합니다. ^^
그럼 이제 본론으로 들어가서, 지난 포스팅에서 차트 정보를 받아서 데이터 분석용 자료형인 pandas패키지의 dataframe에 넣어봤는데, 이번에는 그렇게 넣은 데이터로 차트를 그리는 것을 해보겠습니다.
코드를 보기 전에 설명드릴 부분은 데이터로 차트를 그리는 함수 plot()이 있습니다.
파이썬의 그래픽 라이브러리인 matplotlib에 포함된 수많은 클래스 중에 하나인 pyplot의 실행 함수라고 보시면 되겠습니다.
기본적인 구조는 import matplotlib.pyplot as plt를 통해 라이브러리를 로드한 후 plt.plot(x축정보, y축정보)형태로 호출하면, python 편집기 (또는 브라우저 실행환경인 jupyter notebook)의 출력창에 그래프가 표시됩니다.
코드를 설명드리면 먼저 x축에 해당하는 시간을 timestamp라는 컴퓨터 업계의 시간단위를 사람이 읽을 수 있는 파이썬 시간 자료형으로 변경하여 Dataframe 자료형의 인덱스로 삼습니다. df.index = [dt.datetime.fromtimestamp(ts) for ts in df.time]
한편, 여러 코인의 차트를 하나의 차트에 겹쳐서 그리기 위해서 데이터가 시작하는 시점을 기준점으로 잡아 가격이 아닌 등락비율로 y축을 설정였고, df_ratio = (df - df.open.values[0])/df.open.values[0]
차트 시작점을 0으로 맞추었습니다. df_ratio.close - df_ratio[0:1].close.values[0]
마지막으로 legend()함수를 사용해서 범례를 하단에 표시하였습니다.
차트를 하나에 겹치는 작업은 파이썬이 알아서 진행을 해주기 때문에, 코인별로 plot()함수를 연속으로 호출하기만 하면 됩니다.
먼저 실행 결과를 보면... 리플이 이 포스팅 준비를 하는 동안 많이 올랐네요 ^^
그리고 위 그림을 그려주는 프로그램 코드는 다음과 같습니다.
텍스트로 넣으니, 들여쓰기가 무시되고 코드의 색상도 사라져서 가독성이 떨어지기 때문에 이미지로 캡쳐하여 올립니다. (사용하고 있는 편집기는 파이썬 패키지를 깔면 함께 설치되는 spyder입니다)
역시 몇 줄 안되는 파이썬 코드로 상당히 많은 작업을 처리할 수 있었습니다.
프로그래머라도 이걸 다 외워서 사용할까 싶을 만큼 생소한 함수와 인자들이 많았는데, 구글로 필요한 기능을 꾸준이 검색을 하다보면 좀 덕지덕지 되는 느낌이 있기는 하지만 얼추 잘 동작합니다. ^^
아까 퇴근후에 별의별 삽질을 다 해가며 두어시간 걸려서 만들었는데, 테스트하느라 지저분한 코드와 주석들을 다 지우고 나니 실제 코드는 20줄 밖에 안되는군요 ㅎㅎ
포스팅의 마지막으로 업빗에서 정보를 받아 차트를 그리는 부분을 설명드리겠습니다.
cryptocompare와 달리 업빗은 3-4번 호출할때 한번 정도 데이터를 받아오는 것을 성공하더군요. 그래서 이런 부분을 처리하기 위해 소위 '에러처리'를 공부하느라 진땀을 뺐습니다.
에러처리의 기본 구분은 try: ~ except: ~ 로써 오류가 날 수 있는 코드를 try에 넣고, 오류가 발생하면 excep 부분의 코드가 실행되며, 정상처리되면 except를 건너띄고 프로그램이 진행됩니다.
역시 코드를 미리 설명드리면 cryptocompare의 프로그램과 거의 차이가 없는데, 일단 차트를 받는 부분이 오류가 발생할 가능성이 있는 부분이라 가독성을 위해서 차트 받는 부분을 별도의 함수로 만들었습니다.
그리고 오류 처리 구분안에서 코인 하나씩 위 함수를 실행시키고 차트를 그리도록 하였습니다. try ~ except 구분 밖에 무한루프 while을 걸어서 오류가 없을 때까지 getChart를 실행시키도록 하였습니다.
이렇게 한 이유는 파이썬에 goto문이 없어서 오류가 발생하면 except로 넘어가는데, getChart함수를 한번 더 실행시킨다고 해도 또 에러가 나면 그냥 프로그램이 죽어버리기 때문입니다.
위 코드를 실행시키면 다음과 같이 재시도하는 출력이 몇차례 보이고나서 원하는 차트가 그려집니다.
업빗과 crytocompare 두 거래소에서의 주요 코인들의 등락율을 비교하여 알수 있는 점은 사실 이미 다 직감적으로 알고있는 바와 같이 변동성이 더 큰 코인이 내릴때도 많이 내리고, 오를때도 많이 오르니 반등시점에서 갈아타거나 추가 매수를 하면 좋다 정도가 될 것 같습니다.
그리고, 위의 해석에 따라 스팀을 -60% 가격에서 주우신 분들께 이 자리를 빌어 축하드립니다. ^^
벌써 새벽 2시가 다 되어 가지만, 오랜만에 빡세게 공부해가면서 포스팅을 하니 보람되기도 하네요.
그럼 모두 좋은 밤 보내시고, 내일도 가즈아~ 하시기 바랍니다.
※ 파이썬을 이용한 투자 포스팅은 #kr-systemtrading에서 보실 수 있습니다.