Python 3 wrapper for Poloniex Exchange
Required Python version 3.7+
DISCLAIMER:
USE AT YOUR OWN RISK. You should not use this code in production unless you fully understand its limitations.
Even if you understand the code and its limitations, you may incur losses when using this code for trading.
When used in combination with your own code, the combination may not function as intended, and as a result you may incur losses.
Poloniex is not responsible for any losses you may incur when using this code.
- Support for REST and websocket endpoints
- Simple handling of authentication
- Response exception handling
- Register an account with Poloniex.
- Generate an API Key.
- Set environment variables that contain your API Key values:
POLO_API_KEY
andPOLO_API_SECRET
. - Get the source files.
- For license refer to LICENSE file
Clone the repo into the path you will be using
git clone https://github.com/poloniex/polo-sdk-python
-
Instantiate a client
from polosdk import SpotRestClient client = RestClient()
-
Symbol
# Get a symbols info and its tradeLimit info response = client.get_market('BTC_USDT')
# Get all symbols and their tradeLimit info response = client.get_markets()
-
Currency
# Get data for a supported currency response = client.get_currency('BTC')
# Get data for a supported currency.
response = client.get_currency_v2('BTC')
# Get all supported currencies
response = client.get_currencies(multichain=True)
# Get all supported currencies.
response = client.get_currencies_v2()
-
System Timestamp
# Get all supported currencies response = client.get_timestamp()
-
Prices
# Get latest trade price for all symbols response = client.markets().get_prices()
# Get latest trade price for a symbol response = client.markets().get_price('BTC_USDT')
-
Order Book
# Get the order book for a given symbol response = client.markets().get_orderbook('BTC_USDT')
-
Candles
# Returns OHLC for a symbol at given timeframe (interval) response = client.markets().get_candles('BTC_USDT', 'HOUR_4')
-
Trades
# Gets a list of recent trades response = client.markets().get_trades('BTC_USDT')
-
Ticker
# Retrieve ticker in last 24 hours for a given symbol response = client.markets().get_ticker24h('BTC_USDT')
# Retrieve ticker in last 24 hours for all symbols response = client.markets().get_ticker24h_all()
-
Mark Price
# Get latest mark price for a single cross margin symbol response = client.markets().get_mark_price('BTC_USDT')
# Get latest mark price for all cross margin symbols response = client.markets().get_mark_prices()
-
Mark Price Components
# Get components of the mark price for a given symbol response = client.markets().get_mark_price_components('BTC_USDT')
-
Collateral Info
# Get collateral information for a single currency response = client.markets().get_collateral_info('BTC')
# Get collateral information for all currencies response = client.markets().get_collateral_info_all()
-
Borrow Rates
# Get borrow rates information for all tiers and currencies response = client.markets().get_borrow_rates()
-
Instantiate a client
import os from polosdk import SpotRestClient api_key = os.environ['POLO_API_KEY'] api_secret = os.environ['POLO_API_SECRET'] client = SpotRestClient(api_key, api_secret)
-
Account
# Get a list of all accounts of a user response = client.accounts().get_accounts()
-
Account Balances
# Get a list of all accounts of a user with each account’s id, type and balances (assets) response = client.accounts().get_balances()
# Get the full details for a single account with its balances response = client.accounts().get_account_balances('123')
-
Account Activity
# Get a list of activities such as airdrop, rebates, staking, credit/debit adjustments, and other (historical adjustments). response = client.accounts().get_activity()
-
Transfer Balances
# Transfer amount of currency from an account to another account for a user response = client.accounts().transfer('USDT', '10.5', 'SPOT', 'FUTURES')
-
Transfer Activity
# Get a list of transfer records of a user response = client.accounts().get_transfers()
# Get a transfer record of a user by id response = client.accounts().get_transfer('501')
-
Fee Info
# Get fee rate for an account response = client.accounts().get_fee_info()
-
Interest History
# Get a list of interest collection records of a user. response = client.accounts().get_interest_history()
-
Account Margin
# Get account margin information response = client.accounts().get_margin()
-
Borrow Status
# Get borrow status of currencies response = client.accounts().get_borrow_status()
-
Maximum Buy/Sell
# Get maximum and available buy/sell amount for a given symbol response = client.accounts().get_margin_max('BTC_USDT')
-
Subaccount Information
# Get subaccount information response = client.subaccounts().get_accounts()
-
Subaccount Balances
# Get balances information response = client.subaccounts().get_balances()
# Get balances information by id response = get_account_balances('123')
-
Subaccount Transfer
# Transfer amount of currency response = client.subaccounts().transfer('USD', '2', '123', 'SPOT', '1234', 'SPOT')
-
Subaccount Transfer Records
# Get a list of transfer records of a user. response = client.subaccounts().get_transfers()
# Get transfer record by id. response = client.subaccounts().get_transfer()
-
Deposit Addresses
# Get all deposit addresses for a user response = client.wallets().get_deposit_addresses()
-
Generate Address
# Create a new address for a currency response = client.wallets().create_address('TRX')
-
Withdraw Currency
# Immediately places a withdrawal for a given currency, with no email confirmation # In order to use this method, withdrawal privilege must be enabled for your API key response = client.wallets().withdraw('ETH', '1.50', '0x123abc')
# Immediately places a withdrawal for a given currency, with no email confirmation. # In order to use this method, withdrawal privilege must be enabled for your API key response = client.wallets().withdraw_v2( 'ETH', 'ETH', '1.50', '0xbb8d0d7c346daecc2380dabaa91f3ccf8ae232fb4')
-
Wallet Activity
# Get adjustment, deposit, and withdrawal activity history within a range window for a user response = client.wallets().get_activity()
-
Create Order
# Create a market order for 5 USDT of BTC response = client.orders().create(side='BUY', amount='5', symbol='BTC_USDT')
# Create a limit order for 0.00025 BTC at 20000 USDT response = client.orders().create(price='20000', quantity='0.00025', side='BUY', symbol='BTC_USDT', type='LIMIT', client_order_id='123Abc')
-
Create Multiple Orders
#Create 2 BTC sells for ~5 USDT and 1 LTC buy for 2.5 USDT using multiple orders request multi_order_request = [ { 'price': '20000', 'quantity': '0.00025', 'side': 'SELL', 'symbol': 'BTC_USDT', 'type': 'LIMIT' }, { 'price': '50', 'quantity': '0.05', 'side': 'BUY', 'symbol': 'LTC_USDT', 'type': 'LIMIT' }, { 'price': '22000', 'quantity': '0.00024', 'side': 'SELL', 'symbol': 'BTC_USDT', 'type': 'LIMIT' } ] response = client.orders().create_multiple(multi_order_request)
-
Cancel Replace
# Cancel Replace by order id, proceed on cancelation failure. response = client.orders().cancel_replace(order_id, price='19000', proceed_on_failure=True)
-
Open Orders
# Get a list of active orders for an account response = client.orders().get_all()
-
Order Details
# Create an order for an account # Get order by client order id response = client.orders().get_by_id(client_order_id='123Abc') # Get order by order id response = client.orders().get_by_id(order_id='21934611974062080')
-
Cancel Order by Id
# Cancel an active order # Cancel order by client order id response = client.orders().cancel_by_id(client_order_id='123Abc') # Cancel order by order id response = client.orders().cancel_by_id(order_id='21934611974062080')
-
Cancel Multiple Orders by Ids
# Batch cancel one or many active orders in an account by IDs response = client.orders().cancel_by_multiple_ids( order_ids=["12345", "67890"], client_order_ids=["33344", "myId-1"])
-
Cancel All Orders
# Batch cancel all orders in an account # Cancel all orders on 'BTC_USDT' response = client.orders().cancel(symbol='BTC_USDT') # Cancel all orders on 'SPOT' account response = client.orders().cancel(account_type='SPOT')
-
Orders History
# Get a list of historical orders in an account response = client.orders().get_history(symbol='BTC_USDT')
-
Trade History
# Get a list of all trades for an account response = client.orders().get_all_trades(limit=5)
-
Trades by Order Id
# Get a list of all trades for an order specified by its orderId response = client.orders().get_trades('21934611974062080')
-
Kill Switch
# Set a timer that cancels all regular and smartorders after the timeout has expired. response = client.orders().set_kill_switch('15')
-
Kill Switch Status
# Get status of kill switch. response = client.orders().get_kill_switch()
-
Create Order
# Create a smart order for an account (Limit Buy 0.00025 BTC_USDT at 18,000.00 when price hits 20000 USDT) response = client.smartorders().create(client_order_id='123Abc', price='18000', stop_price='20000.00', quantity='0.00025', side='BUY', symbol='BTC_USDT', type='LIMIT', time_in_force='IOC')
-
Open Orders
# Get a list of (pending) smart orders for an account response = client.smartorders().get_all()
-
Order Details
# Get a smart order’s status. {id} can be smart order’s id or its clientOrderId # If smart order’s state is TRIGGERED, the response will include the triggered order’s data # Get smart order by client order id response = client.smartorders().get_by_id(client_order_id='123Abc') # Get smart order by order id response = client.smartorders().get_by_id(order_id='21934611974062080')
-
Cancel Replace
# Cancel Replace by smart order id, proceed on cancelation failure. response = client.smartorders().cancel_replace(order_id, price='19000', proceed_on_failure=True)
-
Cancel Order by Id
# Cancel a smart order by its id # Cancel smart order by client order id response = client.smartorders().cancel_by_id(client_order_id='123Abc') # Cancel smart order by order id response = client.smartorders().cancel_by_id(order_id='21934611974062080')
-
Cancel Multiple Orders by Ids
# Batch cancel one or many active smart orders in an account by IDs response = client.smartorders().cancel_by_multiple_ids( order_ids=["12345", "67890"], client_order_ids=["33344", "myId-1"])
-
Cancel All Orders
# Batch cancel all smart orders in an account # Cancel all smart orders on 'BTC_USDT' response = client.smartorders().cancel(symbol='BTC_USDT') # Cancel all smart orders on 'SPOT' account response = client.smartorders().cancel(account_type='SPOT')
-
Orders History
# Get a list of historical smart orders in an account response = client.smartorders().get_history(symbol='BTC_USDT')
-
Instantiate a client
import asyncio from polosdk import SpotWsClientPublic def on_message(msg): print(msg) def on_error(err): print(err) ws_client_public = SpotWsClientPublic(on_message, on_error=on_error) await ws_client_public.connect() await ws_client_public.subscribe(['ticker'], ['ETH_USDT'])
-
Candlesticks
# Continuous feed of candlestick data with default/provided depth await ws_client_public.subscribe(['candles_minute_1'], ['BTC_USDT'])
-
Trades
# Continuous feed of recent trades with default/provided depth await ws_client_public.subscribe(['trades'], ['BTC_USDT'])
-
Ticker
# Continuous feed of current day ticker data await ws_client_public.subscribe(['ticker'], ['ETH_USDT'])
-
Book
# Continuous feed of order book data containing asks and bids with default/provided depth await ws_client_public.subscribe(['book'], ['BTC_USDT']) # With Depth Parameter await ws_client_public.subscribe(['book'], ['BTC_USDT'], depth=10)
-
Book Level 2
# Receive a snapshot of the full 20 level order book # Then, continuously in realtime receive an updated order book when the first 20 levels change await ws_client_public.subscribe(['book_lv2'], ['BTC_USDT'])
-
Subscribing to Multiple Channels
await ws_client_public.subscribe(['book', 'ticker'], ['BTC_USDT'])
-
Instantiate a client
import asyncio import os from polosdk import SpotWsClientAuthenticated api_key = os.environ['POLO_API_KEY'] api_secret = os.environ['POLO_API_SECRET'] def on_message(msg): print(msg) def on_error(err): print(err) ws_client_authenticated = SpotWsClientAuthenticated(on_message, on_error=on_error) await ws_client_authenticated.connect(api_key, api_secret)
-
Orders
# Real time information about client’s orders await ws_client_authenticated.subscribe(['orders'], ['all'])
-
Balances
# Real time information about all of client’s balance(s) updates await ws_client_authenticated.subscribe(['balances'])
-
Subscribing to Multiple Channels
await ws_client_authenticated.subscribe(['orders', 'balances'], ['all'])