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.

Example usage of Spot REST clients
  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()