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 |