본문 바로가기

주식투자/투자도움받기

파이썬(python) 주식 자동매매 프로그램 만들기 : 2-3. 구글 스프레드시트 연동


파이썬 주식 자동매매 프로그램(로봇) 구축과 관련해서 제가 매뉴얼을 작성중입니다. 벌써 3-2번째 구축하기와 관련해서 구글 스프레드시트(엑셀) 연동까지 오게되었네요. 

주식투자를 하면서 가장 중요한 것은 바로 어떤 주식종목을 매매할 것이냐입니다. 내가 어떤 종목에 투자할지를 정하는 부분을 자동매매 프로그램으로 만들기는 일반인 입장에서 어려울 것이라고 판단을 했습니다.

그래서 저는 수년간 조건검색식으로 쌓아놓았던 데이터베이스를 기반으로 확률이 상대적으로 높은 종목들만 매매리스트에 포함시켜서 로봇이 해당 리스트에서 조건에 맞는 주식종목을 매매만 진행할 수 있도록 구현하는 방법을 선택했습니다.

구글 스프레드시트와 연동한 주식파이썬(python) 주식 자동매매 프로그램 만들기 : 3-2. 구글 스프레드시트 연동

(내가 수기로 작업하는 영역)
1. 조건검색식으로 발견된 주식종목을 구글 스프레드시트에 등록한다.
(자동으로 진행되는 영역)
2. 구글 스프레드시트에서 피벗을 돌려서 확률이 높은 조건검색식에서 발견된 주식종목만 선별한다.
3. 파이썬 주식 자동매매 프로그램이 구글 스프레드시트에서 선별된 종목을 가져온다.
4. 주식종목명으로만 되어있는 구글 스프레드시트의 값을 주문을 넣기 위한 주식종목 코드로 변환한다.
5. 전일 거래대금이 20억원이상인 주식종목들만 선별하여 매매대상 종목리스트에 넣는다.

위의 구조가 제가 만들고자 하는 전체적인 프로세스 입니다. 저는 그간 매일 기록하던 구글 스프레드시트에 조건검색식으로 발견된 종목들만 별도로 등록을 해두면, 알아서 해당 종목중에서 선별해서 매매를 진행하는 방식입니다.

파이썬으로 구글 스프레드시트의 정보를 읽어오자
파이썬으로 구글 스프레드시트의 정보를 읽어오자

 

1. 구글 스프레드시트에 관심종목 만들기

일단 구글 스프레드시트는 엑셀을 온라인에서 쓸수있게 만들어진 구글의 office프로그램이라고 생각하면됩니다. 저는 이곳에 기록관리를 꾸준하게 해오고 있었는데요. 

아래와 같이 72번 조건검색식에서 발견된 종목이 언제 발견이 되었으며, 언제 최고가를 찍어서 10%이상을 달성했는지를 5년이 넘게 기록을 해두면서 조건검색식을 검증하고 다듬고 있었습니다. 

이중에서 최근 30일내에 성공확률이 75%가 넘는 조건검색식에서 발견된 주식종목을 리스트업할 수 있는 피봇 sheet를 만들어 두었고, 제가 기록관리를 할 때마다 자동으로 피봇의 값이 변경되게 되어져있습니다.

구글 스프레드시트의 조건검색식 관리 현황
구글 스프레드시트의 조건검색식 관리 현황

 

2. 파이썬과 구글 스프레드시트 연동하기

파이썬이 구글 스프레드시트의 값을 가지고 오려면, 구글 스프레드시트가 공유가 될 수 있도록 설정을 해주어야 합니다. 스프레드시트의 파일을 열어보면 우측 상단에 공유버튼이 있습니다. 

스프레드시트를 로봇과 공유하자
스프레드시트를 로봇과 공유하자

이곳에서 로봇계정과 연결될 수 있도록 정보를 등록해주면 됩니다. 로봇이 구글 스프레드시트에 엑세스할 수 있도록 말이죠.

로봇에게도 공유하여 권한을 부여해주었다.
로봇에게도 공유하여 권한을 부여해주었다.

파이썬을 구글 스프레드시트와 연동하는 방법은 글로 설명하기 조금 복잡하고, 잘 설명되어진 글이 있기 때문에 해당 링크에 들어가셔서 설명대로 따라해보시는게 좋을 것 같습니다.

