Futures REST

The examples presented below serve to demonstrate the usage of the Futures 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 Futures 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 example usage for the Kraken Futures 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 os
 16import time
 17from pathlib import Path
 18
 19from kraken.futures import Funding, Market, Trade, User
 20
 21logging.basicConfig(
 22    format="%(asctime)s %(module)s,line: %(lineno)d %(levelname)8s | %(message)s",
 23    datefmt="%Y/%m/%d %H:%M:%S",
 24    level=logging.INFO,
 25)
 26logging.getLogger("requests").setLevel(logging.WARNING)
 27logging.getLogger("urllib3").setLevel(logging.WARNING)
 28
 29key = os.getenv("FUTURES_SANDBOX_KEY")
 30secret = os.getenv("FUTURES_SANDBOX_SECRET")
 31
 32
 33def market_examples() -> None:
 34    """Example market client usage"""
 35    # market = Market()
 36    # print(market.get_tick_types())
 37    # print(market.get_tradeable_products(tick_type='trade'))
 38    # print(market.get_resolutions(tick_type='trade', tradeable='PI_XBTUSD'))
 39    # print(market.get_ohlc(tick_type='trade', symbol='PI_XBTUSD', resolution='5m', from_='1668989233'))
 40    # print(market.get_fee_schedules())
 41    # # print(market.get_orderbook(symbol='fi_xbtusd_180615')) # this endpoint is broken
 42    # print(market.get_tickers())
 43    # print(market.get_instruments())
 44    # print(market.get_instruments_status())
 45    # print(market.get_instruments_status(instrument='PI_XBTUSD'))
 46    # print(market.get_trade_history(symbol='PI_XBTUSD'))
 47    # print(market.get_historical_funding_rates(symbol='PI_XBTUSD'))
 48    # time.sleep(2)
 49
 50    priv_market = Market(key=key, secret=secret, sandbox=True)
 51    # print(priv_market.get_fee_schedules_vol())
 52    print(priv_market.get_leverage_preference())
 53    # print(priv_market.set_leverage_preference(symbol='PF_XBTUSD', maxLeverage=2)) # set max leverage
 54    # print(priv_market.set_leverage_preference(symbol='PF_XBTUSD')) # reset max leverage
 55    # print(priv_market.set_pnl_preference(symbol='PF_XBTUSD', pnlPreference='BTC'))
 56
 57    # time.sleep(2)
 58    # print(priv_market.get_execution_events())
 59    # print(market.get_public_execution_events(tradeable='PI_XBTUSD'))
 60    # print(market.get_public_order_events(tradeable='PI_XBTUSD'))
 61    # print(market.get_public_mark_price_events(tradeable='PI_XBTUSD'))
 62    # print(priv_market.get_order_events())
 63    # print(priv_market.get_trigger_events())
 64
 65
 66def user_examples() -> None:
 67    """Example User client usage"""
 68    user = User(key=key, secret=secret, sandbox=True)
 69    print(user.get_wallets())
 70
 71    print(user.get_subaccounts())
 72    print(user.get_unwind_queue())
 73    print(user.get_notifications())
 74
 75    print(user.get_open_positions())
 76    print(user.get_open_orders())
 77
 78    print(user.get_account_log(before="1604937694000"))
 79    print(user.get_account_log(info="futures liquidation"))
 80    time.sleep(2)
 81    response = user.get_account_log_csv()
 82    assert response.status_code in {200, "200"}
 83    with Path("account_log.csv").open("wb") as file:
 84        for chunk in response.iter_content(chunk_size=512):
 85            if chunk:
 86                file.write(chunk)
 87
 88
 89def trade_examples() -> None:
 90    """Example Trade client usage"""
 91    raise ValueError(
 92        "Attention: Please check if you really want to execute the trade endpoints!",
 93    )
 94    trade = Trade(key=key, secret=secret, sandbox=True)
 95    print(trade.get_fills())
 96    print(trade.get_fills(lastFillTime="2020-07-21T12:41:52.790Z"))
 97    print(
 98        trade.create_batch_order(
 99            batchorder_list=[
100                {
101                    "order": "send",
102                    "order_tag": "1",
103                    "orderType": "lmt",
104                    "symbol": "PI_XBTUSD",
105                    "side": "buy",
106                    "size": 1,
107                    "limitPrice": 1.00,
108                },
109                {
110                    "order": "send",
111                    "order_tag": "2",
112                    "orderType": "stp",
113                    "symbol": "PI_XBTUSD",
114                    "side": "buy",
115                    "size": 1,
116                    "limitPrice": 2.00,
117                    "stopPrice": 3.00,
118                },
119                {
120                    "order": "cancel",
121                    "order_id": "e35d61dd-8a30-4d5f-a574-b5593ef0c050",
122                },
123                {
124                    "order": "cancel",
125                    "cliOrdId": 123456789,
126                },
127            ],
128        ),
129    )
130    print(trade.cancel_all_orders())
131    print(trade.cancel_all_orders(symbol="pi_xbtusd"))
132    print(trade.dead_mans_switch(timeout=60))
133    print(trade.dead_mans_switch(timeout=0))  # to deactivate
134    print(trade.cancel_order(order_id="some order id"))
135    print(
136        trade.edit_order(
137            orderId="some order id",
138            size=300,
139            limitPrice=401,
140            stopPrice=350,
141        ),
142    )
143    print(trade.get_orders_status(orderIds=["orderid1", "orderid2"]))
144    print(
145        trade.create_order(
146            orderType="lmt",
147            side="buy",
148            size=1,
149            limitPrice=4,
150            symbol="pf_bchusd",
151        ),
152    )
153    print(
154        trade.create_order(
155            orderType="take_profit",
156            side="buy",
157            size=1,
158            symbol="pf_bchusd",
159            stopPrice=100,
160            triggerSignal="mark",
161        ),
162    )
163
164
165def funding_examples() -> None:
166    """Example Funding client usage"""
167    funding = Funding(key=key, secret=secret, sandbox=True)
168    print(funding.get_historical_funding_rates(symbol="PF_SOLUSD"))
169
170
171def main() -> None:
172    user_examples()
173    market_examples()
174    trade_examples()
175    funding_examples()
176
177
178if __name__ == "__main__":
179    main()