업비트 Open API Reference 문서를 참고하여 Python으로 API 호출 코드를 작성해 보고 Exchange API 호출 테스트한 내용을 정리 합니다.
테스트에 사용된 기본 코드 구조는 아래 글을 참고하면 됩니다.
[업비트 OpenAPI] 기본 개발 가이드 정리 및 샘플 코드 (in Python)
API 구분별 함수 코드만 작성하고 테스트 결과를 나열 합니다.
자산
전체 계좌 조회
내가 보유한 자산 리스트를 보여줍니다.
# 자산 - 전체 계좌 조회
def GetAccounts(self):
payload = {
'access_key': self.access_key,
'nonce': str(uuid.uuid4()),
}
jwt_token = jwt.encode(payload, self.secret_key)
authorize_token = 'Bearer {}'.format(jwt_token)
headers = {"Authorization": authorize_token}
res = requests.get(self.server_url + '/v1/accounts', headers=headers)
ret = res.json()
return ret
주문
주문 가능 정보
마켓별 주문 가능 정보를 확인합니다.
# 주문 - 주문 가능 정보
def GetOrdersChance(self, market):
query = {
'market': market,
}
query_string = urlencode(query).encode()
m = hashlib.sha512()
m.update(query_string)
query_hash = m.hexdigest()
payload = {
'access_key': self.access_key,
'nonce': str(uuid.uuid4()),
'query_hash': query_hash,
'query_hash_alg': 'SHA512',
}
jwt_token = jwt.encode(payload, self.secret_key)
authorize_token = 'Bearer {}'.format(jwt_token)
headers = {"Authorization": authorize_token}
res = requests.get(self.server_url + "/v1/orders/chance",
params=query, headers=headers)
ret = res.json()
return ret
개별 주문 조회
주문 UUID를 통해 개별 주문건을 조회합니다.
# 주문 - 개별 주문 조회
def GetOrder(self):
query = {
'uuid': '9ca023a5-851b-4fec-9f0a-48cd83c2eaae',
}
query_string = urlencode(query).encode()
m = hashlib.sha512()
m.update(query_string)
query_hash = m.hexdigest()
payload = {
'access_key': self.access_key,
'nonce': str(uuid.uuid4()),
'query_hash': query_hash,
'query_hash_alg': 'SHA512',
}
jwt_token = jwt.encode(payload, self.secret_key)
authorize_token = 'Bearer {}'.format(jwt_token)
headers = {"Authorization": authorize_token}
res = requests.get(self.server_url + "/v1/order", params=query, headers=headers)
ret = res.json()
return ret
주문 리스트 조회
주문 리스트를 조회합니다.
# 주문 - 주문 리스트 조회
def GetOrders(self, uuids):
query = {
'state': 'wait',
}
query_string = urlencode(query)
uuids = [
'9ca023a5-851b-4fec-9f0a-48cd83c2eaae',
# ...
]
uuids_query_string = '&'.join(["uuids[]={}".format(uuid) for uuid in uuids])
query['uuids[]'] = uuids
query_string = "{0}&{1}".format(query_string, uuids_query_string).encode()
m = hashlib.sha512()
m.update(query_string)
query_hash = m.hexdigest()
payload = {
'access_key': self.access_key,
'nonce': str(uuid.uuid4()),
'query_hash': query_hash,
'query_hash_alg': 'SHA512',
}
jwt_token = jwt.encode(payload, self.secret_key)
authorize_token = 'Bearer {}'.format(jwt_token)
headers = {"Authorization": authorize_token}
res = requests.get(self.server_url + "/v1/orders", params=query, headers=headers)
ret = res.json()
return ret
주문 취소 접수
주문 UUID를 통해 해당 주문에 대한 취소 접수를 합니다.
# 주문 - 주문 취소 접수
def DeleteOrder(self, uuid):
query = {
'uuid': uuid,
}
query_string = urlencode(query).encode()
m = hashlib.sha512()
m.update(query_string)
query_hash = m.hexdigest()
payload = {
'access_key': self.access_key,
'nonce': str(uuid.uuid4()),
'query_hash': query_hash,
'query_hash_alg': 'SHA512',
}
jwt_token = jwt.encode(payload, self.secret_key)
authorize_token = 'Bearer {}'.format(jwt_token)
headers = {"Authorization": authorize_token}
res = requests.delete(self.server_url + "/v1/order", params=query, headers=headers)
ret = res.json()
return ret
주문하기(Buy) : 지정가
지정가로 매수 주문을 요청 합니다.
# 주문 - 주문하기(Buy) : 지정가
def PostOrders_Buy(self, market, volume, price):
query = {
'market': market,
'side': 'bid',
'volume': volume,
'price': price,
'ord_type': 'limit',
}
query_string = urlencode(query).encode()
m = hashlib.sha512()
m.update(query_string)
query_hash = m.hexdigest()
payload = {
'access_key': self.access_key,
'nonce': str(uuid.uuid4()),
'query_hash': query_hash,
'query_hash_alg': 'SHA512',
}
jwt_token = jwt.encode(payload, self.secret_key)
authorize_token = 'Bearer {}'.format(jwt_token)
headers = {"Authorization": authorize_token}
res = requests.post(self.server_url + "/v1/orders", params=query, headers=headers)
ret = res.json()
return ret
주문하기(Buy) : 시장가
시장가로 매수 주문을 요청 합니다.
# 주문 - 주문하기(Buy) : 시장가
def PostOrders_Buy_Auto(self, market, price):
query = {
'market': market,
'side': 'bid',
'price': price,
'ord_type': 'price',
}
query_string = urlencode(query).encode()
m = hashlib.sha512()
m.update(query_string)
query_hash = m.hexdigest()
payload = {
'access_key': self.access_key,
'nonce': str(uuid.uuid4()),
'query_hash': query_hash,
'query_hash_alg': 'SHA512',
}
jwt_token = jwt.encode(payload, self.secret_key)
authorize_token = 'Bearer {}'.format(jwt_token)
headers = {"Authorization": authorize_token}
res = requests.post(self.server_url + "/v1/orders", params=query, headers=headers)
ret = res.json()
return ret
주문하기(Sell) : 지정가
지정가로 매도 주문을 요청합니다.
# 주문 - 주문하기(Sell) : 지정가
def PostOrders_Sell(self, market, volume, price):
query = {
'market': market,
'side': 'ask',
'volume': volume,
'price': price,
'ord_type': 'limit',
}
query_string = urlencode(query).encode()
m = hashlib.sha512()
m.update(query_string)
query_hash = m.hexdigest()
payload = {
'access_key': self.access_key,
'nonce': str(uuid.uuid4()),
'query_hash': query_hash,
'query_hash_alg': 'SHA512',
}
jwt_token = jwt.encode(payload, self.secret_key)
authorize_token = 'Bearer {}'.format(jwt_token)
headers = {"Authorization": authorize_token}
res = requests.post(self.server_url + "/v1/orders", params=query, headers=headers)
ret = res.json()
return ret
주문하기(Sell) : 시장가
시장가로 매도 주문을 요청합니다.
# 주문 - 주문하기(Sell) : 시장가
def PostOrders_Sell_Auto(self, market, volume):
query = {
'market': market,
'side': 'ask',
'volume': volume,
'ord_type': 'market',
}
query_string = urlencode(query).encode()
m = hashlib.sha512()
m.update(query_string)
query_hash = m.hexdigest()
payload = {
'access_key': self.access_key,
'nonce': str(uuid.uuid4()),
'query_hash': query_hash,
'query_hash_alg': 'SHA512',
}
jwt_token = jwt.encode(payload, self.secret_key)
authorize_token = 'Bearer {}'.format(jwt_token)
headers = {"Authorization": authorize_token}
res = requests.post(self.server_url + "/v1/orders", params=query, headers=headers)
ret = res.json()
return ret