전략
대부분의 거래소에서 코인 목록은 한 번의 api 호출로 가져올 수 있다.
그런데 이때 제공해주는 코인 가격에 대한 정보는 best_bids, best_asks, last_price 이 정도만 제공한다.
제공하지 않을수도 있다. T.T
best_bids : 가장 위에 있는 매수 호가
best_asks : 가장 밑에 있는 매도 호가
last_price : 마지막 체결 가격
각 거래소별 코인 목록과 최근 거래가를 가져오고 거래별로 조합해서 겹치는 코인에 대한 차이를 계산한다.
{
"currency_pair": "BTC_USDT",
"last": "27314.9",
"lowest_ask": "27314.9",
"highest_bid": "27312.1",
"change_percentage": "-2.52",
"change_utc0": "0.19",
"change_utc8": "-2.6",
"base_volume": "4117.514914719",
"quote_volume": "113783563.68053",
"high_24h": "28302.9",
"low_24h": "27143.7"
}
gateio 코인 목록을 받아오는 api (https://api.gateio.ws/api/v4/spot/tickers)
변수(예상하지 못한...)
아래 그림을 예시로 보면 호가창이 얇은 경우 best_bids의 값은 353.1원이지만 353.1원에 매수로 걸려있는 건 2개이다.
실제 가격차이가 발생한다해도 팔 수 있는 건 2개인 것이다. (차이가 나도 의미가 없는 것... OTL)
그렇기 때문에 실질적으로 수익이 발생할 수 있는지 확인하기 위해서 각 코인별 호가(orderbook)를 받아올 필요가 있다.
하지만 호가 api는 각 코인마다 요청해야하는데 거래소에서 ip별로 api 요청 수 제한하고 있다.
(업비트 : 초당 10회, 분당 600회 / 빗썸 : 1초당 최대 135회 / 코인원 : 분당 90회 ...? )
최대한 호가 api 를 적게 호출하기 위해서 우선 가격차이가 발생한 것만 선별한다. (최대한 실시간에 가깝게 하기 위해..)
보통의 메이저 코인들은 거래소별 차이가 크게 벌어지지 않기때문에 아래과정에서 걸러지게 된다.
const SET_MINIMAL_DIFF = 2 // 최소
for (let targetCoin of targetExchangeCoinList) {
//차익 = abs(해당 코인 차이 - BTC 차이)
BASE_DIFF = diffByExchange[basedExchange][targetExchange]['BTC'].diff;
diff = diffByExchange[basedExchange][targetExchange][targetCoin].diff - BASE_DIFF;
//설정한 수익률보다 작은경우 제거
if (Math.abs(diff) < SET_MINIMAL_DIFF) {
delete diffByExchange[basedExchange][targetExchange][targetCoin];
continue;
}
}
이번에 사용한것
sync-request
거래소 api로 데이터를 받아올 때 동기로 시행
https://www.npmjs.com/package/sync-request
다음에 할 것
받아온 호가 정보를 기반으로 수익 발생 여부 검사하기
'자산뿌울리기 > 개발일지' 카테고리의 다른 글
[TelegramAlarm] To-Do List (4) (0) | 2023.05.06 |
---|---|
[TelegramAlarm] 텔래그램으로 알림 보내기 (3) (0) | 2023.05.01 |
[TelegramAlarm] 호가 계산하기 (2) (0) | 2023.04.26 |
[Arbitrage Extension] 일단 여기까지...(2) (0) | 2023.04.19 |
[Arbitrage Extension] 시작(1) (0) | 2023.04.15 |