달나라 노트

Python Upbit : get_orderbook (Upbit 호가창, 코인 호가, 코인 호가 정보, 매수 호가, 매도 호가) 본문

Python/Python ETC

Python Upbit : get_orderbook (Upbit 호가창, 코인 호가, 코인 호가 정보, 매수 호가, 매도 호가)

CosmosProject 2022. 2. 26. 19:45
728x90
반응형

 

 

 

pyupbit를 이용해서 코인의 현재 호가정보를 보는 방법을 알아봅시다.

 

일단 호가 정보를 불러오기 전에 호가가 뭔지부터 이해해야 얻어지는 데이터들의 정확한 의미를 알 수 있기 때문에 호가관련 내용을 먼저 살펴봅시다.

이번에 얘기할 호가라는 것은 주식과 코인거래 모두에서 적용되는 개념입니다.

(호가 관련 내용을 이미 알고계신 분이라면 아래쪽으로 가서 바로 코드를 보면 됩니다.)

 

호가를 간단히 말하면 사람들이 주식 또는 코인을 얼마에 팔고 얼마에 살지 예약을 걸어둔 내용을 의미합니다.

 

예를들어 현재 비트코인이랑 종목을 누군가는 사고 누군가는 팔고싶겠죠. 실제 거래도 계속 발생할거구요.

여기서 모든 사람이 단순히 현재가에 사고 파는게 아닙니다.

비트코인의 현재가가 4,800만원이라면 누군가는 4,805만원에 팔고싶을 수 있죠.

반대로 4,795만원에 사고싶을 수도 있습니다.

 

이런 경우 사람들은 핸드폰을 계속 켜두면서 자신이 원하는 가격이 될 때까지 기다릴까요?

당연히 아닙니다.

 

비트코인의 현재가가 4,800만원이어도 4,805만원이 되면 나의 비트코인을 팔도록 예약(매도 예약)을 걸어둘 수 있습니다.

비트코인의 현재가가 4,800만원이어도 4,795만원이 되면 비트코인을 사라고 예약(매수 예약)을 걸어둘 수도 있죠.

 

그러면 많은 사람들이 각자가 원하는 가격대에 매수 예약과 매도 예약을 걸어둘겁니다.

 

가격대별로 몇개의 비트코인이 매도 예약이 걸려있는지, 또는 매수 예약이 걸려있는지에 대한 내용을 알 수 있겠죠.

 

이것이 호가입니다.

 

 

업비트의 호가창 화면입니다.

가운데에 가격이 써있습니다.

 

47,620,000원 부분을 보면 좌측에 파란 그래프가 있고 0.750이라고 써져있습니다.

일단 파란 그래프는 매도를 의미합니다.

즉, 비트코인이 47,620,000원이 된다면 나의 비트코인을 팔라고 걸려있는 매도 예약이 총 0.750개라는 의미입니다.

 

이번엔 아래쪽을 보죠.

47,592,000원 부분을 보면 오른쪽에 빨간색 그래프가 살짝 보이고 0.057이라는 숫자가 써져있습니다.

빨간 그래프는 매수를 의미합니다.

즉, 비트코인이 47,592,000원이 된다면 비트코인을 사라고 걸려있는 매수 예약이 0.057개라는 의미입니다.

 

 

 

매도 호가(매도 예약)를 좀 더 정확히 말하면 47,620,000원으로 매도 예약을 해뒀을 때 무조건 비트코인 가격이 47,620,000원일 때 팔리는건 아닙니다.

47,620,000원 이상의 가격이 되면 팔립니다.

왜냐면 내가 47,620,000원에 팔고 싶은데 만약에 47,700,000원에 팔리면 더 좋은거니까요.

하지만 47,500,000원에 팔린다면? 이건 좀 문제가 있죠.

그래서 매도 호가(매도 예약)를 좀 더 정확히 설명해보면 내가 팔고싶은 최소한의 가격에 판매 예약을 걸어두는겁니다.

"나는 매도 호가 가격 이상으로 판매하고싶어" 라는 의미이죠.

 

매수 호가(매수 예약)도 마찬가지입니다.

