This is a simple Python wrapper around the OKCoin.com public trading API.
OKCoin's API website documentation is poor, so I hope this saves someone some time and frustration. If you want to write your own code for the API, I explain how to create the signed string you need for requests in the last section. For reference, the OkCoin trade API page is http://www.okcoin.com/t-1000097.html
Happy trading :)
I am not affiliated with OKCoin. Real trading APIs are included. Use at your own risk.
IMPORTANT NOTE: OKCoin's API does not use a nonce value!
-
The first thing to do is request a partner id and secret key from the OKCoin support on QQ. You can use QQ if you're not in China. Support was pretty fast when I did this and it only took ~15 minutes.
-
Next download the okcoin.py file. I haven't included a setup.py as the whole API is quite small. Only the following standard libraries are needed
urllib, urllib2, hashlib, simplejson
-
Initialize the trade api with your secret key and partner id. It's probably best to load these from an external file rather than saving them in your trading program. For getting market data you don't need to do this.
# Get account balance import okcoin partner = your_partner_int_here secret_key = your_secret_key_str_here T = okcoin.TradeAPI(partner, secret_key) print( T.getinfo() )
If you're using the okcoin.py file as is, ignore this section.
If you'd like to write your own code for the API, I explain the request structure below. The documentation for this step on the OKCoin website is really poor.
-
Take the list of parameters and values you're requesting, sort them alphabetically and join each with "&" Note that all parameter names must be lowercase and have no spaces. The example they show is on the page (http://www.okcoin.com/t-1000097.html) is actually incorrect because of this.
e.g. "amount=1.0&partner=2088101568338364&rate=680&symbol=btc_cny&type=buy"
-
Take the string you made above and add your secret key to the end of it with no spaces OR "&"
e.g. "amount=1.0&partner=2088101568338364&rate=680&symbol=btc_cny&type=buy111111111111111111"
-
MD5 hash that string, convert it to hex, make it uppercase then URL encode it and POST to the relevant page (depending on what request you're making).
# Calculating signed string to get account balance import urllib import urllib2 import hashlib import simplejson # partner is int # secret_key is string partner = 1111111111 secret_key = 'THISISNOTANACTUALKEYOBVIOUSLY' user_info_url = 'https://www.okcoin.com/api/userinfo.do' sign_string = 'partner=' + str(partner) m = hashlib.md5() m.update(sign_string + secret_key) signed = m.hexdigest().upper() values = {'partner' : partner, 'sign' : signed} data = urllib.urlencode(values) req = urllib2.Request(user_info_url, data) response = urllib2.urlopen(req) result = simplejson.load(response) print( result['info']['funds']['free'] )