글
[시스템트레이딩] API를 이용한 자동매매(3)
개발하기 좋은 추운 주말입니다. 이럴때는 조용이 집에서 개발에 집중할 시간을 벌 수 있어서 좋은 것 같습니다.
websocket을 이용한 자동 매매 예제에서 매매 로직의 시초가를 입력을 하였었는데요. test 용으로는 문제가 없지만 제대로 전략을 돌리려면 본인이 원하는 시작값을 설정할 수 있어야 합니다.
오늘 소개할 방법은 오늘 시초가를 로직의 시작가로 설정하는 방법입니다. 오늘 시초가를 받아오는 방법은 크게 두가지가 있습니다. 하나는 오늘 일봉을 읽는 것이고, 두 번째는 현재 시세를 받는 것입니다. 현재 시세를 받으면 오늘 시초가가 들어있습니다.
그리고 websocket의 경우에 이유는 정확하지 않지만 연결이 끊어지는 경우가 종종 있습니다. 또한 매매할 coin이 많으면 websocket으로 모든 코인의 실시간 체결 데이터를 받기에 부담이 생깁니다. 따라서 전 종목을 대상으로 매매할 종목을 찾는 경우에는 현실적으로 현재 시초가를 받아서 처리하는 것이 대안이 될 수 있습니다.
그래서 이번에는 현재 시세를 받아서 매매하는 방법도 함께 소개하도록 하겠습니다.
우선 현재 시세를 받아오는 방법입니다. 해당 함수는 get_cur_price_all() 입니다. 입력은 원하는 암호화폐명이 기술된 list입니다. upbit에 등록된 모든 암호화폐 코드를 입력하면 전 종목 시세를 한번에 얻어올 수 있습니다. return되는 형태는 list이며 list의 첫 번째 항목에 dict 형태로 저장되어 있습니다. dict의 key는 암호화폐명입니다. return되는 값은 아주 다양한 정보가 들어있습니다. 그 중 시작가는 'opening_price'입니다.
이렇게 받은 시작가격을 로직의 시작가격으로 설정하면 됩니다.
ticker = 'KRW-SBD'
info = upbit.get_cur_price_all([ticker])
if 'error' not in info[0] :
start_price = info[0][ticker]['opening_price']
tr_logic.set_start_price(start_price)
다음으로는 주기적으로 현재 시세를 받아서 기존 자동매매 프로그램을 작동시키는 방법입니다.
앞에서 설명한 함수인 get_cur_price_all()를 사용하면 됩니다. get_cur_price_all()에서 돌려주는 자료의 형태는 websocket에서 돌려주는 형식과 틀립니다. 하지만 기존 trader를 수정하지 않고 사용하기 위하여 websocket을 사용하던 형태로 변환하여 사용하면 됩니다. 이를 위하여 만든 함수가 make_info_from_upbit_tickers()입니다. 나머지 부분은 수정할 필요없습니다. 이렇게 거래 부분은 시세와 독립적으로 개발을 하면 향후 다른 거래소 혹은 다른 방식으로 거래하는 경우에도 수정할 부분을 최소화할 수 있습니다.
지금 예제는 코인 하나에 대하여 동작하지만, 복수개의 코인에 대하여 동작하도록 수정할 수 있습니다.
방법은 원하는 코인에 대하여 trader를 여러 개 만들어서 list를 만듭니다. 원하는 코인 리스트를 만든 후 get_cur_price_all()에 해당 코인명을 넣으면 됩니다.
USING_WEBSOCKET = 0
# websocket 실간 시세를 이용하여 자동매매하기
if USING_WEBSOCKET :
:
:
else :
# 10초에 한번씩 최근 거래 값을 받아서 자동매매
target_coins = [ticker]
while(1) :
prices = upbit.get_cur_price_all(target_coins) # 원하는 코인을 list로 넣는다.
if 'error' not in prices :
ticker = target_coins[0]
info = make_info_from_upbit_tickers(prices[0][ticker])
trader.do_trading(info)
time.sleep(10)
다음에는 ebest api를 추가하는 방법에 대하여 기술하도록 하겠습니다. 증권사 API는 암호화폐 API와는 많이 틀립니다. 하지만 매매에서 사용하는 api는 몇 개 없으므로 기존 pyupbit의 api와 같은 형태로 부를 수 있도록 개발할 예정입니다. 이렇게 되면 기존 프로그램에서 아래에 있는 거래소 생성하는 부분만 변경하면 됩니다. 거래소와 관련된 부분을 독립하여 개발을 하면 향후 다른 거래소를 추가하는 경우에도 수정할 부분을 최소화할 수 있습니다.
upbit = MyUpbit(access, secret)
'시스템트레이딩' 카테고리의 다른 글
[시스템트레이딩] 전략 시뮬레이션(9) - 과거 데이터(체결, tick데이타) 연속으로 가져오기 (0) | 2021.01.17 |
---|---|
[시스템트레이딩] 전략 시뮬레이션(8) - 과거 데이터(분봉) 연속으로 가져오기 (18) | 2021.01.12 |
[시스템트레이딩] API를 이용한 자동매매(2) (10) | 2020.12.12 |
[시스템트레이딩] API를 이용한 자동매매(1) (2) | 2020.12.11 |
[시스템트레이딩] 전략 시뮬레이션(7) - 과거 데이터(분봉) 가져오기 (2) | 2020.12.03 |