[22/02/13]코딩에 입문하게 한 비트코인 자동매매봇 만들기
코딩을 배우기 전에 만들어 본 거라 다 까먹었지만
오랜만에 다시 가동시키려고 실행시켜보았다.
변동성 돌파 전략 : 일일 단위로 일정 수준 이상의 범위를 뛰어넘는 강한 상승세를 돌파 신호로 상승하는 추세를 따라가며 일 단위로 빠르게 수익을 실현하는 단기매매 전략입니다
자동매매봇 만드는 과정은 이렇다.
1. 업비트 오픈api로 액세스키, 시크릿키 받아오기(출금가능, 입금가능은 선택 해제한 후 받아오기)
업비트 로그인 - 마이페이지 - open API 관리
그리고 여기서 체크한 후 IP를 받아와야하는데
마이페이지 - 접속관리에서 맨 위에 내가 지금 로그인 한 아이피를 가져오면 된다.
그리고 키 발급 후 메모장에 엑세스키, 시크릿키를 복사해서 저장해 놓는다.
- pip install pyupbit 로 아나콘다 명령프롬프트창에 파이업비트 설치하기
이미 깔려있는 경우 한 번 업데이트를 해본다.
(오류나는 경우 환경변수 설정이나 파이썬버전을 확인해본다)
나는 뭐 어떻게 하다가 3.8버전이 베이스로 되어있어서 이것때문에 오류가 많이 났다.
※ pyupbit란?
업비트 API를 파이썬에서 쉽게 사용하기 위해서 저자들이 개발한 모듈이다. 굳이 API를 호출할 필요 없이 pyupbit 모듈을 이용하면 간편한 경우가 많다.
※ ticker란?
각 종목을 식별하기 위해 만든 부호
오랜만에 바로 돌려보려고 제일 변화폭이 큰 네오 코인으로 돌려보았다.
다른 코인으로 실행하려면 NEO 대신에 다른 코인의 티커로 모두 바꿔주면 된다.
바로 실행하려면 op_mode = True를 주고 시작하면 된다.
티커는 업비트에서 확인할 수 있다. 네오의 티커 = NEO
# pyupbit 임포트하기
import pyupbit
import time
import datetime
# ticker : 각 종목을 식별하기 위해 만든 부호
def cal_target(ticker):
df = pyupbit.get_ohlcv(ticker,"day")
yesterday = df.iloc[-2]
today = df.iloc[-1]
yesterday_range = yesterday['high']-yesterday['low']
target = today['open'] + yesterday_range * 0.5
return target
# 전날 최고점 - 전날 최저점 = 변동 폭
# 당일 오픈시간의 시가 + 변동폭 * 0.5 = 오늘의 목표가
# 목표가보다 낮을 경우 매수하지 않고, 높을 때 매수
# (변동성을 활용한 전략)
# 객체 생성
access = "" # 본인 access키
secret = "" # 본인 secret키
# 업비트 로그인
upbit = pyupbit.Upbit(access, secret)
print(upbit)
# 변수 설정
target = cal_target("KRW-NEO")
print("보유 KRW : {}".format(upbit.get_balance(ticker="KRW")))
# 동작상태
op_mode = False
# 코인을 가지고 있는 지 여부
hold = False
while True:
now = datetime.datetime.now()
# 매도시도 : 8시 59분 50초 ~ 59초 (장 마감 전 매도)
# 동작상태 , 보유상태 둘다 True 일 때 시장가로 매도 후 False로 변경함
if now.hour == 8 and now.minute == 59 and 50 <= now.second <= 59:
if op_mode is True and hold is True:
NEO_balance = upbit.get_balance("KRW-NEO")
upbit.sell_market_order("KRW-NEO", NEO_balance)
hold = False
op_mode = False
# 10초 동안 실행 중지
time.sleep(10)
#09:00:00 목표가 갱신 후 동작상태를 True 로 변경
if now.hour == 9 and now.minute == 0 and 20 <= now.second <= 30:
target = cal_target("KRW-NEO")
time.sleep(10) # 09:00:20 ~ 31
op_mode = True
# 현재 NEO의 가격을 불러옴
price = pyupbit.get_current_price("KRW-NEO")
# 매초마다 조건 확인 후 매수시도
# 동작하고 있고 현재가가 목표가 보다 크거나 같고 보유상태가 False이면 실행
if op_mode is True and price is not None and price >= target and hold is False:
# 매수
# 현재 나의 잔고 불러오기
krw_balance = upbit.get_balance("KRW")
print(upbit.get_balance("KRW"))
# 내 잔고의 90%를 시장가로 매수 (10%라면 0.1)
upbit.buy_market_order("KRW-NEO", krw_balance * 0.9)
# 8시에 팔기 위해 보유 상태를 True로 변경함
hold = True
#상태 출력
print(f"현재시간: {now} 목표가: {target} 현재가: {price} 보유상태: {hold} 동작상태: {op_mode}")
# 1초마다 실행
time.sleep(1)
코딩을 배우기 전에는 뭣도 모르고 막 만들어서 완벽히 이해가 가지 않았는데, 코딩을 배우고 나니(심지어 파이썬을 배우지 않았는데도!) 쉬워보여서 정말 자랑스럽고 뿌듯하다ㅎㅎ 오랜만에 며칠동안 돌려봐야겠다.
그리고 내 마음대로 수정도 한번 해봐야징
추가로 실행파일로 만들어서 실행하기
- 명령프롬프트 창을 열어서 명령 입력하기
설치
pip install pyinstaller
최신 버전으로 업그레이드 (첫 설치 시에는 필요없음)
pip install --upgrade pyinstaller
설치되어 있는지 확인
pyinstaller --version
실행파일 만들기
pyinstaller -F -w 파이썬 파일명.py
1) -F, --onefile
지저분하게 파일이 생성되지 않고, 실행파일 1개만 생성되도록 해주는 설정
2) -w, --windowed, --noconsole
기본적으로 실행 파일을 실행하면 표준 I/O용 콘솔 창(까만 창)을 열도록 되어있는데, 뜨지 않도록 하는 옵션
참고한 곳
https://coding-kindergarten.tistory.com/84
https://rebro.kr/138
Author And Source
이 문제에 관하여([22/02/13]코딩에 입문하게 한 비트코인 자동매매봇 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hellocdpa/코딩에-입문하게-한-비트코인-자동매매봇-만들기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)