class TakeProfit(StopOrder):
    """Тейк профит ордер"""
    # Цена активации
    activation_price = FloatField('takeprofit/activationprice')
    # Защитное время удержания цены
    # (когда цены на рынке лишь кратковременно достигают уровня цены активации,
    # и вскоре возвращаются обратно)
    guard_time = DateTimeField('takeprofit/guardtime', TIME_FORMAT)
    # Достигнутый максимум
    extremum = FloatField('takeprofit/extremum')
    # Уровень исполнения?
    level = FloatField('takeprofit/level')
    # Коррекция
    # Позволяет выставить на Биржу заявку,
    # закрывающую позицию в момент окончания тренда на рынке.
    correction = FloatField('takeprofit/correction')
    # Защитный спрэд
    # Для определения цены заявки, исполняющей TP на покупку,
    # защитный спрэд прибавляется к цене рынка.
    # Для определения цены заявки, исполняющей TP на продажу,
    # защитный спрэд вычитается из цены рынка.
    guard_spread = FloatField('takeprofit/guardspread')
    # Примечание
    broker_ref = StringField('takeprofit/brokerref')
    # Количество лотов
    quantity = IntegerField('takeprofit/quantity')
class Security(Entity):
    """
    Ценная бумага.
    """
    ROOT_NAME = 'security'
    id = secid = IntegerField('@secid')
    active = SimpleBooleanField('@active', 'true', 'false')
    # Код инструмента
    seccode = StringField('seccode')
    # Тип бумаги
    sectype = StringField('sectype')
    # Идентификатор режима торгов по умолчанию
    board = StringField('board')
    # Идентификатор рынка
    market = IntegerField('market')
    # Наименование бумаги
    name = StringField('shortname')
    # Количество десятичных знаков в цене
    decimals = IntegerField('decimals')
    # Шаг цены
    minstep = FloatField('minstep')
    # Размер лота
    lotsize = IntegerField('lotsize')
    # Стоимость пункта цены
    point_cost = FloatField('point_cost')
    # Имя таймзоны инструмента
    timezone = StringField('sec_tz')
    # Флаги фичей
    credit_allowed = SimpleBooleanField('opmask/@usecredit', 'yes', 'no')
    bymarket_allowed = SimpleBooleanField('opmask/@bymarket', 'yes', 'no')
    nosplit_allowed = SimpleBooleanField('opmask/@nosplit', 'yes', 'no')
    immediate_allowed = SimpleBooleanField('opmask/@immorcancel', 'yes', 'no')
    cancelbalance_allowed = SimpleBooleanField('opmask/@cancelbalance', 'yes',
                                               'no')
class Order(BaseOrder):
    """Базовый класс ордера"""
    ROOT_NAME = 'order'
    # Биржевой номер заявки
    origin_order_no = IntegerField('origin_orderno')
    # Объем заявки в валюте инструмента
    value = FloatField('value')
    # НКД
    accrued_int = FloatField('accruedint')
    # Код поставки (значение биржи, определяющее правила расчетов)
    settle_code = StringField('settlecode')
    # Неудовлетворенный остаток объема заявки в лотах (контрактах)
    balance = IntegerField('balance')
    # Скрытое количество в лотах
    hidden = IntegerField('hidden')
    # Доходность
    yld = IntegerField('yield')
    # Условие
    condition = StringField('condition')
    # Цена для условной заявки, либо обеспеченность в процентах
    condition_value = FloatField('conditionvalue')
    # С какого момента времени действительна
    valid_after = DateTimeField('valid_after', TIME_FORMAT)
    # Максимальная комиссия по сделкам заявки
    max_commission = FloatField('maxcomission')
class ClientPortfolioMCT(MyXmlObject):
    """
    Клиентский портфель MCT/MMA.
    """
    ROOT_NAME = 'portfolio_mct'
    # Идентификатор клиента
    id = client = StringField('@client')
    # Валюта портфеля клиента
    currency = StringField('portfolio_currency')
    # Величина капитала
    capital = FloatField('capital')
    # Использование капитала факт
    utilization_fact = FloatField('utilization_fact')
    # Использование капитала план
    utilization_plan = FloatField('utilization_plan')
    # Фактическая обеспеченность
    coverage_fact = FloatField('coverage_fact')
    # Плановая обеспеченность
    coverage_plan = FloatField('coverage_plan')
    # Входящее сальдо
    open_balance = FloatField('open_balance')
    # Cуммарная комиссия
    tax = FloatField('tax')
    # Прибыль/убыток по входящим позициям
    pnl_income = FloatField('pnl_income')
    # Прибыль/убыток по сделкам
    pnl_intraday = FloatField('pnl_intraday')

    # TODO Доделать портфель mct
    class _Security(MyXmlObject):
        pass
