develop custom_top_html:no
default debug random = 1 / type = READ / detected = READ
개발
2016-04-27 07:18:17

폴로니엑스 API 골격 공유합니다.

두시간전부터 여기저기서 복붙중인데 파이썬 2.7 기준입니다.

import urllib
import urllib2
import json
import time
import hmac,hashlib

api_key = '여기에 API_key 넣으세요'
api_secret = '여기에 API_secret 넣으세요'

def createTimeStamp(datestr, format="%Y-%m-%d %H:%M:%S"):
    return time.mktime(time.strptime(datestr, format))

class poloniex:
    def __init__(self, APIKey, Secret):
        self.APIKey = APIKey
        self.Secret = Secret

    def post_process(self, before):
        after = before

        # Add timestamps if there isnt one but is a datetime
        if('return' in after):
            if(isinstance(after['return'], list)):
                for x in xrange(0, len(after['return'])):
                    if(isinstance(after['return'][x], dict)):
                        if('datetime' in after['return'][x] and 'timestamp' not in after['return'][x]):
                            after['return'][x]['timestamp'] = float(createTimeStamp(after['return'][x]['datetime']))
                            
        return after

    def api_query(self, command, req={}):

        if(command == "returnTicker" or command == "return24Volume"):
            ret = urllib2.urlopen(urllib2.Request('https://poloniex.com/public?command=' + command))
            return json.loads(ret.read())
        elif(command == "returnOrderBook"):
            ret = urllib2.urlopen(urllib2.Request('http://poloniex.com/public?command=' + command + '&currencyPair=' + str(req['currencyPair'])))
            return json.loads(ret.read())
        elif(command == "returnMarketTradeHistory"):
            ret = urllib2.urlopen(urllib2.Request('http://poloniex.com/public?command=' + "returnTradeHistory" + '&currencyPair=' + str(req['currencyPair'])))
            return json.loads(ret.read())
        else:
            req['command'] = command
            req['nonce'] = int(time.time()*1000)
            post_data = urllib.urlencode(req)

            sign = hmac.new(self.Secret, post_data, hashlib.sha512).hexdigest()
            headers = {
                'Sign': sign,
                'Key': self.APIKey
            }

            ret = urllib2.urlopen(urllib2.Request('https://poloniex.com/tradingApi', post_data, headers))
            jsonRet = json.loads(ret.read())
            return self.post_process(jsonRet)


    def returnTicker(self):
        return self.api_query("returnTicker")

    def return24Volume(self):
        return self.api_query("return24Volume")

    def returnOrderBook (self, currencyPair):
        return self.api_query("returnOrderBook", {'currencyPair': currencyPair})

    def returnMarketTradeHistory (self, currencyPair):
        return self.api_query("returnMarketTradeHistory", {'currencyPair': currencyPair})


    # Returns all of your balances.
    # Outputs: 
    # {"BTC":"0.59098578","LTC":"3.31117268", ... }
    def returnBalances(self):
        return self.api_query('returnBalances')

    # Returns your open orders for a given market, specified by the "currencyPair" POST parameter, e.g. "BTC_XCP"
    # Inputs:
    # currencyPair  The currency pair e.g. "BTC_XCP"
    # Outputs: 
    # orderNumber   The order number
    # type          sell or buy
    # rate          Price the order is selling or buying at
    # Amount        Quantity of order
    # total         Total value of order (price * quantity)
    def returnOpenOrders(self,currencyPair):
        return self.api_query('returnOpenOrders',{"currencyPair":currencyPair})


    # Returns your trade history for a given market, specified by the "currencyPair" POST parameter
    # Inputs:
    # currencyPair  The currency pair e.g. "BTC_XCP"
    # Outputs: 
    # date          Date in the form: "2014-02-19 03:44:59"
    # rate          Price the order is selling or buying at
    # amount        Quantity of order
    # total         Total value of order (price * quantity)
    # type          sell or buy
    def returnTradeHistory(self,currencyPair):
        return self.api_query('returnTradeHistory',{"currencyPair":currencyPair})

    # Places a buy order in a given market. Required POST parameters are "currencyPair", "rate", and "amount". If successful, the method will return the order number.
    # Inputs:
    # currencyPair  The curreny pair
    # rate          price the order is buying at
    # amount        Amount of coins to buy
    # Outputs: 
    # orderNumber   The order number
    def buy(self,currencyPair,rate,amount):
        return self.api_query('buy',{"currencyPair":currencyPair,"rate":rate,"amount":amount})

    # Places a sell order in a given market. Required POST parameters are "currencyPair", "rate", and "amount". If successful, the method will return the order number.
    # Inputs:
    # currencyPair  The curreny pair
    # rate          price the order is selling at
    # amount        Amount of coins to sell
    # Outputs: 
    # orderNumber   The order number
    def sell(self,currencyPair,rate,amount):
        return self.api_query('sell',{"currencyPair":currencyPair,"rate":rate,"amount":amount})

    # Cancels an order you have placed in a given market. Required POST parameters are "currencyPair" and "orderNumber".
    # Inputs:
    # currencyPair  The curreny pair
    # orderNumber   The order number to cancel
    # Outputs: 
    # succes        1 or 0
    def cancel(self,currencyPair,orderNumber):
        return self.api_query('cancelOrder',{"currencyPair":currencyPair,"orderNumber":orderNumber})

    # Immediately places a withdrawal for a given currency, with no email confirmation. In order to use this method, the withdrawal privilege must be enabled for your API key. Required POST parameters are "currency", "amount", and "address". Sample output: {"response":"Withdrew 2398 NXT."} 
    # Inputs:
    # currency      The currency to withdraw
    # amount        The amount of this coin to withdraw
    # address       The withdrawal address
    # Outputs: 
    # response      Text containing message about the withdrawal
    def withdraw(self, currency, amount, address):
        return self.api_query('withdraw',{"currency":currency, "amount":amount, "address":address})