47,592,000원에 매수 예약을 해뒀다고 할 때 반드시 비트코인의 현재가가 47,592,000원일 때 구매가 되는 것은 아닙니다.

47,400,000원에 구매가 될 수도 있죠.

왜냐면 나는 47,592,000원에 사고싶어도 더 싸게사면 좋은거니까요.

그래서 매수 호가(매수 예약)를 좀 더 정확히 설명해보면 내가 사고싶은 최대한의 가격에 구매 예약을 걸어두는겁니다.

"나는 매수 호가 가격 이하로 구매하고싶어" 라는 의미이죠.

 

 

 

또한 여기서 용어를 한 가지 정의하고 가야합니다. 이건 주식에서도 동일하게 사용되는 용어입니다ㅏ.

Ask = 매도 호가 (판매 예약이 걸려있는 금액)

Bid = 매수 호가 (구매 예약이 걸려있는 금액)

 

Bid라는 단어에는 입찰이라는 뜻이 있습니다.

따라서 Bid는 매수 호가(매수 예약 가격)을 의미하죠.

 

 

 

 

 

호가에 대한 정보를 이해했으니 이제 upbit에서 호가 정보를 불러옵시다.

 

 

Syntax

pyupbit.get_orderbook(ticker,
                      limit_info=True/False)

get_orderbook method를 이용하면 호가 정보를 불러올 수 있습니다.

 

ticker = 호가 정보를 뽑을 코인의 ticker. 또는 ticker들을 담은 list. (1개 이상의 ticker를 동시에 전달하려면 list의 형태로 전달해도 무방합니다.)

 

limit_info = 제한 정보를 표시한다 Ture, 표시하지 않는다 False (기본값은 False 입니다.)

(limit_info는 크게 중요한 내용이 아니니 기본값인 False로 유지합시다.)

 

 

 

 

 

import pyupbit as ub

order_book = ub.get_orderbook('KRW-BTC')
print(order_book)


-- Result
{'market': 'KRW-BTC', 'timestamp': 1645873574377, 'total_ask_size': 4.71183452, 'total_bid_size': 1.44965915, 'orderbook_units': [{'ask_price': 47583000.0, 'bid_price': 47580000.0, 'ask_size': 0.08537357, 'bid_size': 0.01350958}, {'ask_price': 47584000.0, 'bid_price': 47579000.0, 'ask_size': 0.04671477, 'bid_size': 0.00138756}, {'ask_price': 47599000.0, 'bid_price': 47578000.0, 'ask_size': 0.059, 'bid_size': 0.06688473}, {'ask_price': 47613000.0, 'bid_price': 47577000.0, 'ask_size': 2.66189359, 'bid_size': 0.00137808}, {'ask_price': 47618000.0, 'bid_price': 47576000.0, 'ask_size': 0.06951701, 'bid_size': 0.00144825}, {'ask_price': 47620000.0, 'bid_price': 47575000.0, 'ask_size': 0.48425624, 'bid_size': 0.51236466}, {'ask_price': 47627000.0, 'bid_price': 47574000.0, 'ask_size': 0.4314, 'bid_size': 0.0011697}, {'ask_price': 47629000.0, 'bid_price': 47570000.0, 'ask_size': 0.0001066, 'bid_size': 0.03155064}, {'ask_price': 47631000.0, 'bid_price': 47568000.0, 'ask_size': 0.0563, 'bid_size': 0.0005}, {'ask_price': 47634000.0, 'bid_price': 47565000.0, 'ask_size': 0.0385746, 'bid_size': 0.00137843}, {'ask_price': 47642000.0, 'bid_price': 47563000.0, 'ask_size': 0.0562, 'bid_size': 0.0016668}, {'ask_price': 47646000.0, 'bid_price': 47561000.0, 'ask_size': 0.3815, 'bid_size': 0.06313845}, {'ask_price': 47649000.0, 'bid_price': 47560000.0, 'ask_size': 0.29153155, 'bid_size': 0.06342316}, {'ask_price': 47652000.0, 'bid_price': 47558000.0, 'ask_size': 0.00026659, 'bid_size': 0.00344406}, {'ask_price': 47657000.0, 'bid_price': 47557000.0, 'ask_size': 0.0492, 'bid_size': 0.68641505}]}