class MoneyPosition(ClientPosition):
    """Денежная позиция"""
    ROOT_NAME = 'money_position'
    id = -1
    # Внутренний коды доступных рынков
    market = IntegerListField('markets/market')
    # В условных заявках на покупку
    order_buy_cond = FloatField('ordbuycond')
    # Сумма списанной комиссии
    commission = FloatField('comission')
    ord_sell = 0
class SecurityPit(MyXmlObject):
    """
    Питы - параметры инструмента в нестандартных режимах торгов.
    """
    ROOT_NAME = 'pit'
    board = StringField('@board')
    seccode = StringField('@seccode')
    market = IntegerField('market')
    decimals = IntegerField('decimals')
    minstep = FloatField('minstep')
    lotsize = IntegerField('lotsize')
    point_cost = FloatField('point_cost')
 class _ValuePart(MyXmlObject):
     # Регистр учёта
     register = StringField('@register')
     # Входящая денежная позиция
     open_balance = FloatField('open_balance')
     # Потрачено на покупки
     bought = FloatField('bought')
     # Выручка от продаж
     sold = FloatField('sold')
     # Исполнено
     settled = FloatField('settled')
     # Текущая денежная позиция
     balance = FloatField('balance')
class SecInfoUpdate(Entity):
    """
    Обновление информации по инструменту.
    """
    ROOT_NAME = 'sec_info_upd'
    secid = IntegerField('secid')
    # Код инструмента
    seccode = StringField('seccode')
    # Идентификатор рынка
    market = IntegerField('market')
    # Минимальная цена (только FORTS)
    minprice = FloatField('minprice')
    # Максимальная цена (только FORTS)
    maxprice = FloatField('maxprice')
    # ГО покупателя (фьючерсы FORTS, руб.)
    buy_deposit = FloatField('buy_deposit')
    # ГО продавца (фьючерсы FORTS, руб.)
    sell_deposit = FloatField('sell_deposit')
    # ГО покрытой позиции (опционы FORTS, руб.)
    bgo_c = FloatField('bgo_c')
    # ГО непокрытой позиции (опционы FORTS, руб.)
    bgo_nc = FloatField('bgo_nc')
    # Базовое ГО под покупку маржируемого опциона
    bgo_buy = FloatField('bgo_buy')
    # Стоимость пункта цены
    point_cost = FloatField('point_cost')
class HistoryCandle(Entity):
    """
    Свечки OHLCV (open,high,low,close).
    """
    ROOT_NAME = 'candle'
    date = DateTimeField('@date', TIME_FORMAT)
    id = hash(date)
    open = FloatField('@open')
    high = FloatField('@high')
    low = FloatField('@low')
    close = FloatField('@close')
    volume = IntegerField('@volume')
    # только ФОРТС
    open_interest = IntegerField('@oi')
class SecInfo(Entity):
    """
    Доп. информация по инструменту.
    """
    ROOT_NAME = 'sec_info'
    id = secid = IntegerField('@secid')
    # Полное наименование инструмента
    secname = StringField('secname')
    # Код инструмента
    seccode = StringField('seccode')
    # Идентификатор рынка
    market = IntegerField('market')
    # Единицы измерения цены
    pname = StringField('pname')
    # Дата погашения
    mat_date = DateTimeField('mat_date', TIME_FORMAT)
    # Цена последнего клиринга (только FORTS)
    clearing_price = FloatField('clearing_price')
    # Минимальная цена (только FORTS)
    minprice = FloatField('minprice')
    # Максимальная цена (только FORTS)
    maxprice = FloatField('maxprice')
    # ГО покупателя (фьючерсы FORTS, руб.)
    buy_deposit = FloatField('buy_deposit')
    # ГО продавца (фьючерсы FORTS, руб.)
    sell_deposit = FloatField('sell_deposit')
    # ГО покрытой позиции (опционы FORTS, руб.)
    bgo_c = FloatField('bgo_c')
    # ГО непокрытой позиции (опционы FORTS, руб.)
    bgo_nc = FloatField('bgo_nc')
    # Текущий НКД, руб
    accruedint = FloatField('accruedint')
    # Размер купона, руб
    coupon_value = FloatField('coupon_value')
    # Дата погашения купона
    coupon_date = DateTimeField('coupon_date', TIME_FORMAT)
    # Период выплаты купона, дни
    coupon_period = IntegerField('coupon_period')
    # Номинал облигации или акции, руб
    facevalue = FloatField('facevalue')
    # Тип опциона Call(C)/Put(P)
    put_call = StringField('put_call', choices=('C', 'P'))
    # Маржинальный(M)/премия(P)
    opt_type = StringField('opt_type', choices=('M', 'P'))
    # Количество базового актива (FORTS)
    lot_volume = IntegerField('lot_volume')
