def get_trades( self, market=None, side=None, accountOwner=None, accountNumber=None, transactionHash=None, limit=None, startingBefore=None, ): ''' Returns all historical trades :param market: optional :type market: str[] of valid markets ["WETH-DAI", "DAI-USDC", "WETH-USDC", "PBTC-USDC"] :param side: optional :type side: str in list ["BUY", "SELL"] :param accountOwner: optional :type accountOwner: str (address) :param accountNumber: optional :type accountNumber: number :param transactionHash: optional :type transactionHash: str (hash) :param limit: optional, defaults to 100 :type limit: number :param startingBefore: optional, defaults to now :type startingBefore: str (ISO-8601) :returns: list of existing trades :raises: DydxAPIError ''' return self._get('/v2/trades', params=utils.remove_nones({ 'market': None if market is None else ','.join(market), 'side': side, 'accountOwner': accountOwner, 'accountNumber': accountNumber, 'transactionHash': transactionHash, 'limit': limit, 'startingBefore': startingBefore, }))
def get_balances(self, address, number=0): ''' Return balances for an address and account number :param address: required :type address: str (address) :param number: optional, defaults to 0 :type number: number :returns: list of balances :raises: DydxAPIError ''' return self._get('/v1/accounts/' + address, params=utils.remove_nones({'number': number}))
def get_trades( self, pairs, makerAccountOwner=None, makerAccountNumber=None, limit=None, startingBefore=None, ): """ Return all historical trades :param pairs: required :type pairs: list of str :param makerAccountOwner: optional :type makerAccountOwner: str (address) :param makerAccountNumber: optional :type makerAccountNumber: number :param limit: optional, defaults to 100 :type limit: number :param startingBefore: optional, defaults to now :type startingBefore: str (ISO-8601) :returns: list of processed trades :raises: DydxAPIError """ return self._get( "dex/trades", params=utils.remove_nones( { "pairs": ",".join(pairs), "makerAccountOwner": makerAccountOwner, "makerAccountNumber": makerAccountNumber, "limit": limit, "startingBefore": startingBefore, } ), )
def get_orders( self, pairs, makerAccountOwner=None, makerAccountNumber=None, limit=None, startingBefore=None, ): """ Return all open orders :param pairs: required :type pairs: list of str :param makerAccountOwner: optional, defaults to self.public_address :type makerAccountOwner: str (address) :param makerAccountNumber: optional, defaults to self.account_number :type makerAccountNumber: number :param limit: optional, defaults to 100 :type limit: number :param startingBefore: optional, defaults to now :type startingBefore: str (ISO-8601) :returns: list of existing orders :raises: DydxAPIError """ return self._get( "dex/orders", params=utils.remove_nones( { "pairs": ",".join(pairs), "makerAccountOwner": makerAccountOwner, "makerAccountNumber": makerAccountNumber, "limit": limit, "startingBefore": startingBefore, } ), )
def get_trades(self, pairs, makerAccountOwner=None, makerAccountNumber=None, limit=None, startingBefore=None): ''' Return all historical trades :param pairs: required :type pairs: list of str :param makerAccountOwner: optional :type makerAccountOwner: str (address) :param makerAccountNumber: optional :type makerAccountNumber: number :param limit: optional, defaults to 100 :type limit: number :param startingBefore: optional, defaults to now :type startingBefore: str (ISO-8601) :returns: list of processed trades :raises: DydxAPIError ''' return self._get('dex/trades', params=utils.remove_nones({ 'pairs': ','.join(pairs), 'makerAccountOwner': makerAccountOwner, 'makerAccountNumber': makerAccountNumber, 'limit': limit, 'startingBefore': startingBefore }))
def get_orders(self, pairs, makerAccountOwner=None, makerAccountNumber=None, limit=None, startingBefore=None): ''' Return all open orders :param pairs: required :type pairs: list of str :param makerAccountOwner: optional, defaults to self.public_address :type makerAccountOwner: str (address) :param makerAccountNumber: optional, defaults to self.account_number :type makerAccountNumber: number :param limit: optional, defaults to 100 :type limit: number :param startingBefore: optional, defaults to now :type startingBefore: str (ISO-8601) :returns: list of existing orders :raises: DydxAPIError ''' return self._get('dex/orders', params=utils.remove_nones({ 'pairs': ','.join(pairs), 'makerAccountOwner': makerAccountOwner, 'makerAccountNumber': makerAccountNumber, 'limit': limit, 'startingBefore': startingBefore }))
def place_order( self, market, side, amount, price, expiration=None, limitFee=None, fillOrKill=False, postOnly=False, clientId=None, cancelAmountOnRevert=None, cancelId=None, ): ''' Create an order :param market: required :type market: str in list ["WETH-DAI", "WETH-USDC", "DAI-USDC", "PBTC-USDC"] :param side: required :type side: str in list ["BUY", "SELL"] :param amount: required :type amount: number :param price: required :type price: Decimal :param expiration: optional, defaults to 28 days from now :type expiration: number :param limitFee: optional, defaults to None :type limitFee: Decimal :param fillOrKill: optional, defaults to False :type fillOrKill: bool :param postOnly: optional, defaults to False :type postOnly: bool :param clientId: optional, defaults to None :type clientId: string :param cancelAmountOnRevert: optional, defaults to None :type cancelAmountOnRevert: bool :param cancelId: optional, defaults to None :type cancelId: string :returns: Order :raises: DydxAPIError ''' if market == consts.PAIR_PBTC_USDC: order = self._make_perp_order( market, side, amount, price, expiration, limitFee, postOnly, ) market_api_request = market order_api_request = { 'isBuy': order['isBuy'], 'isDecreaseOnly': False, 'amount': str(order['amount']), 'limitPrice': utils.decimalToStr(order['limitPrice']), 'triggerPrice': utils.decimalToStr(order['triggerPrice']), 'limitFee': utils.decimalToStr(order['limitFee']), 'maker': order['maker'], 'taker': order['taker'], 'expiration': str(order['expiration']), 'salt': str(order['salt']), 'typedSignature': order['typedSignature'], } else: order = self._make_solo_order( market, side, amount, price, expiration, limitFee, postOnly, ) market_api_request = None order_api_request = { 'isBuy': order['isBuy'], 'isDecreaseOnly': False, 'baseMarket': str(order['baseMarket']), 'quoteMarket': str(order['quoteMarket']), 'amount': str(order['amount']), 'limitPrice': utils.decimalToStr(order['limitPrice']), 'triggerPrice': utils.decimalToStr(order['triggerPrice']), 'limitFee': utils.decimalToStr(order['limitFee']), 'makerAccountOwner': order['makerAccountOwner'], 'makerAccountNumber': str(order['makerAccountNumber']), 'expiration': str(order['expiration']), 'salt': str(order['salt']), 'typedSignature': order['typedSignature'], } return self._post('/v2/orders', data=json.dumps( utils.remove_nones({ 'fillOrKill': fillOrKill, 'postOnly': postOnly, 'clientId': clientId, 'cancelAmountOnRevert': cancelAmountOnRevert, 'cancelId': cancelId, 'market': market_api_request, 'order': order_api_request })))
def get_orders( self, market=None, side=None, status=None, orderType=None, accountOwner=None, accountNumber=None, limit=None, startingBefore=None, ): ''' Returns all open orders :param market: optional :type market: str[] of valid markets ["WETH-DAI", "DAI-USDC", "WETH-USDC", "PBTC-USDC"] :param side: optional :type side: str in list ["BUY", "SELL"] :param status: optional :type status: str[] of valid statuses ["PENDING", "OPEN", "FILLED", "PARTIALLY_FILLED", "CANCELED", "UNTRIGGERED"] :param orderType: optional :type orderType: str[] of valid order types ["LIMIT", "ISOLATED_MARKET", "STOP_LIMIT"] :param accountOwner: optional :type accountOwner: str (address) :param accountNumber: optional :type accountNumber: number :param limit: optional, defaults to 100 :type limit: number :param startingBefore: optional, defaults to now :type startingBefore: str (ISO-8601) :returns: list of existing orders :raises: DydxAPIError ''' return self._get( '/v2/orders', params=utils.remove_nones({ 'market': None if market is None else ','.join(market), 'side': side, 'status': None if status is None else ','.join(status), 'orderType': None if orderType is None else ','.join(orderType), 'accountOwner': accountOwner, 'accountNumber': accountNumber, 'limit': limit, 'startingBefore': startingBefore }))
def create_order( self, makerMarket, takerMarket, makerAmount, takerAmount, expiration=None, fillOrKill=False, clientId=None, ): ''' Create an order :param makerMarket: required :type makerMarket: number :param takerMarket: required :type takerMarket: number :param makerAmount: required :type makerAmount: number :param takerAmount: required :type takerAmount: number :param expiration: optional, defaults to 28 days from now :type expiration: number :param fillOrKill: optional, defaults to False :type fillOrKill: bool :param clientId: optional, defaults to None :type clientId: string :returns: Order :raises: DydxAPIError ''' order = { 'makerMarket': makerMarket, 'takerMarket': takerMarket, 'makerAmount': makerAmount, 'takerAmount': takerAmount, 'makerAccountOwner': self.public_address, 'makerAccountNumber': self.account_number, 'takerAccountOwner': self.TAKER_ACCOUNT_OWNER, 'takerAccountNumber': self.TAKER_ACCOUNT_NUMBER, 'expiration': expiration or utils.epoch_in_four_weeks(), 'salt': random.randint(0, 2**256) } order['typedSignature'] = utils.sign_order(order, self.private_key) return self._post('dex/orders', data=json.dumps( utils.remove_nones({ 'fillOrKill': fillOrKill, 'clientId': clientId, 'order': {k: str(v) for k, v in order.items()} })))
def replace_order( self, makerMarket, takerMarket, makerAmount, takerAmount, cancelId, expiration=None, fillOrKill=False, cancelAmountOnRevert=False, postOnly=False, clientId=None, ): ''' Replace an existing order :param makerMarket: required :type makerMarket: number :param takerMarket: required :type takerMarket: number :param makerAmount: required :type makerAmount: number :param takerAmount: required :type takerAmount: number :param cancelId: required :type cancelId: str :param expiration: optional, defaults to 28 days from now :type expiration: number :param fillOrKill: optional, defaults to False :type fillOrKill: bool :param cancelAmountOnRevert: optional, defaults to False :type cancelAmountOnRevert: bool :param postOnly: optional, defaults to False :type postOnly: bool :param clientId: optional, defaults to None :type clientId: string :returns: Order :raises: DydxAPIError ''' order = self._make_order( makerMarket, takerMarket, makerAmount, takerAmount, expiration, ) return self._post( '/v1/dex/orders/replace', data=json.dumps( utils.remove_nones({ 'cancelId': cancelId, 'fillOrKill': fillOrKill, 'cancelAmountOnRevert': cancelAmountOnRevert, 'postOnly': postOnly, 'clientId': clientId, 'order': {k: str(v) for k, v in order.items()}, })), )
def create_order( self, makerMarket, takerMarket, makerAmount, takerAmount, expiration=None, fillOrKill=False, clientId=None, ): """ Create an order :param makerMarket: required :type makerMarket: number :param takerMarket: required :type takerMarket: number :param makerAmount: required :type makerAmount: number :param takerAmount: required :type takerAmount: number :param expiration: optional, defaults to 28 days from now :type expiration: number :param fillOrKill: optional, defaults to False :type fillOrKill: bool :param clientId: optional, defaults to None :type clientId: string :returns: Order :raises: DydxAPIError """ order = { "makerMarket": makerMarket, "takerMarket": takerMarket, "makerAmount": makerAmount, "takerAmount": takerAmount, "makerAccountOwner": self.public_address, "makerAccountNumber": self.account_number, "takerAccountOwner": self.TAKER_ACCOUNT_OWNER, "takerAccountNumber": self.TAKER_ACCOUNT_NUMBER, "expiration": expiration or utils.epoch_in_four_weeks(), "salt": random.randint(0, 2 ** 256), } order["typedSignature"] = utils.sign_order(order, self.private_key) return self._post( "dex/orders", data=json.dumps( utils.remove_nones( { "fillOrKill": fillOrKill, "clientId": clientId, "order": {k: str(v) for k, v in order.items()}, } ) ), )