Collection of clients and methods to interact with the cryptocurrency exchange Kraken.
Project description
Futures and Spot Websocket and REST API Python SDK for the Kraken Cryptocurrency Exchange 🦑
This is an unofficial collection of REST and websocket clients to interact with the Kraken exchange API using Python.
There is no guarantee that this software will work flawlessly at this or later times. Everyone has to check the underlying source code themselves and consider whether this is appropriate for their own use.
Of course, no responsibility is taken for possible profits or losses. No one should be motivated or tempted to invest assets in speculative forms of investment.
Table of Contents
- Installation
- Spot Clients Example Usage
- Futures Clients Example Usage
- Spot Clients Documentation
- Futures Clients Documentation
- Notes
- References
Installation
python3 -m pip install python-kraken-sdk
Spot Clients Example Usage
REST API
... can be found in /examples/spot_examples.py
from kraken.spot.client import User, Market, Trade, Funding, Staking
def main() -> None:
key = 'Kraken-public-key'
secret = 'Kraken-secret-key'
# ____USER________
user = User(key=key, secret=secret)
print(user.get_account_balance())
print(user.get_open_orders())
# ____MARKET_______
market = Market(key=key, secret=secret)
print(market.get_ticker(pair='BTCUSD'))
# ____TRADE________
trade = Trade(key=key, secret=secret)
print(trade.create_order(
ordertype='limit',
side='buy',
volume=1,
pair='BTC/EUR',
price=20000
))
# ____FUNDING______
funding = Funding(key=key, secret=secret)
print(funding.withdraw_funds(asset='DOT', key='MyPolkadotWallet', amount=200))
print(funding.cancel_widthdraw(asset='DOT', refid='<some id>'))
# ____STAKING______
staking = Staking(key=key, secret=secret)
print(staking.list_stakeable_assets())
print(staking.stake_asset(asset='DOT', amount=20, method='polkadot-staked'))
if __name__ == '__main__':
main()
Websockets
... can be found in /examples/spot_ws_examples.py
import asyncio, time
from kraken.spot.client import WsClient
from kraken.spot.websocket.websocket import KrakenSpotWSClient
async def main() -> None:
key = 'Kraken-public-key'
secret = 'Kraken-secret-key'
class Bot(KrakenSpotWSClient):
async def on_message(self, msg) -> None:
if 'event' in msg:
if msg['event'] in ['pong', 'heartbeat']: return
print(msg)
# await self._client.create_order(
# ordertype='limit',
# side='buy',
# pair='BTC/EUR',
# price=20000,
# volume=1
# )
# ... it is also possible to call regular Spot REST endpoints
# but using the websocket messages is more efficient
# ___Public_Websocket_Feed_____
bot = Bot(WsClient()) # only use this one if you dont need private feeds
print(bot.public_sub_names) # list public subscription names
await bot.subscribe(subscription={ 'name': 'ticker' }, pair=['XBT/EUR', 'DOT/EUR'])
await bot.subscribe(subscription={ 'name': 'spread' }, pair=['XBT/EUR', 'DOT/EUR'])
# await bot.subscribe(subscription={ 'name': 'book' }, pair=['BTC/EUR'])
# await bot.subscribe(subscription={ 'name': 'book', 'depth': 25}, pair=['BTC/EUR'])
# await bot.subscribe(subscription={ 'name': 'ohlc' }, pair=['BTC/EUR'])
# await bot.subscribe(subscription={ 'name': 'ohlc', 'interval': 15}, pair=['XBT/EUR', 'DOT/EUR'])
# await bot.subscribe(subscription={ 'name': 'trade' }, pair=['BTC/EUR'])
# await bot.subscribe(subscription={ 'name': '*' } , pair=['BTC/EUR'])
time.sleep(2) # wait because unsubscribing is faster than subscribing ...
await bot.unsubscribe(subscription={ 'name': 'ticker' }, pair=['XBT/EUR','DOT/EUR'])
await bot.unsubscribe(subscription={ 'name': 'spread' }, pair=['XBT/EUR'])
await bot.unsubscribe(subscription={ 'name': 'spread' }, pair=['DOT/EUR'])
# ....
# ___Private_Websocket_Feed_____
# when using the authenticated bot, you can also subscribe to public feeds
auth_bot = Bot(WsClient(key=key, secret=secret))
print(auth_bot.private_sub_names) # list private subscription names
await auth_bot.subscribe(subscription={ 'name': 'ownTrades' })
await auth_bot.subscribe(subscription={ 'name': 'openOrders' })
time.sleep(2)
await auth_bot.unsubscribe(subscription={ 'name': 'ownTrades' })
await auth_bot.unsubscribe(subscription={ 'name': 'openOrders' })
while True: await asyncio.sleep(6)
if __name__ == '__main__':
asyncio.get_event_loop().run_until_complete(main())
Futures Clients Example Usage
REST API
... can be found in /examples/futures_examples.py
from kraken.futures.client import Market, User, Trade, Funding
def main() -> None:
demo: bool = False # default
key = 'futures-api-key'
secret = 'futures-secret-key'
# ____USER__________
user = User(key=key,secret=secret, sandbox=demo)
print(user.get_wallets())
print(user.get_open_orders())
print(user.get_open_positions())
print(user.get_subaccounts())
# ....
# ____MARKET_________
market = Market()
print(market.get_ohlc(tick_type='trade', symbol='PI_XBTUSD', resolution='5m'))
priv_market = Market(key=key,secret=secret, sandbox=demo)
print(priv_market.get_fee_schedules_vol())
print(priv_market.get_execution_events())
# ....
# ____TRADE_________
trade = Trade(key=key, secret=secret, sandbox=demo)
print(trade.get_fills())
print(trade.create_batch_order(
batchorder_list = [{
"order": "send",
"order_tag": "1",
"orderType": "lmt",
"symbol": "PI_XBTUSD",
"side": "buy",
"size": 1,
"limitPrice": 12000,
"cliOrdId": "another-client-id"
}, {
"order": "send",
"order_tag": "2",
"orderType": "stp",
"symbol": "PI_XBTUSD",
"side": "buy",
"size": 1,
"limitPrice": 10000,
"stopPrice": 110000,
}, {
"order": "cancel",
"order_id": "e35dsdfsdfsddd-8a30-4d5f-a574-b5593esdf0",
}, {
"order": "cancel",
"cliOrdId": "some-client-id",
}],
))
print(trade.cancel_all_orders())
print(trade.create_order(
orderType='lmt', side='buy', size=1, limitPrice=4, symbol='pf_bchusd'
))
# ....
# ____FUNDING_______
funding = Funding(key=key, secret=secret, sandbox=demo)
# ....
if __name__ == '__main__': main()
Websockets
... can be found in /examples/futures_ws_examples.py
import asyncio
from kraken.futures.client import WsClient
from kraken.futures.websocket.websocket import KrakenFuturesWSClient
async def main() -> None:
key = 'futures-api-key'
secret = 'futures-secret-key'
# ___Custom_Trading_Bot______________
class Bot(KrakenFuturesWSClient):
async def on_message(self, event) -> None:
print(event)
# >> apply your trading strategy here <<
# you can also combine this with the Futures REST clients
# _____Public_Websocket_Feeds___________________
bot = Bot(WsClient())
# print(bot.get_available_public_subscription_feeds())
products = ['PI_XBTUSD']
# subscribe to a public websocket feed
await bot.subscribe(feed='ticker', products=products)
# await bot.subscribe(feed='book', products=products)
# ...
# unsubscribe from a websocket feed
await bot.unsubscribe(feed='ticker', products=products)
# _____Private_Websocket_Feeds_________________
auth_bot = Bot(WsClient(key=key, secret=secret))
# print(auth_bot.get_available_private_subscription_feeds())
# subscribe to a private/authenticated websocket feed
await auth_bot.subscribe(feed='fills')
await auth_bot.subscribe(feed='open_positions')
await auth_bot.subscribe(feed='open_orders')
# ...
# unsubscribe from a private/authenticaed websocket feed
await bot.unsubscribe(feed='fills')
while True: await asyncio.sleep(6)
if __name__ == '__main__':
asyncio.get_event_loop().run_until_complete(main())
Sport Clients Documentation
User
Trade
Method | Documentation |
---|---|
create_order |
https://docs.kraken.com/rest/#operation/addOrder |
create_order_batch |
https://docs.kraken.com/rest/#operation/addOrderBatch |
edit_order |
https://docs.kraken.com/rest/#operation/editOrder |
cancel_order |
https://docs.kraken.com/rest/#operation/cancelOrder |
cancel_all_orders |
https://docs.kraken.com/rest/#operation/cancelAllOrders |
cancel_all_orders_after_x |
https://docs.kraken.com/rest/#operation/cancelAllOrdersAfter |
cancel_order_batch |
https://docs.kraken.com/rest/#operation/cancelOrderBatch |
Market
Method | Documentation |
---|---|
get_assets |
https://docs.kraken.com/rest/#operation/getAssetInfo |
get_tradable_asset_pair |
https://docs.kraken.com/rest/#operation/getTradableAssetPairs |
get_ticker |
https://docs.kraken.com/rest/#operation/getTickerInformation |
get_ohlc |
https://docs.kraken.com/rest/#operation/getOHLCData |
get_order_book |
https://docs.kraken.com/rest/#operation/getOrderBook |
get_recent_trades |
https://docs.kraken.com/rest/#operation/getRecentTrades |
get_recend_spreads |
https://docs.kraken.com/rest/#operation/getRecentSpreads |
get_system_status |
checks if Kraken is online |
Funding
Method | Documentation |
---|---|
get_deposit_methods |
https://docs.kraken.com/rest/#operation/getDepositMethods |
get_deposit_address |
https://docs.kraken.com/rest/#operation/getDepositAddresses |
get_recend_deposits_status |
https://docs.kraken.com/rest/#operation/getStatusRecentDeposits |
get_withdrawal_info |
https://docs.kraken.com/rest/#operation/getWithdrawalInformation |
withdraw_funds |
https://docs.kraken.com/rest/#operation/withdrawFund |
get_recend_withdraw_status |
https://docs.kraken.com/rest/#operation/getStatusRecentWithdrawals |
cancel_withdraw |
https://docs.kraken.com/rest/#operation/cancelWithdrawal |
wallet_transfer |
https://docs.kraken.com/rest/#operation/walletTransfer |
Staking
Method | Documentation |
---|---|
stake_asset |
https://docs.kraken.com/rest/#operation/stake |
unstake_asset |
https://docs.kraken.com/rest/#operation/unstake |
list_stakeable_assets |
https://docs.kraken.com/rest/#operation/getStakingAssetInfo |
get_pending_staking_transactions |
https://docs.kraken.com/rest/#operation/getStakingPendingDeposits |
list_staking_transactions |
https://docs.kraken.com/rest/#operation/getStakingTransactions |
WsClient
Method | Documentation |
---|---|
get_ws_token |
https://docs.kraken.com/rest/#tag/Websockets-Authentication |
create_order |
https://docs.kraken.com/websockets/#message-addOrder |
edit_order |
https://docs.kraken.com/websockets/#message-editOrder |
cancel_order |
https://docs.kraken.com/websockets/#message-cancelOrder |
cancel_all_orders |
https://docs.kraken.com/websockets/#message-cancelAll |
cancel_all_orders_after |
https://docs.kraken.com/websockets/#message-cancelAllOrdersAfter |
subscribe |
https://docs.kraken.com/websockets/#message-subscribe |
unsubscribe |
https://docs.kraken.com/websockets/#message-unsubscribe |
private_sub_names |
get private subscription names |
public_sub_names |
get public subscription names |
active_private_subscriptions |
get active private subscriptions |
active_public_subscriptions |
get active public subscriptions |
on_message |
callback function which should be overloaded |
Futures Client Documentation
User
Trade
Market
Funding
Method | Documentation |
---|---|
get_historical_funding_rates |
https://docs.futures.kraken.com/#http-api-trading-v3-api-historical-funding-rates-historicalfundingrates |
initiate_wallet_transfer |
https://docs.futures.kraken.com/#http-api-trading-v3-api-transfers-initiate-wallet-transfer |
initiate_subccount_transfer |
https://docs.futures.kraken.com/#http-api-trading-v3-api-transfers-initiate-sub-account-transfer |
initiate_withdrawal_to_spot_wallet |
https://docs.futures.kraken.com/#http-api-trading-v3-api-transfers-initiate-withdrawal-to-spot-wallet |
WsClient
Method | Documentation |
---|---|
subscribe |
subscribe to a feed |
unsubscribe |
unsubscribe from a feed |
get_available_public_subscription_feeds |
returns all available public feeds |
get_available_private_subscription_feeds |
returns all available private feeds |
on_message |
callback function which should be overloaded |
Notes:
- Pull requests will be ignored until the owner finished the core idea
References
- https://docs.kraken.com/rest/
- https://docs.kraken.com/websockets
- https://docs.futures.kraken.com/
- https://support.kraken.com/hc/en-us/sections/360012894412-Futures-API
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file python-kraken-sdk-0.7.0.tar.gz
.
File metadata
- Download URL: python-kraken-sdk-0.7.0.tar.gz
- Upload date:
- Size: 40.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.7 tqdm/4.62.3 importlib-metadata/4.8.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c8358293df9f39d92429908eac57df8fc22ade774a01066530097c03c571a4b5 |
|
MD5 | 9545402c2a9cc3152544a08f3fb738d8 |
|
BLAKE2b-256 | 230c0fa74e20fc2ce8e0c170c4013e4d7f6487c53107bc0748c2a99edda9ffe9 |
Provenance
File details
Details for the file python_kraken_sdk-0.7.0-py2.py3-none-any.whl
.
File metadata
- Download URL: python_kraken_sdk-0.7.0-py2.py3-none-any.whl
- Upload date:
- Size: 49.8 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.7 tqdm/4.62.3 importlib-metadata/4.8.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9ef4987ce9ad8040e94ab1523f42e75a7b3e5d0b721db4233e80f9fb60fc68d2 |
|
MD5 | fabf3d9f2e92b10bf8bf838b544008de |
|
BLAKE2b-256 | 2f7878530654fd5306e5172c6063283533dbea58304946c3e8e4a3b9ae927595 |