Spot REST
The examples presented below serve to demonstrate the usage of the Spot REST clients provided by python-kraken-sdk to access Kraken’s REST API.
For questions, feedback, additions, suggestions for improvement or problems python-kraken-sdk/discussions or python-kraken-sdk/issues may be helpful.
These examples are not maintained on a regular basis. They serve only for demonstration purposes - make sure to checkout the documentation of the individual functions.
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3# Copyright (C) 2023 Benjamin Thomas Schwertfeger
4# GitHub: https://github.com/btschwertfeger
5#
6
7"""
8Module that implements some samples for the Kraken Spot REST clients.
9
10This module may not be maintained on a regular basis, so please refer to the
11unit tests of this package as they provide a much deeper dive into the usage.
12"""
13
14import logging
15import logging.config
16import os
17import time
18from pathlib import Path
19
20from kraken.spot import Earn, Funding, Market, Trade, User
21
22logging.basicConfig(
23 format="%(asctime)s %(module)s,line: %(lineno)d %(levelname)8s | %(message)s",
24 datefmt="%Y/%m/%d %H:%M:%S",
25 level=logging.INFO,
26)
27logging.getLogger("requests").setLevel(logging.WARNING)
28logging.getLogger("urllib3").setLevel(logging.WARNING)
29
30
31key = os.getenv("API_KEY")
32secret = os.getenv("SECRET_KEY")
33
34
35def user_examples() -> None:
36 """Example usage of the User client"""
37 user = User(key=key, secret=secret)
38
39 print(user.get_account_balance())
40 print(user.get_trade_balance()) # asset='BTC'
41 print(user.get_open_orders())
42 print(user.get_closed_orders())
43 print(
44 user.get_orders_info(txid="OBQFM7-JNVKS-H3ULEH"),
45 ) # or txid='id1,id2,id3' or txid=['id1','id2']
46 print(user.get_trades_history())
47 time.sleep(3)
48 print(user.get_trades_info(txid="TCNTTR-QBEVO-E5H5UK"))
49 print(user.get_open_positions()) # txid='someid'
50 print(
51 user.get_ledgers_info(),
52 ) # asset='BTC' or asset='BTC,EUR' or asset=['BTC','EUR']
53 print(user.get_ledgers(id_="LIORGR-33NXH-LBUS5Z"))
54 print(user.get_trade_volume()) # pair='BTC/EUR'
55
56 # ____export_report____
57 response = user.request_export_report(
58 report="ledgers",
59 description="myLedgers1",
60 format="CSV",
61 ) # report='trades'
62 print(user.get_export_report_status(report="ledgers"))
63
64 # save report to file
65 response_data = user.retrieve_export(id_=response["id"])
66 with Path("myExport.zip").open("wb") as file:
67 for chunk in response_data.iter_content(chunk_size=512):
68 if chunk:
69 file.write(chunk)
70
71 print(
72 user.delete_export_report(id_=response["id"], type_="delete"),
73 ) # alternative: type_=cancel
74
75
76def market_examples() -> None:
77 """Example usage of the Market client"""
78 market = Market()
79
80 print(market.get_assets(assets=["XBT"]))
81 print(market.get_asset_pairs(pair=["DOTEUR"]))
82 print(market.get_ticker(pair="XBTUSD"))
83 print(market.get_ohlc(pair="XBTUSD", interval=5))
84 print(market.get_order_book(pair="XBTUSD", count=10))
85 print(market.get_recent_trades(pair="XBTUSD"))
86 print(market.get_recent_spreads(pair="XBTUSD"))
87 print(market.get_system_status())
88 time.sleep(2)
89
90
91def trade_examples() -> None:
92 """Example usage of the Trade client"""
93 raise ValueError(
94 "Attention: Please check if you really want to execute trade functions.",
95 )
96 trade = Trade(key=key, secret=secret)
97
98 if False:
99 print(
100 trade.create_order(
101 ordertype="limit",
102 side="buy",
103 volume=1,
104 pair="BTC/EUR",
105 price=0.01,
106 ),
107 )
108 print(
109 trade.create_order_batch(
110 orders=[
111 {
112 "close": {
113 "ordertype": "stop-loss-limit",
114 "price": 120,
115 "price2": 110,
116 },
117 "ordertype": "limit",
118 "price": 140,
119 "price2": 130,
120 "timeinforce": "GTC",
121 "type": "buy",
122 "userref": "345dsdfddfgdsgdfgsfdsfsdf",
123 "volume": 1000,
124 },
125 {
126 "ordertype": "limit",
127 "price": 150,
128 "timeinforce": "GTC",
129 "type": "sell",
130 "userref": "1dfgesggwe5t3",
131 "volume": 123,
132 },
133 ],
134 pair="BTC/USD",
135 validate=True,
136 ),
137 )
138
139 print(
140 trade.edit_order(txid="sometxid", pair="BTC/EUR", volume=4.2, price=17000),
141 )
142 time.sleep(2)
143
144 print(trade.cancel_order(txid="O2JLFP-VYFIW-35ZAAE"))
145 print(trade.cancel_all_orders())
146 print(trade.cancel_all_orders_after_x(timeout=6))
147
148 print(
149 trade.cancel_order_batch(
150 orders=[
151 "O2JLFP-VYFIW-35ZAAE",
152 "O523KJ-DO4M2-KAT243",
153 "OCDIAL-YC66C-DOF7HS",
154 "OVFPZ2-DA2GV-VBFVVI",
155 ],
156 ),
157 )
158
159
160def funding_examples() -> None:
161 """Example usage of the Funding client"""
162 funding = Funding(key=key, secret=secret)
163 print(funding.get_deposit_methods(asset="DOT"))
164 # print(funding.get_deposit_address(asset='DOT', method='Polkadot'))
165 # print(funding.get_recent_deposits_status(asset='DOT'))
166 print(
167 funding.get_withdrawal_info(asset="DOT", key="MyPolkadotWallet", amount="200"),
168 )
169
170 raise ValueError(
171 "Attention: Please check if you really want to execute funding functions.",
172 )
173 if False:
174 time.sleep(2)
175 print(funding.withdraw_funds(asset="DOT", key="MyPolkadotWallet", amount=200))
176 print(funding.get_recent_withdraw_status(asset="DOT"))
177 print(funding.cancel_widthdraw(asset="DOT", refid="12345"))
178 print(
179 funding.wallet_transfer(
180 asset="ETH",
181 amount=0.100,
182 from_="Spot Wallet",
183 to_="Futures Wallet",
184 ),
185 )
186
187
188def earn_examples() -> None:
189 """
190 Example usage of the Funding client; not shown, since special API key
191 permissions must be set.
192 """
193 earn = Earn(key=key, secret=secret) # noqa: F841
194 # ...
195 # see tests/spot/test_spot_earn.py for examples.
196
197
198def main() -> None:
199 user_examples()
200 market_examples()
201 trade_examples()
202 funding_examples()
203 earn_examples()
204
205
206if __name__ == "__main__":
207 main()