Package: shrimpy-python
shrimpy-pythonThe official python library for the Shrimpy Developer APIhttps://developers.shrimpy.io/docs. The library is currently only python3 compatible.Installationpipinstallshrimpy-pythonQuick StartAll requests are synchronous. For a comprehensive API usage guide, please seehttps://developers.shrimpy.io/docs.If you would like to use the async/await style similar to our Node.js library, consider using theasynciopython library to wrap the synchronous requests provided here.importshrimpypublic_key='bea8edb348af226...'secret_key='df84c39fb49026dcad9d99...'client=shrimpy.ShrimpyApiClient(public_key,secret_key)ticker=client.get_ticker('bittrex')Public EndpointsThe 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.get_supported_exchangessupported_exchanges=client.get_supported_exchanges()get_exchange_assetsexchange_assets=client.get_exchange_assets('bittrex')get_trading_pairstrading_pairs=client.get_trading_pairs('bittrex')Market Data Methodsget_tickerticker=client.get_ticker('bittrex')get_orderbooksorderbooks=client.get_orderbooks('bittrex',# exchange'XLM',# base_symbol'BTC',# quote_symbol10# limit)get_candlescandles=client.get_candles('bittrex',# exchange'XLM',# base_trading_symbol'BTC',# quote_trading_symbol'15m'# interval)Authenticated EndpointsAs 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 Methodslist_usersusers=client.list_users()get_useruser=client.get_user('701e0d16-1e9e-42c9-b6a1-4cada1f395b8'# user_id)create_usercreate_user_response=client.create_user('mycustomname'# (optional) name)user_id=create_user_response['id']name_userclient.name_user('701e0d16-1e9e-42c9-b6a1-4cada1f395b8',# user_id'mycustomname'# name)remove_userclient.remove_user('701e0d16-1e9e-42c9-b6a1-4cada1f395b8',# user_id)User API Keys Methodsget_api_keyspublic_user_keys=client.get_api_keys('701e0d16-1e9e-42c9-b6a1-4cada1f395b8'# user_id)create_api_keysuser_api_keys=client.create_api_keys('701e0d16-1e9e-42c9-b6a1-4cada1f395b8'# user_id)delete_api_keysclient.delete_api_keys('701e0d16-1e9e-42c9-b6a1-4cada1f395b8',# user_id'51ac18b7d208f59b3c88acbb1ecefe6ba6be6ea4edc07e7a2450307ddc27ab80'# public_key)get_api_key_permissionspermissions=client.get_api_key_permissions('701e0d16-1e9e-42c9-b6a1-4cada1f395b8',# user_id'51ac18b7d208f59b3c88acbb1ecefe6ba6be6ea4edc07e7a2450307ddc27ab80'# public_key)set_api_key_permissionsclient.set_api_key_permissions('701e0d16-1e9e-42c9-b6a1-4cada1f395b8',# user_id'51ac18b7d208f59b3c88acbb1ecefe6ba6be6ea4edc07e7a2450307ddc27ab80',# public_keyTrue,# enable account methodsFalse# enable trading methods)Account Methodslist_accountsaccounts=client.list_accounts('701e0d16-1e9e-42c9-b6a1-4cada1f395b8'# user_id)get_accountaccount=client.get_account('701e0d16-1e9e-42c9-b6a1-4cada1f395b8',# user_id123# exchange_account_id)link_accountlink_account_response=client.link_account('701e0d16-1e9e-42c9-b6a1-4cada1f395b8',# user_id'binance',# exchange'GOelL5FT6TklPxAzICIQK25aqct52T2lHoKvtcwsFla5sbVXmeePqVJaoXmXI6Qd',# public_key (a.k.a. apiKey)'SelUuFq1sF2zGd97Lmfbb4ghITeziKo9IvM5NltjEdffatRN1N5vfHXIU6dsqRQw',# private_key (a.k.a. secretKey'mypassphrase'# (optional)passphrase - required for exchanges with passphrases like CoinbasePro)account_id=link_account_response['id']unlink_accountclient.unlink_account('701e0d16-1e9e-42c9-b6a1-4cada1f395b8',# user_id456# account_id)get_ip_whitelist_addressesip_addresses=client.get_ip_whitelist_addresses('701e0d16-1e9e-42c9-b6a1-4cada1f395b8'# user_id)Trading Methodscreate_tradecreate_trade_response=client.create_trade('701e0d16-1e9e-42c9-b6a1-4cada1f395b8',# user_id123,# account_id'BTC',# from_symbol'ETH',# to_symbol'0.01'# amount of from_symbol)trade_id=create_trade_response['id']get_trade_statustrade=client.get_trade_status('701e0d16-1e9e-42c9-b6a1-4cada1f395b8',# user_id123,# exchange_account_id'72dff099-54c0-4a32-b046-5c19d4f55758'# trade_id)list_active_tradesactive_trades=client.list_active_trades('701e0d16-1e9e-42c9-b6a1-4cada1f395b8',# user_id123,# exchange_account_id)Balance Methodsget_balancebalance=client.get_balance('701e0d16-1e9e-42c9-b6a1-4cada1f395b8',# user_id123# account_id)get_total_balance_historytotal_balance_history=client.get_total_balance_history('701e0d16-1e9e-42c9-b6a1-4cada1f395b8',# user_id123# account_id)Asset Management Methodsrebalanceclient.rebalance('701e0d16-1e9e-42c9-b6a1-4cada1f395b8',# user_id123# account_id)get_rebalance_periodrebalance_period_hours=client.get_rebalance_period('701e0d16-1e9e-42c9-b6a1-4cada1f395b8',# user_id123# account_id)set_rebalance_periodclient.set_rebalance_period('701e0d16-1e9e-42c9-b6a1-4cada1f395b8',# user_id123,# account_id24# rebalance_period in hours)get_strategystrategy=client.get_strategy('701e0d16-1e9e-42c9-b6a1-4cada1f395b8',# user_id123# account_id)set_strategyclient.set_strategy('701e0d16-1e9e-42c9-b6a1-4cada1f395b8',# user_id123,# account_id{'isDynamic':False,'allocations':[{'symbol':'BTC','percent':'50'},{'symbol':'ETH','percent':'50'}]}# strategy)clear_strategyclient.clear_strategy('701e0d16-1e9e-42c9-b6a1-4cada1f395b8',# user_id123# account_id)allocateclient.allocate('701e0d16-1e9e-42c9-b6a1-4cada1f395b8',# user_id123,# account_id{'isDynamic':False,'allocations':[{'symbol':'USDT','percent':'100'}]}# strategy)Limit Order Methodsplace_limit_orderplace_limit_order_response=client.place_limit_order('701e0d16-1e9e-42c9-b6a1-4cada1f395b8',# user_id123,# account_id'BTC',# base_symbol'ETH',# quote_symbol'0.01',# quantity of base_symbol'0.026',# price'SELL',# side'IOC',# time_in_force)limit_order_id=place_limit_order_response['id']get_limit_order_statusorder=client.get_limit_order_status('701e0d16-1e9e-42c9-b6a1-4cada1f395b8',# user_id123,# account_id'8c2a9401-eb5b-48eb-9ae2-e9e02c174058'# order_id)list_open_ordersorders=client.list_open_orders('701e0d16-1e9e-42c9-b6a1-4cada1f395b8',# user_id123# account_id)cancel_limit_orderorder=client.cancel_limit_order('701e0d16-1e9e-42c9-b6a1-4cada1f395b8',# user_id123,# account_id'8c2a9401-eb5b-48eb-9ae2-e9e02c174058'# order_id)Analytics Methodsget_backtest_assetsbacktest_assets=client.get_backtest_assets('kucoin'# exchange)run_backtestbacktest_results=client.run_backtest('binance',# exchange10,# rebalance_period in hours'0.1',# fee in percent'2018-05-19T00:00:00.000Z',# start_time'2018-11-02T00:00:00.000Z',# end_time'5000',# initial_value in USD[{'symbol':"BTC",'percent':'50'},{'symbol':"ETH",'percent':'50'}]# allocations)get_predictionspredictions=client.get_predictions('Bittrex',# exchange'LTC',# base_symbol'BTC'# quote_symbol)get_trendtrend=client.get_trend('binance',# exchange'BTC',# base_symbol'BIDR',# quote_symbol)Insight Methodsget_asset_dominanceasset_dominance=client.get_asset_dominance()get_asset_popularityasset_popularity=client.get_asset_popularity()Historical Methodsget_historical_countcount=client.get_historical_count('trade','Bittrex','LTC','BTC','2019-05-19T01:00:00.000Z','2019-05-20T02:00:00.000Z')get_historical_instrumentsinstruments=client.get_historical_instruments()bittrex_instruments=client.get_historical_instruments('Bittrex')get_historical_tradestrades=client.get_historical_trades('Bittrex','LTC','BTC','2019-05-19T00:00:00.000Z','2019-05-20T00:00:00.000Z',100)get_historical_orderbooksorderbooks=client.get_historical_orderbooks('Bittrex','LTC','BTC','2019-05-19T00:00:00.000Z','2019-05-20T00:00:00.000Z',100)get_historical_candlescandles=client.get_historical_candles('Bittrex','LTC','BTC','2019-05-19T00:00:00.000Z','2019-05-20T00:00:00.000Z',100,'1m')Management Methodsget_statusstatus=client.get_status()get_creditsusage=client.get_credits()get_usageusage=client.get_usage()WebsocketUsers can access the Shrimpy websocket feed using theShrimpyWsClientclass. 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 theAPI Documentationimportshrimpypublic_key='6d73c2464a71b94a81aa7b13d...'private_key='e6238b0de3cdf19c7861f8e8f5d137ce7113ac1e884b191a14bbb2...'# This is a sample handler, it simply prints the incoming message to the consoledeferror_handler(err):print(err)# This is a sample handler, it simply prints the incoming message to the consoledefhandler(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"}# Start processing the Shrimpy websocket stream!client.connect()client.subscribe(subscribe_data,handler)# Once complete, stop the clientclient.disconnect()