get_orderbook method를 사용하여 얻은 결과입니다.

get_orderbook으로부터 얻어지는 결과는 dictionary입니다.

 

이렇게 보면 보기가 어려우니 좀 더 보기좋게 print해봅시다.

 

 

 

import pyupbit as ub

order_book = ub.get_orderbook('KRW-BTC')

for k in order_book.keys():
    print(k, '=', order_book[k])


-- Result
market = KRW-BTC
timestamp = 1645873637386
total_ask_size = 5.43861094
total_bid_size = 0.94364757
orderbook_units = [{'ask_price': 47557000.0, 'bid_price': 47556000.0, 'ask_size': 3.73e-06, 'bid_size': 0.14468555}, {'ask_price': 47575000.0, 'bid_price': 47554000.0, 'ask_size': 0.00014785, 'bid_size': 0.00187974}, {'ask_price': 47580000.0, 'bid_price': 47553000.0, 'ask_size': 0.20488928, 'bid_size': 0.02779782}, {'ask_price': 47581000.0, 'bid_price': 47551000.0, 'ask_size': 0.00021017, 'bid_size': 0.28369368}, {'ask_price': 47604000.0, 'bid_price': 47550000.0, 'ask_size': 0.0476, 'bid_size': 0.01361375}, {'ask_price': 47605000.0, 'bid_price': 47547000.0, 'ask_size': 0.6, 'bid_size': 0.0523}, {'ask_price': 47606000.0, 'bid_price': 47545000.0, 'ask_size': 0.46911701, 'bid_size': 0.14483847}, {'ask_price': 47613000.0, 'bid_price': 47544000.0, 'ask_size': 2.64296064, 'bid_size': 0.10450975}, {'ask_price': 47616000.0, 'bid_price': 47543000.0, 'ask_size': 0.4362, 'bid_size': 0.04232907}, {'ask_price': 47620000.0, 'bid_price': 47542000.0, 'ask_size': 0.53503152, 'bid_size': 0.01472381}, {'ask_price': 47626000.0, 'bid_price': 47541000.0, 'ask_size': 0.406, 'bid_size': 0.00137913}, {'ask_price': 47629000.0, 'bid_price': 47536000.0, 'ask_size': 0.00026066, 'bid_size': 0.0488}, {'ask_price': 47631000.0, 'bid_price': 47534000.0, 'ask_size': 0.0563, 'bid_size': 0.00093499}, {'ask_price': 47634000.0, 'bid_price': 47533000.0, 'ask_size': 0.0385746, 'bid_size': 0.01487783}, {'ask_price': 47635000.0, 'bid_price': 47532000.0, 'ask_size': 0.00131548, 'bid_size': 0.04728398}]

get_orderbook의 결과로 얻어지는 dictionary를 좀 더 보기 쉽게 print하였습니다.

각 항목별 의미는 다음과 같습니다.

 

market -> 코인의 Ticker

timestamp -> 호가 정보의 기준 timestamp

total_ask_size -> 가격대에 상관없이 매도 예약(Ask)이 걸려있는 코인 개수의 총합

total_bid_size -> 가격대에 상관없이 매수 예약(Bid)이 걸려있는 코인 개수의 총합

orderbook_units -> 가격대별 호가 정보

 

 

 

 

import pyupbit as ub

order_book = ub.get_orderbook('KRW-BTC')

orderbook_units = order_book['orderbook_units']
for i in orderbook_units:
    print(i)


