전세계 각 가상통화 거래소마다 API를 제공하고 있고, 때로는 파이썬(Python)으로 예제도 제공하지만 대부분이 파이썬2(Python 2.7)용이라 그대로 사용하기에는 무리가 많았다.
그래서 파이썬3(Python 3.6)용으로 된 프로그램을 개발하기 시작했다. 만들기 시작한지 며칠 안되어서 아직은 매우 단순한 기능만 있는 프로토타입이다. 좀더 발전시켜서 범용으로 쓸만하게 되면 깃허브(GitHub)에다 올릴까 생각중이다.
브라우저에서 쉽게 확인할 수 있도록 PHP로 만들까 하는 생각도 했지만 이미 http://wisebody.co.kr와 http://luka7.net 에서 상세한 정보를 제공하고 있기도 하고, 또한 궁극적으로는 자동으로 트레이딩이 가능한 로봇을 만드는 것이 목적이기 때문에 파이썬으로 작성했다. 리플코인 거래할 때처럼 직접 인간이 24시간 계속 트레이딩을 한다면 피곤할 것이다. 그래서 적당한 순간에 기계한테 넘길 생각이다. 잘 돌아가면 이곳 k-june.com 리눅스 서버에다 올려놓아서 24시간 가동시키려고 한다.
import json import urllib.request from urllib.request import Request, urlopen class bithumb: urlTicker = urllib.request.urlopen('https://api.bithumb.com/public/ticker/all') readTicker = urlTicker.read() jsonTicker = json.loads(readTicker) FindBTC = jsonTicker['data']['BTC']['closing_price'] BTC = int(FindBTC) FindETH = jsonTicker['data']['ETH']['closing_price'] ETH = int(FindETH) FindDASH = jsonTicker['data']['DASH']['closing_price'] DASH = int(FindDASH) FindLTC = jsonTicker['data']['LTC']['closing_price'] LTC = int(FindLTC) FindETC = jsonTicker['data']['ETC']['closing_price'] ETC = int(FindETC) FindXRP = jsonTicker['data']['XRP']['closing_price'] XRP = int(FindXRP) class coinone: urlTicker = urllib.request.urlopen('https://api.coinone.co.kr/ticker/?currency=all') readTicker = urlTicker.read() jsonTicker = json.loads(readTicker) FindETC = jsonTicker['etc']['last'] ETC = int(FindETC) FindBTC = jsonTicker['btc']['last'] BTC = int(FindBTC) FindETH = jsonTicker['eth']['last'] ETH = int(FindETH) FindXRP = jsonTicker['xrp']['last'] XRP = int(FindXRP) class korbit: reqBTC = Request('https://api.korbit.co.kr/v1/ticker?currency_pair=btc_krw' , headers={'User-Agent': 'Mozilla/5.0'}) readBTC = urlopen(reqBTC).read() jsonBTC = json.loads(readBTC) FindBTC = jsonBTC['last'] BTC = int(FindBTC) reqETH = Request('https://api.korbit.co.kr/v1/ticker?currency_pair=eth_krw' , headers={'User-Agent': 'Mozilla/5.0'}) readETH = urlopen(reqETH).read() jsonETH = json.loads(readETH) FindETH = jsonETH['last'] ETH = int(FindETH) reqETC = Request('https://api.korbit.co.kr/v1/ticker?currency_pair=etc_krw' , headers={'User-Agent': 'Mozilla/5.0'}) readETC = urlopen(reqETC).read() jsonETC = json.loads(readETC) FindETC = jsonETC['last'] ETC = int(FindETC) reqXRP = Request('https://api.korbit.co.kr/v1/ticker?currency_pair=xrp_krw' , headers={'User-Agent': 'Mozilla/5.0'}) readXRP = urlopen(reqXRP).read() jsonXRP = json.loads(readXRP) FindXRP = jsonXRP['last'] XRP = int(FindXRP)
현재 구현된 기능은 국내 가상화폐 거래소의 현재시세를 JSON형식으로 가져와서 함수에 저장하는 역할을 한다. 소스 코드를 긁어 붙여서 바로 사용하거나 여기서 다운로드 할 수 있다. 파일명이 price.py이니 모듈로 import price 해서 사용하면 편하게 사용할 수 있도록 해놓았다.
사용법은 모듈명.거래소.가상통화종류 이렇게 된다. 물론 원화(KRW)로 출력된다. 지원되는 가상통화의 종류는 다음과 같다.
빗썸(bithumb) : 비트코인(BTC), 이더리움(ETH), 이더리움 클래식(ETC), 대시 코인(DASH), 라이트코인(LTC), 리플 코인(XRP)
코인원(coinone) : 비트코인(BTC), 이더리움(ETH), 이더리움 클래식(ETC), 리플 코인(XRP)
코빗(korbit) : 비트코인(BTC), 이더리움(ETH), 이더리움 클래식(ETC), 리플 코인(XRP)
아래는 예제이다. 각각 빗썸의 비트코인 가격, 코인원의 리플 가격, 코빗의 이더리움 가격을 출력한다.
import price print(price.bithumb.BTC) print(price.coinone.XRP) print(price.korbit.ETH)
현재시세 정보를 불러오는 모듈은 이제 만들었으니, 다음번에는 시세알림과 자동 주문 기능을 개발할 차례다.
와우~ 드디어 찾았네요
제가찾던 그런 프로그렘입니다.
저한테도 좀 파세요~ ?꼭좀…
네. 지금 열심히 개발중인데 어느정도 틀이 잡히면 깃허브에 올릴게요.
저도 비슷한 것을 개발할려고 api를 분석해보고 있었습니다; 깃허브 올리시면 꼭 알려주세요 ^^
네. 지금 해외 거래소의 트레이딩봇 소스를 보면서 독자적으로 개발할지 아니면 한국 거래소의 API만 그곳에 추가할지
고민 중인 상황입니다. 파이썬 대신에 node.js로 개발할까 하는 생각도 들고요. 아무쪼록 뭔가 성과가 나오는대로 깃허브에 올릴게요. 함께 발전시켜 나가요~
저는 지금 아마존 웹서버에 아파치와 mysql과 함께 php로 public API를 테스트해보고 있습니다.
예를 들어 비트코인의 현재 시세를 가져올때는
//빗썸
$result_bithumb_BTC = file_get_contents(‘https://api.bithumb.com/public/ticker/BTC’);
//코인원
$result_coinone_BTC = file_get_contents(‘https://api.coinone.co.kr/ticker/?currency=btc’);
//코빗
$result_korbit_BTC = file_get_contents(‘https://api.korbit.co.kr/v1/ticker?currency_pair=btc_krw’);
이렇게 file_get_contents 함수를 사용하여 가격을 가져옵니다.
근데 세개의 사이트는 file_get_contents를 통하여 값을 가져오는 속도가 서로 다릅니다.
빗썸의 경우는 1초 미만이고.. 코인원은 5초 이상 걸리고. 그러네요..
그래서 http://wisebody.co.kr/ 이런 사이트 처럼 접속하자마자 가격을 가져오면 좋겠는데 한참 있다가 가격이 뜨네요..ㅠ
어떻게 해결해야 할까요..?
감사합니다..!!
파이썬에서도 데이터를 가져오는데 시간이 몇초씩 걸리네요. 거래소마다 딜레이가 조금씩 차이가 있다는 느낌도 듭니다. 웹에서는 아무래도 페이지를 열면 바로 보여야 하니, 일정 간격으로 미리 가져와서 서버에 저장해 두다가 사용자의 접속이 있으면 서버에 저장된 값으로 뿌려주어야 할 듯 하네요.
아..!! 그렇군요…
정말 감사드립니다…ㅠㅠㅠㅠㅠㅠ
은혜를 갚고싶네용..ㅎㅎ
우연찮게 들어오게 되었습니다.
누군가 만들어 놓은걸 참조 해볼까 해서요.
이제 파이썬 공부하면서 만들어 볼거라 ㅎㅎㅎ
깃헙에 올리시면 도움 받도록 하겠습니다.
더위에 건강잘 챙기시기 바랍니다.
네. 지금은 실시간 시세변동 알림 기능이 구현되어 있는 상황이고, 조금 더 가격 데이터를 수집한 다음에 자동주문 기능을 추가할 계획입니다. 범용으로 쓰일 수 있게끔 다양한 기능들을 집어넣고 싶은데 쉽지 않네요.ㅎㅎ
좋은정보 감사합니다.
파이썬으로 코빗 시세변동알림건 만드는것 개발해보고 싶었는데..
업데이트 된것 올려주시면 감사..
네. 조만간에 땡글에 글 올려서 의견을 모은 뒤에 공개할게요.
안녕하세요.. 저도 코인 자동매매 프로그램 만들고 싶은데 코딩은 하나도 몰라서 뭐라도 해보려고 오늘 파이썬 깔았습니다.. ㅠㅠ 제가 생각한 자동매매 프로그램은 matplotlib를 이용해서 폴로닉스나 빗썸에서 과거 데이터 가져와서 사용자가 원하는 알고리즘을 백테스팅 해보고 이를 바탕으로 괜찮은 알고리즘을 설정하여 자동거래가 되도록 하는 것입니다. 혹시 이렇게 개발방향을 설정할수 있을까요? 그리고 가능하다면 이렇게 만들어 주실수도 있나요ㅠㅠ.. 감사합니다.
네. 지금 그렇게 하려고 개발중입니다. 그리고 이미 개발되어 있는 프로그램( https://github.com/askmike/gekko )도 있으니 참고하시면 될 것 같네요.
저는 PHP로 빗썸데이터 가져와서 DB에 넣고 캔들챠드 그리고 싶은데…
DATA를 어찌 가공해야 할지를 모르겠네요…ㅋ
코인원으로는 구현했는데…빗썸데이터를 코인원의 어떤 데이터와 매치를 시켜야 할지를 모르겠어요..ㅋ
한수 부탁 드립니다.
빗썸API에서 뿌려주는 데이터와 코인원API에서 뿌려주는 데이터가 조금씩 차이가 있죠. 그래서 참 고민이긴 한데, 저는 특정 시간 단위로 last price를 불러와서 DB에 쌓아두는 방식을 사용하고 있습니다.
안녕하세요.
가상화폐 사이트 API에 관심이 생겨 프로그래밍을 배워볼까 하는데
C나 자바는 진입이 어렵다고 생각되어 파이썬으로 접근할까 생각중인데 해외사이트(비트맥스, 비트렉스, HITBTC 등) API 활용하는데도 파이썬으로 무리가 없을까요?
네. API를 제공하는 곳이라면 파이썬으로 전혀 무리가 없습니다.
안녕하세요. 저도 가상화폐 프로그램 개발하려고 써치하다가 발견했습니다. 파이썬으로는 처음 개발하는건데, 혹시 bitfinex 같은 외국거래소 api 사용하여 파이썬으로 개발하는 방법도 한번 소개해주실 수 있을지요?
네. 지금 제가 쓰고 있는 비트피넥스(Bitfinex)와 폴로넥스(Poloniex) 소스 첨부할게요. 위의 소스에다 class 부분만 추가하시면 됩니다.
class poloniex:
urlPoloTicker = “https://poloniex.com/public?command=returnTicker”
webPoloTIcker = urllib.request.urlopen(urlPoloTicker)
ReadPoloTicker = webPoloTIcker.read().decode(‘utf-8’)
JsonPoloTicker = json.loads(ReadPoloTicker)
BTC = float(JsonPoloTicker[‘USDT_BTC’][“last”])
ETH = float(JsonPoloTicker[‘USDT_ETH’][“last”])
LTC = float(JsonPoloTicker[‘USDT_LTC’][“last”])
XRP = float(JsonPoloTicker[‘USDT_XRP’][“last”])
ETC = float(JsonPoloTicker[‘USDT_ETC’][“last”])
DASH = float(JsonPoloTicker[‘USDT_DASH’][“last”])
class bitfinex:
urlBifiTickerBTC = “https://api.bitfinex.com/v2/ticker/tBTCUSD”
webBifiTIckerBTC = urllib.request.urlopen(urlBifiTickerBTC)
ReadBifiTickerBTC = webBifiTIckerBTC.read().decode(‘utf-8’)
JsonBifiTickerBTC = json.loads(ReadBifiTickerBTC)
BTC = float(JsonBifiTickerBTC[6])
urlBifiTickerETH = “https://api.bitfinex.com/v2/ticker/tETHUSD”
webBifiTIckerETH = urllib.request.urlopen(urlBifiTickerETH)
ReadBifiTickerETH = webBifiTIckerETH.read().decode(‘utf-8’)
JsonBifiTickerETH = json.loads(ReadBifiTickerETH)
ETH = float(JsonBifiTickerETH[6])
urlBifiTickerXRP = “https://api.bitfinex.com/v2/ticker/tXRPUSD”
webBifiTIckerXRP = urllib.request.urlopen(urlBifiTickerXRP)
ReadBifiTickerXRP = webBifiTIckerXRP.read().decode(‘utf-8’)
JsonBifiTickerXRP = json.loads(ReadBifiTickerXRP)
XRP = float(JsonBifiTickerXRP[6])
urlBifiTickerXMR = “https://api.bitfinex.com/v2/ticker/tXMRUSD”
webBifiTIckerXMR = urllib.request.urlopen(urlBifiTickerXMR)
ReadBifiTickerXMR = webBifiTIckerXMR.read().decode(‘utf-8’)
JsonBifiTickerXMR = json.loads(ReadBifiTickerXMR)
XMR = float(JsonBifiTickerXMR[6])
안녕하세요? 파이썬으로 api 프로그램을 개발하려고 공부하고 있습니다. 바이낸스나 비트맥스 같은 해외 거래소 api를 개발하고 싶은데 rest api니 웹소켓이니 너무 생소한 말도 많고 api 문서에 있는 샘플도 도무지 이해가 되지 않는데 저렇게 rest api와 웹소켓을 사용하는 거래소에서 파이썬으로 자동매매 프로그램을 만드려면 어떤 공부를 해야 좀 더 수월하게 할 수 있나요?
저는 파이썬 자체는 위키독스(WiKiDocs)에서 ‘파이썬으로 배우는 알고리즘 트레이딩( https://wikidocs.net/book/110 )’이라는 책으로 공부했었고요. 그 이후의 각 거래소의 API 분석이나 웹소켓 같은 것들은 주로 구글 검색을 통해서 배웠습니다. 깃허브에서 다른 분들이 만든 소스들도 큰 도움이 되었습니다.
이추님 혹시 하나만 질문해도 될까요??
bitmex라는 사이트에서 api를 이용하여 과거 종가,시가 이런 자료들을 가져올 수도 있나요??
제가 이 분야를 전혀 몰라서요..
매매가 아닌 과거 가격 데이터를 불러오고 싶은데 공부하면 이런 것도 가능할까요???
거래소마다 지원해주는 기능이 조금씩 차이가 있어서 bitmex에서 직접 확인해 보셔야 할 것 같네요. 보통 과거의 내역들은 지원하지 않거나 특정 기간만 조회할 수 있거나 하는 경우가 많습니다.