본문 바로가기
코인/업비트API

업비트 API 연결하여 엑셀로 거래내역 확인하기

by 큐브빌드 2021. 6. 30.
반응형

업비트 API 중 주문 리스트 조회하기가 있습니다.

 

예시가 전부 UUID가 필요한 줄 알았지만 주문 리스트 조회는 UUID 없이 확인하는 형태입니다.

 

업비트 API를 통해 확인 가능한 내용은 아래 표와 같습니다. (Request Parameters)

필드 설명
uuid 주문의 고유 아이디
side 주문 종류
ord_type 주문 방식
price 주문 당시 화폐 가격
state 주문 상태
market 마켓의 유일키
created_at 주문 생성 시간
volume 사용자가 입력한 주문 양
remaining_volume 체결 후 남은 주문 양
reserved_fee 수수료로 예약된 비용
remaining_fee 남은 수수료
paid_fee 사용된 수수료
locked 거래에 사용중인 비용
executed_volume 체결된 양
trade_count 해당 주문에 걸린 체결 수

※ 시장가격으로 거래했다면 주문 당시 화폐 가격을 확인할 수 없습니다.

※ 하지만 사용된 수수료를 통해서 역으로 계산할 수 있긴 합니다.

※ UUID를 사용하여 개별 주문 조회를 하면 알 수도 있습니다.

 


Request Parameters (Query 내용)

해당 부분은 검색하는 조건이라고 생각하시면 편합니다.

Name 설명
market 마켓 아이디
uuids 주문 UUID의 목록
identifiers 주문 identifier의 목록
state 주문 상태
- wait : 체결 대기 (default)
- watch : 예약주문 대기
- done : 전체 체결 완료
- cancel : 주문 취소
states 주문 상태의 목록

* 미체결 주문(wait, watch)과 완료 주문(done, cancel)은 혼합하여 조회하실 수 없습니다.
page 페이지 수, default: 1
limit 요청 개수, default: 100
order_by 정렬 방식
- asc : 오름차순
- desc : 내림차순 (default)

※ 줄 쳐둔 것은 제가 만든 코드에 쿼리가 포함 안되게 되어있습니다.

※ 최대한 업비트 API 문서에 있는 것과 비슷하게 작성하였습니다.

※ Query는 적어도 1개 이상 필요합니다.

 


코드

VBA 실행 전 레퍼런스를 체크하셔야 합니다.

 ※ 도구 > 참조 메뉴

 

Sub Orderlist()
Dim query As New Dictionary
Dim DHeader As New Dictionary
Dim Dpayload As New Dictionary
access_key = ""
secret_key = ""
server_url = "https://api.upbit.com"
'query 입력하는 부분
query.Add "state", "done"
query.Add "market", "KRW-XRP"
query.Add "page", "3"
query_string = urlencode(query, False)
query_hash = to_SHA512(query_string)
DHeader.Add "alg", "HS256"
DHeader.Add "typ", "JWT"
Header = EncodeBase64("{" & urlencode(DHeader, True) & "}")
Dpayload.Add "access_key", access_key
Dpayload.Add "nonce", Int(100000000 + Rnd() * 100000000)
Dpayload.Add "query_hash", query_hash
Dpayload.Add "query_hash_alg", "SHA512"
payload = EncodeBase64("{" & urlencode(Dpayload, True) & "}")
Signature = Base64_HMACSHA256(Header & "." & payload, secret_key)
jwt_token = Header & "." & payload & "." & Signature
authorize_token = "Bearer " & jwt_token
Dim wh As New WinHttp.WinHttpRequest
Url = server_url & "/v1/orders?" & query_string
wh.Open "get", Url
wh.SetRequestHeader "authorization", authorize_token
wh.Send
resultText = Replace(Replace(wh.ResponseText, "},{", "\"), """", "")
resultText = Mid(resultText, 3, Len(resultText) - 3)
resultText = Split(resultText, "\")
For Each i In resultText
rcnt = rcnt + 1
Cells(rcnt, 1) = i
Next
End Sub
Function urlencode(query As Dictionary, JWT As Boolean)
Dim dr()
If JWT = False Then
con1 = "="
con2 = "&"
Else
con1 = ":"
con2 = ","
End If
For Each Key In query
rcnt = rcnt + 1
ReDim Preserve dr(0 To rcnt - 1)
If JWT = True Then
dr(rcnt - 1) = """" & Key & """" & con1 & """" & query(Key) & """"
Else
dr(rcnt - 1) = Key & con1 & query(Key)
End If
Next
result = Join(dr, con2)
urlencode = result
End Function

to_SHA512 코드

 

EncodeBase64 & Base64_HMACSHA256

 


해당 VBA를 실행하면 아래 이미지와 같이 엄청 복잡한 글자들이 나타납니다.

이제 A열 선택 후 텍스트 나누기를 누릅니다.

그리고 구분 기호로 분리됨을 선택 후 쉼표 체크 후 다음 

그리고 마침을 선택합니다.

이런식으로 모든값들을 정리할 수 있습니다.

 

Page를 변경하면서 정리하시면 과거까지 다 확인 가능합니다.

반응형

댓글