Version 1.0.
This commit is contained in:
commit
fb4542c39e
17 changed files with 3171 additions and 0 deletions
759
dmbcs-kraken-api.texi
Normal file
759
dmbcs-kraken-api.texi
Normal file
|
|
@ -0,0 +1,759 @@
|
|||
\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
|
||||
Loading…
Add table
Add a link
Reference in a new issue