760 lines
27 KiB
Text
760 lines
27 KiB
Text
|
|
\input texinfo @c -*-texinfo-*-
|
|||
|
|
@c %**start of header
|
|||
|
|
@setfilename dmbcs-kraken-api.info
|
|||
|
|
@settitle Kraken API
|
|||
|
|
@documentencoding utf-8
|
|||
|
|
@c %**end of header
|
|||
|
|
@copying
|
|||
|
|
DMBCS Kraken API
|
|||
|
|
|
|||
|
|
Copyright @copyright{} 2018 DM Bespoke Computer Solutions Ltd
|
|||
|
|
|
|||
|
|
@quotation
|
|||
|
|
Permission is granted to copy, distribute and/or modify this document
|
|||
|
|
under the terms of the GNU Free Documentation License, Version 1.3 or
|
|||
|
|
any later version published by the Free Software Foundation; with no
|
|||
|
|
Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
|
|||
|
|
copy of the license is included in the section entitled ``GNU Free
|
|||
|
|
Documentation License''.
|
|||
|
|
|
|||
|
|
A copy of the license is also available from the Free Software
|
|||
|
|
Foundation Web site at @url{http://www.gnu.org/licenses/fdl.html}.
|
|||
|
|
|
|||
|
|
@end quotation
|
|||
|
|
@end copying
|
|||
|
|
|
|||
|
|
@titlepage
|
|||
|
|
@title DMBCS Kraken API 1.0
|
|||
|
|
@author Dale Mellor
|
|||
|
|
@page
|
|||
|
|
@vskip 0pt plus 1filll
|
|||
|
|
@insertcopying
|
|||
|
|
@end titlepage
|
|||
|
|
|
|||
|
|
@ifnottex
|
|||
|
|
@node Top, Introduction, (dir), (dir)
|
|||
|
|
@top DMBCS Kraken API 1.0
|
|||
|
|
|
|||
|
|
@insertcopying
|
|||
|
|
@end ifnottex
|
|||
|
|
|
|||
|
|
@c Generate the nodes for this menu with `C-c C-u C-m'.
|
|||
|
|
@menu
|
|||
|
|
* Introduction::
|
|||
|
|
* Installation of the library::
|
|||
|
|
* Use example::
|
|||
|
|
* Detailed reference::
|
|||
|
|
* Copying This Manual::
|
|||
|
|
* Function index::
|
|||
|
|
* Index::
|
|||
|
|
@end menu
|
|||
|
|
|
|||
|
|
@c Update all node entries with `C-c C-u C-n'.
|
|||
|
|
@c Insert new nodes with `C-c C-c n'.
|
|||
|
|
|
|||
|
|
@contents
|
|||
|
|
|
|||
|
|
@node Introduction, Installation of the library, Top, Top
|
|||
|
|
@chapter Introduction
|
|||
|
|
@section Kraken
|
|||
|
|
|
|||
|
|
@cindex Kraken
|
|||
|
|
@cindex Kraken web site
|
|||
|
|
@cindex Web site, Kraken
|
|||
|
|
Kraken is a virtual currency exchange, which also handles fiat (real)
|
|||
|
|
currency amounts. Subscribers to the service have an account with
|
|||
|
|
associated funds attached. The web site (www.kraken.com) provides the
|
|||
|
|
user with an account overview (i.e. current balance), currency-pair
|
|||
|
|
exchange market status (history of prices and current order book), and
|
|||
|
|
the means to place entries on the order book; bids for a currency which
|
|||
|
|
can be immediately met with orders to sell the currency are
|
|||
|
|
automatically transacted, with the Kraken site taking a small and
|
|||
|
|
variable cut of the deal, the cut decreasing with intensifying trading
|
|||
|
|
activity.
|
|||
|
|
|
|||
|
|
@cindex Kraken API
|
|||
|
|
@cindex API, Kraken
|
|||
|
|
@cindex Protocol specification
|
|||
|
|
Kraken also provide a stateless, web-based API by which all of the above
|
|||
|
|
actions can be undertaken programmatically. This is fully open, and
|
|||
|
|
described at @uref{www.kraken.org/help/api}. The description is almost,
|
|||
|
|
but not quite, enough to fully specify the interaction protocol. Kraken
|
|||
|
|
also provide pointers to implementations of client-side API libraries in
|
|||
|
|
various languages, and reference to these must be made in order to fully
|
|||
|
|
understand the working of the Kraken API (the official reference
|
|||
|
|
implementation is written in PHP).
|
|||
|
|
|
|||
|
|
@section Client-side implementations
|
|||
|
|
|
|||
|
|
@cindex client-side libraries
|
|||
|
|
@cindex existing C library
|
|||
|
|
@cindex existing C++ library
|
|||
|
|
@cindex JSON
|
|||
|
|
Kraken provide pointers to two proven client library implementations
|
|||
|
|
that we are immediately interested in: a C implementation and a C++ one.
|
|||
|
|
Unfortunately the C++ implementation only provides the thinnest veneer
|
|||
|
|
around TCP sockets, requiring the application programmer to have
|
|||
|
|
knowledge of the low-level protocol in order to be able to compose
|
|||
|
|
correct strings which implement the protocol, which defeats the purpose
|
|||
|
|
somewhat. The C library is more comprehensive, shadowing all the
|
|||
|
|
functions exposed by Krakenʼs API as C functions, although they return
|
|||
|
|
ASCII strings holding data in JSON format which needs further processing
|
|||
|
|
(we actually take this approach ourself; there are plenty of good JSON
|
|||
|
|
libraries available, and in many cases it will be most expedient to
|
|||
|
|
simply send the JSON strings to a web browser and let a Javascript
|
|||
|
|
program there perform the required onwards analysis).
|
|||
|
|
|
|||
|
|
The main purpose of the DMBCS implementation is to get the best of both
|
|||
|
|
worlds: to have the API-completeness of the C implementation and the
|
|||
|
|
resource-management and detail-hiding convenience and safety promised by
|
|||
|
|
the above C++ implementation, so that the user does not need to
|
|||
|
|
understand anything of the protocol themself@footnote{This is not
|
|||
|
|
100% true: when specifying currency pairs the user has to produce
|
|||
|
|
the correct ASCII string, e.g. ``ZUSDXXBT'' for the US Dollar/Bitcoin
|
|||
|
|
order book. We have taken this decision because it would be cumbersome
|
|||
|
|
to encapsulate all the different currencies, which in any case tend to
|
|||
|
|
change from time to time, especially as new crypto-currencies become
|
|||
|
|
available.}.
|
|||
|
|
|
|||
|
|
@section ‘DMBCS’?
|
|||
|
|
|
|||
|
|
@cindex DMBCS namespace
|
|||
|
|
@cindex DMBCS discriminator
|
|||
|
|
This isnʼt a vanity or promotional project with any kind of commercial
|
|||
|
|
restriction, it is something that was needed and is being shared so that
|
|||
|
|
others can benefit from the effort that has been spent on the
|
|||
|
|
development, and hopefully improve upon it.
|
|||
|
|
|
|||
|
|
@cindex GNU license
|
|||
|
|
It is apparent from the above that many libraries exist to interact with
|
|||
|
|
the Kraken facility, and we would not want to preclude the use of any of
|
|||
|
|
them by the installation and use of our own. We also need a way to
|
|||
|
|
refer to our own implementation specifically. So we use ‘DMBCS’ to
|
|||
|
|
provide our distinguishing label: this is appended to the front of the
|
|||
|
|
package name, and all of the C++ code comes inside a namespace with this
|
|||
|
|
label. These should be considered to be five random letters: okay, they
|
|||
|
|
are abbreviated from DM Bespoke Computer Solutions Ltd, the original
|
|||
|
|
authorʼs company, but the project is released as fully free, open source
|
|||
|
|
software (FOSS) which falls under the GNU GPLv3 license, so you should
|
|||
|
|
treat it as any other component in your free, open operating system
|
|||
|
|
(@emph{Please} donʼt tell me you actually pay money for some inferior OS
|
|||
|
|
beyond the eyes of humble scrutineers).
|
|||
|
|
|
|||
|
|
@section Handling JSON returns
|
|||
|
|
|
|||
|
|
@cindex JSON
|
|||
|
|
Returns are JSON strings.
|
|||
|
|
|
|||
|
|
@cindex rapidjson
|
|||
|
|
We could have developed the library to the extent that these are fully
|
|||
|
|
broken out into @code{struct}s, but we had no immediate need for this
|
|||
|
|
and think that it is actually easier to just use @code{rapidjson} which
|
|||
|
|
effectively provides the same thing without imposing processing overhead
|
|||
|
|
when it is not needed; a future version of this library may come with
|
|||
|
|
the requisite aparatus.
|
|||
|
|
|
|||
|
|
@cindex ECMAScript
|
|||
|
|
@cindex JavaScript
|
|||
|
|
@cindex rapidjson
|
|||
|
|
@cindex JSON
|
|||
|
|
For now, either send the return strings to a web browser to be handled
|
|||
|
|
directly by ECMAScript (JavaScript), or, if it is required to handle
|
|||
|
|
them locally then we find that @code{rapidjson}
|
|||
|
|
(@uref{https://github.com/Tencent/rapidjson}) is recommendable, though
|
|||
|
|
there are plenty of other open-source JSON parsers out there.
|
|||
|
|
|
|||
|
|
@node Installation of the library, Use example, Introduction, Top
|
|||
|
|
@chapter Installation of the library
|
|||
|
|
|
|||
|
|
@cindex GIT
|
|||
|
|
@cindex code repository
|
|||
|
|
You will require the @code{git} code management system. At the
|
|||
|
|
terminal, type @code{git clone https://rdmp.org/dmbcs/kraken-api.git
|
|||
|
|
dmbcs-kraken-api}, and then you will have a newly created directory
|
|||
|
|
called @code{dmbcs-kraken-api} which contains the full source code for
|
|||
|
|
the program. Type @code{cd dmbcs-kraken-api} to enter that directory.
|
|||
|
|
|
|||
|
|
@cindex autotools
|
|||
|
|
@cindex autoconf
|
|||
|
|
@cindex automake
|
|||
|
|
@cindex libtool
|
|||
|
|
@cindex pkg-config
|
|||
|
|
The libraryʼs build configuration system is GNUʼs @code{autotools}. You
|
|||
|
|
will need @code{autoconf}, @code{automake}, and @code{libtool}, and
|
|||
|
|
@code{pkg-config}. At the terminal, type @code{autoreconf --install;
|
|||
|
|
./configure}.
|
|||
|
|
|
|||
|
|
@cindex openssl
|
|||
|
|
@cindex curl
|
|||
|
|
@cindex curlpp
|
|||
|
|
You may at this point see errors relating to lack of openssl, curl,
|
|||
|
|
curlpp packages. You must address these issues in your operating system
|
|||
|
|
and perform a successful @code{./configure} before you can proceed with
|
|||
|
|
the dmbcs-kraken-api build.
|
|||
|
|
|
|||
|
|
@cindex make
|
|||
|
|
@cindex non-privileged install
|
|||
|
|
The libraryʼs build is undertaken by GNU make. You will need the
|
|||
|
|
@code{make} package on your system (GNU make is probably not necessary,
|
|||
|
|
any modern incarnation of make will most likely suffice). Type
|
|||
|
|
@code{make && sudo make install} to build and install the library in
|
|||
|
|
your system. Note that the sudo command will require that you have
|
|||
|
|
sufficient privilege on your system, and you may have to type in your
|
|||
|
|
system password (for a local build not requiring such privilege, in a
|
|||
|
|
pinch, do @code{./configure --prefix=install-here && make install}).
|
|||
|
|
|
|||
|
|
That should be it. Try making and running the example program described
|
|||
|
|
below (Section 3).
|
|||
|
|
|
|||
|
|
@node Use example, Detailed reference, Installation of the library, Top
|
|||
|
|
@chapter Use example
|
|||
|
|
|
|||
|
|
To get a summary of the current state of the market in Bitcoin—Dollar
|
|||
|
|
exchanges, write the following C++ code
|
|||
|
|
|
|||
|
|
@cindex @sortas{H} ``hello, world'' example
|
|||
|
|
@example
|
|||
|
|
#include <dmbcs-kraken-api.h>
|
|||
|
|
#include <iostream>
|
|||
|
|
|
|||
|
|
int main ()
|
|||
|
|
@{
|
|||
|
|
auto K = DMBCS::Kraken_API @{"<your-key>", "<your-secret>"@};
|
|||
|
|
std::cout << K.ticker_info ("XXBTZUSD");
|
|||
|
|
return 0;
|
|||
|
|
@}
|
|||
|
|
@end example
|
|||
|
|
|
|||
|
|
@cindex Kraken keys
|
|||
|
|
@cindex Kraken secret
|
|||
|
|
Here, @code{<your-key>} and @code{<your-secret>} are strings which you
|
|||
|
|
get from your Kraken account management page (do @emph{EVERYTHING} in
|
|||
|
|
your power to make sure nobody else sees these). Strictly speaking,
|
|||
|
|
they are not necessary for the above example, but do allow you to make
|
|||
|
|
calls on the @code{K} object which interrogate and manipulate your own
|
|||
|
|
funds.
|
|||
|
|
|
|||
|
|
@cindex application compilation
|
|||
|
|
@cindex compilation
|
|||
|
|
If this code is stored in a file called @code{a.cc}, compile it with a
|
|||
|
|
line like (this should be typed all on one line, without the back-slash)
|
|||
|
|
@example
|
|||
|
|
g++ -std=c++17 $( pkg-config --cflags --libs dmbcs-kraken-api) \
|
|||
|
|
a.cc -o kraken-api
|
|||
|
|
@end example
|
|||
|
|
and then you will have an executable file called @code{kraken-api}. Run
|
|||
|
|
this and observe the result in your terminal (you should see a string
|
|||
|
|
containing JSON-formatted data).
|
|||
|
|
|
|||
|
|
If this doesnʼt work for you, you either havenʼt installed
|
|||
|
|
dmbcs-kraken-api properly yet (see instructions in Section 2 above),
|
|||
|
|
or you need to improve your operating system, or get a better one;
|
|||
|
|
this is as far as we hand-hold you here.
|
|||
|
|
|
|||
|
|
@node Detailed reference, Copying This Manual, Use example, Top
|
|||
|
|
@chapter Detailed reference
|
|||
|
|
|
|||
|
|
@cindex libcurlpp initialization
|
|||
|
|
An important point of note. Any code base which includes the
|
|||
|
|
@code{dmbcs-kraken-api.h} header file anywhere will have the
|
|||
|
|
@code{libcurlpp} library automatically initialized during start-up and
|
|||
|
|
finalized on termination of the application. If you are using
|
|||
|
|
@code{libcurlpp} for your own endeavours, you will have to take care to
|
|||
|
|
ensure that start-up and shut-down happen in ways which are compatible
|
|||
|
|
with your own code.
|
|||
|
|
|
|||
|
|
@cindex library initialization
|
|||
|
|
Note that the @code{dmbcs-kraken-api} library itself requires no
|
|||
|
|
explicit global initialization or finalization.
|
|||
|
|
|
|||
|
|
@cindex thread safety
|
|||
|
|
The library is not thread safe; there are severe limits to the volume
|
|||
|
|
and regularity of data transfer through the Kraken API, and, given the
|
|||
|
|
turn-around times of the accesses, access to the library should be
|
|||
|
|
considered a strictly serial activity for which parallelism has no
|
|||
|
|
purpose. If, however, delayed blocking behaviour is unsatisfactory for
|
|||
|
|
your application and you need to realize asynchronous communications
|
|||
|
|
channels with the Exchange, running the @code{dmbcs-kraken-api} entirely
|
|||
|
|
in a thread separate from the main one would be appropriate.
|
|||
|
|
|
|||
|
|
@section The DMBCS::Kraken_API object
|
|||
|
|
|
|||
|
|
@cindex DMBCS::Kraken_API C++ object
|
|||
|
|
@cindex object constructor
|
|||
|
|
The library provides one single object called @code{DMBCS::Kraken_API}.
|
|||
|
|
This has a single initializing constructor@footnote{Plus a natural move
|
|||
|
|
constructor, and nothing else: as per the parallelization discussion
|
|||
|
|
above, it makes no sense to be able to make copies of the
|
|||
|
|
@code{Kraken_API} object as the whole protocol only allows one operation
|
|||
|
|
at a time to be in progress.}, and then has one method for each function
|
|||
|
|
Kraken expose in their API. Each of these functions returns the result
|
|||
|
|
as a string conveying data in JSON format, which may include an error
|
|||
|
|
code and message.
|
|||
|
|
|
|||
|
|
@cindex official Kraken documentation
|
|||
|
|
It would be folly to describe in detail the Kraken API itself here; we
|
|||
|
|
content ourselves with describing our functionsʼ detailed call
|
|||
|
|
signatures and trusting the user to be able to find detailed notes on
|
|||
|
|
Krakenʼs web site, @uref{https://www.kraken.com/help/api}.
|
|||
|
|
|
|||
|
|
@subsection Construction
|
|||
|
|
|
|||
|
|
@cindex object construction
|
|||
|
|
@findex Kraken_API::Kraken_API
|
|||
|
|
DMBCS::Kraken_API::Kraken_API (std::string const &key, std::string const
|
|||
|
|
&secret)
|
|||
|
|
|
|||
|
|
This is the only way to create an initial API-wrapping object. The
|
|||
|
|
@code{key} and @code{secret} must be obtained from the account
|
|||
|
|
management page at the Kraken web site (strictly speaking, they do not
|
|||
|
|
need to be valid for general exchange-state inquiries, only for personal
|
|||
|
|
account introspection and trading).
|
|||
|
|
|
|||
|
|
Example use:
|
|||
|
|
|
|||
|
|
@example
|
|||
|
|
auto K = DMBCS::Kraken_API @{"my-key", "my-secret"@};
|
|||
|
|
@end example
|
|||
|
|
|
|||
|
|
provides an object @code{K} which is subsequently used to access the
|
|||
|
|
Kraken exchange, as per the further examples below.
|
|||
|
|
|
|||
|
|
@subsection Options
|
|||
|
|
|
|||
|
|
@cindex options
|
|||
|
|
@findex set_opt
|
|||
|
|
template <typename T> void DMBCS::Kraken_API::set_opt (Option const &opt,
|
|||
|
|
T const &val)
|
|||
|
|
|
|||
|
|
Many of the Kraken API functions allow for the specification of optional
|
|||
|
|
filters to control the amount and nature of information returned. These
|
|||
|
|
are specified in the DMBCS library through the set_opt template method.
|
|||
|
|
The option selection is done through constants provided in
|
|||
|
|
@code{Kraken_API}: choose one of
|
|||
|
|
|
|||
|
|
@cindex options list
|
|||
|
|
@cindex list of options
|
|||
|
|
@example
|
|||
|
|
INFO, ACLASS, ASSET, TRADES, USERREF, START, END, OFS, CLOSE_TIME,
|
|||
|
|
DO_CALCS, PAIR, FEE_INFO, OFLAGS, START_TIME, EXPIRE_TIME, VALIDATE,
|
|||
|
|
LEVERAGE, TYPE, CLOSE_TYPE, CLOSE_PRICE_1, CLOSE_PRICE_2, INTERVAL,
|
|||
|
|
SINCE, COUNT
|
|||
|
|
@end example
|
|||
|
|
|
|||
|
|
It is up to your application to provide an appropriate value for each
|
|||
|
|
option — this is one of the corners where the @code{Kraken_API} does not
|
|||
|
|
completely encapsulate the underlying protocol.
|
|||
|
|
|
|||
|
|
If it is necessary to subsequently unset an option, then a method
|
|||
|
|
|
|||
|
|
@findex clear_opt
|
|||
|
|
void DMBCS::Kraken_API::clear_opt (Option const &opt)
|
|||
|
|
|
|||
|
|
is available.
|
|||
|
|
|
|||
|
|
See the description of the @code{asset_info} method in Section
|
|||
|
|
@xref{asset_info} below for an example of how to use these functions.
|
|||
|
|
|
|||
|
|
@subsection Public functions: global state of the exchange
|
|||
|
|
|
|||
|
|
As mentioned above, these functions donʼt strictly need the userʼs key
|
|||
|
|
and secret strings. They provide non-confidential information about the
|
|||
|
|
state of the whole exchange, rather than the state of a userʼs account
|
|||
|
|
with the exchange.
|
|||
|
|
|
|||
|
|
@subsubsection server_time
|
|||
|
|
|
|||
|
|
@findex server_time
|
|||
|
|
std::string DMBCS::Kraken_API::server_time ()
|
|||
|
|
|
|||
|
|
This will return the current time as understood by the Kraken service.
|
|||
|
|
|
|||
|
|
Example:
|
|||
|
|
@example
|
|||
|
|
std::cout << K.server_time ();
|
|||
|
|
@end example
|
|||
|
|
prints something like
|
|||
|
|
@example
|
|||
|
|
@{"error":[],"result":@{"unixtime":1525292746,"rfc1123":"Wed, 2 May 18
|
|||
|
|
20:25:46 +0000"@}@}
|
|||
|
|
@end example
|
|||
|
|
on the terminal.
|
|||
|
|
|
|||
|
|
@subsubsection asset_info
|
|||
|
|
@anchor{asset_info}
|
|||
|
|
@findex asset_info
|
|||
|
|
std::string DMBCS::Kraken_API::asset_info ()
|
|||
|
|
|
|||
|
|
This will return meta-information about a set of assets. The options
|
|||
|
|
@code{INFO}, @code{ACLASS} and @code{ASSET} influence the return from
|
|||
|
|
this function.
|
|||
|
|
|
|||
|
|
Example:
|
|||
|
|
@example
|
|||
|
|
K.set_opt (K.ASSET, "XBTC");
|
|||
|
|
std::cout << K.asset_info ();
|
|||
|
|
@end example
|
|||
|
|
will print something like
|
|||
|
|
@example
|
|||
|
|
@{"error":[],"result":@{"XXBT":@{"aclass":"currency","altname":"XBT","decima
|
|||
|
|
ls":10,"display_decimals":5@}@}@}
|
|||
|
|
@end example
|
|||
|
|
on the terminal. Note that it has corrected the spelling from ``XBTC''!
|
|||
|
|
|
|||
|
|
@subsubsection asset_pairs
|
|||
|
|
@findex asset_pairs
|
|||
|
|
|
|||
|
|
std::string DMBCS::Kraken_API::asset_pairs ()
|
|||
|
|
|
|||
|
|
This function returns a list of pairs of asset types which may be traded
|
|||
|
|
for each other on the exchange, along with meta-data describing the
|
|||
|
|
exchange process.
|
|||
|
|
|
|||
|
|
The options @code{INFO} and @code{PAIR} will affect the value returned
|
|||
|
|
from this function.
|
|||
|
|
|
|||
|
|
For example,
|
|||
|
|
|
|||
|
|
@example
|
|||
|
|
K.set_opt (K.PAIR, "XXBTZUSD");
|
|||
|
|
std::cout << K.asset_pairs ();
|
|||
|
|
@end example
|
|||
|
|
|
|||
|
|
will print something like
|
|||
|
|
|
|||
|
|
@example
|
|||
|
|
@{"error":[],"result":@{"XXBTZUSD":@{"altname":"XBTUSD","aclass_base":"curre
|
|||
|
|
ncy","base":"XXBT","aclass_quote":"currency","quote":"ZUSD","lot":"unit","pa
|
|||
|
|
ir_decimals":1,"lot_decimals":8,"lot_multiplier":1,"leverage_buy":[2,3,4,5],
|
|||
|
|
"leverage_sell":[2,3,4,5],"fees":[[0,0.26],[50000,0.24],[100000,0.22],[25000
|
|||
|
|
0,0.2],[500000,0.18],[1000000,0.16],[2500000,0.14],[5000000,0.12],[10000000,
|
|||
|
|
0.1]],"fees_maker":[[0,0.16],[50000,0.14],[100000,0.12],[250000,0.1],[500000
|
|||
|
|
,0.08],[1000000,0.06],[2500000,0.04],[5000000,0.02],[10000000,0]],"fee_volum
|
|||
|
|
e_currency":"ZUSD","margin_call":80,"margin_stop":40@}@}@}
|
|||
|
|
@end example
|
|||
|
|
|
|||
|
|
on the command line.
|
|||
|
|
|
|||
|
|
@subsubsection ticker_info
|
|||
|
|
@findex ticker_info
|
|||
|
|
|
|||
|
|
std::string DMBCS::Kraken_API::ticker_info (std::string const &pair)
|
|||
|
|
|
|||
|
|
Provide up to date information about the state of the market in a
|
|||
|
|
trading pair.
|
|||
|
|
|
|||
|
|
@example
|
|||
|
|
std::cout << K.ticker_info ("XXBTZUSD");
|
|||
|
|
@end example
|
|||
|
|
|
|||
|
|
will produce something like
|
|||
|
|
|
|||
|
|
@example
|
|||
|
|
@{"error":[],"result":@{"XXBTZUSD":@{"a":["7616.30000","1","1.000"],"b":["7
|
|||
|
|
610.10000","3","3.000"],"c":["7616.30000","0.00840000"],"v":["941.52501200"
|
|||
|
|
,"2032.58702329"],"p":["7638.63864","7661.37306"],"t":[3099,6798],"l":["759
|
|||
|
|
6.00000","7596.00000"],"h":["7700.00000","7728.90000"],"o":"7679.40000"@}@}@}
|
|||
|
|
@end example
|
|||
|
|
|
|||
|
|
on the command line. Briefly, the components of the @code{result} are:
|
|||
|
|
ask, bid, close, volume, weighted-volume, trades, low, high, and open,
|
|||
|
|
wherein the interval-dependent quantities refer to the last 24 hours.
|
|||
|
|
|
|||
|
|
@subsubsection ohlc_data
|
|||
|
|
@findex ohlc_data
|
|||
|
|
@cindex open-high-low-close, ohlc
|
|||
|
|
@cindex ohlc, open-high-low-close
|
|||
|
|
|
|||
|
|
std::string DMBCS::Kraken_API::ohlc_data (std::string const &pair)
|
|||
|
|
|
|||
|
|
The abbreviation ``ohlc'' stands for ``open, high, low, close,'' and
|
|||
|
|
this function will return a history of these values for a given
|
|||
|
|
interval.
|
|||
|
|
|
|||
|
|
The @code{pair} argument should specify a trading pair, such as
|
|||
|
|
@code{"XXBTZUSD"} for Bitcoin—Dollar trading.
|
|||
|
|
|
|||
|
|
The function is affected by the @code{INTERVAL} and @code{SINCE}
|
|||
|
|
options.
|
|||
|
|
|
|||
|
|
@subsubsection order_book
|
|||
|
|
@findex order_book
|
|||
|
|
@cindex exchange prices
|
|||
|
|
@cindex trading pair code
|
|||
|
|
|
|||
|
|
std::string DMBCS::Kraken_API::order_book (std::string const &pair)
|
|||
|
|
|
|||
|
|
This function returns live details of current bidding and asking prices
|
|||
|
|
and the volumes being offered.
|
|||
|
|
|
|||
|
|
The @code{pair} argument should specify a trading pair code, such as
|
|||
|
|
@code{"XXBTZUSD"}.
|
|||
|
|
|
|||
|
|
The function is affected by the @code{COUNT} option.
|
|||
|
|
|
|||
|
|
@subsubsection recent_trades
|
|||
|
|
@findex recent_trades
|
|||
|
|
|
|||
|
|
std::string DMBCS::Kraken_API::recent_trades (std::string const &pair)
|
|||
|
|
|
|||
|
|
This function returns an up to date list of all recently concluded
|
|||
|
|
trades.
|
|||
|
|
|
|||
|
|
The @code{pair} argument should indicate a trading pair, such as
|
|||
|
|
@code{"XXBTZUSD"}.
|
|||
|
|
|
|||
|
|
The function is affected by the @code{SINCE} option.
|
|||
|
|
|
|||
|
|
@subsubsection spread_data
|
|||
|
|
@findex spread_data
|
|||
|
|
|
|||
|
|
std::string DMBCS::Kraken_API::spread_data (std::string const &pair)
|
|||
|
|
|
|||
|
|
This function returns a history of instantaneous highest bid and lowest
|
|||
|
|
offer values for this trading pair on the exchange.
|
|||
|
|
|
|||
|
|
The @code{pair} argument should indicate a trading pair, such as
|
|||
|
|
@code{"XXBTZUSD"}.
|
|||
|
|
|
|||
|
|
The function is affected by the @code{SINCE} option.
|
|||
|
|
|
|||
|
|
@subsection Private inquiry functions
|
|||
|
|
@cindex private functions
|
|||
|
|
@cindex userʼs account
|
|||
|
|
|
|||
|
|
These functions are for inquiring into the current state of the userʼs
|
|||
|
|
account.
|
|||
|
|
|
|||
|
|
@subsubsection account_balance
|
|||
|
|
@findex account_balance
|
|||
|
|
|
|||
|
|
std::string account_balance ()
|
|||
|
|
|
|||
|
|
This function returns a list of currencies and the amount of each Kraken
|
|||
|
|
is holding for you on account.
|
|||
|
|
|
|||
|
|
@subsubsection trade_balance
|
|||
|
|
@findex trade_balance
|
|||
|
|
|
|||
|
|
std::string trade_balance ()
|
|||
|
|
|
|||
|
|
This function provides a snapshot of your current trading activities,
|
|||
|
|
expressing your current balance in terms of potential value in a given
|
|||
|
|
currency.
|
|||
|
|
|
|||
|
|
The currency may be set with the @code{ASSET} option. The @code{ACLASS}
|
|||
|
|
option is also available, and may have some use in a future version of
|
|||
|
|
Krakenʼs API.
|
|||
|
|
|
|||
|
|
@subsubsection open_orders
|
|||
|
|
@findex open_orders
|
|||
|
|
@cindex order close-out
|
|||
|
|
|
|||
|
|
std::string open_orders ()
|
|||
|
|
|
|||
|
|
This function provides a very detailed description of the current state
|
|||
|
|
of all of your open orders, including the amount of fulfilment that has
|
|||
|
|
been completed and the conduct of on-going actions, such as close-out.
|
|||
|
|
|
|||
|
|
The function is affected by the @code{TRADES} and @code{USERREF} options.
|
|||
|
|
|
|||
|
|
@subsubsection closed_orders
|
|||
|
|
@findex closed_orders
|
|||
|
|
|
|||
|
|
std::string closed_orders ()
|
|||
|
|
|
|||
|
|
Similarly to the @code{open_orders} function above, this function
|
|||
|
|
provides detailed information of your closed orders. Note that a
|
|||
|
|
maximum of 50 records will be returned by this function; use the
|
|||
|
|
@code{OFS} option in repeat calls to get information on more items.
|
|||
|
|
|
|||
|
|
The options which affect this function are: @code{TRADES},
|
|||
|
|
@code{USERREF}, @code{START}, @code{END}, @code{OFS} and
|
|||
|
|
@code{CLOSETIME}.
|
|||
|
|
|
|||
|
|
@subsubsection query_orders
|
|||
|
|
@findex query_orders
|
|||
|
|
@cindex transaction ID
|
|||
|
|
|
|||
|
|
std::string query_orders (std::string const &txid)
|
|||
|
|
|
|||
|
|
As the above two functions, but returns data specifically about a given
|
|||
|
|
set of orders, identified by their transaction ID. The @code{txid}
|
|||
|
|
argument is a string containing a comma-separated list of transaction
|
|||
|
|
IDs.
|
|||
|
|
|
|||
|
|
The function is affected by the @code{TRADES} and @code{USERREF}
|
|||
|
|
options.
|
|||
|
|
|
|||
|
|
@subsubsection trades_history
|
|||
|
|
@findex trades_history
|
|||
|
|
@cindex listing limits
|
|||
|
|
@cindex offset, listing
|
|||
|
|
|
|||
|
|
std::string trades_history ()
|
|||
|
|
|
|||
|
|
This returns very detailed information about your trading history. A
|
|||
|
|
maximum of 50 records will be returned; use the @code{OFS} option in
|
|||
|
|
repeat calls to get more information.
|
|||
|
|
|
|||
|
|
Other options which affect the outcome from this function are:
|
|||
|
|
@code{TYPE}, @code{TRADES}, @code{START}, and @code{END}.
|
|||
|
|
|
|||
|
|
@subsubsection trades_info
|
|||
|
|
@findex trades_info
|
|||
|
|
|
|||
|
|
std::string trades_info (std::string const &txid)
|
|||
|
|
|
|||
|
|
Gets detailed information, as the method above, for a very specific set
|
|||
|
|
of trades you have completed in the past. The @code{txid} argument is a
|
|||
|
|
string containing a comma-separated list of transaction IDs.
|
|||
|
|
|
|||
|
|
This function is affected by the @code{TRADES} option, which causes more
|
|||
|
|
information to be returned (the value given to the option is irrelevant).
|
|||
|
|
|
|||
|
|
@subsubsection open_positions
|
|||
|
|
@findex open_positions
|
|||
|
|
|
|||
|
|
std::string open_positions (std::string const &txid)
|
|||
|
|
|
|||
|
|
Get detailed information on specific open positions, optionally with
|
|||
|
|
calculation of expected profit/loss given the current conditions of the
|
|||
|
|
exchange. The @code{txid} argument is a string containing a
|
|||
|
|
comma-separated list of transaction IDs.
|
|||
|
|
|
|||
|
|
This function is affected by the @code{DOCALCS} option (the actual value
|
|||
|
|
of this option is irrelevant).
|
|||
|
|
|
|||
|
|
@subsubsection ledgers_info
|
|||
|
|
@findex ledgers_info
|
|||
|
|
|
|||
|
|
std::string ledgers_info ()
|
|||
|
|
|
|||
|
|
This is the method which allows you to get the definitive history (e.g.,
|
|||
|
|
for tax purposes), of your activities on the Kraken exchange, including
|
|||
|
|
exact fees which have been charged to your account. The method will
|
|||
|
|
only return 50 items at a time, so you will likely need to make multiple
|
|||
|
|
requests with different @code{START}, @code{END} and/or @code{OFS}
|
|||
|
|
option settings to get the full record.
|
|||
|
|
|
|||
|
|
The list of options which affect this function are: @code{ACLASS},
|
|||
|
|
@code{ASSET}, @code{TYPE}, @code{START}, @code{END} and @code{OFS}.
|
|||
|
|
|
|||
|
|
@subsubsection query_ledgers
|
|||
|
|
@findex query_ledgers
|
|||
|
|
|
|||
|
|
std::string query_ledgers (std::string const &id)
|
|||
|
|
|
|||
|
|
As above, but return information about a specific set of ledger
|
|||
|
|
entries. The @code{id} argument is a string containing a
|
|||
|
|
comma-separated list of ledger item IDs.
|
|||
|
|
|
|||
|
|
@subsubsection trade_volume
|
|||
|
|
@findex trade_volume
|
|||
|
|
|
|||
|
|
std::string trade_volume ()
|
|||
|
|
|
|||
|
|
This function returns information about actual and potential costs of
|
|||
|
|
trading based on the userʼs recent trading volume.
|
|||
|
|
|
|||
|
|
The function is affected by the @code{PAIR} and @code{FEE_INFO} options.
|
|||
|
|
|
|||
|
|
@subsection Trading functions
|
|||
|
|
@cindex trading functions
|
|||
|
|
|
|||
|
|
The final two functions in the Kraken API are for actively submitting
|
|||
|
|
order instructions to the Kraken exchange. Use these with extreme care,
|
|||
|
|
especially during the development phase of your application; it is too
|
|||
|
|
easy to accidentally lose a lot of money!
|
|||
|
|
|
|||
|
|
@subsubsection add_order
|
|||
|
|
@findex add_order
|
|||
|
|
|
|||
|
|
std::string DMBCS::Kraken_API::add_order (Order_Instruction const
|
|||
|
|
&instruction, Order_Type const &order, std::string const &asset,
|
|||
|
|
std::string const &volume, ...)
|
|||
|
|
|
|||
|
|
@cindex Kraken engine
|
|||
|
|
This is the single method available for adding an instruction to the
|
|||
|
|
Kraken engine to execute a trade order on your behalf.
|
|||
|
|
|
|||
|
|
@cindex trading instructions
|
|||
|
|
The available instructions are: @code{DMBCS::Kraken_API::BUY} and
|
|||
|
|
@code{DMBCS::Kraken_API::SELL}.
|
|||
|
|
|
|||
|
|
@cindex order types
|
|||
|
|
The available order types, again in the @code{DMBCS::Kraken_API}
|
|||
|
|
namespace but shown without for brevity, are: @code{MARKET},
|
|||
|
|
@code{LIMIT}, @code{STOP_LOSS}, @code{TAKE_PROFIT},
|
|||
|
|
@code{STOP_LOSS_PROFIT}, @code{STOP_LOSS_PROFIT_LIMIT},
|
|||
|
|
@code{STOP_LOSS_LIMIT}, @code{TAKE_PROFIT_LIMIT}, @code{TRAILING_STOP},
|
|||
|
|
@code{TRAILING_STOP_LIMIT}, @code{STOP_LOSS_AND_LIMIT},
|
|||
|
|
@code{SETTLE_POSITION}.
|
|||
|
|
|
|||
|
|
@cindex asset
|
|||
|
|
@cindex asset type
|
|||
|
|
The @code{asset} argument must indicate the asset pair to trade. For
|
|||
|
|
example, to buy Bitcoin for Dollars the asset should be
|
|||
|
|
@code{"XXBTZUSD"}.
|
|||
|
|
|
|||
|
|
The @code{volume} argument must be the amount of the asset you are
|
|||
|
|
buying or selling.
|
|||
|
|
|
|||
|
|
If your order type is one of LIMIT, STOP_LOSS, TAKE_PROFIT, or
|
|||
|
|
TRAILING_STOP, then you must supply an extra argument which gives the
|
|||
|
|
@emph{price} at which the action takes place. If your order type is one
|
|||
|
|
of STOP_LOSS_PROFIT, STOP_LOSS_PROFIT_LIMIT, STOP_LOSS_LIMIT,
|
|||
|
|
TAKE_PROFIT_LIMIT, TRAILING_STOP_LIMIT, STOP_LOSS_AND_LIMIT, then you
|
|||
|
|
must supply @emph{two} extra arguments to the method: a @emph{price_1}
|
|||
|
|
and a @emph{price_2} which give the limits at which primary and
|
|||
|
|
secondary actions take place.
|
|||
|
|
|
|||
|
|
Note that all the ‘numerical’ arguments are in fact strings. These are
|
|||
|
|
sent to the Kraken exchange as-is, and thus must be in a form that can
|
|||
|
|
be parsed into bona-fide numbers. It is done this way to guarantee no
|
|||
|
|
loss of precision due to such things as numerical rounding or truncating
|
|||
|
|
a floating-point value to an integer.
|
|||
|
|
|
|||
|
|
Further to the somewhat complicated arrangement of compulsory arguments
|
|||
|
|
given above, the method is influenced by the following options:
|
|||
|
|
@code{LEVERAGE}, @code{OFLAGS}, @code{START_TIME}, @code{EXPIRE_TIME},
|
|||
|
|
@code{USERREF}, @code{VALIDATE}, @code{CLOSE_TYPE},
|
|||
|
|
@code{CLOSE_PRICE_1}, and @code{CLOSE_PRICE_2}.
|
|||
|
|
|
|||
|
|
Please be very careful when composing complicated esoteric options: the
|
|||
|
|
Kraken engine itself has been known to be somewhat fragile with its
|
|||
|
|
interpretation of various combinations of options. Donʼt make any
|
|||
|
|
assumptions, try things out in the Kraken web interface first, and guard
|
|||
|
|
against spending any amount of money which means anything to you until
|
|||
|
|
you are absolutely sure you understand everything.
|
|||
|
|
|
|||
|
|
@subsubsection cancel_order
|
|||
|
|
@findex cancel_order
|
|||
|
|
|
|||
|
|
std::string DMBCS::Kraken_API::cancel_order (std::string const &txid)
|
|||
|
|
|
|||
|
|
Cancel the order with the given transaction ID (@code{txid}). Of course
|
|||
|
|
this only works on the part of an order which has not been fulfilled by
|
|||
|
|
the time the instruction manages to reach, and is acted upon by, the
|
|||
|
|
Kraken exchange engine.
|
|||
|
|
|
|||
|
|
@node Copying This Manual, Index, Detailed reference, Top
|
|||
|
|
@appendix Copying This Manual
|
|||
|
|
|
|||
|
|
@c Get fdl.texi from http://www.gnu.org/licenses/fdl.html
|
|||
|
|
@include fdl.texi
|
|||
|
|
|
|||
|
|
@node Function index, Index, Copying This Manual, Top
|
|||
|
|
@unnumbered Function index
|
|||
|
|
|
|||
|
|
@printindex fn
|
|||
|
|
|
|||
|
|
@node Index, , Copying This Manual, Top
|
|||
|
|
@unnumbered Index
|
|||
|
|
|
|||
|
|
@printindex cp
|
|||
|
|
|
|||
|
|
@bye
|
|||
|
|
|
|||
|
|
@c trader-desk.texi ends here
|