steem-engine에 나오는 마켓의 order book을 읽는 방법을 알아봅니다. 관련 소스는 @holgern의 github를 참고하였습니다[1].
API를 잘 만들어 놓아서 파이썬을 조금만 알면 누구나 조회가 가능합니다.
우선 order 북의 buy와 sell 내역을 확인해봅시다. 편의상 최근 5개만 출력을 합니다.
rets = api.find("market", "buyBook", {'symbol':'SCT'})
print("=== buy ===")
cnt = 0
for ret in rets :
try:
print(format(float(ret['price']), "2.5f"), format(float(ret['quantity']), "0.4f"))
cnt += 1
if (cnt > 5):
break
except Exception as ex :
print (ret)
rets = api.find("market", "sellBook", {'symbol':'SCT'})
print("=== sell ===")
cnt = 0
for ret in rets :
try:
print(format(float(ret['price']), "2.5f"), format(float(ret['quantity']), "0.4f"))
cnt += 1
if (cnt > 5):
break
except Exception as ex :
print (ret)
그 결과는 아래와 같습니다.
현재 order 북 내용과 일치함을 알 수 있습니다. 그런데 순서는 조금 차이가 나는군요. 이런 경우에는 price로 소팅을 해서 사용하면 됩니다.
order 북에 등록된 내용은 아래 구조로 전달이 됩니다.
구조에 대한 설명은 필요가 없을 만큼 단순합니다. 다만 해당 거래를 등록한 account까지 나오기 때문에 개인 정보가 너무 노출되는 문제가 있습니다만, 블록체인의 특성상 어쩔 수 없을 것 같습니다.
최근에 거래가 된 내역도 알면 좋겠죠. 거래 빈도와 추이를 보면 자동 매매도 가능할 수 있습니다. 이것도 명령어 한 줄이면 가능합니다. 편의상 최근 5개만 출력해봅니다.
rets = api.find("market", "tradesHistory", {'symbol':'SCT'})
print("=== history ===")
cnt = 0
for ret in rets :
try:
if (ret['type'] =='sell') :
print ("sell", format(float(ret['price']), ".4f"), format(float(ret['quantity']), ".2f"))
else :
print ("buy ", format(float(ret['price']), ".4f"), format(float(ret['quantity']), ".2f"))
cnt += 1
if (cnt > 10):
break
except Exception as ex :
print (ret)
그 결과도 같습니다.
거래 물량이 많지 않기 때문에 자동 매매를 적용하기는 어렵고, LP 공급자로서의 역할은 할 수 있을 것 같습니다. LP 제공자 관련 작업을 한 후 적용을 해 보도록 하겠습니다.