글
[시스템트레이딩] API를 이용한 자동매매(1)
그동안 전략 시뮬레이션을 개발하는 과정을 기술하였는데요. 이제는 실제 매매를 해 보겠습니다.
이글에서는 upbit에서 자동매매를 개발하는 과정을 기술합니다.
우선 실제 매매를 위해서는 거래소에서 API key를 받아야 합니다. upbit 거래소에 로그인 한 후 고객센터/Open API 안내/OPen API 사용하기를 누른 후 access키와 secret 키를 받아야 합니다.
이렇게 받은 API 키를 upbit.txt 파일에 아래와 같은 형태로 저장하면 됩니다.
acess key
secret key
옆에 있는 업비트 개발자 센터를 누르면 API관련 문서가 나옵니다. API에 대하여 궁금한 사항이 있을 때 확인하시면 됩니다.
github에서 찾아보면 upbit api를 사용하기 쉽게 class로 만든 소스가 많이 있습니다. 이중 많이 사용하는 pyupbit을 fork하여 사용하도록 하겠습니다.
pyupbit에는 대부분의 API가 구현되어 있지만 몇가지 함수도 추가하고, return 값을 변경하기도 하였습니다.
이렇게 변경한 소스는 아래 위치에서 다운받을 수 있습니다.
github.com/multizone-quant/pyupbit
다만 위 링크에 접속한 후 아래 그림과 같이 브렌치인 my_upbit-0.2를 선택한 후 오른쪽에 있는 code download를 누릅니다. 소스 zip 파일이 다운되면 개발할 곳에 압축해제하시면 됩니다.
pyupbit을 바로 사용할 수 있겠지만 앞으로 다양한 거래소 자동매매를 개발할 예정이기 때문에 거래소에 독립적인 나만의 API가 필요합니다. 그래서 여러 거래소의 특성을 무시하고, 매매에 필요한 정보를 얻을 수 있는 wrapper class를 별도로 개발합니다.
pyupbit class를 기반으로 class MyUpbit를 만들었습니다. 따라서 pyupbit을 직접 사용하지 않기 때문에 pyupbit에 있는 readme.txt는 무시하셔도 됩니다.
앞으로 개발할 upbit 거래소 자동 매매 프로그램은 아래 링크에서 다운받으시면 됩니다.
github.com/multizone-quant/system-trading-crypto
거래소 관련 class를 먼저 올렸습니다.
jpy_basic_ex.py : 거래소 base class
jpy_dummy_ex.py : simulation을 위한 dummy class
jpy_upbit.py : pyupbit wrapper class
jpy_upbit.py가 앞으로 사용할 upbit 거래소에서 자동매매를 위한 class입니다. jpy_upbit.py 단독으로 실행을 하면 제공하는 API test를 하는 함수들이 동작을 합니다.
jpy_upbit에서 제공하는 함수들의 return 값은 list의 array로 구성되어 있습니다. 만약 오류가 생기면 [0]번째 항목에 'error'라는 key word가 있습니다. 오류 message는 ret[0]['error']['message']에 포함되어 있습니다.
실제 매매하는 함수는 아래 5가지입니다. 이중 시장가 주문의 경우에는 buy의 경우에는 매수할 금액을 입력하고, sell의 경우에는 매도할 수량을 입력하면 됩니다.
buy_limit_order(ticker, price, qty)
buy_market_order(ticker, amount)
sell_limit_order(ticker, price, qty)
sell_market_order(ticker, qty)
cancel_order(uuid)
아직 체결되지 않은 주문은 아래 함수를 사용합니다. 특정 코인에 대한 미체결 주문을 알 수 있을 뿐 아니라, 'ALL'을 입력하면 현재 체결되지 않은 모든 코인 정보를 얻어올 수 있습니다.
pending_orders(ticker) # or 'ALL'
잔고를 확인하는 방법입니다. 'KRW'를 인자로 넣으면 현재 원화 잔고가 특정 암호화폐 (예, 'BTC')를 넣으면 해당 암호화폐가, 'ALL'을 인자로 넣으면 모든 잔고를 얻을 수 있습니다.
return값은 list의 array로 [0]번째 값에 하나 혹은 복수 코인의 잔고가 들어있습니다. 또한 오류인 경우에는 'error' keyword가 포함되어 있습니다. 사용예는 jpy_upbit.py에 밑 부분에 있습니다.
잔고는 ['total']과 ['orderable'] 항목이 있는데, 'orderable'은 잔고 중 신규 주문이 가능한 수량입니다.
다음에는 이전에 기술한 전략 시뮬레이터와 거래소 API를 합쳐서 upbit에서 특정 전략으로 자동매매를 하는 방법을 기술하도록 하겠습니다.
'시스템트레이딩' 카테고리의 다른 글
[시스템트레이딩] API를 이용한 자동매매(3) (0) | 2020.12.12 |
---|---|
[시스템트레이딩] API를 이용한 자동매매(2) (10) | 2020.12.12 |
[시스템트레이딩] 전략 시뮬레이션(7) - 과거 데이터(분봉) 가져오기 (2) | 2020.12.03 |
[시스템트레이딩] 전략 시뮬레이션(6) - 리펙토링 (0) | 2020.11.26 |
[시스템트레이딩] 전략 시뮬레이션(5) - 추세구간, 이동평균선 추가하기 (2) | 2020.11.22 |