Skip to main content

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 🦑

GitHub License: GPL v3 Generic badge Downloads

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

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

Method Documentation
get_account_balance https://docs.kraken.com/rest/#operation/getAccountBalance
get_balances returns the overall and available balance of a given currency
get_trade_balance https://docs.kraken.com/rest/#operation/getTradeBalance
get_open_orders https://docs.kraken.com/rest/#operation/getOpenOrders
get_closed_orders https://docs.kraken.com/rest/#operation/getClosedOrders
get_orders_info https://docs.kraken.com/rest/#operation/getOrdersInfo
get_trades_history https://docs.kraken.com/rest/#operation/getTradeHistory
get_trades_info https://docs.kraken.com/rest/#operation/getTradesInfo
get_open_positions https://docs.kraken.com/rest/#operation/getOpenPositions
get_ledgers_info https://docs.kraken.com/rest/#operation/getLedgers
get_ledgers https://docs.kraken.com/rest/#operation/getLedgersInfo
get_trade_volume https://docs.kraken.com/rest/#operation/getTradeVolume
request_export_report https://docs.kraken.com/rest/#operation/addExport
get_export_report_status https://docs.kraken.com/rest/#operation/exportStatus
retrieve_export https://docs.kraken.com/rest/#operation/retrieveExport
delete_export_report https://docs.kraken.com/rest/#operation/removeExport

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

Method Documentation
get_wallets https://docs.futures.kraken.com/#http-api-trading-v3-api-account-information-get-wallets
get_open_orders https://docs.futures.kraken.com/#http-api-trading-v3-api-account-information-get-open-orders
get_open_positions https://docs.futures.kraken.com/#http-api-trading-v3-api-account-information-get-open-positions
get_subaccounts https://docs.futures.kraken.com/#http-api-trading-v3-api-account-information-get-subaccounts
get_unwindqueue https://docs.futures.kraken.com/#http-api-trading-v3-api-account-information-get-position-percentile-of-unwind-queue
get_notificatios https://docs.futures.kraken.com/#http-api-trading-v3-api-general-get-notifications
get_account_log https://docs.futures.kraken.com/#http-api-history-account-log
get_account_log_csv https://docs.futures.kraken.com/#http-api-history-account-log-get-recent-account-log-csv

Trade

Method Documentation
get_fills https://docs.futures.kraken.com/#http-api-trading-v3-api-historical-data-get-your-fills
create_batch_order https://docs.futures.kraken.com/#http-api-trading-v3-api-order-management-batch-order-management
cancel_all_orders https://docs.futures.kraken.com/#http-api-trading-v3-api-order-management-cancel-all-orders
dead_mans_switch https://docs.futures.kraken.com/#http-api-trading-v3-api-order-management-dead-man-39-s-switch
cancel_order https://docs.futures.kraken.com/#http-api-trading-v3-api-order-management-cancel-order
edit_order https://docs.futures.kraken.com/#http-api-trading-v3-api-order-management-edit-order
get_orders_status https://docs.futures.kraken.com/#http-api-trading-v3-api-order-management-get-the-current-status-for-specific-orders
create_order https://docs.futures.kraken.com/#http-api-trading-v3-api-order-management-send-order

Market

Method Documentation
get_ohlc https://docs.futures.kraken.com/#http-api-charts-ohlc-get-ohlc
get_tick_types https://docs.futures.kraken.com/#http-api-charts-ohlc-get-tick-types
get_tradeable_products https://docs.futures.kraken.com/#http-api-charts-ohlc-get-tradeable-products
get_resolutions https://docs.futures.kraken.com/#http-api-charts-ohlc-get-resolutions
get_fee_schedules https://docs.futures.kraken.com/#http-api-trading-v3-api-fee-schedules-get-fee-schedules
get_fee_schedules_vol https://docs.futures.kraken.com/#http-api-trading-v3-api-fee-schedules-get-fee-schedule-volumes
get_orderbook https://docs.futures.kraken.com/#http-api-trading-v3-api-market-data-get-orderbook
get_tickers https://docs.futures.kraken.com/#http-api-trading-v3-api-market-data-get-tickers
get_instruments https://docs.futures.kraken.com/#http-api-trading-v3-api-instrument-details-get-instruments
get_instruments_status https://docs.futures.kraken.com/#http-api-trading-v3-api-instrument-details-get-instrument-status-list and https://docs.futures.kraken.com#http-api-trading-v3-api-instrument-details-get-instrument-status
get_trade_history https://docs.futures.kraken.com/#http-api-trading-v3-api-market-data-get-trade-history
get_historical_funding_rates https://support.kraken.com/hc/en-us/articles/360061979852-Historical-Funding-Rates
get_leverage_preference https://docs.futures.kraken.com/#http-api-trading-v3-api-multi-collateral-get-the-leverage-setting-for-a-market
set_leverage_preference https://docs.futures.kraken.com/#http-api-trading-v3-api-multi-collateral-set-the-leverage-setting-for-a-market
get_pnl_preference https://docs.futures.kraken.com/#http-api-trading-v3-api-multi-collateral-get-pnl-currency-preference-for-a-market
set_pnl_preference https://docs.futures.kraken.com/#http-api-trading-v3-api-multi-collateral-set-pnl-currency-preference-for-a-market
get_execution_events https://docs.futures.kraken.com/#http-api-history-market-history-get-execution-events
get_public_execution_events https://docs.futures.kraken.com/#http-api-history-market-history-get-public-execution-events and https://support.kraken.com/hc/en-us/articles/4401755685268-Market-History-Executions
get_public_order_events https://docs.futures.kraken.com/#http-api-history-market-history-get-public-order-events and https://support.kraken.com/hc/en-us/articles/4401755906452-Market-History-Orders
get_public_mark_price_events https://docs.futures.kraken.com/#http-api-history-market-history-get-public-mark-price-events and https://support.kraken.com/hc/en-us/articles/4401748276116-Market-History-Mark-Price
get_order_events https://docs.futures.kraken.com/#http-api-history-market-history-get-order-events
get_trigger_events https://docs.futures.kraken.com/#http-api-history-market-history-get-trigger-events

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


Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python-kraken-sdk-0.7.0.tar.gz (40.5 kB view details)

Uploaded Source

Built Distribution

python_kraken_sdk-0.7.0-py2.py3-none-any.whl (49.8 kB view details)

Uploaded Python 2 Python 3

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

Hashes for python-kraken-sdk-0.7.0.tar.gz
Algorithm Hash digest
SHA256 c8358293df9f39d92429908eac57df8fc22ade774a01066530097c03c571a4b5
MD5 9545402c2a9cc3152544a08f3fb738d8
BLAKE2b-256 230c0fa74e20fc2ce8e0c170c4013e4d7f6487c53107bc0748c2a99edda9ffe9

See more details on using hashes here.

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

Hashes for python_kraken_sdk-0.7.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 9ef4987ce9ad8040e94ab1523f42e75a7b3e5d0b721db4233e80f9fb60fc68d2
MD5 fabf3d9f2e92b10bf8bf838b544008de
BLAKE2b-256 2f7878530654fd5306e5172c6063283533dbea58304946c3e8e4a3b9ae927595

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page