class StopLoss(StopOrder):
    """Стоп лосс оредер"""
    # Использование кредита
    use_credit = SimpleBooleanField('stoploss/@usecredit', 'yes', 'no')
    # Цена активации
    activation_price = FloatField('stoploss/activationprice')
    # Рыночное исполнение
    bymarket = ItemField('bymarket')
    # Защитное время удержания цены
    # (когда цены на рынке лишь кратковременно достигают уровня цены активации,
    # и вскоре возвращаются обратно)
    guard_time = DateTimeField('stoploss/guardtime', TIME_FORMAT)
    # Примечание
    broker_ref = StringField('stoploss/brokerref')
    # Количество лотов
    quantity = IntegerField('stoploss/quantity')
    # Цена исполнения (отменяет bymarket)
    price = FloatField('stoploss/orderprice')
class SecurityPosition(ClientPosition):
    """Клиентская позиция"""
    ROOT_NAME = 'sec_position'
    # Код инструмента
    id = secid = IntegerField('secid')
    # Код инструмента
    seccode = asset = StringField('seccode')
    # Неснижаемый остаток
    saldo_min = FloatField('saldomin')
class ClientTrade(Entity):
    """
    Клиентская сделка (т.е. успешно выполненная заявка).
    """
    ROOT_NAME = 'trade'
    # Id бумаги
    secid = IntegerField('secid')
    # Номер сделки на бирже
    id = trade_no = IntegerField('tradeno')
    # Номер заявки на бирже
    order_no = IntegerField('orderno')
    # Идентификатор борда
    board = StringField('board')
    # Код инструмента
    seccode = StringField('seccode')
    # Идентификатор клиента
    client = StringField('client')
    # B - покупка, S - продажа
    buysell = StringField('buysell', choices=('B', 'S'))
    # Время сделки
    time = DateTimeField('time', TIME_FORMAT)
    # Примечание
    broker_ref = StringField('brokerref')
    # Объем сделки
    value = FloatField('value')
    # Комиссия
    commission = FloatField('comission')
    # Цена
    price = FloatField('price')
    # Кол-во инструмента в сделках в штуках
    items = IntegerField('items')
    # Количество лотов
    quantity = IntegerField('quantity')
    # Доходность
    yld = IntegerField('yield')
    # НКД
    accrued_int = FloatField('accruedint')
    # тип сделки: ‘T’ – обычная ‘N’ – РПС ‘R’ – РЕПО ‘P’ – размещение
    trade_type = StringField('tradetype', choices=('T', 'N', 'R', 'P'))
    # Код поставки
    settle_code = StringField('settlecode')
    # Текущая позиция по инструменту
    current_position = IntegerField('currentpos')
    class _Security(MyXmlObject):
        # Id инструмента
        secid = IntegerField('@secid')
        # Id рынка
        market = IntegerField('market')
        # Обозначение инструмента
        seccode = StringField('seccode')
        # Текущая цена
        price = FloatField('price')
        # Входящая позиция, штук
        open_balance = IntegerField('open_balance')
        # Куплено, штук
        bought = IntegerField('bought')
        # Продано, штук
        sold = IntegerField('sold')
        # Текущая позиция, штук
        balance = IntegerField('balance')
        # Заявлено купить, штук
        buying = IntegerField('buying')
        # Заявлено продать, штук
        selling = IntegerField('selling')
        # Вклад бумаги в плановое обеспечение
        cover = FloatField('cover')
        # Плановая начальная маржа (риск)
        init_margin = FloatField('init_margin')
        # Cтавка риска для лонгов
        riskrate_long = FloatField('riskrate_long')
        # Cтавка риска для шортов
        riskrate_short = FloatField('riskrate_short')
        # Прибыль/убыток по входящим позициям
        pnl_income = FloatField('pnl_income')
        # Прибыль/убыток по сделкам
        pnl_intraday = FloatField('pnl_intraday')
        # Максимальная покупка, в лотах
        max_buy = IntegerField('maxbuy')
        # Макcимальная продажа, в лотах
        max_sell = IntegerField('maxsell')

        class _ValuePart(MyXmlObject):
            # Входящая позиция, штук
            register = StringField('@register')
            # Входящая позиция, штук
            open_balance = IntegerField('open_balance')
            # Куплено, штук
            bought = IntegerField('bought')
            # Продано, штук
            sold = IntegerField('sold')
            # Исполнено
            settled = IntegerField('settled')
            # Текущая позиция, штук
            balance = IntegerField('balance')
            # Заявлено купить, штук
            buying = IntegerField('buying')
            # Заявлено продать, штук
            selling = IntegerField('selling')

        value_parts = NodeListField('value_part', _ValuePart)
