Release notes (in english)
Issues included in the release
PyPI: v1.6.268
Docker: tim55667757/tksbrokerapi:1.6.268
Дайджест
Добавлен быстрый алгоритм оценки вероятности достижения целевой цены на основе волатильности и доходности. Модель учитывает дрейф, использует Байесовскую агрегацию и корректируется по фазе и хаосу, позволяя фильтровать сигналы по степени доверия.
Реализована быстрая фильтрация аномалий методом Хампеля с ускоренной функцией и примерами использования. Добавлена нечёткая шкала для интерпретации вероятностей в терминах {Min, Low, Med, High, Max}, что упрощает отбор сигналов.
Существенно улучшена инфраструктура: появилась многопоточная загрузка истории с докачкой, автообновление по крону --history-auto-updater, реализован централизованный Rate Limiter в SendAPIRequest() и CI/CD-сборка Docker-образов. Это ускорило работу с брокером и повысило стабильность.
Новая функциональность
- #119 Реализован новый пример использования платформы TKSBrokerAPI: Anomaly Volumes Detector — это простой Телеграм бот для поиска и анализа аномалий в объёмах спроса и предложения покупателей и продавцов.
- #111 В модуль TradeRoutines добавлен метод
CalculateLotsForDeal(). Он помогает определить нужное количество лотов инструмента при открытии позиции. - #112 В модуль TradeRoutines добавлен метод
HampelFilter(). Он позволяет обнаружить аномалию ("выброс", нестандартное значение, отклонение от нормы) среди значений любого числового ряда, используя функцию фильтрации Хампеля. Фильтр Хампеля обнаруживает аномалии на основе скользящего окна и подсчёта разницы между медианными значениями и входными значениями числового ряда. - #113 В модуль TradeRoutines добавлен метод
HampelAnomalyDetection(), который использует фильтр Хампеля. Эта функция возвращает минимальный индекс элемента в списке найденных аномалий или индекс первого максимального элемента во входном ряду, если этот индекс меньше индекса аномального элемента. - #114 Были добавлены примеры фильтрации методом Хампеля: 1) Jupyter Notebook с теорией и практикой (русская и английская версии); 2) пример скрипта на Python; 3) статья: "Как быстро найти аномалии в числовых рядах с помощью метода Хампеля" (русская и английская версии).
- #117 Правила открытия/закрытия позиций в зависимости от нечётких уровней Риска/Достижимости были добавлены в виде матриц
OPENING_RULESиCLOSING_RULESс логическими значениями. МетодыCanOpen()иCanCloseявляются функциями-фильтрами и могут проверять правила открытия/закрытия позиций, опираясь на эти матрицы и нечёткие значения Риска/Достижимости. - #118 Добавлены методы для вычисления уровней нечёткого риска и нечёткой достижимости:
RiskLong(),RiskShort(),ReachLong()иReachShort(). - #14 Реализован "Установщик сетки ордеров". Этот скрипт позволяет настроить сетку ордеров (лимитных или стоп-ордеров, на покупку или на продажу) с заданными шагами и лотностью для множества инструментов по их тикерам в конвейерном параллельном режиме работы.
- #140 Реализовано CI/CD на GitHub Actions.
- #145 Реализована оценка вероятности достижимости ценой целевых уровней.
- #152 Добавлен централизованный троттлинг с кооперативным ожиданием в
SendAPIRequest(). - #154 Добавлены модели оценки хаоса (Hurst, SampEn, DFA) и фазовая фильтрация в метод
EstimateTargetReachability(). Реализованы доверительные коэффициенты, агрегация вероятности, расширенные тесты и оптимизация производительности. - #78 Добавлена многопоточная загрузка истории свечей с поддержкой частичной докачки (
--only-missing). - #57 Добавлен режим
--history-auto-updater: параллельная закачка истории тикеров по крону с сохранением в отдельные CSV-файлы. - #141 Добавлена сборка и публикация Docker-образа TKSBrokerAPI через GitHub Actions с поддержкой версий
devиrelease.
Улучшения
- #92 Блокировка мьютекса была реализована для метода
SendAPIRequest(), чтобы избежать проблем с недоступным ресурсом при мультипроцессной работе платформы TKSBrokerAPI. - #89 Если вы запускаете несколько экземпляров платформы TKSBrokerAPI в параллельном режиме, можно использовать дополнительный тег для упрощения отладки и идентификации экземпляров в логах. Тег добавляется ключом
--tag. - #99 Нарисован логотип и баннер TKSBrokerAPI и добавлен во все шаблоны HTML-отчётов.
- #98 Новое поле со значением непокрытой позиции было добавлено в раздел отчёта о состоянии маржинальной торговли (ключ
--user-info). - #96 Был реализован метод
UpdateClassFields()и написаны позитивные и негативные юнит-тесты на него. Он получает настройки как словарь (например, загруженный из YAML файла) и применяет к полям и значениям указанного инстанса некоторого класса паруkey: value. - #100 Теперь в методах
CloseAllByTicker()иCloseAllByTicker()ордеры закрываются до закрытия основной позиции по инструменту, чтобы минимизировать число заблокированных лотов. - #104 Выполняется попытка определить
self.figi, чтобы избежать лишних предупреждений в методеOverview(), если FIGI пустой. - #106 Реализован метод
SeparateByEqualParts(). Этот метод получает на вход лист элементов и пытается разделить его на список списков равных по количеству элементов. - #27 Try...except блок и негативные юнит-тексты были добавлены для метода
NanoToFloat(). - #28 Try...except блок и негативные юнит-тексты были добавлены для метода
FloatToNano(). - #30 Try...except блок и негативные юнит-тексты были добавлены для метода
GetDatesAsString(). - #33 Try...except блок и негативные юнит-тексты были добавлены для метода
_ParseJSON(). - #107
onlyFilesпараметр был добавлен к некоторым методам, где был параметрshow:OverviewUserInfo(),OverviewAccounts(),OverviewLimits(),Deals(),Overview(),ShowListOfPrices(),GetListOfPrices(),SearchInstruments(),ShowInstrumentsInfo()иShowInstrumentInfo(). Он позволяет генерировать только файлы отчётов, без отображения информации в консоли. - #116 API-документация на модули
TKSBrokerAPIтеперь с тёмной темой. - #126 Счетчик типов операций был обновлён в отчёте по сделкам.
- #138 Патч для np.NaN.
- #146 В сотни раз ускорена работа метода
HampelFilter(), особенно это заметно для длинных рядов, содержащих более 1 млн. значений. - #148 Реализована оптимизированная и ускоренная версия
FastBBands(), вместо аналогичной медленной функции из pandas_ta. - #149 Реализована оптимизированная и ускоренная версия
FastPSAR(), вместо аналогичной медленной функции из pandas_ta. - #144 Реализована функция
CalculateAdaptiveCacheReserve()для адаптивного динамического управления объёмом ликвидности. - #150 Улучшена базовая функция
SendAPIRequest(): безопасные повторы, разбор ошибок, полные тесты; повышена стабильность клиента. - #151 Оптимизирован метод
Overview()для портфеля и добавлены юнит-тесты. - #153 Добавлена мини-функция
FormatTimedelta()для форматирования timedelta с точностью до секунд, с возвратом строки по умолчанию при ошибках. - [#88](#88 Улучшен вид таблицы со стоп-ордерами в
--overview. - [#91](#91 Тикеры теперь можно указывать в любом формате (регистронезависимые).
Баг-фиксы
- #93 Исправлен баг:
KeyError: 'stopOrders' and KeyError: 'orders'в методахRequestPendingOrders()иRequestStopOrders(). - #94 Исправлен баг в методе
Overview():KeyError: 'currentNkd', если инструмент не является облигацией. - #95 Исправлен баг со "сломанной" таблицей Overview в колонке
Lots. - #101 Исправлен баг с неправильным расчётом доступных валют и аналитики в таблицах
Overview(). - #102 Исправлен баг в методе
Deals():KeyError: 'OPERATION_STATE_PROGRESS'. Для этого был добавлен новый статусOPERATION_STATE_PROGRESSв константуTKS_OPERATION_STATES. - #103 Таблицы отформатированы.
- #120 Исправлен баг в методе
History():KeyError: 'candles'. Добавлена дополнительная проверка. - #121 Исправлен баг в константе
TKS_QUALIFIED_TYPES. Некоторые новые значения в поле ответаqualified_for_work_withбыли добавлены в Tinkoff REST API, но не задокументированы:foreign_bonds_russian_law,convertible_bonds,russian_bonds_foreign_law,non_quoted_instrumentsиoption. Эти дополнительные значения были добавлены в текущем баг-фиксе. - #122 Для ошибки импорта вида
No module named 'Templates'в README.md добавлена инструкция по её исправлению. - #123 Баг
ValueErrorбыл исправлен для методовHistory()andLoadHistory(). Добавлены дополнительные проверки. - #124 Ошибочные вычисления исправлены:
Incorrect values in view["stat"]["funds"] record. - #125 Был исправлен баг
KeyError: 'OPERATION_TYPE_OUT_STAMP_DUTY', в константеTKS_OPERATION_TYPESне хватало значений. - #127 Был исправлен баг
KeyError: 'name'в методеOverview(). - #128 Был исправлен баг:
RUB000UTSTOMFIGI отсутствует вdump.json. С 7 марта 2023 RUB000UTSTOM FIGI перестал возвращаться брокером в списке валют через API. - #142 Был исправлен баг: ImportError после установки и запуска TKSBrokerAPI.
- #129 Добавлена функция
DetermineDecimalPrecision()и интеграция в методHistory()для автоматического округления цен перед сохранением в CSV, чтобы избежать ошибок округления. - #131 Исправлена ошибка при наличии "запрещённых" валют "недружественных" стран в портфеле.
- #133 Исправлен TypeError при экспорте в XLSX.
- #137 Исправлен KeyError: 'rub', если кеш в рублях равен нулю в портфеле (обычно при открытии счёта, до первого пополнения).