#여기까지 하고 이제 인스턴스 만듭시다.
x = poloniex(api_key,api_secret)

#Exchange 월렛 데이터 따옵니다.
print (x.returnBalances())

#Exchange 도지 월렛 따옵니다.
print (x.returnBalances()['DOGE'])

#차익거래에 필요한 모든 화폐 데이터 다 따오고 json포맷으로 바꿔서 출력 (def 로 바꿔서 메쏘드로 할 수도 잇을듯?)
url = 'https://poloniex.com/public?command=returnTicker'
json_obj = urllib2.urlopen(url)
data = json.load(json_obj)
print(data)

좀 해보니 재밌네요 ㅎㅎ 이걸로 재미좀 봐야겠어요.

폴로 말고도 비트파이넥스나 다른 거래소 API도 골격 공유좀 해주세요. 혼자 다하기 너무 귀찮...


8

bitcoinuserx님의 서명

bitcoinuserx.tistory.com 블로거입니다. 디지털 화폐 투자 컨설팅을 하고 있습니다.

BTC address : 33GAvW8nJDEWedm4wV4r2wAtwhG7RNi71C

댓글 12
  • ?
    http://pastebin.com/8fBVpjaj

    이런건 소스를 명시하셔야죠. 본인이 다 하신것도 아니면서...
  • ?
    @조제리
    아 그러네요. ㄱㅅ 합니다. 근데 비트파이넥스는 파이썬이 없나봐요?
  • @bitcoinuserx
    구글링해보면 왠만한 건 다 있습니다. 어짜피 REST 을 이용하는 것이니 빠진 함수가 있으면 간단히 추가하면 됩니다.
    https://github.com/scottjbarr/bitfinex
  • ?
    @bitcoinuserx
    빗파이넥스 파이썬으로 있어요. 아톰님이 댓글 남겨주셨네요.
    똑똑하신 분이니 혼자서 잘 짜시리라 믿습니다. 참고로 빗파이넥스는 웹소켓으로 하는게 나을껍니다.
  • ?
    @조제리
    웹 소켓은 node.js로 해야되는건가요? aㅏ... 점점 귀찮아 지네여. 그럼 파이썬과 JS를 둘다 돌리지 않고 하나로 뭉치는 방법은 없어요?
  • ?
    @bitcoinuserx
    파이썬도 됩니다
  • ?
    @조제리
    차익거래 많이 하시는거 같으니 물어볼게 있는데요. 두 거래소를 동시에 차익거래를 했을 시에 API를 따오고 trade 명령어를 보내는 찰나의 순간에 누군가 사간다던가 그런게 일어날 수 있나요? 일어나면 어떤식으로 exception을 줘야 하는지 도움을 주실 수 있나요? Order Number 쪽 Array에 거래가 실행되었는지 안되었는지 boolean이 하나 있던데 그런걸로 exception을 넣나요?
  • ?
    @bitcoinuserx
    충분히 가능한 일이죠. 해결도 가능하고요. 능력있는 분이시니 스스로 해결 가능하시리라 믿습니다.
  • ?
    @조제리
    ㅋㅋㅋ 알겠습니다. 해결 가능하다니 혼자 해보죠.
  • ?
    @bitcoinuserx
    당연히 그런 일은 쉽게 일어나구요..
    order를 보낸 후 최근 체결 결과를 확인하거나 아니면 일부만 결재 되어서 지정가 주문으로 남아있을 수 있을테니 히스토리나 주문 내역을 확인하면 알 수 있겠지요...
  • ?
    좋은 자료네요. 감사합니다
  • 회원님들 주고 받는 이야기만 들어도 덩달아 나도 실력이 늘어가고 있다는 환상이 듭니다.
    항상 좋은 글과 정보를 공유해 주신 노고에 감사드립니다.
