shrimpy-python
The official python library for the Shrimpy Developer API https://developers.shrimpy.io/docs. The library is currently only python3 compatible.
Installation
pip install shrimpy-python
Quick Start
All requests are synchronous. For a comprehensive API usage guide, please see https://developers.shrimpy.io/docs.
If you would like to use the async/await style similar to our Node.js library, consider using the asyncio
python library to wrap the synchronous requests provided here.
import shrimpy
public_key = 'bea8edb348af226...'
secret_key = 'df84c39fb49026dcad9d99...'
client = shrimpy.ShrimpyApiClient(public_key, secret_key)
ticker = client.get_ticker('bittrex')
Public Endpoints
The clients for both the public and authenticated endpoints are identical. Please note that if you attempt to use the authenticated endpoints without keys, it will fail.
supported_exchanges = client.get_supported_exchanges()
exchange_assets = client.get_exchange_assets('bittrex')
trading_pairs = client.get_trading_pairs('bittrex')
Market Data Methods
ticker = client.get_ticker('bittrex')
orderbooks = client.get_orderbooks(
'bittrex',
'XLM',
'BTC',
10
)
candles = client.get_candles(
'bittrex',
'XLM',
'BTC',
'15m'
)
Authenticated Endpoints
As mentioned above, please use the provided Shrimpy API keys to access the authenticated endpoints. Endpoints such as user management require the master api key, while endpoints such as trading will work with either a master api key or a user api key.
User Management Methods
users = client.list_users()
user = client.get_user(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8'
)
create_user_response = client.create_user(
'mycustomname'
)
user_id = create_user_response['id']
client.name_user(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8',
'mycustomname'
)
client.remove_user(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8',
)
User API Keys Methods
public_user_keys = client.get_api_keys(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8'
)
user_api_keys = client.create_api_keys(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8'
)
client.delete_api_keys(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8',
'51ac18b7d208f59b3c88acbb1ecefe6ba6be6ea4edc07e7a2450307ddc27ab80'
)
permissions = client.get_api_key_permissions(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8',
'51ac18b7d208f59b3c88acbb1ecefe6ba6be6ea4edc07e7a2450307ddc27ab80'
)
client.set_api_key_permissions(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8',
'51ac18b7d208f59b3c88acbb1ecefe6ba6be6ea4edc07e7a2450307ddc27ab80',
True,
False
)
Account Methods
accounts = client.list_accounts(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8'
)
account = client.get_account(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8',
123
)
link_account_response = client.link_account(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8',
'binance',
'GOelL5FT6TklPxAzICIQK25aqct52T2lHoKvtcwsFla5sbVXmeePqVJaoXmXI6Qd',
'SelUuFq1sF2zGd97Lmfbb4ghITeziKo9IvM5NltjEdffatRN1N5vfHXIU6dsqRQw',
'mypassphrase'
)
account_id = link_account_response['id']
client.unlink_account(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8',
456
)
ip_addresses = client.get_ip_whitelist_addresses(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8'
)
Trading Methods
create_trade_response = client.create_trade(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8',
123,
'BTC',
'ETH',
'0.01'
)
trade_id = create_trade_response['id']
trade = client.get_trade_status(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8',
123,
'72dff099-54c0-4a32-b046-5c19d4f55758'
)
active_trades = client.list_active_trades(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8',
123,
)
Balance Methods
balance = client.get_balance(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8',
123
)
total_balance_history = client.get_total_balance_history(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8',
123
)
Asset Management Methods
client.rebalance(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8',
123
)
rebalance_period_hours = client.get_rebalance_period(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8',
123
)
client.set_rebalance_period(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8',
123,
24
)
strategy = client.get_strategy(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8',
123
)
client.set_strategy(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8',
123,
{
'isDynamic': False,
'allocations': [
{ 'symbol': 'BTC', 'percent': '50' },
{ 'symbol': 'ETH', 'percent': '50' }
]
}
)
client.clear_strategy(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8',
123
)
client.allocate(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8',
123,
{
'isDynamic': False,
'allocations': [
{ 'symbol': 'USDT', 'percent': '100' }
]
}
)
Limit Order Methods
place_limit_order_response = client.place_limit_order(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8',
123,
'BTC',
'ETH',
'0.01',
'0.026',
'SELL',
'IOC',
)
limit_order_id = place_limit_order_response['id']
order = client.get_limit_order_status(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8',
123,
'8c2a9401-eb5b-48eb-9ae2-e9e02c174058'
)
orders = client.list_open_orders(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8',
123
)
order = client.cancel_limit_order(
'701e0d16-1e9e-42c9-b6a1-4cada1f395b8',
123,
'8c2a9401-eb5b-48eb-9ae2-e9e02c174058'
)
Analytics Methods
backtest_assets = client.get_backtest_assets(
'kucoin'
)
backtest_results = client.run_backtest(
'binance',
10,
'0.1',
'2018-05-19T00:00:00.000Z',
'2018-11-02T00:00:00.000Z',
'5000',
[
{ 'symbol': "BTC", 'percent': '50' },
{ 'symbol': "ETH", 'percent': '50' }
]
)
predictions = client.get_predictions(
'Bittrex',
'LTC',
'BTC'
)
trend = client.get_trend(
'binance',
'BTC',
'BIDR',
)
Insight Methods
asset_dominance = client.get_asset_dominance()
asset_popularity = client.get_asset_popularity()
Historical Methods
count = client.get_historical_count(
'trade',
'Bittrex',
'LTC',
'BTC',
'2019-05-19T01:00:00.000Z',
'2019-05-20T02:00:00.000Z'
)
instruments = client.get_historical_instruments()
bittrex_instruments = client.get_historical_instruments('Bittrex')
trades = client.get_historical_trades(
'Bittrex',
'LTC',
'BTC',
'2019-05-19T00:00:00.000Z',
'2019-05-20T00:00:00.000Z',
100
)
orderbooks = client.get_historical_orderbooks(
'Bittrex',
'LTC',
'BTC',
'2019-05-19T00:00:00.000Z',
'2019-05-20T00:00:00.000Z',
100
)
candles = client.get_historical_candles(
'Bittrex',
'LTC',
'BTC',
'2019-05-19T00:00:00.000Z',
'2019-05-20T00:00:00.000Z',
100,
'1m'
)
Management Methods
status = client.get_status()
usage = client.get_credits()
usage = client.get_usage()
Websocket
Users can access the Shrimpy websocket feed using the ShrimpyWsClient
class. A handler must be
passed in on subscription that is responsible for processing incoming messages from the websocket
stream. It is recommended that you simply send the message to another processing thread from your custom
handler to prevent blocking the incoming message stream.
The client handles pings to the Shrimpy server based on the API Documentation
import shrimpy
public_key = '6d73c2464a71b94a81aa7b13d...'
private_key = 'e6238b0de3cdf19c7861f8e8f5d137ce7113ac1e884b191a14bbb2...'
def error_handler(err):
print(err)
def handler(msg):
print(msg)
api_client = shrimpy.ShrimpyApiClient(public_key, private_key)
raw_token = api_client.get_token()
client = shrimpy.ShrimpyWsClient(error_handler, raw_token['token'])
subscribe_data = {
"type": "subscribe",
"exchange": "coinbasepro",
"pair": "ltc-btc",
"channel": "orderbook"
}
client.connect()
client.subscribe(subscribe_data, handler)
client.disconnect()