구글 클라우드 플랫폼에 들어가서 프로젝트를 생성해주고, 로봇 계정을 만들어주고, 로봇이 구글 스프레드시트 파일을 읽을 수 있도록 공유해주고 하는 일련의 절차가 있습니다.

 

유림's Blog

베짱이가 되고 싶은 개미의 기술 블로그

yurimkoo.github.io

 

3. 파이썬에 라이브러리 설치하기

일단 파이썬에서 구글 스프레드시트를 사용하려면 2가지의 라이브러리를 설치해주어야한다. 바로 구글 스프레드시트를 사용할 수 있는도록 해주는 gspread와 인증을 위한 Oauth 관련 라이브러리를 설치해주어야 한다.

pip install gspread
pip install --upgrade oauto2client

 

 

4. 구글 스프레드시트에서 받아온 주식종목의 코드값을 만들기

import gspread, pandas, datetime, numpy
import win32com.client
from oauth2client.service_account import ServiceAccountCredentials


scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive',]
json_file_name = '로봇코드.json'
credentials = ServiceAccountCredentials.from_json_keyfile_name(json_file_name, scope)
gc = gspread.authorize(credentials)
spreadsheet_url = '구글 스프레드시트 파일 주소(url)'
doc = gc.open_by_url(spreadsheet_url)   # 스프레스시트 문서 가져오기 
ws = doc.worksheet('읽어올 sheet이름')  # 범위(셀 위치 리스트) 가져오기
stock_data = ws.range('B2:D100')   # sheet에서 읽어올 범위
stock_target_list = []
gs_target_price = []
gs_symbol_name = []
gs_find_date = []
gs_symbol_list = []

for cell in stock_data:
    stock_target_list.append(cell.value)  # 구글 스프레드시트 타겟 종목 목록/값 받아오기

i = 0
while i < 100:
    if i%3 == 0:
        #print(stock_data[i].value)
        #gs_symbol_list.append(stock_data[i].value)    # 구글 스프레드시트 발견 종목 코드
        gs_symbol_name.append(stock_data[i].value)    # 구글 스프레드시트 발견 종목명칭
        gs_find_date.append(stock_data[i+1].value)    # 구글 스프레드시트 발견 일자
        gs_target_price.append(stock_data[i+2].value)    # 구글 스프레드시트 발견 종목 코드의 발견주가
    i += 3

print(gs_symbol_name)

위 소스코드에 보면 제가 주석(설명)을 모두 달아두었습니다.  

json파일은 로봇과 연결하기 위한 token파일입니다. 해당 파일과 같은 폴더에 넣고, 파일 이름만 넣어주면 됩니다.

spreadsheet=url은 구글 스프레드시트에서 보이는 엑셀파일이 있는 주소(url)입니다. 내가 연동하고자 하는 파일의 URL을 복사하여 붙여넣어줍니다.

ws에는 해당 엑셀파일 내에 여러개의 sheet가 있을텐데, 어떤 sheet이름으로 된 것을 읽어올 것인지에 대한 설정입니다.

그리고 stock_data에 들어가는 것은 sheet내에서 데이터를 가져올 전체 범위를 정해주는 설정입니다.

그렇게 등록된 데이터를 stock_target_list라는 곳에 한방에 모두 집어 넣어두었는데요. 사실 필요한 것은 종목명만 필요하긴 한데 혹시 몰라서 3열로 가져오게 구성을 해두었습니다. 

그래서 종목명끼리 발견일자끼리 발견일주가끼리 묶어주는 작업을 하는 것이 while로 시작하는 부분입니다. i%3으로 한 이유는 3열(종목명, 발견일, 발견주가)이기 때문인데 더욱 여러 범위를 가져오신다면 해당 숫자를 속성에 맞게 조정해주시면 됩니다.

이제 주식 자동매매 프로그램에서 구글 스프레드시트에서 가져온 매매대상 주식종목명칭이 gs_symbol_name에 모두 들어갔습니다. 

위 소스코드로 정상적으로 출력이 되신다면 지금까지 잘 진행된 것입니다.

 

6. 주식종목 명칭을 주식종목코드로 변환하기