-- Result
{'ask_price': 47597000.0, 'bid_price': 47570000.0, 'ask_size': 0.12792225, 'bid_size': 0.01885594}
{'ask_price': 47601000.0, 'bid_price': 47557000.0, 'ask_size': 0.3490802, 'bid_size': 0.1214982}
{'ask_price': 47605000.0, 'bid_price': 47552000.0, 'ask_size': 0.00588846, 'bid_size': 1.13951978}
{'ask_price': 47607000.0, 'bid_price': 47550000.0, 'ask_size': 0.00534059, 'bid_size': 0.03878293}
{'ask_price': 47608000.0, 'bid_price': 47549000.0, 'ask_size': 2.64296064, 'bid_size': 0.0474}
{'ask_price': 47610000.0, 'bid_price': 47545000.0, 'ask_size': 0.06638118, 'bid_size': 2.15373512}
{'ask_price': 47611000.0, 'bid_price': 47544000.0, 'ask_size': 0.42289452, 'bid_size': 0.37658049}
{'ask_price': 47613000.0, 'bid_price': 47543000.0, 'ask_size': 0.01166246, 'bid_size': 0.08954862}
{'ask_price': 47620000.0, 'bid_price': 47542000.0, 'ask_size': 0.48535494, 'bid_size': 0.01605949}
{'ask_price': 47623000.0, 'bid_price': 47541000.0, 'ask_size': 0.434, 'bid_size': 0.11617248}
{'ask_price': 47629000.0, 'bid_price': 47538000.0, 'ask_size': 0.0005034, 'bid_size': 0.0485}
{'ask_price': 47630000.0, 'bid_price': 47535000.0, 'ask_size': 0.0537, 'bid_size': 0.00012}
{'ask_price': 47633000.0, 'bid_price': 47534000.0, 'ask_size': 0.3887, 'bid_size': 0.12285349}
{'ask_price': 47635000.0, 'bid_price': 47533000.0, 'ask_size': 0.00412289, 'bid_size': 0.03697777}
{'ask_price': 47645000.0, 'bid_price': 47532000.0, 'ask_size': 0.01082783, 'bid_size': 0.05801358}

가격대별 호가를 보기 위해 order_book의 orderbook_units를 print하였습니다.

 

이제 대충 감이 오시겠지만 하나만 살펴봅시다.

 

 

 

{'ask_price': 47597000.0, 'bid_price': 47570000.0, 'ask_size': 0.12792225, 'bid_size': 0.01885594}

각 항목별 의미는 다음과 같습니다.

ask_price = 판매 예약(판매 호가) 가격

bid_price = 구매 예약(구매 호가) 가격

ask_size = 판매 예약(판매 호가) 개수

bid_size = 구매 예약(구매 호가) 개수

 

ask 부분부터 보면 아래와 같습니다.

'ask_price': 47597000.0

'ask_size': 0.12792225

47,597,000원에 비트코인 0.1279225개가 매도 예약이 걸려있다는 의미입니다.

 

 

bid 부분은 다음과 같습니다.

'bid_price': 47570000.0

'bid_size': 0.01885594

47,570,000원에 비트코인 0.01885594개가 매수 예약이 걸려있다는 의미입니다.

 

 

다른 데이터들도 가격과 개수만 다를 뿐 모두 동일한 형태입니다.

 

 

 

 

 

 

 

import pyupbit as ub

order_book = ub.get_orderbook(ticker=['KRW-BTC', 'KRW-ETH'])
print(order_book)

for ob in order_book:
    for k in ob.keys():
        print(k, '=', ob[k])