class ClientPosition(Entity):
    """
    Базовый класс позиции по инструменту.
    """
    # Идентификатор клиента
    client = StringField('client')
    # Внутренний код рынка
    market = IntegerField('market')
    # Регистр учета
    register = StringField('register')
    # Наименование вида средств
    name = StringField('shortname')
    # Код вида средств
    asset = StringField('asset')
    # Входящий остаток
    saldo_in = FloatField('saldoin')
    # Текущее сальдо
    saldo = FloatField('saldo')
    # Куплено
    bought = FloatField('bought')
    # Продано
    sold = FloatField('sold')
    # В заявках на покупку
    order_buy = FloatField('ordbuy')
    # В заявках на продажу
    order_sell = FloatField('ordsell')
    class _Money(MyXmlObject):
        # Входящая денежная позиция
        open_balance = FloatField('open_balance')
        # Затрачено на покупки
        bought = FloatField('bought')
        # Выручено от продаж
        sold = FloatField('sold')
        # Исполнено
        settled = FloatField('settled')
        # Текущая денежная позиция
        balance = FloatField('balance')
        # Уплачено комиссии
        tax = FloatField('tax')

        class _ValuePart(MyXmlObject):
            # Регистр учёта
            register = StringField('@register')
            # Входящая денежная позиция
            open_balance = FloatField('open_balance')
            # Потрачено на покупки
            bought = FloatField('bought')
            # Выручка от продаж
            sold = FloatField('sold')
            # Исполнено
            settled = FloatField('settled')
            # Текущая денежная позиция
            balance = FloatField('balance')

        value_parts = NodeListField('value_part', _ValuePart)
class Quote(Entity):
    """
    Глубина рынка по инструменту.
    """
    ROOT_NAME = 'quote'
    id = secid = IntegerField('@secid')
    # Идентификатор режима торгов по умолчанию
    board = StringField('board')
    # Код инструмента
    seccode = StringField('seccode')
    # Цена
    price = FloatField('price')
    # Источник котировки (маркетмейкер)
    source = StringField('source')
    # Доходность облигаций
    yld = IntegerField('yield')
    # Количество бумаг к покупке
    buy = IntegerField('buy')
    # Количество бумаг к продаже
    sell = IntegerField('sell')
class BaseOrder(Entity):
    """
    Базовый класс ордеров (обычных и стопов) с общими аттрибутами.
    """
    # идентификатор транзакции сервера Transaq
    id = IntegerField('@transactionid')
    # Биржевой номер заявки
    order_no = IntegerField('orderno')
    # идентификатор бумаги
    secid = IntegerField('secid')
    # Идентификатор борда
    board = StringField('board')
    # Код инструмента
    seccode = StringField('seccode')
    # Цена
    price = FloatField('price')
    # Время регистрации заявки биржей
    time = DateTimeField('time', TIME_FORMAT)
    # Идентификатор клиента
    client = StringField('client')
    # Cтатус заявки
    status = StringField('status')
    # Покупка (B) / Продажа (S)
    buysell = StringField('buysell', choices=('B', 'S'))
    # Дата экспирации (только для ФОРТС)
    exp_date = DateTimeField('expdate', TIME_FORMAT)
    # Примечание
    broker_ref = StringField('brokerref')
    # Время регистрации заявки сервером Transaq (только для условных заявок)
    accept_time = DateTimeField('accepttime', TIME_FORMAT)
    # До какого момента действительно
    valid_before = DateTimeField('validbefore', TIME_FORMAT)
    # Количество лотов
    quantity = IntegerField('quantity')
    # Время снятия заявки, 0 для активных
    withdraw_time = DateTimeField('withdrawtime', TIME_FORMAT)
    withdraw_time.mapper = NullableDateTimeMapper(TIME_FORMAT)
    # Сообщение биржи в случае отказа выставить заявку
    result = StringField('result')
