# coding: utf-8

"""
    PowerBot - Webservice for algotrading

    # TERMS AND CONDITIONS The PowerBot system provides B2B services for trading at intraday power markets. By using the PowerBot service, each user agrees to the terms and conditions of this licence: 1. The user confirms that they are familiar with the exchanges trading system and all relevant rules, is professionally qualified and in possession of a trading license for the relevant exchange. 2. The user will comply with the exchanges market rules (e.g. [EPEX Spot Market Rules](https://www.epexspot.com/en/downloads#rules-fees-processes) or [Nord Pool Market Rules](https://www.nordpoolgroup.com/trading/Rules-and-regulations/)) and will not endanger the exchange system at any time with heavy load from trading algorithms or by other use. 3. The user is aware of limits imposed by the exchange. 4. The user is solely liable for actions resulting from the use of PowerBot.   # INTRODUCTION PowerBot is a web-based software service enabling algorithmic trading on intraday power exchanges such as EPEX, Nord Pool, HUPX, BSP Southpool, TGE, OPCOM or ETPA. The service is straightforward to integrate in an existing software environment and provides a variety of programming interfaces for development of individual trading algorithms and software tools. Besides enabling fully automated intraday trading, it can be used to create tools for human traders providing relevant information and trading opportunities or can be integrated in existing software tools. For further details see https://www.powerbot-trading.com  ## Knowledge Base In addition to this API guide, please find the documentation at https://docs.powerbot-trading.com - the password will be provided by the PowerBot team. If not, please reach out to us at support@powerbot-trading.com  ## Endpoints The PowerBot service is available at the following REST endpoints:  | Instance      | Base URL for REST Endpoints                                      | |---------------|------------------------------------------------------------------| | EPEX          | https://staging.powerbot-trading.com/playground/epex/v2/api      | | Nord Pool     | https://staging.powerbot-trading.com/playground/nordpool/v2/api  | | HUPX          | https://staging.powerbot-trading.com/playground/hupx/v2/api      | | BSP Southpool | https://staging.powerbot-trading.com/playground/southpool/v2/api | | TGE           | https://staging.powerbot-trading.com/playground/tge/v2/api       | | IBEX          | https://staging.powerbot-trading.com/playground/ibex/v2/api      | | CROPEX        | https://staging.powerbot-trading.com/playground/cropex/v2/api    | | OPCOM         | https://staging.powerbot-trading.com/playground/opcom/v2/api     | | ETPA          | https://staging.powerbot-trading.com/playground/etpa/v2/api      | | BRM           | https://staging.powerbot-trading.com/playground/brm/v2/api       |  Access to endpoints is secured via an API Key, which needs to be passed as an \"api_key\" header in each request.   Notes on API Keys:  * API keys are specific to Test, Staging or Production.  * API keys are generated by the system administrator and need to be requested.  ## How to generate API clients (libraries) This OpenAPI specification can be used to generate API clients (programming libraries) for a wide range of programming languages using tools like [OpenAPI Generator](https://openapi-generator.tech/). A detailed guide can be found in the [knowledge base](https://docs.powerbot-trading.com/articles/getting-started/generating-clients/).  ## PowerBot Python client For Python, a ready-made client is also available on PyPI and can be downloaded locally via:  ```shell   pip install powerbot-client ```  ## Errors The API uses standard HTTP status codes to indicate the success or failure of the API call. The body of the response will be in JSON format as follows:  ``` {   \"message\": \"... an error message ...\" } ```  ## Paging The API uses offset and limit parameters for paged operations. An X-Total-Count header is added to responses to indicate the total number of items in a paged response.  ## API Rate Limiting The API limits the number of concurrent calls to 50 - when that limit is reached, the client will receive 503 http status codes (service unavailable) with the following text:  ``` {   \"message\": \"API rate limit exceeded\" } ``` Clients should ensure that they stay within the limit for concurrent API calls.    ## Additional code samples Additional information and code samples demonstrating the use of the API can be found at in our [knowledge base](https://docs.powerbot-trading.com/docs/programmatic-access/)  # noqa: E501

    The version of the OpenAPI document: 2.21.0-rc1
    Contact: office@powerbot-trading.com
    Generated by: https://openapi-generator.tech
"""


