728x90
이전 글에서 다룬 업비트 지갑 연동에 이어,
이번 포스팅에서는 매도와 매수 기능을 추가한 코인 매매 트레이딩 봇을 만드는 방법을 소개합니다.
프로젝트 환경 세팅과 업비트 업비트 지갑연동이 궁금하시다면 아래 링크의 이전 글을 참고 부탁드립니다.
2024.04.28 - [사이드프로젝트] - [Node.js] 업비트 API로 트레이딩 봇 만들기 - 업비트 지갑 연동
참고문서
이전 글에서 말씀드린 업비트에서 제공하는 API 문서를 참고하였습니다.
프로젝트 구조
📦src
┣ 📂api
┃ ┣ 📜account.js
┃ ┣ 📜orders.js
┗ 📜index.js
주문하기 코드
업비트 API문서에서 제공하는 주문하기 코드를 참고하여 작성하였습니다.
주요 라이브러리
- axios : HTTP 요청을 위한 라이브러리로 업비트에서 제공하는 코드의 'request' 라이브러리를 변경하였습니다.
- crypto : Node.js의 내장 모듈로 암호화 관련 기능을 제공합니다.
- uuid : UUID를 생성하여 요청에 고유한 식별자를 추가하기 위한 라이브러리입니다.
- jsonwebtoken : JSON 웹 토큰을 생성하여 API 요청에 필요한 인증 토큰을 생성하기 위한 라이브러리입니다.
주문 함수 설명
order 함수는 비동기 함수로, [market, side, volume, price, ord_type]를 인자로 받습니다.
각 파라미터에 대한 설명은 업비트 API 문서를 참고하거나 아래 코드의 주석을 확인하시면 됩니다.
- market: 거래할 마켓 ID (예: "KRW-BTC")
- side: 주문 종류 (매수: "bid", 매도: "ask")
- volume: 주문량 (지정가 주문 및 시장가 매도 시 필수)
- price: 주문 가격 (지정가 주문 및 시장가 매수 시 필수)
- ord_type: 주문 타입 (지정가 주문: "limit", 시장가 매수: "price", 시장가 매도: "market")
적절한 인수를 넣어 함수가 실행되면, 주문 정보를 쿼리 스트링으로 변환 후 payload 객체에 접근 키, 쿼리 해시, 해시 알고리즘을 포함시킵니다. 그런 다음, payload와 secret_key를 이용해 JWT token을 생성합니다. 마지막으로, options 객체에 HTTP 메소드, 헤더, 데이터, URL을 설정한 후 axios를 이용해 API 요청을 보냅니다.
orders.js 매수 구현 코드
import axios from "axios";
import { v4 as uuidv4 } from "uuid";
import crypto from "crypto";
import jwt from "jsonwebtoken";
import querystring from "querystring";
import dotenv from "dotenv";
dotenv.config();
const access_key = process.env.UPBIT_OPEN_API_ACCESS_KEY;
const secret_key = process.env.UPBIT_OPEN_API_SECRET_KEY;
const server_url = process.env.UPBIT_OPEN_API_SERVER_URL;
const order = async (market, side, volume, price, ord_type) => {
const body = {
market, // "KRW-BTC", //마켓 ID (필수)
side, //주문 종류 (필수) bid : 매수 , ask : 매도
volume, //주문량 (지정가, 시장가 매도 시 필수)
price, //주문 가격. (지정가, 시장가 매수 시 필수)
ord_type, //주문 타입 (필수) ,limit : 지정가 주문, price : 시장가 주문(매수), market : 시장가 주문(매도)
};
const query = querystring.encode(body);
const hash = crypto.createHash("sha512");
const queryHash = hash.update(query, "utf-8").digest("hex");
const payload = {
access_key,
nonce: uuidv4(),
query_hash: queryHash,
query_hash_alg: "SHA512",
};
const token = jwt.sign(payload, secret_key);
const options = {
method: "POST",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
data: body,
url: `${server_url}/v1/orders`,
};
try {
const response = await axios(options);
console.log(response.data);
} catch (error) {
console.error(error);
}
};
export default order;
마무리
여기까지 업비트 주문을 위한 준비가 완료되었습니다.
다음 포스팅에서는 트레이드 조건을 설정한 후,
이번 포스팅에서 준비된 코드를 이용해 매수와 매도를 진행해보겠습니다.
감사합니다.
728x90
'사이드프로젝트' 카테고리의 다른 글
[Node.js] 업비트 API로 트레이딩 봇 만들기 - 업비트 지갑 연동 (1) | 2024.04.28 |
---|