가상화폐 투자자 가이드

파이썬과 Google Colab 퀵스타트

Q42 2022. 3. 10. 18:34

(1) 트레이딩 뷰에서 전략을 만들고 매매신호가 발생하면, (2) 구글 클라우드 플랫폼(GCP)에서 매매를 수행하고, 그 결과를 (3) 텔레그램으로 전송하는 방법에 대해 설명하고 있는데요, GCP를 설명하기 전에 개발 환경에 대해 언급하고 넘어가야 할 것 같습니다. GCP 는 외부와의 연동을 위한 인프라를 제공할 뿐이고, 핵심적인 활동은 그 위에서 돌아가는 비즈니스 로직을 짜는 것, 즉 프로그래밍이기 때문입니다.

일련의 강좌는 자동 매매 시스템을 직접 만들어 보고자 하는 프알못을 상정하고 작성하고 있기 때문에, HTTP나 API 같은 개념과 프로그래밍 언어에 대한 부분을 어느 정도의 깊이로 설명해야 할까 솔직히 고민이 됩니다. 보통 언어나 프레임워크를 익힐 때 퀵스타트 문서를 보면서 '일단 대강 돌려보고' 필요한 부분을 문서를 찾아 익히는 스타일이기 때문에 전체적인 포스트도 이러한 맥락으로 작성하고 있습니다.

다만 프로그래밍 언어는 최소한의 문법과 데이터 구조, 흐름 제어, 함수 같은 내용을 알지 못하면 시작하기 어려운데, 역으로 어디까지 알아야 시작을 할 수 있냐는 질문을 할 수도 있습니다. 그리고 OS 나 버전과 같은 개발 환경에 따라서도 차이가 나기 때문에 초심자의 경우 글이나 영상을 보고 따라해 보더라도 생각과 다른 오류가 나곤 합니다.

파이썬


프로그래밍 언어에 대한 출발점으로 저는 생활 코딩의 파이썬 입문 강의를 추천합니다:
https://opentutorials.org/course/4769

생활코딩 Python 입문 수업 - 생활코딩

수업소개 컴퓨터 프로그래밍 언어인 파이썬 입문 수업입니다. 수업대상 컴퓨터 프로그래밍 언어를 배우고 싶은 분  컴퓨터로 나의 문제를 해결하고 싶은 분  막상 무엇인가 하려고 하면 머리

opentutorials.org


이 정도면 반나절 정도의 시간을 투자해서 코드를 읽고 필요한 내용은 검색할 수 있는 최소한의 시작점이 될 수 있으리라고 생각하기 때문입니다.

제가 비전공자에게 파이썬을 추천하는 이유는 문법이 쉽고 기본으로 제공되는 패키지가 풍부하기 때문입니다. 또한 퀀트 투자는 기본적으로 데이터를 받아서 가공하고 변환하는 작업이 많은데, pandas 같이 이런 일을 쉽게 할 수 있는 강력한 환경이 제공됩니다. 애초에 pandas 를 만든 이가 헤지펀드의 퀀트가 만든 것이니 말 다했죠. 또한 머신 러닝이나 딥 러닝, 웹 서비스 같은 다양한 분야에서 널리 쓰이기 때문에 범용성이 가장 뛰어납니다. 이 글을 쓰는 2022년 2월 현재 프로그래밍 언어 인기 순위 탑이 파이썬이라는 것만 보아도 알 수 있습니다.

그림 1. TIOBE 프로그래밍 인기 순위

Google Colaboratory


파이썬을 어느정도 쓸 수 있게 되었다면, Google 에서 제공하는 파이썬 기반 데이터 리서치 서비스인 Google Colaboratory (줄여서 Colab)를 이용해 보기를 권합니다. Colab 을 이용하면 운영체제나 실행환경의 차이에서 오는 번거로운 설치와 환경 설정의 문제를 해결할 수 있고, 각종 코드와 실행 결과를 자유롭게 공유할 수 있으며, 성능도 괜찮은 가상 머신이 무료로 주어지는 것이므로 많은 일을 해볼 수 있습니다. 다만 무료 버전의 경우 백그라운드에서 실행할 수 없기 때문에 오랜 시간이 걸리는 작업을 할 수 없고 환경이 정해져 있으므로 최신 버전의 라이브러리를 사용할 때 제약이 있는 경우가 있습니다. 예를 들어 현재 Colab 에서 지원되는 파이썬은 3.7 이어서 3.8 이상의 버전을 사용하는 pandas 버전은 이용할 수 없습니다.