-- Result
[{'market': 'KRW-BTC', 'timestamp': 1646043387587, 'total_ask_size': 2.77171264, 'total_bid_size': 1.74216146, 'orderbook_units': [{'ask_price': 46782000.0, 'bid_price': 46781000.0, 'ask_size': 0.11465369, 'bid_size': 0.49679603}, {'ask_price': 46784000.0, 'bid_price': 46780000.0, 'ask_size': 0.21374829, 'bid_size': 0.00026707}, {'ask_price': 46795000.0, 'bid_price': 46764000.0, 'ask_size': 0.00300602, 'bid_size': 0.00982367}, {'ask_price': 46796000.0, 'bid_price': 46740000.0, 'ask_size': 0.01497088, 'bid_size': 0.14408848}, {'ask_price': 46797000.0, 'bid_price': 46739000.0, 'ask_size': 0.0002137, 'bid_size': 0.0001812}, {'ask_price': 46798000.0, 'bid_price': 46737000.0, 'ask_size': 0.0541, 'bid_size': 0.3257988}, {'ask_price': 46800000.0, 'bid_price': 46736000.0, 'ask_size': 0.05372923, 'bid_size': 0.12338758}, {'ask_price': 46801000.0, 'bid_price': 46732000.0, 'ask_size': 0.00520015, 'bid_size': 0.07297461}, {'ask_price': 46807000.0, 'bid_price': 46730000.0, 'ask_size': 0.05258871, 'bid_size': 0.05387493}, {'ask_price': 46818000.0, 'bid_price': 46725000.0, 'ask_size': 0.4495, 'bid_size': 0.00013012}, {'ask_price': 46819000.0, 'bid_price': 46722000.0, 'ask_size': 0.3935, 'bid_size': 0.00017354}, {'ask_price': 46820000.0, 'bid_price': 46720000.0, 'ask_size': 0.2763856, 'bid_size': 0.03328893}, {'ask_price': 46836000.0, 'bid_price': 46718000.0, 'ask_size': 0.00012811, 'bid_size': 0.4762}, {'ask_price': 46837000.0, 'bid_price': 46715000.0, 'ask_size': 0.2610529, 'bid_size': 0.00021406}, {'ask_price': 46838000.0, 'bid_price': 46714000.0, 'ask_size': 0.87893536, 'bid_size': 0.00496244}]}, {'market': 'KRW-ETH', 'timestamp': 1646043387396, 'total_ask_size': 74.61576742, 'total_bid_size': 335.92413172, 'orderbook_units': [{'ask_price': 3214000.0, 'bid_price': 3213000.0, 'ask_size': 1.00213767, 'bid_size': 8.98575334}, {'ask_price': 3215000.0, 'bid_price': 3212000.0, 'ask_size': 0.0098291, 'bid_size': 14.71623411}, {'ask_price': 3216000.0, 'bid_price': 3211000.0, 'ask_size': 6.14787929, 'bid_size': 20.52639059}, {'ask_price': 3217000.0, 'bid_price': 3210000.0, 'ask_size': 10.20921141, 'bid_size': 6.26783481}, {'ask_price': 3218000.0, 'bid_price': 3209000.0, 'ask_size': 0.99736587, 'bid_size': 3.20467453}, {'ask_price': 3219000.0, 'bid_price': 3208000.0, 'ask_size': 15.43395513, 'bid_size': 16.31510766}, {'ask_price': 3220000.0, 'bid_price': 3207000.0, 'ask_size': 2.61879966, 'bid_size': 16.52878883}, {'ask_price': 3221000.0, 'bid_price': 3206000.0, 'ask_size': 5.11050519, 'bid_size': 12.15470925}, {'ask_price': 3222000.0, 'bid_price': 3205000.0, 'ask_size': 8.42360003, 'bid_size': 17.13030987}, {'ask_price': 3223000.0, 'bid_price': 3204000.0, 'ask_size': 0.4922844, 'bid_size': 20.42766835}, {'ask_price': 3224000.0, 'bid_price': 3203000.0, 'ask_size': 2.76168254, 'bid_size': 15.87153193}, {'ask_price': 3225000.0, 'bid_price': 3202000.0, 'ask_size': 4.20166685, 'bid_size': 6.36560084}, {'ask_price': 3226000.0, 'bid_price': 3201000.0, 'ask_size': 1.93819171, 'bid_size': 33.06617506}, {'ask_price': 3227000.0, 'bid_price': 3200000.0, 'ask_size': 2.83102966, 'bid_size': 139.20423298}, {'ask_price': 3228000.0, 'bid_price': 3199000.0, 'ask_size': 12.43762891, 'bid_size': 5.15911957}]}]

