320x100
안녕하세요.
코라밸 입니다.
이번에는 지난 글 내용들을 종합하여 셀제로 작동하는 자동매매 코드를 한번 작성해 볼게요.
우선 코드 예제 보시죠.
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 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | const axios = require('axios'); const moment = require('moment'); const W3CWebSocket = require('websocket').w3cwebsocket; const BINANCE_ACCESS_KEY = 'BINANCE_ACCESS_KEY'; const BINANCE_SECRET_KEY = 'BINANCE_SECRET_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(moment().local().format('HH:mm:ss'), 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(moment().local().format('HH:mm:ss'), error); } }; const sendOrder = async ({ symbol, side, positionSide, price, quantity }) => { const _query = { symbol, side, positionSide, type: 'LIMIT', timeInForce: 'GTC', quantity, price, timestamp: moment().valueOf(), }; const query = querystring.stringify(_query); const sign = crypto .createHmac('sha256', BINANCE_SECRET_KEY) .update(query) .digest('hex'); await axios({ method: 'POST', url: `https://fapi.binance.com/fapi/v1/order?${query}&signature=${sign}`, headers: { 'X-MBX-APIKEY': BINANCE_ACCESS_KEY, }, }) .then((response) => { // 주문 성공 }) .catch((error) => { console.log(moment().local().format('HH:mm:ss'), error.response.data); }); }; 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') { await sendOrder({ symbol: data.o.s, side: data.o.S === 'BUY' ? 'SELL' : 'BUY', positionSide: data.o.ps, price: Number( data.o.S === 'BUY' ? data.o.p * 1.01 : data.o.p * 0.99 ).toFixed(2), // toFixed(2) 의 숫자 2는 해당 코인의 가격이 소숫점 몇째자리까지 취급하느냐에 따라 다르게 넣어줘야 합니다. 예를 들어 비트코인은 2 이고 도지코인의 경우 5 입니다. quantity: data.o.q, }); } } } } catch (error) { console.log(moment().local().format('HH:mm:ss'), error); } }; usdsmWebSocket(); | cs |
위 코드는
롱, 숏 방향에 관계없이 주문이 체결되면 오픈은 클로즈로, 클로즈는 오픈으로 자동으로 주문을 생성해주는 로직입니다.
롱 오픈(매수) 되는 경우 진입가 +1% 가격에 롱 클로즈(매도) 주문을 생성하고
숏 오픈(매도) 되는 경우 진입가 -1% 가격에 숏 클로즈(매수) 주문을 생성합니다.
위 코드를 응용하시면 대부분 자동매매를 구현할 수 있습니다.
그럼 화이팅입니다. ^_^
자동매매 개발자 오픈톡: https://open.kakao.com/o/gbD73Bud
320x100
'함께만드는 자동매매' 카테고리의 다른 글
코라밸 주문 입력 동영상 (2) | 2022.02.04 |
---|---|
코라밸 자동매매의 기본 로직 (4) | 2022.01.19 |
바이낸스 자동매매 프로그램 만들기 #2 (0) | 2022.01.17 |
바이낸스 자동매매 프로그램 만들기 #1 (0) | 2022.01.17 |
업비트 자동매매 프로그램 만들기 - 실습 (0) | 2022.01.17 |