업비트 오픈API를 사용해서 시장가 매수,
매수된 주문을 조회 해보는 예제 코드 입니다.
1. 시장가로 매수 하기.
2. 매수 주문 조회 하기.
매수 주문 후 조회 하는 테스트.
1. Upbit API doc
주문하기 : https://docs.upbit.com/reference/%EC%A3%BC%EB%AC%B8%ED%95%98%EA%B8%B0
개별 주문 조회 : https://docs.upbit.com/reference/%EA%B0%9C%EB%B3%84-%EC%A3%BC%EB%AC%B8-%EC%A1%B0%ED%9A%8C
2. Code
const client = require('./client')
async function test(){
console.log('requestMarketBuy')
const orderResponse = await client.requestMarketBuy('KRW-BTC', '4900')
console.log(orderResponse)
console.log('getOrderStatus')
const orderStatus = await client.getOrderStatus('6830700e-9f2b-4216-99be-aaaaaaaa')
console.log(orderStatus)
}
test()
위에서 주문금액이 4900으로 실패 케이스로, 주문하기, 조회하기 모두 실패가 나게 되어 있습니다.
주문 : 금액을 5000원 이상으로 설정하면 정상 동작 가능 합니다.
조회 : uuid를 주문 후 리턴 받은 값으로 변경합니다.
client.js
const request = require('request')
const uuidv4 = require("uuid/v4")
const crypto = require('crypto')
const sign = require('jsonwebtoken').sign
const queryEncode = require("querystring").encode
const settings = require('./settings');
const server_url = 'https://api.upbit.com'
exports.getOrderStatus = (uuid) => new Promise((resolve, reject)=> {
const API = "/v1/order"
const body = { uuid: uuid }
request(createGetOptions(API, body), function(error, response, body) {
if (error) {
resolve(error);
}
resolve(body);
})
})
exports.requestMarketBuy = (symbol, amt) => new Promise((resolve, reject)=> {
const API = "/v1/orders"
const body = {
market: symbol,
price: amt,
side: 'bid',
ord_type: 'price',
}
request(createPostOptions(API, body), function(error, response, body) {
if (error) {
resolve(error);
}
resolve(body);
})
})
function createPostOptions(api, body){
const query = queryEncode(body)
const token = createToken(body)
return {
method: 'POST',
url: `${server_url}${api}`,
headers: {Authorization: `Bearer ${token}`},
json: body
}
}
function createGetOptions(api, body){
const query = queryEncode(body)
const token = createToken(body)
return {
method: 'GET',
url: `${server_url}${api}?${query}`,
headers: {Authorization: `Bearer ${token}`},
json: body
}
}
function createToken(body){
const query = queryEncode(body)
const hash = crypto.createHash('sha512')
const queryHash = hash.update(query, 'utf-8').digest('hex')
const payload = {
access_key: settings.getAccessKey(),
nonce: uuidv4(),
query_hash: queryHash,
query_hash_alg: 'SHA512',
}
return sign(payload, settings.getSecretKey())
}
https://github.com/pish-io/exchange/tree/main/upbit/node
전체 코드는 github에서 확인 가능 합니다.
댓글