텔레그램 봇 API 퀵스타트에서는 방번호(chat id) 를 얻어오고 봇에게 메시지 전송을 실행하는 작업을 브라우저를 이용해서 수행했는데, Colab 을 이용하면 좀더 편하게 실행할 수 있습니다.

다음 문서를 열고, 유튜브에 나온 대로 코드를 실행해 보세요.
https://bit.ly/3hoNvMs

telegram bot 만들기.ipynb

Colaboratory notebook

colab.research.google.com



Colab 을 이용할 때 유의해야 할 것을 두 가지만 설명하겠습니다.

패키지 설치

위의 코드에서 두 가지 모듈을 이용하고 있습니다:

import requests
import json

이 중 json 은 파이썬에서 기본 제공되는 built-in 모듈이라 파이썬을 깔기만 하면 이용할 수 있습니다. 하지만 requests 는 외부 모듈이기 때문에 pip 등의 패키지 관리 프로그램을 이용해서 설치해야 하는데, Colab 에서는 기본으로 제공되고 있습니다. 다음 명령을 입력하면 Colab 에서 기본으로 설치된 외부 패키지 목록을 확인할 수 있습니다 :

!pip list

시스템 명령

앞에서 ! 가 붙은 라인은 뒤의 문자열을 시스템 명령으로 실행합니다. 시스템 명령이란 Colab 을 실행하고 있는 운영체제, 즉 리눅스 명령어를 실행할 수 있다는 뜻입니다. ls, pwd, cp, curl, wget, top 등 여러 리눅스 명령어를 실행해 볼 수 있고, 아래와 같이 외부의 리눅스 패키지를 설치하고 실행할 수도 있습니다:

!apt-get install ruby
!ruby -e "puts 'hello world'"

위의 예는 루비 프로그래밍 언어를 설치하고 helow world 를 출력하는 명령을 실행한 것입니다.

이제 좀 헷갈릴 수 있는 내용을 설명하겠습니다.
먼저 시스템 명령 외에 다음 명령은 ! 가 없어도 실행이 됩니다.

  • cd : 디렉토리 이동
  • ls : 파일 목록 출력
  • pwd : 현재 위치 출력
  • cp, mv, rm : 파일 복사 및 이동, 삭제
  • mkdir, rmdir : 디렉토리 생성 및 삭제

! 가 없는 명령은 현재의 프로세스에서 실행되고, !가 있으면 다른 프로세스에서 실행된다는 점이 차이점입니다.
대부분의 명령은 동일하게 동작을 하기 때문에 이런 점을 굳이 몰라도 별 문제는 없는데, cd 명령은 이 점을 이해하지 못하면 동작이 헷갈릴 수 있습니다.

왼쪽 그림을 보면 현재 디렉토리는 /content 이고 하위에 sample_data 라는 디렉토리가 존재합니다. 여기서 (3) !cd sample_data 명령을 내린 뒤 (4) !pwd 로 현재 위치를 확인해보면 /content 에 머물러 있습니다.
그 이유는 !cd 명령을 실행하면 프로세스를 생성해서 이 명령을 실행하게 되는데, 실행이 끝나고 나면 해당 프로세스는 종료되기 때문에 현재 프로세스에 아무런 영향을 미치지 못합니다. 다만 !mkdir 이나 !touch 와 같은 명령으로 디스크에 디렉토리를 만들거나 파일을 만들면, 그 결과는 디스크에 남기 때문에 프로세스가 종료되더라도 작업은 남아있게 되는 것입니다.
반면에 (5) cd sample_data 명령을 내린 뒤 (6) !pwd 로 현재 위치를 확인해보면 /content/sample_data 로 이동한 것을 볼 수 있습니다. 이것은 (5) 의 명령이 현재 프로세스에서 실행되었기 때문에 동작을 마치더라도 그 결과가 남아있게 되는 것입니다.
이러한 내용을 이해하기 어렵다면 일단은 cd 명령은 ! 를 붙이지 않아야 제대로 동작한다고 결과만 기억하고 있어도 됩니다.