try:
    from inspect import getfullargspec
except ImportError:
    from inspect import getargspec as getfullargspec
import pprint
import re  # noqa: F401
import six

from powerbot_asyncio_client.configuration import Configuration


class PortfolioInformation(object):
    """NOTE: This class is auto generated by OpenAPI Generator.
    Ref: https://openapi-generator.tech

    Do not edit the class manually.
    """

    """
    Attributes:
      openapi_types (dict): The key is attribute name
                            and the value is attribute type.
      attribute_map (dict): The key is attribute name
                            and the value is json key in definition.
    """
    openapi_types = {
        'portfolio_id': 'str',
        'currency': 'str',
        'net_cash_pos': 'float',
        'trades_spending': 'float',
        'trades_earnings': 'float',
        'orders_spending': 'float',
        'orders_earnings': 'float',
        'net_pos': 'float',
        'net_pos_aggregate': 'float',
        'net_pos_exposure': 'float',
        'max_net_pos_exposure': 'float',
        'min_net_pos_exposure': 'float',
        'max_net_pos_buy_with_orders': 'float',
        'min_net_pos_sell_with_orders': 'float',
        'abs_pos': 'float',
        'sell_abs_pos': 'float',
        'buy_abs_pos': 'float',
        'order_action_quota': 'float',
        'auction_positions': 'AuctionPositions'
    }

    attribute_map = {
        'portfolio_id': 'portfolio_id',
        'currency': 'currency',
        'net_cash_pos': 'net_cash_pos',
        'trades_spending': 'trades_spending',
        'trades_earnings': 'trades_earnings',
        'orders_spending': 'orders_spending',
        'orders_earnings': 'orders_earnings',
        'net_pos': 'net_pos',
        'net_pos_aggregate': 'net_pos_aggregate',
        'net_pos_exposure': 'net_pos_exposure',
        'max_net_pos_exposure': 'max_net_pos_exposure',
        'min_net_pos_exposure': 'min_net_pos_exposure',
        'max_net_pos_buy_with_orders': 'max_net_pos_buy_with_orders',
        'min_net_pos_sell_with_orders': 'min_net_pos_sell_with_orders',
        'abs_pos': 'abs_pos',
        'sell_abs_pos': 'sell_abs_pos',
        'buy_abs_pos': 'buy_abs_pos',
        'order_action_quota': 'order_action_quota',
        'auction_positions': 'auction_positions'
    }

    def __init__(self, portfolio_id=None, currency=None, net_cash_pos=None, trades_spending=None, trades_earnings=None, orders_spending=None, orders_earnings=None, net_pos=None, net_pos_aggregate=None, net_pos_exposure=None, max_net_pos_exposure=None, min_net_pos_exposure=None, max_net_pos_buy_with_orders=None, min_net_pos_sell_with_orders=None, abs_pos=None, sell_abs_pos=None, buy_abs_pos=None, order_action_quota=None, auction_positions=None, local_vars_configuration=None):  # noqa: E501
        """PortfolioInformation - a model defined in OpenAPI"""  # noqa: E501
        if local_vars_configuration is None:
            local_vars_configuration = Configuration.get_default_copy()
        self.local_vars_configuration = local_vars_configuration

        self._portfolio_id = None
        self._currency = None
        self._net_cash_pos = None
        self._trades_spending = None
        self._trades_earnings = None
        self._orders_spending = None
        self._orders_earnings = None
        self._net_pos = None
        self._net_pos_aggregate = None
        self._net_pos_exposure = None
        self._max_net_pos_exposure = None
        self._min_net_pos_exposure = None
        self._max_net_pos_buy_with_orders = None
        self._min_net_pos_sell_with_orders = None
        self._abs_pos = None
        self._sell_abs_pos = None
        self._buy_abs_pos = None
        self._order_action_quota = None
        self._auction_positions = None
        self.discriminator = None

        if portfolio_id is not None:
            self.portfolio_id = portfolio_id
        if currency is not None:
            self.currency = currency
        if net_cash_pos is not None:
            self.net_cash_pos = net_cash_pos
        if trades_spending is not None:
            self.trades_spending = trades_spending
        if trades_earnings is not None:
            self.trades_earnings = trades_earnings
        if orders_spending is not None:
            self.orders_spending = orders_spending
        if orders_earnings is not None:
            self.orders_earnings = orders_earnings
        if net_pos is not None:
            self.net_pos = net_pos
        if net_pos_aggregate is not None:
            self.net_pos_aggregate = net_pos_aggregate
        if net_pos_exposure is not None:
            self.net_pos_exposure = net_pos_exposure
        if max_net_pos_exposure is not None:
            self.max_net_pos_exposure = max_net_pos_exposure
        if min_net_pos_exposure is not None:
            self.min_net_pos_exposure = min_net_pos_exposure
        if max_net_pos_buy_with_orders is not None:
            self.max_net_pos_buy_with_orders = max_net_pos_buy_with_orders
        if min_net_pos_sell_with_orders is not None:
            self.min_net_pos_sell_with_orders = min_net_pos_sell_with_orders
        if abs_pos is not None:
            self.abs_pos = abs_pos
        if sell_abs_pos is not None:
            self.sell_abs_pos = sell_abs_pos
        if buy_abs_pos is not None:
            self.buy_abs_pos = buy_abs_pos
        if order_action_quota is not None:
            self.order_action_quota = order_action_quota
        if auction_positions is not None:
            self.auction_positions = auction_positions

    @property
    def portfolio_id(self):
        """Gets the portfolio_id of this PortfolioInformation.  # noqa: E501


        :return: The portfolio_id of this PortfolioInformation.  # noqa: E501
        :rtype: str
        """
        return self._portfolio_id

    @portfolio_id.setter
    def portfolio_id(self, portfolio_id):
        """Sets the portfolio_id of this PortfolioInformation.


        :param portfolio_id: The portfolio_id of this PortfolioInformation.  # noqa: E501
        :type portfolio_id: str
        """

        self._portfolio_id = portfolio_id

    @property
    def currency(self):
        """Gets the currency of this PortfolioInformation.  # noqa: E501

        the currency used for the request context  # noqa: E501

        :return: The currency of this PortfolioInformation.  # noqa: E501
        :rtype: str
        """
        return self._currency

    @currency.setter
    def currency(self, currency):
        """Sets the currency of this PortfolioInformation.

        the currency used for the request context  # noqa: E501

        :param currency: The currency of this PortfolioInformation.  # noqa: E501
        :type currency: str
        """

        self._currency = currency

    @property
    def net_cash_pos(self):
        """Gets the net_cash_pos of this PortfolioInformation.  # noqa: E501

        The portfolio related net cash position without standing orders. The scope is spanning across all exchanges on a portfolio-level for the date of the contract (converted to local time). It is calculated by the sum of all trades increasing the cash-position minus the sum all trades decreasing the cash-position. Please note that the timeframe includes both XBID and LOCAL contracts.  # noqa: E501

        :return: The net_cash_pos of this PortfolioInformation.  # noqa: E501
        :rtype: float
        """
        return self._net_cash_pos

    @net_cash_pos.setter
    def net_cash_pos(self, net_cash_pos):
        """Sets the net_cash_pos of this PortfolioInformation.

        The portfolio related net cash position without standing orders. The scope is spanning across all exchanges on a portfolio-level for the date of the contract (converted to local time). It is calculated by the sum of all trades increasing the cash-position minus the sum all trades decreasing the cash-position. Please note that the timeframe includes both XBID and LOCAL contracts.  # noqa: E501

        :param net_cash_pos: The net_cash_pos of this PortfolioInformation.  # noqa: E501
        :type net_cash_pos: float
        """

        self._net_cash_pos = net_cash_pos

    @property
    def trades_spending(self):
        """Gets the trades_spending of this PortfolioInformation.  # noqa: E501

        Sum of the costs of all trades for the given portfolio which are decreasing the cash position. Orders decreasing the cash position are BUY-Trades with a price greater than 0 and SELL-Trades with a price less than 0. The scope is spanning across all exchanges on a portfolio-level for the date of the contract (converted to local time). Please note that the timeframe includes both XBID and LOCAL contracts.  # noqa: E501

        :return: The trades_spending of this PortfolioInformation.  # noqa: E501
        :rtype: float
        """
        return self._trades_spending

    @trades_spending.setter
    def trades_spending(self, trades_spending):
        """Sets the trades_spending of this PortfolioInformation.

        Sum of the costs of all trades for the given portfolio which are decreasing the cash position. Orders decreasing the cash position are BUY-Trades with a price greater than 0 and SELL-Trades with a price less than 0. The scope is spanning across all exchanges on a portfolio-level for the date of the contract (converted to local time). Please note that the timeframe includes both XBID and LOCAL contracts.  # noqa: E501

        :param trades_spending: The trades_spending of this PortfolioInformation.  # noqa: E501
        :type trades_spending: float
        """

        self._trades_spending = trades_spending

    @property
    def trades_earnings(self):
        """Gets the trades_earnings of this PortfolioInformation.  # noqa: E501

        Sum of the costs of all trades for the given portfolio which are increasing the cash position. Orders increasing the cash position are SELL-Trades with a price greater than 0 and BUY-Trades with a price less than 0. The scope is spanning across all exchanges on a portfolio-level for the date of the contract (converted to local time). Please note that the timeframe includes both XBID and LOCAL contracts.  # noqa: E501

        :return: The trades_earnings of this PortfolioInformation.  # noqa: E501
        :rtype: float
        """
        return self._trades_earnings

    @trades_earnings.setter
    def trades_earnings(self, trades_earnings):
        """Sets the trades_earnings of this PortfolioInformation.

        Sum of the costs of all trades for the given portfolio which are increasing the cash position. Orders increasing the cash position are SELL-Trades with a price greater than 0 and BUY-Trades with a price less than 0. The scope is spanning across all exchanges on a portfolio-level for the date of the contract (converted to local time). Please note that the timeframe includes both XBID and LOCAL contracts.  # noqa: E501

        :param trades_earnings: The trades_earnings of this PortfolioInformation.  # noqa: E501
        :type trades_earnings: float
        """

        self._trades_earnings = trades_earnings

    @property
    def orders_spending(self):
        """Gets the orders_spending of this PortfolioInformation.  # noqa: E501

        The cash-position of all standing orders (excluding trades) for the given portfolio decreasing the net cash position. Orders decreasing the cash position are BUY-Orders with a price greater than 0 and SELL-Orders with a price less than 0. The scope is spanning across all exchanges on a portfolio-level for the date of the contract (converted to local time). Please note that the timeframe includes both XBID and LOCAL contracts. For an iceberg order the maximum spending will be calculated and used to determine if the order can be placed.  # noqa: E501

        :return: The orders_spending of this PortfolioInformation.  # noqa: E501
        :rtype: float
        """
        return self._orders_spending

    @orders_spending.setter
    def orders_spending(self, orders_spending):
        """Sets the orders_spending of this PortfolioInformation.

        The cash-position of all standing orders (excluding trades) for the given portfolio decreasing the net cash position. Orders decreasing the cash position are BUY-Orders with a price greater than 0 and SELL-Orders with a price less than 0. The scope is spanning across all exchanges on a portfolio-level for the date of the contract (converted to local time). Please note that the timeframe includes both XBID and LOCAL contracts. For an iceberg order the maximum spending will be calculated and used to determine if the order can be placed.  # noqa: E501

        :param orders_spending: The orders_spending of this PortfolioInformation.  # noqa: E501
        :type orders_spending: float
        """

        self._orders_spending = orders_spending

    @property
    def orders_earnings(self):
        """Gets the orders_earnings of this PortfolioInformation.  # noqa: E501

        The cash-position of all standing orders (excluding trades) for the given portfolio increasing the net cash position. Orders increasing the cash position are SELL-Orders with a price greater than 0 and BUY-Orders with a price less than 0. The scope is spanning across all exchanges on a portfolio-level for the date of the contract (converted to local time). Please note that the timeframe includes both XBID and LOCAL contracts. For an iceberg order the maximum earning will be calculated and used to determine if the order can be placed.  # noqa: E501

        :return: The orders_earnings of this PortfolioInformation.  # noqa: E501
        :rtype: float
        """
        return self._orders_earnings

    @orders_earnings.setter
    def orders_earnings(self, orders_earnings):
        """Sets the orders_earnings of this PortfolioInformation.

        The cash-position of all standing orders (excluding trades) for the given portfolio increasing the net cash position. Orders increasing the cash position are SELL-Orders with a price greater than 0 and BUY-Orders with a price less than 0. The scope is spanning across all exchanges on a portfolio-level for the date of the contract (converted to local time). Please note that the timeframe includes both XBID and LOCAL contracts. For an iceberg order the maximum earning will be calculated and used to determine if the order can be placed.  # noqa: E501

        :param orders_earnings: The orders_earnings of this PortfolioInformation.  # noqa: E501
        :type orders_earnings: float
        """

        self._orders_earnings = orders_earnings

    @property
    def net_pos(self):
        """Gets the net_pos of this PortfolioInformation.  # noqa: E501

        The net position (quantity of BUY-Trades minus SELL-Trades) without standing orders for the timeframe of the particular contract, portfolio and exchange. Contracts with a timeframe that falls into the timeframe of this particular contract are not included (e.g., quarterhourly contracts do not affect the net_pos of the hourly contract). Please note that the timeframe includes both XBID and LOCAL contracts.  # noqa: E501

        :return: The net_pos of this PortfolioInformation.  # noqa: E501
        :rtype: float
        """
        return self._net_pos

    @net_pos.setter
    def net_pos(self, net_pos):
        """Sets the net_pos of this PortfolioInformation.

        The net position (quantity of BUY-Trades minus SELL-Trades) without standing orders for the timeframe of the particular contract, portfolio and exchange. Contracts with a timeframe that falls into the timeframe of this particular contract are not included (e.g., quarterhourly contracts do not affect the net_pos of the hourly contract). Please note that the timeframe includes both XBID and LOCAL contracts.  # noqa: E501

        :param net_pos: The net_pos of this PortfolioInformation.  # noqa: E501
        :type net_pos: float
        """

        self._net_pos = net_pos

    @property
    def net_pos_aggregate(self):
        """Gets the net_pos_aggregate of this PortfolioInformation.  # noqa: E501

        The aggregated net position of all contracts which fully overlap with the delivery period of this contract (e.g., for quarterhourly contracts this will include the net_pos of the quarter-hourly, the half-hourly and the hourly contracts). Please note that the timeframe includes both XBID and LOCAL contracts.  # noqa: E501

        :return: The net_pos_aggregate of this PortfolioInformation.  # noqa: E501
        :rtype: float
        """
        return self._net_pos_aggregate

    @net_pos_aggregate.setter
    def net_pos_aggregate(self, net_pos_aggregate):
        """Sets the net_pos_aggregate of this PortfolioInformation.

        The aggregated net position of all contracts which fully overlap with the delivery period of this contract (e.g., for quarterhourly contracts this will include the net_pos of the quarter-hourly, the half-hourly and the hourly contracts). Please note that the timeframe includes both XBID and LOCAL contracts.  # noqa: E501

        :param net_pos_aggregate: The net_pos_aggregate of this PortfolioInformation.  # noqa: E501
        :type net_pos_aggregate: float
        """

        self._net_pos_aggregate = net_pos_aggregate

    @property
    def net_pos_exposure(self):
        """Gets the net_pos_exposure of this PortfolioInformation.  # noqa: E501

        The sum of all trade quantities (buy minus sell) which overlap with the delivery period of this contract.  # noqa: E501

        :return: The net_pos_exposure of this PortfolioInformation.  # noqa: E501
        :rtype: float
        """
        return self._net_pos_exposure

    @net_pos_exposure.setter
    def net_pos_exposure(self, net_pos_exposure):
        """Sets the net_pos_exposure of this PortfolioInformation.

        The sum of all trade quantities (buy minus sell) which overlap with the delivery period of this contract.  # noqa: E501

        :param net_pos_exposure: The net_pos_exposure of this PortfolioInformation.  # noqa: E501
        :type net_pos_exposure: float
        """

        self._net_pos_exposure = net_pos_exposure

    @property
    def max_net_pos_exposure(self):
        """Gets the max_net_pos_exposure of this PortfolioInformation.  # noqa: E501

        The highest net_pos_exposure within the smallest delivery period of this contract. max_net_pos_exposure = max(net_pos_exposure + quantity of all outstanding buy orders) within the smallest delivery period.  # noqa: E501

        :return: The max_net_pos_exposure of this PortfolioInformation.  # noqa: E501
        :rtype: float
        """
        return self._max_net_pos_exposure

    @max_net_pos_exposure.setter
    def max_net_pos_exposure(self, max_net_pos_exposure):
        """Sets the max_net_pos_exposure of this PortfolioInformation.

        The highest net_pos_exposure within the smallest delivery period of this contract. max_net_pos_exposure = max(net_pos_exposure + quantity of all outstanding buy orders) within the smallest delivery period.  # noqa: E501

        :param max_net_pos_exposure: The max_net_pos_exposure of this PortfolioInformation.  # noqa: E501
        :type max_net_pos_exposure: float
        """

        self._max_net_pos_exposure = max_net_pos_exposure

    @property
    def min_net_pos_exposure(self):
        """Gets the min_net_pos_exposure of this PortfolioInformation.  # noqa: E501

        The lowest net_pos_exposure within the smallest delivery period of this contract. min_net_pos_exposure = min(net_pos_exposure - quantity of all outstanding sell orders) within the smallest delivery period.  # noqa: E501

        :return: The min_net_pos_exposure of this PortfolioInformation.  # noqa: E501
        :rtype: float
        """
        return self._min_net_pos_exposure

    @min_net_pos_exposure.setter
    def min_net_pos_exposure(self, min_net_pos_exposure):
        """Sets the min_net_pos_exposure of this PortfolioInformation.

        The lowest net_pos_exposure within the smallest delivery period of this contract. min_net_pos_exposure = min(net_pos_exposure - quantity of all outstanding sell orders) within the smallest delivery period.  # noqa: E501

        :param min_net_pos_exposure: The min_net_pos_exposure of this PortfolioInformation.  # noqa: E501
        :type min_net_pos_exposure: float
        """

        self._min_net_pos_exposure = min_net_pos_exposure

    @property
    def max_net_pos_buy_with_orders(self):
        """Gets the max_net_pos_buy_with_orders of this PortfolioInformation.  # noqa: E501

        The net_pos, including standing BUY orders for the timeframe of the particular contract, portfolio and exchange. Please note that the timeframe includes both XBID and LOCAL contracts.  # noqa: E501

        :return: The max_net_pos_buy_with_orders of this PortfolioInformation.  # noqa: E501
        :rtype: float
        """
        return self._max_net_pos_buy_with_orders

    @max_net_pos_buy_with_orders.setter
    def max_net_pos_buy_with_orders(self, max_net_pos_buy_with_orders):
        """Sets the max_net_pos_buy_with_orders of this PortfolioInformation.

        The net_pos, including standing BUY orders for the timeframe of the particular contract, portfolio and exchange. Please note that the timeframe includes both XBID and LOCAL contracts.  # noqa: E501

        :param max_net_pos_buy_with_orders: The max_net_pos_buy_with_orders of this PortfolioInformation.  # noqa: E501
        :type max_net_pos_buy_with_orders: float
        """

        self._max_net_pos_buy_with_orders = max_net_pos_buy_with_orders

    @property
    def min_net_pos_sell_with_orders(self):
        """Gets the min_net_pos_sell_with_orders of this PortfolioInformation.  # noqa: E501

        The net_pos, including standing SELL orders for the timeframe of the particular contract, portfolio and exchange. Please note that the timeframe includes both XBID and LOCAL contracts.  # noqa: E501

        :return: The min_net_pos_sell_with_orders of this PortfolioInformation.  # noqa: E501
        :rtype: float
        """
        return self._min_net_pos_sell_with_orders

    @min_net_pos_sell_with_orders.setter
    def min_net_pos_sell_with_orders(self, min_net_pos_sell_with_orders):
        """Sets the min_net_pos_sell_with_orders of this PortfolioInformation.

        The net_pos, including standing SELL orders for the timeframe of the particular contract, portfolio and exchange. Please note that the timeframe includes both XBID and LOCAL contracts.  # noqa: E501

        :param min_net_pos_sell_with_orders: The min_net_pos_sell_with_orders of this PortfolioInformation.  # noqa: E501
        :type min_net_pos_sell_with_orders: float
        """

        self._min_net_pos_sell_with_orders = min_net_pos_sell_with_orders

    @property
    def abs_pos(self):
        """Gets the abs_pos of this PortfolioInformation.  # noqa: E501

        The absolute position (Sum of all traded quantities) without standing orders for the timeframe of the particular contract, delivery area, portfolio and exchange. Contracts with a timeframe that falls into the timeframe of this particular contract are not included (e.g., quarterhourly contracts do not affect the abs_pos of the hourly contract). Please note that the timeframe includes both XBID and LOCAL contracts.  # noqa: E501

        :return: The abs_pos of this PortfolioInformation.  # noqa: E501
        :rtype: float
        """
        return self._abs_pos

    @abs_pos.setter
    def abs_pos(self, abs_pos):
        """Sets the abs_pos of this PortfolioInformation.

        The absolute position (Sum of all traded quantities) without standing orders for the timeframe of the particular contract, delivery area, portfolio and exchange. Contracts with a timeframe that falls into the timeframe of this particular contract are not included (e.g., quarterhourly contracts do not affect the abs_pos of the hourly contract). Please note that the timeframe includes both XBID and LOCAL contracts.  # noqa: E501

        :param abs_pos: The abs_pos of this PortfolioInformation.  # noqa: E501
        :type abs_pos: float
        """

        self._abs_pos = abs_pos

    @property
    def sell_abs_pos(self):
        """Gets the sell_abs_pos of this PortfolioInformation.  # noqa: E501

        The abs_pos plus the absolute quantity of all standing SELL-Orders for the respective contract.  # noqa: E501

        :return: The sell_abs_pos of this PortfolioInformation.  # noqa: E501
        :rtype: float
        """
        return self._sell_abs_pos

    @sell_abs_pos.setter
    def sell_abs_pos(self, sell_abs_pos):
        """Sets the sell_abs_pos of this PortfolioInformation.

        The abs_pos plus the absolute quantity of all standing SELL-Orders for the respective contract.  # noqa: E501

        :param sell_abs_pos: The sell_abs_pos of this PortfolioInformation.  # noqa: E501
        :type sell_abs_pos: float
        """

        self._sell_abs_pos = sell_abs_pos

    @property
    def buy_abs_pos(self):
        """Gets the buy_abs_pos of this PortfolioInformation.  # noqa: E501

        The abs_pos plus the absolute quantity of all standing BUY-Orders for the respective contract.  # noqa: E501

        :return: The buy_abs_pos of this PortfolioInformation.  # noqa: E501
        :rtype: float
        """
        return self._buy_abs_pos

    @buy_abs_pos.setter
    def buy_abs_pos(self, buy_abs_pos):
        """Sets the buy_abs_pos of this PortfolioInformation.

        The abs_pos plus the absolute quantity of all standing BUY-Orders for the respective contract.  # noqa: E501

        :param buy_abs_pos: The buy_abs_pos of this PortfolioInformation.  # noqa: E501
        :type buy_abs_pos: float
        """

        self._buy_abs_pos = buy_abs_pos

    @property
    def order_action_quota(self):
        """Gets the order_action_quota of this PortfolioInformation.  # noqa: E501

        **Only supported for EPEX, Nord Pool, IBEX and CROPEX**  The percentage (0.0 - 1.0) of consumed order entry/modification quota calculated depending on the underlying exchange.  This value is calculated based on the following formula:  `max{short_usage/short_limit, long_usage/long_limit}`  # noqa: E501

        :return: The order_action_quota of this PortfolioInformation.  # noqa: E501
        :rtype: float
        """
        return self._order_action_quota

    @order_action_quota.setter
    def order_action_quota(self, order_action_quota):
        """Sets the order_action_quota of this PortfolioInformation.

        **Only supported for EPEX, Nord Pool, IBEX and CROPEX**  The percentage (0.0 - 1.0) of consumed order entry/modification quota calculated depending on the underlying exchange.  This value is calculated based on the following formula:  `max{short_usage/short_limit, long_usage/long_limit}`  # noqa: E501

        :param order_action_quota: The order_action_quota of this PortfolioInformation.  # noqa: E501
        :type order_action_quota: float
        """

        self._order_action_quota = order_action_quota

    @property
    def auction_positions(self):
        """Gets the auction_positions of this PortfolioInformation.  # noqa: E501


        :return: The auction_positions of this PortfolioInformation.  # noqa: E501
        :rtype: AuctionPositions
        """
        return self._auction_positions

    @auction_positions.setter
    def auction_positions(self, auction_positions):
        """Sets the auction_positions of this PortfolioInformation.


        :param auction_positions: The auction_positions of this PortfolioInformation.  # noqa: E501
        :type auction_positions: AuctionPositions
        """

        self._auction_positions = auction_positions

    def to_dict(self, serialize=False):
        """Returns the model properties as a dict"""
        result = {}

        def convert(x):
            if hasattr(x, "to_dict"):
                args = getfullargspec(x.to_dict).args
                if len(args) == 1:
                    return x.to_dict()
                else:
                    return x.to_dict(serialize)
            else:
                return x

        for attr, _ in six.iteritems(self.openapi_types):
            value = getattr(self, attr)
            attr = self.attribute_map.get(attr, attr) if serialize else attr
            if isinstance(value, list):
                result[attr] = list(map(
                    lambda x: convert(x),
                    value
                ))
            elif isinstance(value, dict):
                result[attr] = dict(map(
                    lambda item: (item[0], convert(item[1])),
                    value.items()
                ))
            else:
                result[attr] = convert(value)

        return result

    def to_str(self):
        """Returns the string representation of the model"""
        return pprint.pformat(self.to_dict())

    def __repr__(self):
        """For `print` and `pprint`"""
        return self.to_str()

    def __eq__(self, other):
        """Returns true if both objects are equal"""
        if not isinstance(other, PortfolioInformation):
            return False

        return self.to_dict() == other.to_dict()

    def __ne__(self, other):
        """Returns true if both objects are not equal"""
        if not isinstance(other, PortfolioInformation):
            return True

        return self.to_dict() != other.to_dict()