class Trade(Entity):
    """
    Сделка по инструменту на рынке (внешняя).
    """
    ROOT_NAME = 'trade'
    secid = IntegerField('@secid')
    # Наименование борда
    board = StringField('board')
    # Код инструмента
    seccode = StringField('seccode')
    # Биржевой номер сделки
    id = trade_no = IntegerField('tradeno')
    # Время сделки
    time = DateTimeField('time', TIME_FORMAT)
    # Цена сделки
    price = FloatField('price')
    # Объём в лотах
    quantity = IntegerField('quantity')
    # Покупка (B) / Продажа (S)
    buysell = StringField('buysell', choices=('B', 'S'))
    open_interest = IntegerField('openinterest')
    # Период торгов (O - открытие, N - торги, С - закрытие)
    trade_period = StringField('period',
                               choices=('O', 'N', 'C', 'F', 'B', 'T', 'L'))
class Quotation(Entity):
    """
    Котировки по инструменту.
    """
    ROOT_NAME = 'quotation'
    id = secid = IntegerField('@secid')
    # Идентификатор режима торгов по умолчанию
    board = StringField('board')
    # Код инструмента
    seccode = StringField('seccode')
    # Стоимость пункта цены
    point_cost = FloatField('point_cost')
    # НКД на дату торгов в расчете на одну бумагу, руб.
    accrued = FloatField('accruedintvalue')
    # Цена первой сделки
    open = FloatField('open')
    # Средневзвешенная цена
    waprice = FloatField('waprice')
    # Кол-во лотов на покупку по лучшей цене
    bid_depth = IntegerField('biddepth')
    # Совокупный спрос
    demand = IntegerField('biddeptht')
    # Заявок на покупку
    numbids = IntegerField('numbids')
    # Кол-во лотов на продажу по лучшей цене
    offer_depth = IntegerField('offerdepth')
    # Совокупное предложение
    suply = IntegerField('offerdeptht')
    # Заявок на продажу
    numoffers = IntegerField('numoffers')
    # Лучшая котировка на покупку
    best_bid = FloatField('bid')
    # Лучшая котировка на продажу
    best_offer = FloatField('offer')
    # Кол-во сделок
    numtrades = IntegerField('numtrades')
    # Объем совершенных сделок в лотах
    volume_today = IntegerField('voltoday')
    # Общее количество открытых позиций(FORTS)
    open_positions = IntegerField('openpositions')
    # Изм.открытых позиций(FORTS)
    delta_positions = IntegerField('deltapositions')
    # Цена последней сделки
    last_price = FloatField('last')
    # Время заключения последней сделки
    last_time = DateTimeField('time', TIME_FORMAT)
    # Объем последней сделки, в лотах
    last_quantity = IntegerField('quantity')
    # Изменение цены последней сделки по отношению к цене
    # последней сделки предыдущего торгового дня
    change = FloatField('change')
    # Цена последней сделки к оценке предыдущего дня
    change_wa = FloatField('priceminusprevwaprice')
    # Объем совершенных сделок, млн. руб
    value_today = FloatField('valtoday')
    # Доходность, по цене последней сделки
    yld = FloatField('yield')
    # Доходность по средневзвешенной цене
    yld_wa = FloatField('yieldatwaprice')
    # Рыночная цена по результатам торгов сегодняшнего дня
    market_price_today = FloatField('marketpricetoday')
    # Наибольшая цена спроса в течение торговой сессии
    highest_bid = FloatField('highbid')
    # Наименьшая цена предложения в течение торговой сессии
    lowest_offer = FloatField('lowoffer')
    # Максимальная цена сделки
    high = FloatField('high')
    # Минимальная цена сделки
    low = FloatField('low')
    # Цена закрытия
    close = FloatField('closeprice')
    # Доходность по цене закрытия
    close_yld = FloatField('closeyield')
    # Статус «торговые операции разрешены/запрещены»
    status = StringField('status')
    # Состояние торговой сессии по инструменту
    trade_status = StringField('tradingstatus')
    # ГО покупок/покр
    buy_deposit = FloatField('buydeposit')
    # ГО продаж/непокр
    sell_deposit = FloatField('selldeposit')
    # Волатильность
    volatility = FloatField('volatility')
    # Теоретическая цена
    theory_price = FloatField('theoreticalprice')
