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.
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()