default debug random = 0 / type = READ / detected = READ

List of Articles
번호 분류 제목 추천 수 조회 수 글쓴이 날짜
1660 개발 . . 2 0 6172
코인개발자
2017.05.24
1659 개발 Bitfinex 마진 확인 사이트 http://margin.ml   빗파의 마진 포지션 현황을 볼 수 있는 사이트입니다.   시험기간인데 시험공부는 손에 잡히지도 않아서   컴퓨터 앞에 앉았더니 이런게 튀어나왔습니다(-_-);;   써주실 분... 5 file 6 6102
Synkc
2017.09.22
1658 개발 거래소 api로 분석프로그램을 개발했습니다. 80%정도 개발진행상태이고  테스트해가며 조심씩 수정하고 있습니다.   개발이 완료되면  일반인에게 공개할건데 많은분들이 사용하도록 광고를 달고 무료배포계획입니다.   현재 완성된 데이타... 21 file 11 6091
빈들에서다
2019.04.18
1657 개발 빗썸 자동매매 프로그램을 개발 완료 하였습니다 생각보다 긴 시간이였는데요 우여곡절 끝에 !!!    수정 보완하고 프로그램을 완성 하였습니다   테스트에 참여 해주신 땡글 회원님께 감사 드립니다      http://bitsniper.co.kr/     이름은 ... 21 1 6079
수한이
2017.12.24
1656 개발 안녕하세요 coinext개발자입니다. 오픈소스로 거래소 플랫폼을 공개한 coinext개발자입니다. 다음번으로 오픈소스 공개할 소스/플랫폼은 이더리움같은 분산 어플리케이션 플랫폼을 공개하도록 하겠습니다. 아직은 시작은 안했지만... 6 13 6077
coinext
2017.12.26
1655 개발 블럭체인의 단점: 블럭체인의 크기에 대한 개인적인 아이디어 1. 현재 블럭체인의 크기 1). 비트코인 블럭체인 크기: 약 70 Gbyte (https://blockchain.info/charts/blocks-size) 2). 이더리움 거래원장 크기: 약 16Gbyte (http://cryptomining-blog.com/tag... 7 1 5985
loum
2016.06.03
1654 개발 업비트 API중 주문 부분 조언부탁드립니다. 안녕하세요 API에 관심이 있어 조금씩 공부를 하고 있습니다.    java로 구현중인데 몇개는 호출이되는데 주문이 호출이 안되서 조언을 구하고자 글을올립니다.  고객센터에 문의했는데 가격을 ... 15 0 5958
유녀리
2018.07.03
1653 개발 비트코인의 script language에 대한 내용입니다. 비코의 거래부분에 스크립트 언어가 포함되었는데 이에 대한 내용입니다. https://drive.google.com/file/d/0B5hmGlVuh8KZNUpCQ1l4WS1pTFU/view?usp=sharing 4 4 5906
loum
2015.04.02
1652 개발 [업비트 전용] 비트시그널 v1.0.2 업데이트 / 조건검색프로그램 / 자동매매 안녕하세요. 업비트 자동매매 프로그램 비트시그널입니다.  본 프로그램은 단순한 설정값이 입력된 자동매매 프로그램이 아닌,  주식시장에서 쓰던 영웅문과 같은 방식으로 사용자가 본인만의 조... 1 file 0 5895
비트시그널
2018.01.27
1651 개발 환율 api USD-KRW 환율 api 소개좀 부탁드립니다.   yahoo api 환율 정보는 서비스 종료되었는지 결과가 null만 뜨네요.   https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finan... 1 0 5874
debugger
2017.11.27
1650 개발 COSMOS 이더민트를 직접 테스트해봤습니다 그런데.. (수정 추가) 일전에 @꿀맨 님께서 COSMOS 이더민트를 ESN에 적용하는 것이 어떻겠냐는 제안을 주신 적이 있습니다.   며칠 전에 제가 직접 살펴보고 답변을 드렸는데, 땡글에도 글을 올리는 것이 좋을 것 같... 36 9 5866
ethminer
2019.03.22
1649 개발 자바(or 코틀린)로 업비트 호가창 api 불러와보신 분? 안녕하세요.  업비트 api가 얼마 전에 공개되어서 호가창 불러오기 시도중인데 잘 안 되네요..   1. 업비트 공식 문서의 예제에 있는 wscat 이용한 방식은 잘 됩니다. (O) $ wscat -c wss://api.... 10 0 5847
비락식
2018.06.24
1648 개발 다중 수천대 가능 무료 원격조정 모니터링 알람 제어 ( 꽁짜 )     천리님 글  1. 마이너 컨픽 파일 수정2. 컨픽 파일 일괄 업로드3. 마이너 재시작4. 컴퓨터 리부팅5. 마이너 버전 업데이트 시 파일 일괄 업로드6. 마이닝 프로그램 일괄 변경 (ex. Claymore... 35 file 76 5839
다롱잉임
2018.04.08
1647 개발 거래소의 지불능력 증명 중앙관리기구가 없는 암호화통화를 거래하다 보면, 많은 장점에도 불구하고 항상 거래소가 염려됩니다. 지난번 곡스의 경우나 여러 소규모 거래소들의 경우에서 처럼 하루아침에 문닫는 경우가 ... 13 file 6 5824
atomrigs
2014.09.16
개발 폴로니엑스 API 골격 공유합니다. 두시간전부터 여기저기서 복붙중인데 파이썬 2.7 기준입니다. import urllib import urllib2 import json import time import hmac,hashlib api_key = '여기에 API_key 넣으세요' api_secret = '... 12 1 5750
bitcoinuserx
2016.04.27
1645 개발 이더리움 블럭에 대한 개략적인 설명한 자료를 올립니다. 제가 작성한 이더리움 블럭 관련 자료를 올립니다.   https://drive.google.com/file/d/0B5hmGlVuh8KZcU1zTkdISlAzdnc/view?usp=sharing       8 file 6 5706
loum
2015.04.08
1644 개발 채굴 관리프로그램 MINE ASSIST v1.2 공개 및 상용 서비스 일정 안내 안녕하세요. MINE ASSIST를 개발하고 있는 파이리입니다.   MINE ASSIST 새 버전과 상용 서비스 일정에 대해서 알려드립니다.   MINE ASSIST 다운로드 링크( https://www.mineassist.net/control... 38 file 13 5700
파이리
2017.07.14
1643 질문 [질문 or 도움 요청] Bitmex API order 명령 내리기 (Python)    안녕하세요. 종종 땡글에 거래소 API 관련하여 문의하고 있는 사람입니다.  이번에는 Bitmex API 도전하고 있는데 order (주문) 명령 내리는 것에 막혀 문의를 드리고자 합니다.      제가 작... 5 1 5641
hbled
2018.09.19
1642 개발 이더리움과 스마트 컨트랙(1) 안녕하세요. 파이리입니다. 이더리움과 스마트 컨트랙이라는 주제로 글을 써보려고 합니다. 어디까지 쓰게 될지는 모르겠지만, 나중에 묶어서 책이 되었으면 하는 작은 소망이 있네요.   이더리... 11 file 12 5629
파이리
2018.02.12
1641 개발 비트코인이 현실생활에서 많이 사용되길 기대하며 ^^   Hello world,   비트코인 의 영원한 발전을 희망합니다! 땡글인으로써 비트코인 관련한 새로운 제품을 선보이게 되서 기쁘게 생각합니다. 오늘 소개해 드릴 상품은 비트코인으로 물건을 판매하... 5 14 5628
마이닝링
2017.08.01
Board Pagination Prev 1 ... 5 6 7 8 9 10 11 12 13 14 ... 92 Next
/ 92
default debug random = 0 / type = READ / detected = READ