ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬으로 코인 자동매매 프로그램 만들기 - 3: pyupbit로 시세 가져오기
    코딩/Python 2021. 2. 28. 17:18

     

    이전글 파이썬으로 코인 자동매매 프로그램 만들기 - 2 : pyupbit 모듈 설치, 사용하기

    다음글 파이썬으로 코인 자동매매 프로그램 만들기 - 4: 코인의 현재가와 호가

     

     

     

    매매의 기본은 쌀 때 사서, 비싸게 파는 것. 우리가 코인을 하는 이유도 쌀 때 사서 비싸게 팔기 위해서다. 그렇기 때문에 항시 가격에 민감할 수 밖에 없다. 특히 코인처럼 변동성이 큰 자산이라면 그 한번의 출렁임으로 등골이 서늘해지게 되곤한다. 오늘은 모든 매매의 기본이 되는 가격 정보를 불러오는 법을 쓰려한다.

     

     

     

    일별 시세 가져오기

     

     

     

    저번 포스팅에서 업비트의 API를 불러오는 법을 연습했다. REST API 형태로 주어진 정보에서 마켓코드도 불러왔다. 가격 정보, 즉 시세도 같은 방식으로 불러오면 된다.

     

     

     

     

    업비트의 API를 이용해 일별 시세를 불러온 모습

     

     

     

     

     

    저번과 마찬가지로 docs.upbit.com 페이지로 들어가서 좌측 메뉴에서 '시세 캔들 조회'의 '일 캔들'을 클릭한다. 

     

     

     

     

     

     

     

     

    위와 같은 주소를 볼 수 있다. 주소의 'days'는 날짜 단위를, 'count'는 가져올 정보의 개수를 보여준다. days 뒤에 'market=KRW-BTC'를 입력하면 비트코인의 오늘 오전 9시 가격을 가져올 수 있다.

     

     

     

    api.upbit.com/v1/candles/days?market=market&count=num

    days: 날짜 단위, weeks와 months로 바꿔서 주봉과 월봉을 출력할 수 있다.

    market: KRW-BTC, KRW-ETH등의 업비트 종목 코드로 바꿔서 사용할 수 있다.

    num: 숫자를 입력해 가장 최근부터 가져올 자료의 수를 정한다.

     

     

     

    오늘 날짜의 시가, 고가, 저가 등을 불러왔다.

     

     

     

    주소의 count 값과 market 값을 바꾸면 다른 정보를 불러올 수 있다. market 값에 'KRW-ETH'를 입력하고 count 값에 20을 입력해서 이더리움의 20일치 가격을 불러오자.

     

     

     

     

     

     

     

     

    이더리움의 20일치 가격을 불러왔다. 이번에는 파이썬 파일에서 사용해볼텐데, pyupbit라는 모듈을 이용하면 간편하게 불러 올 수 있다.

     

     

     

     

    pyupbit모듈로 일별, 주별, 월별 시세 불러오기

     

     

     

    이제 pyupbit 모듈로 파이썬 파일에서 시세를 불러오자. pyupbit 모듈에 내장된 get_ohlcv() 메소드로 일별 시세를 불러오기 할 수 있다.

    비트코인의 10일치 일별 시세를 불러오는 코드는 다음과 같다.

     

     

     

    import pyupbit
    
    df = pyupbit.get_ohlcv(ticker="KRW-BTC", interval="day", count=10)
    # 간단히 pyupbit.get_ohlcv("KRW-BTC", "day", 10)으로 써도 똑같이 동작
    print(df)

     

     

     

     

    ticker 코인의 종목코드

    interval 날짜의 구별 단위 (일: day, 주: week 월: month)

    count 불러올 자료 개수

     

     

    get_ohlcv 메소드를 사용하면 메소드에 인자로 준 ticker, interval, count값을 읽고 그에 맞는 자료를 제공한다.

    출력된 결과를 보면 왼쪽에서 오른쪽으로 시가, 고가, 저가, 종가, 거래량이 출력된 것을 볼 수 있다.

     

     

    interval 값을 바꿔서 주별 시세나 월별 시세도 가져올 수 있다.

    리플의 10주 간의 주별 시세를 가져오는 코드는 다음과 같다.

     

     

    import pyupbit
    
    df = pyupbit.get_ohlcv(ticker="KRW-XRP", interval="week", count=10)
    # 간단히 pyupbit.get_ohlcv("KRW-XRP", "day", 10)으로 써도 똑같이 동작
    print(df)

     

     

     

     

    pyupbit 모듈로 분별 시세 불러오기

     

     

     

    pyupbit 모듈로 분별 시세를 가져올 수도 있다. 형태를 분 별 시세를 가져오는 것과 비슷하지만 몇분당 시세를 가져올 지 적어야 하기 때문에 조금 다르다.

     

     

     

    pyupbit로 비트코인의 1시간 동안 분 별 시세를 가져오는 코드는 다음과 같다.

     

     

     

    import pyupbit
    
    df = pyupbit.get_ohlcv(ticker="KRW-BTC", interval="minute1", count=60)
    print(df)

     

     

     

     

     

    minute뒤에 숫자를 써줘서 몇 분 간의 시세를 가져올지 정해줄 수 있다. interval 값으로 minute3을 주면 3분당 시세를 가져올 수 있다.

     

     

     

    import pyupbit
    
    df = pyupbit.get_ohlcv(ticker="KRW-BTC", interval="minute3", count=20)
    print(df)
    

     

     

     

     

     

    3분당 시세를 가져온 것을 확인할 수 있다. 그냥 minute 값을 집어 넣게 되면 1분당 시세를 가져온다.

     

     

     

    interval의 값으로 주는 값은 아무 숫자나 넣을 수 없고, 업비트 API에서 제공하는 단위의 시세만 가져올 수 있다. 만약 2분당 시세를 가져오고 싶다면 업비트의 API에서 기본적으로 제공하고 있지 않기 때문에 1분당 시세를 가공해 만들어야 한다.

     

     

     

     

     

    resample() 메소드를 사용하면 2분봉 시세를 만들 수 있다.

     

     

     

    import pyupbit
    
    df = pyupbit.get_ohlcv(ticker="KRW-BTC", interval="minute1", count=60)
    df['open'] = df['open'].resample('2T').first()
    df['high'] = df['high'].resample('2T').max()
    df['low'] = df['low'].resample('2T').min()
    df['close'] = df['close'].resample('2T').last()
    df['volume'] = df['volume'].resample('2T').sum()
    df = df.dropna()
    
    print(df)

     

     

     

     

     

    resample에 'nT'의 값을 주면 n개의 값을 자동으로 선택한다. 각 선택된 값에서 시가 중 첫 값, 고가 중 높은 값, 저가 중 낮은 값, 종가 중 마지막 값, 거래량의 합을 각 열에 값으로 주고, NaN 값을 제거하는 dropna() 메소드로 2분당 시세를 구했다.

     

     

     

    마찬가지의 방법으로 업비트에서 제공하지 않는 다른 n분당 시세도 구할 수 있다.

     

     

     

    import pyupbit
    
    df = pyupbit.get_ohlcv(ticker="KRW-BTC", interval="minute1", count=60)
    df['open'] = df['open'].resample('7T').first()
    df['high'] = df['high'].resample('7T').max()
    df['low'] = df['low'].resample('7T').min()
    df['close'] = df['close'].resample('7T').last()
    df['volume'] = df['volume'].resample('7T').sum()
    df = df.dropna()
    
    print(df)

     

     

     

     

     

    pandas로 정보 가공하기

     

     

     

    가져온 정보를 가공해 필요한 정보를 얻어낼 수도 있다. 간단하게 10일치 종가의 평균을 구해볼까?

     

     

     

    데이터프레임 형태의 정보를 가공하려면 우선 pandas 모듈을 가져와야 한다.

    우선 PIP로 pandas 모듈을 컴퓨터에 설치하자

    pip install pandas

     

     

     

     

     

    성공적으로 설치했으면 pandas 모듈을 import하고 필요한 메소드를 찾아 사용하면 된다. pandas로 자료의 평균을 구하는 법을 알기위해 구글에 pandas average를 검색하면 맨 상단에 다음같은 문서를 찾을 수 있다. (시간에 따라 다른 문서가 나올 수도 있지만 제공하는 정보는 비슷할 것이다.)

     

     

     

     

     

     

     

    pandas의 DataFrame.mean() 메소드를 사용하면 데이터의 평균을 구할 수 있다는 정보를 얻었다. 이제 알아낸 정보로 10일치 종가의 평균을 구해보자.

     

     

     

    import pyupbit
    import pandas as pd
    
    df = pyupbit.get_ohlcv(ticker="KRW-BTC", interval="day", count=10)
    # 간단히 pyupbit.get_ohlcv("KRW-BTC", "day", 10)으로 써도 똑같이 동작
    print(df)
    print(pd.DataFrame.mean(df.close))

     

     

     

     

     

    pandas를 pd로 불러와서 아까 찾은 메소드를 사용했더니 10일치 종가의 평균을 구한 것을 볼 수 있다.

     

     

     

    이와 같이 pandas 모듈을 사용하면 정보를 가공해 원하는 정보를 얻어낼 수 있다. 더 복잡한 정보를 얻어내고 싶다면 구글에 pandas + 원하는 결과의 영문명을 검색해 알맞은 메소드를 알아내 사용하자.

     

     

     

     

     

     

    지금까지 업비트 API와 pyupbit 모듈로 코인의 가격정보를 얻어내고 pandas로 원하는 정보를 얻어내는 방법을 알아봤다. 다음 포스팅에서는 코인의 현재가와 호가를 얻는 방법을 알아보겠다.

     

     

     

     

     

    참고한 동영상

    www.youtube.com/watch?v=vHolQ_1_9V8&list=PLNPt2ycoheHrJBpCkpE2h4OBR8oxYyU3p&index=4

     

     

    반응형

    댓글

Designed by Tistory.