위에서 만든 소스코드에 아래의 소스코드를 이어서 붙여넣어주면 종목명칭을 코드로 변환하고, 거래대금이 20억원이상인 주식종목을 가져올 수가 있습니다.

# 종목코드 리스트 구하기
objCpCodeMgr = win32com.client.Dispatch("CpUtil.CpCodeMgr")
codeList = objCpCodeMgr.GetStockListByMarket(1) #거래소
codeList2 = objCpCodeMgr.GetStockListByMarket(2) #코스닥

code_total = codeList + codeList2


# 전체 종목코드와 명칭 배열에 넣기

stock_info_code=[]
stock_info_name=[]
for i, code in enumerate(code_total):
    #print(code)
    stock_info_code.append(code)
    stock_info_name.append(objCpCodeMgr.CodeToName(code))
 
#print("거래소 + 코스닥 종목코드 ",len(code_total))

#print(stock_info_name)

objStockWeek = win32com.client.Dispatch("DsCbo1.StockWeek")


j=0
for total_name in stock_info_name:
    if total_name in gs_symbol_name:
        #print(total_name)
        objStockWeek.SetInputValue(0, stock_info_code[j])   #종목 코드 - 삼성전자
        objStockWeek.BlockRequest()
        close = objStockWeek.GetDataValue(4, 1)  # 종가
        lastday_vol = objStockWeek.GetDataValue(6, 1)   ## 전일거래량
        if (lastday_vol*close)/100000000 > 20:   #전일 거래대금이 10억원 이상인 종목만 symbol_list에 넣기
            gs_symbol_list.append(stock_info_code[j])
    j+=1


print(gs_symbol_list)

 

이렇게 해서 잘 연동을 시켜놓는다면, 내가 구글 스프레드시트에 종목명으로 되어있는 관심종목을 불러와서, 프로그램이 이해할 수 있는 코드로 변환한 뒤,

거래대금이 전일 20억원이상 발생된 종목들만 매매할 대상 종목 리스트에 넣어주는 것까지 완료되게 되는 것입니다. 

여기까지만 하면 이제 기본적인 환경셋팅과 프로그램을 구동하기 위한 준비는 모두 마무리가 된 것 같습니다.

다음 포스팅부터는 아무리 복사해서 붙여넣었더라도, 내 입맛에 맞게 조정을 해주어야하는 부분을 손데다보면 파이썬의 기초적인 부분에 대해서 공부를 안할 수가 없기 때문에,

가장 많이 사용하고 변환하게되는 구문에 대해서 간략하게 짚어보는 연재를 진행하도록 하겠습니다.

파이썬(python) 주식 자동매매 프로그램 만들기 - 2-1 조건문(if)

 

파이썬(python) 주식 자동매매 프로그램 만들기 - 2-1 조건문(if)

안녕하세요. 일반인도 복사하여 붙여넣기로 만들수 있는 프로그래밍을 지향하며, 주식 자동매매 프로그램을 만들고 있는 [찌쏘]입니다. 주식투자와 관련된 주제로 수년간 글을 쓰다가 결국 자

jjisso.tistory.com

파이썬(python) 주식 자동매매 프로그램 만들기 - 2-2 데이터프레임(df)

 

파이썬(python) 주식 자동매매 프로그램 만들기 - 2-2 데이터프레임(df)

안녕하세요 직장인 주식투자자 [찌쏘]입니다. 최근 주식투자를 자동화 하기 위해서 파이썬을 기반으로 주식 자동매매 프로그램을 만들고 있습니다. 대부분은 소스코드를 복붙(복사하여 붙여넣

jjisso.tistory.com

※ 저는 주식투자를 공부중인 개인/개미투자자입니다. 제 주관에 의한 개인적인 투자방식을 정립 중이며, 투자 손실과 책임은 개인에게 있음을 안내드립니다.

유익하셨다면, 공감(♡)클릭 및 댓글 부탁드리며, 블로그/유튜브가 많은 분들에게 도움이 되었으면 좋겠네요.

찌쏘와 함께 주식공부 합시다.
찌쏘와 함께 주식공부 합시다.

반응형


Visitor : 2,122,514
POWERED/DESIGN/COPYRIGHTⓒ BY JJISSO