320x100
안녕하세요.
코라밸 입니다.
이번 글에서는 바이낸스 선물(Futures) 자동매매 프로그램을 같이 만들어 보겠습니다.
- 시세 (Ticker) 조회
방식: WebSocket
용도: 실시간으로 시세정보를 수신
사용: 실시간으로 들어오는 시세정보를 저장하고 사용 - 주문 정보 변경 체크
방식: WebSocket
용도: 모든 주문 정보에 변동이 생길 때마다 웹소켓으로 신호를 받아서 처리
사용: 주문의 체결이 발생한 즉시 주문 전송 등 사전 정의된 작업 수행 - 주문하기
방식: REST API
용도: 매수 주문 및 매도 주문 전송
사용: Open Order 또는 Close Order을 전송 - 계좌 정보 조회
방식: REST API
용도: 현재 지갑의 잔고 및 보유 포지션의 정보를 조회
사용: 0.3초에 한번씩 호출하여 현재가와 진입가를 비교해서 현재 손익률, 목표 손익률을 비교해서 처리
1번부터 차례대로 예제 코드를 살펴보겠습니다.
시세 (Ticker) 조회 예제 코드
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 | const W3CWebSocket = require('websocket').w3cwebsocket; const binanceFuturesTickers = []; let usdsmTicker = null; const usdsTickerWebSocket = async () => { try { usdsmTicker = new W3CWebSocket('wss://fstream.binance.com/ws/!miniTicker@arr'); usdsmTicker.onmessage = (e) => { const _binanceFuturesTickers = JSON.parse(e.data); for (let tick of _binanceFuturesTickers) { binanceFuturesTickers[tick.s] = Number(tick.c); } }; usdsmTicker.onerror = () => { console.log(`USDS ticker websocket ERROR occurred.`); }; usdsmTicker.onclose = () => { usdsTickerWebSocket(); }; } catch (error) { console.log(error); } }; usdsTickerWebSocket(); | cs |
바이낸스의 Websocker Ticker 같은 경우 업비트와 달리 대략 1초에 한번씩 데이터를 쏴주는 형태입니다.
원하는 형태로 저장하셔서 활용하시면 됩니다.
주문 정보 변경 체크 예제 코드
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 61 62 63 64 65 66 67 68 69 70 71 72 73 | const axios = require('axios'); const moment = require('moment'); const W3CWebSocket = require('websocket').w3cwebsocket; const BINANCE_ACCESS_KEY = 'BINANCE_ACCESS_KEY'; const getListenKey = async (url, accessKey) => { return await axios({ method: 'POST', url, headers: { 'X-MBX-APIKEY': accessKey, }, }) .then((response) => { return response.data.listenKey; }) .catch((error) => { console.log(error.response.data); return null; }); }; const usdsmWebSocket = async () => { try { usdsmUserData = null; usdsmListenKey = await getListenKey('https://fapi.binance.com/fapi/v1/listenKey', BINANCE_ACCESS_KEY); usdsmUserData = new W3CWebSocket( `wss://fstream.binance.com/ws/${usdsmListenKey}` ); usdsmUserData.onopen = () => { console.log(`USDS-M websocket has been OPENED.`); }; usdsmUserData.onmessage = (e) => { usdsmProcess(e); }; usdsmUserData.onerror = () => { console.log(`USDS-M websocket ERROR occurred.`); }; usdsmUserData.onclose = () => { // console.log(`USDS-M websocket has been CLOSED.`); usdsmWebSocket(); }; } catch (error) { console.log(error); } }; const usdsmProcess = async (e) => { try { if (typeof e.data === 'string') { const data = JSON.parse(e.data); if (data.e === 'ORDER_TRADE_UPDATE') { if (data.o.X === 'FILLED' && data.o.o === 'LIMIT') { // 지정가 주문 체결시 하고 싶은 작업을 여기에 작성 } } else if (data.e === 'ACCOUNT_UPDATE' && data.a.m === 'ORDER') { // 주문 정보의 변동으로 인해 계좌정보가 변동된 경우 하고 싶은 작업을 여기에 작성 // 예를 들면 포지션이 추가되었을 때, 포지션이 시장가로 종료 되었을 때 등 } else if (data.e === 'ACCOUNT_UPDATE' && data.a.m === 'FUNDING_FEE') { // 펀딩비가 발생되어 계좌정보가 변동된 경우 하고 싶은 작업을 여기에 작성 } else if (data.e === 'listenKeyExpired') { console.log('USDS-M websocket listen key expired!!!'); } } } catch (error) { console.log(error); } }; usdsmWebSocket(); | cs |
코드 안의 주석을 보시면 아시겠지만
데이터를 불러오는 로직을 짜놨기 때문에 주석을 읽어보시고 활용하여 정보를 처리하시면 됩니다.
이번 글은 여기서 마무리하고
다음편에서 코드 예제를 이어가겠습니다.
자동매매 개발자 오픈톡: https://open.kakao.com/o/gbD73Bud
320x100
'함께만드는 자동매매' 카테고리의 다른 글
바이낸스 자동매매 프로그램 만들기 - 응용편 (0) | 2022.01.17 |
---|---|
바이낸스 자동매매 프로그램 만들기 #2 (0) | 2022.01.17 |
업비트 자동매매 프로그램 만들기 - 실습 (0) | 2022.01.17 |
업비트 자동매매 프로그램 만들기 - 기본 (0) | 2022.01.17 |
자동매매 만들기 - 사전 설명 (0) | 2022.01.17 |