Awesome
C++ REST API library for BTCMarkets.
BTCMarkets provides REST API to their service in number of programming languages, except C++. To rectify this problem, this library was created.
The library uses header only json library and cpr library as a wrapper for libcurl for making get and post requests to the btcmakrets api service.
For most commands, public api_key
and secret private_key
are required
for authentication for your account. The keys are provided to you by btcmarkets
in your Account/API key section.
BTCMarkets requires correct timestamps to be added to authentication requests. This timestamp should be within +/- 30 seconds of their server timestamp. In Linux this shouldn't be a problem. But just in case, the library has an option to specify timezone-offset, in seconds, if timestamp adjustments are required due to differences in your and the server timestamps.
Dependencies
Ubuntu 15.10 and 16.04
sudo apt install git build-essential cmake libboost-program-options-dev libcurl4-openssl-dev libssl-dev
Arch Linux
sudo pacman -Sy git base-devel cmake boost curl openssl
Compilation
git clone --recursive https://github.com/moneroexamples/btcmarkets-cpp.git
cd btcmarkets-cpp && mkdir build && cd build
cmake ..
make
After successful compilation, btcmarketsexamples
binary should be generated.
btcmarketsexamples
options
btcmarketexamples - example program showcasing using BtcMarkets C++11 RESTfull API:
-h [ --help ] produce help message
-a [ --api-key ] arg btcmarkets api key
-p [ --private-key ] arg private key provided by btcmarkets to you
-c [ --command ] arg (=tick) api command to execute: tick, order_book,
order_history, trade_history, open_orders,
create_order, cancel_order, trades,
order_detail, account_balance
-t [ --trade-pair ] arg (=BTC/AUD) instrument/currency pair: BTC/AUD,
LTC/AUD, ETH/AUD,LTC/BTC, ETH/BTC,
DAO/BTC, DAO/ETH
--price arg price when making an order
--volume arg volume of the order
--side arg (=Bid) side of order: Bid, Ask
--type arg (=Limit) type of the order: Market, Limit
--limit arg (=10) number of past orders to fetch
--since arg (=0) from when to fetch the past orders
--timestamp-offset arg (=0) offset, in seconds, between your and
btcmarkerts timestamps
--order-id arg id number of an order to cancel or check
details
Examples
Default execution: BTC/AUD tick (no authentication required)
./btcmarketsexamples
{"bestAsk":811.76,"bestBid":805.16,"currency":"AUD","instrument":"BTC","lastPrice":806.01,"timestamp":1465262979,"volume24h":265.19094}
ETH/BTC tick (no authentication required)
./btcmarketsexamples -t ETH/BTC
{"bestAsk":0.02798897,"bestBid":0.02241987,"currency":"BTC","instrument":"ETH","lastPrice":0.02798999,"timestamp":1465263021,"volume24h":182.62025}
DAO/ETH order book (no authentication required)
./btcmarketsexamples -t DAO/ETH -c order_book
{"asks":[[0.01,10000.0],[0.01,6334.1398],[0.0101,9938.0659],[0.0102,10000.0],[0.0105,8213.8165],[0.0115,1194.7316],[0.01175,500.0],[0.01199999,1500.0],[0.012,7648.2917],[0.012,1000.0],[0.012,490.2207],[0.0125,100.0],[0.013,9.15],[0.0145,100.0],[0.016345,987.0],[0.0177,600.0],[0.02,244.241],[0.02,1.12839],[0.02,325.8413],[0.051111,500.0],[0.060111,500.0],[0.07,500.0],[0.08299,500.0],[0.1,0.001],[0.101,100.0],[1.0129,99.0]],"bids":[[0.00943102,200.0],[0.00943101,100.0],[0.00943,110.0],[0.00930202,1000.0],[0.00930201,100.0],[0.00913128,1000.0],[0.00906,388.0],[0.009,5000.0],[0.008,4350.0],[0.006,10000.0],[0.005,2000.0],[0.001,0.001]],"currency":"ETH","instrument":"DAO","timestamp":1465263134}
DAO/ETH order book (no authentication required)
./btcmarketsexamples -t DAO/ETH -c order_book
{"asks":[[0.01,10000.0],[0.01,6334.1398],[0.0101,9938.0659],[0.0102,10000.0],[0.0105,8213.8165],[0.0115,1194.7316],[0.01175,500.0],[0.01199999,1500.0],[0.012,7648.2917],[0.012,1000.0],[0.012,490.2207],[0.0125,100.0],[0.013,9.15],[0.0145,100.0],[0.016345,987.0],[0.0177,600.0],[0.02,244.241],[0.02,1.12839],[0.02,325.8413],[0.051111,500.0],[0.060111,500.0],[0.07,500.0],[0.08299,500.0],[0.1,0.001],[0.101,100.0],[1.0129,99.0]],"bids":[[0.00943102,200.0],[0.00943101,100.0],[0.00943,110.0],[0.00930202,1000.0],[0.00930201,100.0],[0.00913128,1000.0],[0.00906,388.0],[0.009,5000.0],[0.008,4350.0],[0.006,10000.0],[0.005,2000.0],[0.001,0.001]],"currency":"ETH","instrument":"DAO","timestamp":1465263134}
Recent LTC/AUD trades (no authentication required)
Only part of the result shown.
./btcmarketsexamples -t LTC/AUD -c trades
[{"amount":83.627615,"date":1465265085,"price":6.67,"tid":102659907},{"amount":20.0,"date":1465265085,"price":6.68,"tid":102659896},{"amount":0.01485992,"date":1465212487,"price":6.66,"tid":102533229},{"amount":0.01485992,"date":1465212382,"price":6.84,"tid":102533038},{"amount":0.20175051,"date":1465177962,"price":6.66,"tid":102385472},{"amount":5.0,"date":1465039217,"price":7.0,"tid":101896247},{"amount":4.327,"date":1465039027,"price":6.99,"tid":101895354},{"amount":4.327,"date":1465038961,"price":6.6,"tid":101894843},{"amount":2.0,"date":1465038961,"price":6.6,"tid":101894831},{"amount":1.0,"date":1465038961,"price":6.61,"tid":101894820},{"amount":2.673,"date":1465038961,"price":6.71,"tid":101894809},{"amount":14.1,"date":1465029497,"price":7.0,"tid":101871393},{"amount":3.2655605,"date":1465027433,"price":7.0,"tid":101869010},
Also can limit number of recent trends, by providing trade id to start from.
./btcmarketsexamples -c trades -t LTC/AUD --since 101894809
[{"amount":83.627615,"date":1465265085,"price":6.67,"tid":102659907},{"amount":20.0,"date":1465265085,"price":6.68,"tid":102659896},{"amount":0.01485992,"date":1465212487,"price":6.66,"tid":102533229},{"amount":0.01485992,"date":1465212382,"price":6.84,"tid":102533038},{"amount":0.20175051,"date":1465177962,"price":6.66,"tid":102385472},{"amount":5.0,"date":1465039217,"price":7.0,"tid":101896247},{"amount":4.327,"date":1465039027,"price":6.99,"tid":101895354},{"amount":4.327,"date":1465038961,"price":6.6,"tid":101894843},{"amount":2.0,"date":1465038961,"price":6.6,"tid":101894831},{"amount":1.0,"date":1465038961,"price":6.61,"tid":101894820}]
Account balance (authentication required)
Values in the example output were replaced with dummy values for privacy reasons.
./btcmarketsexamples -a public_api_key -p secret_private_key -c account_balance
[{"balance":1224253326293,"currency":"AUD","pendingFunds":66969936000},{"balance":0,"currency":"USD","pendingFunds":0},{"balance":7652697853,"currency":"BTC","pendingFunds":1378776555},{"balance":146034433752,"currency":"LTC","pendingFunds":3354855481197},{"balance":943372,"currency":"ETH","pendingFunds":4543243520},{"balance":0,"currency":"FCT","pendingFunds":0},{"balance":0,"currency":"MAID","pendingFunds":0},{"balance":1736535933,"currency":"DAO","pendingFunds":2066000000}]
Create order (authentication required)
A Bid(default) and Limit (default) order to buy 1 ETH for 18.17 AUD.
./btcmarketsexamples -a public_api_key -p secret_private_key -c create_order -t ETH/AUD --price 19.17 --volume 1
{"clientRequestId":"1","errorCode":null,"errorMessage":null,"id":102661890,"success":true}
An Ask and Limit (default) order to sell 1.5 ETH for 20.01 AUD.
./btcmarketsexamples -a public_api_key -p secret_private_key -c create_order -t ETH/AUD --price 20.01 --volume 1.5 --side Ask
{"clientRequestId":"1","errorCode":null,"errorMessage":null,"id":102662870,"success":true}
An Ask and Market order to sell 10 DAO using ETH.
./btcmarketsexamples -a public_api_key -p secret_private_key -c create_order -t DAO/ETH --volume 10.0 --side Ask --type Market
{"clientRequestId":"1","errorCode":null,"errorMessage":null,"id":102668298,"success":true}
Cancel order (authentication required)
./btcmarketsexamples -a public_api_key -p secret_private_key -c cancel_order --order-id 102662870
{"errorCode":null,"errorMessage":null,"responses":[{"errorCode":null,"errorMessage":null,"id":102662870,"success":true}],"success":true}
Order details (authentication required)
./btcmarketsexamples -a public_api_key -p secret_private_key -c order_detail --order-id 102510625
{"errorCode":null,"errorMessage":null,"orders":[{"clientRequestId":null,"creationTime":1465206394338,"currency":"BTC","errorMessage":null,"id":102510625,"instrument":"ETH","openVolume":100000000,"orderSide":"Bid","ordertype":"Limit","price":2241987,"status":"Placed","trades":[],"volume":100000000}],"success":true}
Order history (authentication required)
Show last two orders of to buy ETH using AUD.
./btcmarketsexamples -a public_api_key -p secret_private_key -c order_history -t ETH/AUD --limit 2
{"errorCode":null,"errorMessage":null,"orders":[{"clientRequestId":null,"creationTime":1465287752319,"currency":"AUD","errorMessage":null,"id":102800357,"instrument":"ETH","openVolume":60000000,"orderSide":"Bid","ordertype":"Limit","price":1925000000,"status":"Cancelled","trades":[],"volume":60000000},{"clientRequestId":null,"creationTime":1465287783251,"currency":"AUD","errorMessage":null,"id":102800414,"instrument":"ETH","openVolume":200000000,"orderSide":"Bid","ordertype":"Limit","price":1926000000,"status":"Cancelled","trades":[],"volume":200000000}],"success":true}
Open orders (authentication required)
Show last open orders of to buy ETH using BTC.
./btcmarketsexamples -a public_api_key -p secret_private_key -c order_history -t ETH/BTC --limit 1
{"errorCode":null,"errorMessage":null,"orders":[{"clientRequestId":null,"creationTime":1465289102761,"currency":"BTC","errorMessage":null,"id":102803735,"instrument":"ETH","openVolume":100000000,"orderSide":"Bid","ordertype":"Limit","price":2245882,"status":"Placed","trades":[],"volume":100000000}],"success":true}
Trades history (authentication required)
Show last trade to buy DAO using ETH.
./btcmarketsexamples -a public_api_key -p secret_private_key -c trade_history -t DAO/ETH --limit 1
{"errorCode":null,"errorMessage":null,"success":true,"trades":[{"creationTime":1465266880437,"description":null,"fee":2200000,"id":102669490,"price":1000000,"side":"Bid","volume":1000000000}]}[
How can you help?
Constructive criticism, code and website edits are always good. They can be made through github.
Some Monero are also welcome:
48daf1rG3hE1Txapcsxh6WXNe9MLNKtu7W7tKTivtSoVLHErYzvdcpea2nSTgGkz66RFP4GKVAsTV14v6G3oddBTHfxP6tU