class ClientPortfolio(Entity):
    """
    Клиентский портфель Т+, основная рабочая структура для фондовой секции.
    """
    ROOT_NAME = 'portfolio_tplus'
    # Идентификатор клиента
    id = client = StringField('@client')
    # Фактическая обеспеченность
    coverage_fact = FloatField('coverage_fact')
    # Плановая обеспеченность
    coverage_plan = FloatField('coverage_plan')
    # Критическая обеспеченность
    coverage_crit = FloatField('coverage_crit')
    # Входящая оценка портфеля без дисконта
    open_equity = FloatField('open_equity')
    # Текущая оценка портфеля без дисконта
    equity = FloatField('equity')
    # Плановое обеспечение (оценка ликвидационной стоимости портфеля)
    cover = FloatField('cover')
    # Плановая начальная маржа (оценка портфельного риска)
    init_margin = FloatField('init_margin')
    # Прибыль/убыток по входящим позициям
    pnl_income = FloatField('pnl_income')
    # Прибыль/убыток по сделкам
    pnl_intraday = FloatField('pnl_intraday')
    # Фактическое плечо портфеля Т+
    leverage = FloatField('leverage')
    # Фактический уровень маржи портфеля Т+
    margin_level = FloatField('margin_level')

    class _Money(MyXmlObject):
        # Входящая денежная позиция
        open_balance = FloatField('open_balance')
        # Затрачено на покупки
        bought = FloatField('bought')
        # Выручено от продаж
        sold = FloatField('sold')
        # Исполнено
        settled = FloatField('settled')
        # Текущая денежная позиция
        balance = FloatField('balance')
        # Уплачено комиссии
        tax = FloatField('tax')

        class _ValuePart(MyXmlObject):
            # Регистр учёта
            register = StringField('@register')
            # Входящая денежная позиция
            open_balance = FloatField('open_balance')
            # Потрачено на покупки
            bought = FloatField('bought')
            # Выручка от продаж
            sold = FloatField('sold')
            # Исполнено
            settled = FloatField('settled')
            # Текущая денежная позиция
            balance = FloatField('balance')

        value_parts = NodeListField('value_part', _ValuePart)

    money = NodeField('money', _Money)

    class _Security(MyXmlObject):
        # Id инструмента
        secid = IntegerField('@secid')
        # Id рынка
        market = IntegerField('market')
        # Обозначение инструмента
        seccode = StringField('seccode')
        # Текущая цена
        price = FloatField('price')
        # Входящая позиция, штук
        open_balance = IntegerField('open_balance')
        # Куплено, штук
        bought = IntegerField('bought')
        # Продано, штук
        sold = IntegerField('sold')
        # Текущая позиция, штук
        balance = IntegerField('balance')
        # Заявлено купить, штук
        buying = IntegerField('buying')
        # Заявлено продать, штук
        selling = IntegerField('selling')
        # Вклад бумаги в плановое обеспечение
        cover = FloatField('cover')
        # Плановая начальная маржа (риск)
        init_margin = FloatField('init_margin')
        # Cтавка риска для лонгов
        riskrate_long = FloatField('riskrate_long')
        # Cтавка риска для шортов
        riskrate_short = FloatField('riskrate_short')
        # Прибыль/убыток по входящим позициям
        pnl_income = FloatField('pnl_income')
        # Прибыль/убыток по сделкам
        pnl_intraday = FloatField('pnl_intraday')
        # Максимальная покупка, в лотах
        max_buy = IntegerField('maxbuy')
        # Макcимальная продажа, в лотах
        max_sell = IntegerField('maxsell')

        class _ValuePart(MyXmlObject):
            # Входящая позиция, штук
            register = StringField('@register')
            # Входящая позиция, штук
            open_balance = IntegerField('open_balance')
            # Куплено, штук
            bought = IntegerField('bought')
            # Продано, штук
            sold = IntegerField('sold')
            # Исполнено
            settled = IntegerField('settled')
            # Текущая позиция, штук
            balance = IntegerField('balance')
            # Заявлено купить, штук
            buying = IntegerField('buying')
            # Заявлено продать, штук
            selling = IntegerField('selling')

        value_parts = NodeListField('value_part', _ValuePart)

    securities = NodeListField('security', _Security)
