코인 - 라이프 - 밸런스

당신의 코인과 인생의 밸런스를 위하여 코라밸을 만들었습니다.

코라밸 UI 바로가기

함께만드는 자동매매

바이낸스 자동매매 프로그램 만들기 - 응용편

코라밸 2022. 1. 17. 23:13
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

 

함께만드는 자동매매

#코인 #암호화폐 #자동매매 #반자동매매

open.kakao.com

 

320x100