Дайджест
Теперь можно обогащать сырые данные по облигациям большим числом полей и значений, выгружать их в XLSX-формате и pandas dataframe! Это пригодится датасайнтистам и биржевым аналитикам (смотрите описание ключа `--bonds-xlsx`). С помощью этих данных можно построить полный календарь выплат по облигациям (ключ `--calendar`).
Для скачиваемых с сервера или загружаемых из файла исторических свечей теперь можно построить интерактивные или простые графики (ключ `--render-chart`). Если вам нужны сырые данные с сервера по всем инструментам, их можно сохранить в формате XLSX с ключом `--list-xlsx`.
А также, теперь можно узнать: все данные по своему аккаунту, включая `accounId` (команда `--user-info` или `--account`) и лимиты на вывод доступных средств (команда `--limits`).
Новая функциональность
* [15](https://github.com/Tim55667757/TKSBrokerAPI/issues/15) Реализованы методы: `RequestLimits()` для запроса сырых данных по лимитам для пользователя на вывод средств, `OverviewLimits()` для отображения табличных данных и ключ `--limits` (`--withdrawal-limits`, `-w`) для запроса и отображения лимитов в консоли.
* [6](https://github.com/Tim55667757/TKSBrokerAPI/issues/6) При запуске с ключом `--history` добавлена возможность указать дополнительный ключ `--render-chart` и сгенерировать интерактивный или не интерактивный свечные графики, при помощи библиотеки [`PriceGenerator`](https://tim55667757.github.io/PriceGenerator). Аналогично можно построить графики для ранее сохранённых csv-файлов с историей свечей. Для этого нужно указать ключ `--render-chart` вместе с новым ключом для загрузки данных из файла: `--load-history`.
* [46](https://github.com/Tim55667757/TKSBrokerAPI/issues/46) Реализован ключ `--list-xlsx` (или `-x`), который возвращает необработанные данные по всем доступным для данного аккаунта инструментам, аналогичные данным из `dump.json`, но сохраненные в формате XLSX, для дальнейшего использования дата-сайнтистами или биржевыми аналитиками, по умолчанию используется `dump.xlsx`. Также был разработан новый метод `DumpInstrumentsAsXLSX()` который конвертирует сырые данные по инструментам в формат XLSX.
* [11](https://github.com/Tim55667757/TKSBrokerAPI/issues/11) Добавлен ключ `--user-info` (`-u`), который выводит данные, связанные с аккаунтом, привязанным к текущему токену: доступную информацию о пользователе и его аккаунтах, права на операции, лимиты для маржинальной торговли. Также добавлен ключ `--account` (`--accounts`, `-a`), который выводит простую табличку, содержащую только аккаунты пользователя.
* [10](https://github.com/Tim55667757/TKSBrokerAPI/issues/10) При запросе информации об облигациях (с ключом `--info` или `-i`), теперь рассчитывается и отображается больше данных: график выплат по облигациям, общее количество выплат и уже погашенные купоны, купонный доход в процентах годовых (средняя купонная ежедневная доходность * 365), текущая доходность в процентах годовых (зависит от цены и количества оставшихся невыплаченных купонов, считается как средняя текущая ежедневная доходность * 365), НКД и размер купона. Для запроса нужной информации реализованы методы `RequestBondCoupons()` (возвращает словарь обработанных данных, полученных с сервера) и `ExtendBondsData()` (возвращает обогащённый pandas dataframe, содержащий больше информации об облигациях). Метод `ShowInstrumentInfo()` был доработан, для отображения большего количества информации по облигациям и календаря выплат. Для выгрузки обогащённых данных по облигациям в формат XLSX-файла (по умолчанию `ext-bonds.xlsx`), теперь можно использовать ключ `--bonds-xlsx` (`-b`).
* [63](https://github.com/Tim55667757/TKSBrokerAPI/issues/63) Реализован метод `CreateBondsCalendar()`, генерирующий pandas dataframe с общим календарём выплат по указанным или всем облигациям. Метод `ShowBondsCalendar()` отображает календарь в консоли и сохраняет в файл, `calendar.md` по умолчанию в формате markdown. Для запроса календаря выплат нужно использовать ключ `--calendar` (`-c`), при этом также сохраняется таблица в формате XLSX, в файл по умолчанию `calendar.xlsx`. В случае, если календарь строится более чем для одной облигации, то платежи в один и тот же месяц группируются.
Улучшения
* [59](https://github.com/Tim55667757/TKSBrokerAPI/issues/59) TKSBrokerAPI билд-номер теперь печатается в логах, а также его можно узнать набрав команду `--version` (или `--ver`).
* [47](https://github.com/Tim55667757/TKSBrokerAPI/issues/47) `iList` поле более неактуально из-за использования локального дампа `dump.json`, в котором автоматически обновляется список доступных для торговли инструментов, поэтому поле удалено из класса `TinkoffBrokerServer()`.
* [9](https://github.com/Tim55667757/TKSBrokerAPI/issues/9) В метод `ShowInstrumentInfo()` добавлена информация о текущем статусе торгов по запрашиваемому инструменту. Реализован дополнительный метод `RequestTradingStatus()` для запроса статуса торгов по инструменту. Добавлены флаги: `buyAvailableFlag`, `sellAvailableFlag`, `shortEnabledFlag`, `limitOrderAvailableFlag`, `marketOrderAvailableFlag` и `apiTradeAvailableFlag`. В рамках этой же задачи реализована задача [#37](https://github.com/Tim55667757/TKSBrokerAPI/issues/37): добавлена возможность сохранения информации по инструменту в файл, заданный ключом `--output`, по умолчанию `info.md`.
* [64](https://github.com/Tim55667757/TKSBrokerAPI/issues/64) ВНИМАНИЕ! Выполнен рефакторинг во многих методах. Все параметры, которые отвечают за отображение дополнительной информации в консоли: `showPrice`, `showPrices`, `printInfo`, `showInfo`, `showInstruments`, `showResults`, `showStatistics`, `printDeals`, `printCandles`, `showLimits`, `showAccounts` — были заменены переменной с простым именем`show`.
* [65](https://github.com/Tim55667757/TKSBrokerAPI/issues/65) ВНИМАНИЕ! Выполнен рефакторинг во многих методах. Все `overview` параметры заменены переменной `portfolio`.
* Отключены повторы для 4xx сетевых ошибок, повторы оставлены только для 5xx ошибок. Это связано с тем, что нет смысла ожидать появления отсутствующих данных на сервере, например, в случае неверного указания ресурса.
* Теперь при запуске метода `SendAPIRequest(debug=True)` в логи выводится больше отладочной информации, например, параметры запроса и ответа сервера, а также их хедеры.
* Добавлено ожидание между сетевыми запросами, в случае достижения лимита по количеству запросов. Лимит определяется по значению заголовка ответа `"x-ratelimit-remaining": "0"`, а количество секунд ожидания определяется значением заголовка `x-ratelimit-reset`, например, `"x-ratelimit-reset": "15"`, что означает ожидание 15 секунд до следующего запроса. Это позволило значительно уменьшить количество сетевых ошибок, связанных с ожиданием для большого числа запросов к API сервера.
* Хедер `"x-app-name": "Tim55667757.TKSBrokerAPI"` был добавлен к каждому API-запросу, для идентификации фреймворка TKSBrokerAPI.
Баг-фиксы
* Исправлена ошибка `NoneType object has no attribute ...` в случае, если ключ `--history` использовался без указания каких-либо параметров.
* [71](https://github.com/Tim55667757/TKSBrokerAPI/issues/71) Пришлось сделать быстрый хак, чтобы избежать проблем в секциях статистики `Portfolio distribution by currencies` и `Portfolio distribution by countries`: принудительно добавлена валюта `rub` и страна `"[RU] Российская Федерация"`, перед расчётом статистики.