class ClientLimitsForts(Entity):
    """
    Лимиты клиента на срочном рынке.
    """
    ROOT_NAME = 'clientlimits'
    # Идентификатор клиента
    id = client = StringField('@client')
    # стоимостной лимит открытых позиций (СЛОП срочн.рынок ММВБ)
    cbplimit = FloatField('cbplimit')
    # стоимостная оценка текущих чистых позиций (СОЧП срочн. рынок ММВБ)
    cbplused = FloatField('cbplused')
    # СОЧП с учетом активных заявок (срочный рынок ММВБ)
    cbplplanned = FloatField('cbplplanned')
    # Вар. маржа срочного рынка ММВБ
    fob_varmargin = FloatField('fob_varmargin')
    # Обеспеченность срочного портфеля (FORTS)
    coverage = FloatField('coverage')
    # Коэффициент ликвидности(FORTS)
    liquidity_c = FloatField('liquidity_c')
    # Доход(FORTS)
    profit = FloatField('profit')
    # Деньги текущие
    money_current = FloatField('money_current')
    # Деньги заблокированные
    money_reserve = FloatField('money_reserve')
    # Деньги свободные
    money_free = FloatField('money_free')
    # Премии по опционам(FORTS)
    options_premium = FloatField('options_premium')
    # Биржевой сбор(FORTS)
    exchange_fee = FloatField('exchange_fee')
    # Вар. маржа текущая (FORTS)
    forts_varmargin = FloatField('forts_varmargin')
    # Операционная маржа
    varmargin = FloatField('varmargin')
    # Перечисленная в пром.клиринге вариационная маржа(FORTS)
    pclmargin = FloatField('pclmargin')
    # Вар. маржа по опционам(FORTS)
    options_vm = FloatField('options_vm')
    # Лимит на покупку спот
    spot_buy_limit = FloatField('spot_buy_limit')
    # Лимит на покупку спот использованный
    used_spot_buy_limit = FloatField('used_spot_buy_limit')
    # Залоги текущие
    collat_current = FloatField('collat_current')
    # Залоги заблокированные
    collat_blocked = FloatField('collat_blocked')
    # Залоги свободные
    collat_free = FloatField('collat_free')
