자산뿌울리기/개발일지

[TelegramAlarm] 시작(1)

narmeee 2023. 4. 22. 20:43

전략

대부분의 거래소에서 코인 목록은 한 번의 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

 

다음에 할 것

받아온 호가 정보를 기반으로 수익 발생 여부 검사하기