market = KRW-BTC
timestamp = 1646043290556
total_ask_size = 3.02865794
total_bid_size = 1.76090609
orderbook_units = [{'ask_price': 46751000.0, 'bid_price': 46714000.0, 'ask_size': 0.03329262, 'bid_size': 0.052749}, {'ask_price': 46755000.0, 'bid_price': 46713000.0, 'ask_size': 1.09803822, 'bid_size': 0.20022844}, {'ask_price': 46763000.0, 'bid_price': 46712000.0, 'ask_size': 0.00320767, 'bid_size': 0.13412542}, {'ask_price': 46766000.0, 'bid_price': 46711000.0, 'ask_size': 0.07640894, 'bid_size': 0.2}, {'ask_price': 46773000.0, 'bid_price': 46710000.0, 'ask_size': 0.0479, 'bid_size': 0.0002418}, {'ask_price': 46780000.0, 'bid_price': 46709000.0, 'ask_size': 0.4164, 'bid_size': 0.0005438}, {'ask_price': 46782000.0, 'bid_price': 46701000.0, 'ask_size': 0.6754994, 'bid_size': 0.00064238}, {'ask_price': 46784000.0, 'bid_price': 46698000.0, 'ask_size': 0.21374829, 'bid_size': 0.65553737}, {'ask_price': 46790000.0, 'bid_price': 46697000.0, 'ask_size': 0.3913, 'bid_size': 0.00535227}, {'ask_price': 46793000.0, 'bid_price': 46694000.0, 'ask_size': 0.0105, 'bid_size': 0.00021416}, {'ask_price': 46795000.0, 'bid_price': 46689000.0, 'ask_size': 0.00300602, 'bid_size': 0.00023159}, {'ask_price': 46796000.0, 'bid_price': 46687000.0, 'ask_size': 0.0002137, 'bid_size': 0.01070961}, {'ask_price': 46797000.0, 'bid_price': 46686000.0, 'ask_size': 0.0002137, 'bid_size': 0.0563}, {'ask_price': 46800000.0, 'bid_price': 46685000.0, 'ask_size': 0.05372923, 'bid_size': 0.4436}, {'ask_price': 46801000.0, 'bid_price': 46683000.0, 'ask_size': 0.00520015, 'bid_size': 0.00043025}]

market = KRW-ETH
timestamp = 1646043290556
total_ask_size = 134.96269872
total_bid_size = 358.52602478
orderbook_units = [{'ask_price': 3214000.0, 'bid_price': 3212000.0, 'ask_size': 3.79064063, 'bid_size': 18.25600091}, {'ask_price': 3215000.0, 'bid_price': 3211000.0, 'ask_size': 14.57080015, 'bid_size': 21.4447154}, {'ask_price': 3216000.0, 'bid_price': 3210000.0, 'ask_size': 14.51197929, 'bid_size': 12.29584545}, {'ask_price': 3217000.0, 'bid_price': 3209000.0, 'ask_size': 13.56612604, 'bid_size': 3.14648489}, {'ask_price': 3218000.0, 'bid_price': 3208000.0, 'ask_size': 6.09457024, 'bid_size': 22.55326889}, {'ask_price': 3219000.0, 'bid_price': 3207000.0, 'ask_size': 14.57033353, 'bid_size': 10.33878883}, {'ask_price': 3220000.0, 'bid_price': 3206000.0, 'ask_size': 1.73952098, 'bid_size': 5.91640607}, {'ask_price': 3221000.0, 'bid_price': 3205000.0, 'ask_size': 7.24796779, 'bid_size': 12.18030987}, {'ask_price': 3222000.0, 'bid_price': 3204000.0, 'ask_size': 12.97360003, 'bid_size': 20.42595175}, {'ask_price': 3223000.0, 'bid_price': 3203000.0, 'ask_size': 0.27501878, 'bid_size': 15.8715676}, {'ask_price': 3224000.0, 'bid_price': 3202000.0, 'ask_size': 12.26168254, 'bid_size': 6.4280618}, {'ask_price': 3225000.0, 'bid_price': 3201000.0, 'ask_size': 20.05829663, 'bid_size': 23.54686943}, {'ask_price': 3226000.0, 'bid_price': 3200000.0, 'ask_size': 1.93862787, 'bid_size': 153.52192962}, {'ask_price': 3227000.0, 'bid_price': 3199000.0, 'ask_size': 0.83102966, 'bid_size': 10.12473696}, {'ask_price': 3228000.0, 'bid_price': 3198000.0, 'ask_size': 10.53250456, 'bid_size': 22.47508731}]

get_orderbook method의 ticker에 원하는 ticker를 list의 형태로 전달하면 위처럼 동시에 여러 ticker에 대한 호가 정보를 얻을 수 있습니다.

 

여러 개의 ticker를 list로 전달하면 각 ticker에 대한 호가 정보를 담은 dictionary가 list에 묶여서 return 됩니다.

 

 

 

 

728x90
반응형
Comments