class UnitedPortfolio(MyXmlObject):
    """
    Клиентский единый портфель.
    """
    ROOT_NAME = 'united_portfolio'
    # Идентификатор клиента
    id = client = StringField('@client')
    # Входящая оценка единого портфеля
    open_equity = FloatField('open_equity')
    # Текущая оценка единого портфеля
    equity = FloatField('equity')
    # Корреляционный вычет планового риска
    chrgoff_ir = FloatField('chrgoff_ir')
    # Плановый риск (размер начальных требований)
    init_req = FloatField('init_req')
    # Корреляционный вычет минимальных требований
    chrgoff_mr = FloatField('chrgoff_mr')
    # Размер минимальных требований
    maint_req = FloatField('maint_req')
    # Стоимость портфеля нормативная
    reg_equity = FloatField('reg_equity')
    # Плановая начальная маржа нормативная
    reg_ir = FloatField('reg_ir')
    # Минимальная маржа нормативная
    reg_mr = FloatField('reg_mr')
    # Вариационная маржа FORTS
    vm = FloatField('vm')
    # Финансовый результат последнего клиринга FORTS
    finres = FloatField('finres')
    # Размер требуемого ГО, посчитанный биржей FORTS
    go = FloatField('go')

    class _Money(MyXmlObject):
        # Наименование денежного раздела
        name = StringField('@name')
        # Входящая денежная позиция
        open_balance = FloatField('open_balance')
        # Затрачено на покупки
        bought = FloatField('bought')
        # Выручено от продаж
        sold = FloatField('sold')
        # Исполнено
        settled = FloatField('settled')
        # Текущая денежная позиция
        balance = FloatField('balance')
        # Уплачено комиссии
        tax = FloatField('tax')

        class _ValuePart(MyXmlObject):
            # Регистр учёта
            register = StringField('@register')
            # Входящая денежная позиция
            open_balance = FloatField('open_balance')
            # Потрачено на покупки
            bought = FloatField('bought')
            # Выручка от продаж
            sold = FloatField('sold')
            # Исполнено
            settled = FloatField('settled')
            # Текущая денежная позиция
            balance = FloatField('balance')

        value_parts = NodeListField('value_part', _ValuePart)

    moneys = NodeListField('money', _Money)

    class _Asset(MyXmlObject):
        # Код базового актива
        code = StringField('@code')
        # Наименование базового актива
        name = StringField('@name')
        # Ставка перекрытия
        setoff_rate = FloatField('setoff_rate')
        # Плановый риск
        init_req = FloatField('init_req')
        # Минимальная маржа
        maint_req = FloatField('maint_req')

        class _Security(MyXmlObject):
            # Id инструмента
            secid = IntegerField('@secid')
            # Id рынка
            market = IntegerField('market')
            # Обозначение инструмента
            seccode = StringField('seccode')
            # Текущая цена
            price = FloatField('price')
            # Входящая позиция, штук
            open_balance = IntegerField('open_balance')
            # Куплено, штук
            bought = IntegerField('bought')
            # Продано, штук
            sold = IntegerField('sold')
            # Текущая позиция, штук
            balance = IntegerField('balance')
            # Заявлено купить, штук
            buying = IntegerField('buying')
            # Заявлено продать, штук
            selling = IntegerField('selling')
            # Оценка (в составе обеспечения ЕП)
            equity = FloatField('equity')
            # Стоимость в обеспечении портфеля нормативная
            reg_equity = FloatField('reg_equity')
            # Cтавка риска для лонгов, %
            riskrate_long = FloatField('riskrate_long')
            # Cтавка риска для шортов, %
            riskrate_short = FloatField('riskrate_short')
            # Ставка резерва для лонгов, %
            reserate_long = FloatField('reserate_long')
            # Ставка резерва для шортов, %
            reserate_short = FloatField('reserate_short')
            # Прибыль/убыток общий
            pl = FloatField('pl')
            # Прибыль/убыток по входящим позициям
            pnl_income = FloatField('pnl_income')
            # Прибыль/убыток по сделкам
            pnl_intraday = FloatField('pnl_intraday')
            # Максимальная покупка, в лотах
            max_buy = IntegerField('maxbuy')
            # Макcимальная продажа, в лотах
            max_sell = IntegerField('maxsell')

            class _ValuePart(MyXmlObject):
                # Входящая позиция, штук
                register = StringField('@register')
                # Входящая позиция, штук
                open_balance = IntegerField('open_balance')
                # Куплено, штук
                bought = IntegerField('bought')
                # Продано, штук
                sold = IntegerField('sold')
                # Исполнено
                settled = IntegerField('settled')
                # Текущая позиция, штук
                balance = IntegerField('balance')
                # Заявлено купить, штук
                buying = IntegerField('buying')
                # Заявлено продать, штук
                selling = IntegerField('selling')

            value_parts = NodeListField('value_part', _ValuePart)

        securities = NodeListField('security', _Security)

    assets = NodeListField('asset', _Asset)
        class _Security(MyXmlObject):
            # Id инструмента
            secid = IntegerField('@secid')
            # Id рынка
            market = IntegerField('market')
            # Обозначение инструмента
            seccode = StringField('seccode')
            # Текущая цена
            price = FloatField('price')
            # Входящая позиция, штук
            open_balance = IntegerField('open_balance')
            # Куплено, штук
            bought = IntegerField('bought')
            # Продано, штук
            sold = IntegerField('sold')
            # Текущая позиция, штук
            balance = IntegerField('balance')
            # Заявлено купить, штук
            buying = IntegerField('buying')
            # Заявлено продать, штук
            selling = IntegerField('selling')
            # Оценка (в составе обеспечения ЕП)
            equity = FloatField('equity')
            # Стоимость в обеспечении портфеля нормативная
            reg_equity = FloatField('reg_equity')
            # Cтавка риска для лонгов, %
            riskrate_long = FloatField('riskrate_long')
            # Cтавка риска для шортов, %
            riskrate_short = FloatField('riskrate_short')
            # Ставка резерва для лонгов, %
            reserate_long = FloatField('reserate_long')
            # Ставка резерва для шортов, %
            reserate_short = FloatField('reserate_short')
            # Прибыль/убыток общий
            pl = FloatField('pl')
            # Прибыль/убыток по входящим позициям
            pnl_income = FloatField('pnl_income')
            # Прибыль/убыток по сделкам
            pnl_intraday = FloatField('pnl_intraday')
            # Максимальная покупка, в лотах
            max_buy = IntegerField('maxbuy')
            # Макcимальная продажа, в лотах
            max_sell = IntegerField('maxsell')

            class _ValuePart(MyXmlObject):
                # Входящая позиция, штук
                register = StringField('@register')
                # Входящая позиция, штук
                open_balance = IntegerField('open_balance')
                # Куплено, штук
                bought = IntegerField('bought')
                # Продано, штук
                sold = IntegerField('sold')
                # Исполнено
                settled = IntegerField('settled')
                # Текущая позиция, штук
                balance = IntegerField('balance')
                # Заявлено купить, штук
                buying = IntegerField('buying')
                # Заявлено продать, штук
                selling = IntegerField('selling')

            value_parts = NodeListField('value_part', _ValuePart)