Skip to main content

Notbank Python SDK

main page

sign up in Notbank.

Installation

To install Notbank use pip

pip install notbank

Documentation

This sdk makes use of the api of Notbank.

Quick start

Client creation

There are two communication protocols supported by the Notbank client. Communication via websocket, and via rest. Communication via websocket requires connection and permits subscriptions, other than that they are equivalent.

from notbank_python_sdk.requests_models import *
from notbank_python_sdk.client_connection_factory import new_rest_client_connection
from notbank_python_sdk.error import NotbankException
from notbank_python_sdk.notbank_client import NotbankClient

try:
    # a rest client via http
    rest_connection = new_rest_client_connection()
    client = NotbankClient(rest_connection)
except NotbankException as e:
    print(e)

Error handling

All internal notbank client and notbank server errors inherit from NotbankException, and all client methods may throw it (e.g. invalid request, request timeout, ...)

# client : NotbankClient : ....
try:
    orderbook = client.get_order_book(OrderBookRequest("BTCUSDT", 1, 1))
except NotbankException as e:
    print(e)

Put order at the top of book example

import random
from decimal import Decimal

from notbank_python_sdk.notbank_client import NotbankClient
from notbank_python_sdk.client_connection_factory import new_rest_client_connection

account_id: int = 13  # must be user account id

# instantiate client
connection = new_rest_client_connection()
client = NotbankClient(connection)

# authentication (same for rest client or websocket client)
authenticate = client.authenticate(
    AuthenticateRequest(
        api_public_key="api-public-key",
        api_secret_key="api-secret-key",
        user_id="user-id",
    )
)
if not authenticate.authenticated:
    raise Exception("client not authenticated")

# get USDT user balance (also known as position)
positions = client.get_account_positions(
    GetAccountPositionsRequest(account_id))
usdt_balance = None
product = "USDT"
market_pair = "BTCUSDT"
for position in positions:
    if position.product_symbol == product:
        usdt_balance = position
if usdt_balance is None:
    raise Exception("user has no balance")

# define order_amount (between all usdt_balance and half usdt_balance)
total_balance = usdt_balance.amount
quantity_to_spend = total_balance - \
    Decimal(random.random()) * (total_balance/2)

# define order_price (around market top)
orderbook = client.get_order_book(
    OrderBookRequest(market_pair, level=2, depth=5))
top_orderbook = orderbook.bids[0]
delta = Decimal(random.randrange(10, 100))/1000
order_price = top_orderbook.price + delta
order_quantity = quantity_to_spend / order_price

# send order
instrument = client.get_instrument_by_symbol(market_pair)
request = SendOrderRequest(
    instrument=instrument,
    account_id=account_id,
    time_in_force=TimeInForce.GTC,
    side=Side.Buy,
    quantity=order_quantity,
    limit_price=order_price,
    order_type=OrderType.Limit,
)
response = client.send_order(request)

# handle order result
if response.status == SendOrderStatus.REJECTED:
    # order was rejected
    raise Exception("rejected order")
else:
    # order was accepted
    order_id = response.order_id
    print(order_id)

# close client
client.close()

websocket

There are two websocket clients, and can be instanced with the functions new_websocket_client_connection and new_restarting_websocket_client_connection.

The restarting websocket will reconnect forever when the connection goes down unexpectedly, re-authenticating if it was authenticated, and re-subscribing to already stablished subscriptions. While reconnecting, calls to the websocket will throw. For subscriptions, reconnection will call again the snapshot hooks.

from notbank_python_sdk.requests_models import *
from notbank_python_sdk.client_connection_factory import new_websocket_client_connection, new_restarting_websocket_client_connection
from notbank_python_sdk.error import NotbankException
from notbank_python_sdk.notbank_client import NotbankClient

try:
    # a websocket client
    websocket_connection = new_websocket_client_connection()
    client = NotbankClient(websocket_connection)
except NotbankException as e:
    print(e)



try:
    # a restarting websocket client
    restarting_websocket_connection = new_restarting_websocket_client_connection()
    client = NotbankClient(restarting_websocket_connection)
except NotbankException as e:
    print(e)

Download files

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

Source Distribution

notbank-2.5.0.tar.gz (75.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

notbank-2.5.0-py3-none-any.whl (126.8 kB view details)

Uploaded Python 3

File details

Details for the file notbank-2.5.0.tar.gz.

File metadata

  • Download URL: notbank-2.5.0.tar.gz
  • Upload date:
  • Size: 75.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.7.16

File hashes

Hashes for notbank-2.5.0.tar.gz
Algorithm Hash digest
SHA256 c5543539ef2f24f7883c62a5df9d7f80dff9a4814e9d7616d41550213c5a1d3c
MD5 107694f80097ee238e9995026fe6c4cb
BLAKE2b-256 0f0eb15e8f73d99356afde852a5508edf8d6dbd416316e9282bf40ab78a15152

See more details on using hashes here.

File details

Details for the file notbank-2.5.0-py3-none-any.whl.

File metadata

  • Download URL: notbank-2.5.0-py3-none-any.whl
  • Upload date:
  • Size: 126.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.7.16

File hashes

Hashes for notbank-2.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e6018275e7bf1256b70defd2e572b31e2946ce5d984bbce9e8703f7ed3178dcb
MD5 85c7e2b678e71dfa6596a1e8a1d22eab
BLAKE2b-256 2fc178665986bd2acabb2dd1b4a100ce6e1b87dd39add787a90918dd00faf642

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page