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

엑셀로 업비트 코인 거래하기 업비트 API 적용 - VBA

by 큐브빌드 2021. 5. 4.
반응형

2021.07.06 내용 추가

업비트 API를 엑셀에 연결해서 거래하는 방법입니다.

 

코드가 많이 중구난방이고 정리가 안되어서 다시 한번 정리합니다.

 

최대한 엑셀로 업비트 코인 거래를 간편하게 코드를 정리해서 올려 놓겠습니다.

 

1. 가장 먼저 레퍼런스 설정이 필요합니다. ( ※ 도구 > 참조 메뉴)

 - 필수 레퍼런스 (3개)

    Microsoft XML, v3.0

    Microsoft WinHTTP Services , version 5.1

    Microsoft Scripting Runtime

 

 

 

2. 코드 내용

 - 저희가 수정할 것은 access_key , secret_key , query 부분입니다.

Sub Order()
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.Add "market", "KRW-BTC"
query.Add "side", "bid"
query.Add "volume", "1"
query.Add "price", "5000.0"
query.Add "ord_type", "limit"
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 "post", Url
wh.SetRequestHeader "authorization", authorize_token
wh.Send
wh.WaitForResponse
debug.Print(wh.ResponseText)
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

 

 

 

수정해야 되는 부분은 아래 이미지에 부분입니다.

엑셀 시트에 연결하셔도 되고 기타 다른 방법으로 연결하셔서 사용하시면 됩니다.

 

 

 

그리고 query는 아래 표를 참고하시면 됩니다. (업비트 내용입니다.)

Name 설명 예)
market * 마켓 ID (필수) KRW-BTC
side * 주문 종류 (필수)
- bid : 매수
- ask : 매도
bid
volume * 주문량 (지정가, 시장가 매도 시 필수) 0.01
price * 주문 가격. (지정가, 시장가 매수 시 필수)
ex) KRW-BTC 마켓에서 1BTC당 1,000 KRW로 거래할 경우, 값은 1000 이 된다.
ex) KRW-BTC 마켓에서 1BTC당 매도 1호가가 500 KRW 인 경우, 시장가 매수 시 값을 1000으로 세팅하면 2BTC가 매수된다.
(수수료가 존재하거나 매도 1호가의 수량에 따라 상이할 수 있음)
100
ord_type * 주문 타입 (필수)
- limit : 지정가 주문
- price : 시장가 주문(매수)
- market : 시장가 주문(매도)
limit
identifier 조회용 사용자 지정값 (선택)  

※ Identifier는 필수가 아닙니다.

 

추가로 필요한 코드들은 아래 링크를 통해 확인 가능합니다.

 

EncodeBase64 & Base64_HMACSHA256

 

 

to_SHA512


기존 내용

드디어 완성했습니다.

 

업비트 API를 공부하여 엑셀에서 코인을 사고팔고 가능합니다.

 

만든 이유는 많은 종류의 코인을 수집(?) 하다 보니 하나씩 거래하기 힘들어서 만들었습니다.

 

업비트에서 제공하는 기본 지갑 기능은 포함되어 있습니다.

 

붉은색은 이익분 , 파란색은 손실분 , 아무 색상이 없는 것은 이익도 손실도 없는 상태입니다.

 

더 많은 정보를 노출해보려고 했지만 그건 또 무슨 의미인지 공부를 해야 돼서 시간이 더 필요할 것 같습니다.

 

그래고 내가 보유한 코인을 구매/판매를 선택할 수 있습니다.

 

판매 시 본인이 거래할 수 있는 개수를 초과하는 값을 넣지는 못합니다.

 

 

 

 

업비트 API를 엑셀에 다 적용했는데 문제는 거래 신청 후 업비트가 주는 결괏값 uuid를 정리해야 되는데 그 부분은 현재 엑셀에서 어떻게 저장해둘지 고민 중입니다. 

 

추후에 업비트 API를 엑셀에 모두 이식하는 작업을 진행하면서 포함되어 있을 것 같습니다.


사용법

사용방법은 상당히 간편합니다.(?)

 

먼저 개인정보 시트에 필요한 값을 입력합니다.

 

업비트 사이트에 가서 Access Key와 Secret Key를 받으시면 됩니다.

그때 IP주소를 넣어야 하는데 그건 "내 IP주소 확인하기" 버튼을 이용하시면 주소가 노출됩니다.

※ 초록창에서 내 IP 주소라고 검색하셔도 상관없습니다.

 

여하튼 이렇게 넣으면 해당 시트는 더 사용 안 하셔도 됩니다.

 

 

이제 업비트 정리 시트에 넘어갑니다.

이렇게 버튼이 4개 있습니다.

 

내 지갑 정리 = 업비트에 보유하고 있는 코인(현금 포함) 정리됩니다.
현재 시세 갱신 = 5초 단위로 현재 거래가가 갱신 자동으로 갱신됩니다.
거래하기 = 구매/판매 , 개수 , 가격에 값이 있는 코인은 일괄적으로 해당 내용을 진행합니다.

구매 또는 판매가 적혀있는 코인은 무조건 해당 정보에 맞게 거래가 진행됩니다. 주의하시기 바랍니다.

거래하기 싫은 코인은 구매 또는 판매라는 글이 없으면 됩니다.

 

이렇게 기능이 존재합니다.

 

현재 거래 성사 유/무는 적용되어 있지 않습니다. (왜냐면 핸드폰에서 바로 반응이 오고 있어서 적용 안 했습니다.)

 

