320x100
안녕하세요.
코라밸 입니다.
이번 글에서는 업비트 자동매매 프로그램을 같이 만들어 보겠습니다.
우선 업비트 개발자 문서 페이지를 살펴 보겠습니다. (개발자 문서 페이지 바로가기)
- 전체 계좌 조회
방식: REST API
용도: 현재 보유한 코인의 정보를 조회
사용: 1초에 한번씩 호출하여 현재가와 평단가를 비교 -> 현재 손익률 계산 가능 - 주문 리스트 조회
방식: REST API
용도: 보유한 미체결 주문을 조회
사용:
1. 1초에 한번씩 호출하며 한번 호출할 때 최대 100개의 주문을 가져올 수 있음
2. 호출해서 배열에 저장
3. 저장된 배열과 조회된 데이터를 비교하여 변경된 주문이 있는지 확인
4. 변경된 주문은 체결된 주문이 체결완료된 주문인지 확인 후 처리 - 주문하기
방식: REST API
용도: 매수 주문 및 매도 주문 전송
사용:
- 매수 주문 체결 시 조건식에 따라 매도 주문을 전송
- 매도 주문 체결 시 조건식에 따라 매수 주문을 전송 - 시세 Ticker 조회
방식: Websocket
용도: 실시간 시세정보를 수신
사용: 실시간으로 들어오는 시세 정보를 저장하고 사용
이전글에서 언급한 요청 수 제한 내용입니다.
참고하셔서 아이피가 차단되는 일이 없길 바랍니다.
웹소켓을 이용해서 업비트에서 원화 마켓의 코인들의 현재가를 가져오는 코드입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | const axios = require('axios'); const W3CWebSocket = require('websocket').w3cwebsocket; const { uuid } = require('uuidv4'); let markets = []; let upbitTickers = []; let upbitTicker = null; const tickerWebSocket = () => { try { upbitTicker = null; upbitTicker = new W3CWebSocket('wss://api.upbit.com/websocket/v1'); upbitTicker.binaryType = 'arraybuffer'; let arrMarkets = []; for (const market of markets) { arrMarkets.push(market.market); } upbitTicker.onopen = () => { upbitTicker.send( JSON.stringify([ { ticket: uuid() }, { type: 'ticker', codes: arrMarkets, isOnlySnapshot: false, isOnlyRealtime: true, }, { foramt: 'SIMPLE' }, ]) ); }; upbitTicker.onmessage = (e) => { const enc = new TextDecoder('utf-8'); const arr = new Uint8Array(e.data); const ticker = JSON.parse(enc.decode(arr)); upbitTickers[ticker.cd] = ticker.tp; console.log(`${ticker.cd}: ${ticker.tp}`); }; upbitTicker.onerror = () => { console.log('Websocker ticker ERROR occurred.'); }; upbitTicker.onclose = () => { tickerWebSocket(); }; } catch (error) { log.error(moment().local().format(), error); } }; axios .get('https://api.upbit.com/v1/market/all', { params: { isDetails: false }, }) .then((response) => { markets = response.data.filter((x) => x.market.startsWith('KRW-')); tickerWebSocket(); }) .catch((error) => { log.error(moment().local().format(), error); }); | cs |
다음글에서 주문 전송 및 자동매매 실습 코드를 작성해보도록 하겠습니다.
자동매매 개발자 오픈톡: https://open.kakao.com/o/gbD73Bud
320x100
'함께만드는 자동매매' 카테고리의 다른 글
바이낸스 자동매매 프로그램 만들기 #2 (0) | 2022.01.17 |
---|---|
바이낸스 자동매매 프로그램 만들기 #1 (0) | 2022.01.17 |
업비트 자동매매 프로그램 만들기 - 실습 (0) | 2022.01.17 |
자동매매 만들기 - 사전 설명 (0) | 2022.01.17 |
자동매매 프로그램 만들기 - 머릿말 (0) | 2022.01.17 |