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)
업비트 api 활용 내 보유 코인 정리 - VBA , 엑셀 (tistory.com)
그렇기 때문에 거래 API 코드만 설명하겠습니다.
일단 업비트 거래 인증은 토큰 jwt과 sha512로 주소를 암호화합니다.
그래서 이 부분도 코드로 다 만들어 뒀습니다.
VBA, 엑셀로 SHA512 HASH 하기 (tistory.com)
vba로 jwt 만들기 , 만드는 방법 - hs256 (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
엑셀 파일
※ 1시간 이후에는 파일이 제거됩니다.
※ 1시간 이상 사용하고 싶으시면 비밀 댓글로 남겨주시면 비밀번호 알려드리겠습니다.
'코인 > 업비트API' 카테고리의 다른 글
코인 거래소 (업비트 코인원 빗썸 등) API 엑셀 파싱 사용하기 - VBA json 파싱 (1) | 2021.05.16 |
---|---|
엑셀 업비트 API 실시간 캔들값 엑셀 파일 자동 갱신 - VBA (23) | 2021.05.12 |
VBA 일정 시간 간격으로 업비트 코인가격 갱신하기 (0) | 2021.05.02 |
업비트 연속 양봉 또는 음봉 일 때 핸드폰 알람 프로그램 - 오토핫키+텔레그램 (1) | 2021.05.01 |
업비트 코인원 빗썸 현재 가격 정리 및 가격 비교 엑셀 - VBA (17) | 2021.04.27 |
댓글