그리고 현재 시세 갱신이 적용 중이라면 엑셀 하단에 시세체크 중이라는 텍스트가 노출됩니다.

이렇게 한 번에 모든 거래를 성사시키는 기능을 만들어봤습니다.

 

 

 

 

 


거래 API 적용 전 서론

지갑 정리 , 시세 갱신은 제가 벌써 블로그 글을 작성했습니다.

VBA 일정 시간 간격으로 업비트 코인 가격 갱신하기 (tistory.com)

 

VBA 일정 시간 간격으로 업비트 코인가격 갱신하기

아래 사이트에 업비트 api를 이용한 시세를 정리하고 있었습니다. 업비트 api 활용 모든 코인 시세 정리하기 - VBA (tistory.com) 업비트 api 활용 모든 코인 시세 정리하기 - VBA 업비트 api를 보면서 많은

downupup.tistory.com

업비트 api 활용 내 보유 코인 정리 - VBA , 엑셀 (tistory.com)

 

업비트 api 활용 내 보유 코인 정리 - VBA , 엑셀

서론 최종적으로 엑셀과 VBA를 활용하여 업비트 코인을 구매할 수 있는 시스템을 만들고 싶습니다. 업비트에서 제공하는 웹사이트 기능보다 더 빨리 더 많이 내가 필요한 정보만 추출해서 여러

downupup.tistory.com

그렇기 때문에 거래 API 코드만 설명하겠습니다.

 

일단 업비트 거래 인증은 토큰 jwt과 sha512로 주소를 암호화합니다.

 

그래서 이 부분도 코드로 다 만들어 뒀습니다.

 

 

 

 

 

VBA, 엑셀로 SHA512 HASH 하기 (tistory.com)

 

VBA,엑셀 로 SHA512 HASH 하기

업비트 API를 사용하려다 보니 SHA512를 사용해야 됩니다...ㅠㅠ JWT로 끝이 난줄알았는데 또 뭔가가 있었습니다. 그러면 SHA512는 또 어떻게 만들어야 하는지 열심히 구글링을 해봐야겠습니다. SHA512

downupup.tistory.com

vba로 jwt 만들기 , 만드는 방법 - hs256 (tistory.com)

 

vba 로 jwt 만들기 , 만드는 방법 - hs256

서론 업비트 api를 엑셀로 적용하려고 하다 보니 jwt를 만들어야 합니다. jwt.io 사이트를 활용하여 jwt를 만들어 낼 수 있습니다. 하지만 추후 코인을 구매하고 코인을 판매할 때 다양한 주소들을

downupup.tistory.com


API 적용하기

 

저는 파이썬 코드를 참고하여 옮겼습니다. 파이썬 코드를 보시면서 해당 코드를 보시면 이해가 조금 더 쉬울 수도 있습니다.

 

혹시라도 궁금한 거 있으시면 댓글로 문의 바랍니다.

 

엑셀에서 도구 > 참조에서 Microsoft WinHTTP Services, version 5.1과 Microsoft XML, v3.0을 체크해야 합니다.

sub CoinSell()

access_key = Worksheets("개인정보").Range("b6")

secret_key = Worksheets("개인정보").Range("b7")

server_url = "https://api.upbit.com/v1/orders?"



'쿼리 만들기 위함

market = "KRW-BTC" ' 코인이름

side = "bid" '매수 ask는 매도

volume = 1 '거래 수량

price = 5000 '거래 가격

ord_type = "limit" '지정가격 price시장가 매수 market시장가 매도



query_string = QueryString(market, side, volume, price, ord_type)

query_hash = to_SHA512(query_string)



uuid = WorksheetFunction.RandBetween(100000000,999999999)



Header = EncodeBase64(TextCon("{'alg':'HS256','typ':'JWT'}"))



Payload = "{'access_key':'" & access_key & "','nonce':'" & uuid & "','query_hash':'" & query_hash & "','query_hash_alg':'SHA512'}"

Payload = EncodeBase64(TextCon(Payload))


SIGNATURE = Base64_HMACSHA256(Header & "." & Payload, secret_key)

authorize_token = Authorizemake(Header, Payload, SIGNATURE)



URL = server_url & query_string

Whttping URL, ResultText, authorize_token, "Post"

msgbox ResultText

end sub




Function QueryString(market, side, volume, price, ord_type)

Value1 = "market=" & market & "&"

Value2 = "side=" & side & "&"

Value3 = "volume=" & volume & "&"

Value4 = "price=" & price & "&"

value5 = "ord_type=" & ord_type

QueryString = Value1 & Value2 & Value3 & Value4 & value5

End Function



Public Function TextCon(TextV)

TextCon = Replace(TextV, "'", """")

End Function



Public Function Authorizemake(Header, Payload, Signature)

Authorizemake = "Bearer " & Header & "." & Payload & "." & Signature

End Function



Sub Whttping(URL, ResultText, Authorizemake, WType)

Dim Whttp As New WinHttp.WinHttpRequest



Whttp.Open WType, URL

Whttp.SetRequestHeader "user-agent", "user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36 Edg/90.0.818.51"

Whttp.SetRequestHeader "Authorization", Authorizemake

Whttp.Send

Whttp.WaitForResponse

ResultText = Replace(Whttp.ResponseText, """", "")

End Sub

 

 

 

 

 

 

 


엑셀 파일 

 

 

 

업비트거래.xlsm
0.05MB

※ 1시간 이후에는 파일이 제거됩니다.

※ 1시간 이상 사용하고 싶으시면 비밀 댓글로 남겨주시면 비밀번호 알려드리겠습니다.

반응형

댓글