Продолжаю публикацию своих мыслей по улучшению BackTrader. Сегодня будет про улучшение визуального представления баров, индикаторов, графиков.
Сейчас вывод идет через библиотеку pyplotlib. Отображается все правильно, но есть много ограничений. Что бы хотелось видеть:
- Красивое отображение свечей/баров с возможностью настройки цветовой палитры
- Прокрутку баров по оси времени
- Отображение линий индикаторов заданными цветами / типом линий
- Закрашивать область графика/индикаторов вертикально (например, для визуализации трендов) и горизонтально (например, экстремальных зон индикаторов)
Решением может стать отображение данных в браузере через библиотеку на JS.
Есть готовое решение через расширение функции вывода plot. В нем используется библиотека Bokeh.
Год назад в одном закрытом проекте я реализовал графический вывод через библиотеку AnyChart.
В веб-клиенте Astras от Алора используются ng2-charts (chart.js) + lightweight-charts.
В общем, материала для доработки визуализации достаточно много. Летом буду интенсивно тестировать.
Сейчас вывод идет через библиотеку pyplotlib. Отображается все правильно, но есть много ограничений. Что бы хотелось видеть:
- Красивое отображение свечей/баров с возможностью настройки цветовой палитры
- Прокрутку баров по оси времени
- Отображение линий индикаторов заданными цветами / типом линий
- Закрашивать область графика/индикаторов вертикально (например, для визуализации трендов) и горизонтально (например, экстремальных зон индикаторов)
Решением может стать отображение данных в браузере через библиотеку на JS.
Есть готовое решение через расширение функции вывода plot. В нем используется библиотека Bokeh.
Год назад в одном закрытом проекте я реализовал графический вывод через библиотеку AnyChart.
В веб-клиенте Astras от Алора используются ng2-charts (chart.js) + lightweight-charts.
В общем, материала для доработки визуализации достаточно много. Летом буду интенсивно тестировать.
На очереди работа с брокерами в BackTrader.
В архитектуре BT к Cerebro можно подключить только одного брокера. Внутри этого брокера можно выбрать только 1 счет при подключении.
cerebro = bt.Cerebro()
cerebro.setbroker(broker)
Нужно сделать так, чтобы для каждой ТС, добавленной к Cerebro, можно было бы выбирать брокера и счет.
Самое простое решение для работы с разными брокерами - сделать отдельное окружение Python для каждого брокера. Под каждым окружением запустить свою версию Cerebro с привязанным брокером и торговыми системами.
Разбить красиво на счета не получится, т.к. BT использует get_notification, get_cash, get_value, get_position для анализаторов показателей торговых систем (например, коэфф. Шарпа) и наблюдений (например, изменение счета, точки входа/выхода, просадка). Если внутри Cerebro менять счета, то эти функции будут сбиваться, и выдавать неверные значения.
Вот дискуссия про работу на нескольких брокерах/счетах.
Чтобы из одного Cerebro работать с несколькими брокерами и несколькими счетами в одном брокере, нужно переделывать архитектуру BackTrader. Посмотрим, насколько это сложно...
В архитектуре BT к Cerebro можно подключить только одного брокера. Внутри этого брокера можно выбрать только 1 счет при подключении.
cerebro = bt.Cerebro()
cerebro.setbroker(broker)
Нужно сделать так, чтобы для каждой ТС, добавленной к Cerebro, можно было бы выбирать брокера и счет.
Самое простое решение для работы с разными брокерами - сделать отдельное окружение Python для каждого брокера. Под каждым окружением запустить свою версию Cerebro с привязанным брокером и торговыми системами.
Разбить красиво на счета не получится, т.к. BT использует get_notification, get_cash, get_value, get_position для анализаторов показателей торговых систем (например, коэфф. Шарпа) и наблюдений (например, изменение счета, точки входа/выхода, просадка). Если внутри Cerebro менять счета, то эти функции будут сбиваться, и выдавать неверные значения.
Вот дискуссия про работу на нескольких брокерах/счетах.
Чтобы из одного Cerebro работать с несколькими брокерами и несколькими счетами в одном брокере, нужно переделывать архитектуру BackTrader. Посмотрим, насколько это сложно...
Переходим к работе ТС с заданными тикерами в BackTrader.
ТС, как и данные, подтягиваются к Cerebro. Например:
cerebro = bt.Cerebro()
cerebro.addstrategy(ts1)
cerebro.addstrategy(ts2)
cerebro.adddata(data1)
cerebro.adddata(data2)
И ts1 и ts2 будут получать data1 и data2. Нужно сделать так, чтобы можно было выбирать, какие данные в какие ТС отправлять.
Трейдеры "Финансовой Лаборатории" придумали простое решение. В каждой ТС может быть сколько угодно параметров. Нужно сделать параметр в виде кортежа, где передавать номера тикеров. Например, для 1-го, 3-го и 4-го тикера параметр будет data_ids = (0, 2, 3)
Событие next будет вызываться для каждой ТС по приходу нового бара каждого тикера. Нам нужно "поймать" состояние, когда пришли все новые бары всех тикеров по ТС.
Решений здесь можно придумать много. Один из вариантов такой. Вводим логическую переменную синхронности тикеров ТС. Изначально ставим ее в False. На каждом next сравниваем дату/время последнего бара каждого тикера ТС (номера их мы знаем из параметра ТС). Если тикеры до next были не синхронные, а с приходом next синхронизировались по времени, то выполняем расчеты алгоритма ТС. Ставим логическую переменную синхронизации тикеров в True. Если с приходом next дата/время тикеров ТС не синхронны, то ставим логическую переменную синхронизации тикеров в False. Расчеты алгоритма ТС не выполняем.
Этот алгоритм синхронизации можно использовать даже если данные приходят по разным временнЫм интервалам.
ТС, как и данные, подтягиваются к Cerebro. Например:
cerebro = bt.Cerebro()
cerebro.addstrategy(ts1)
cerebro.addstrategy(ts2)
cerebro.adddata(data1)
cerebro.adddata(data2)
И ts1 и ts2 будут получать data1 и data2. Нужно сделать так, чтобы можно было выбирать, какие данные в какие ТС отправлять.
Трейдеры "Финансовой Лаборатории" придумали простое решение. В каждой ТС может быть сколько угодно параметров. Нужно сделать параметр в виде кортежа, где передавать номера тикеров. Например, для 1-го, 3-го и 4-го тикера параметр будет data_ids = (0, 2, 3)
Событие next будет вызываться для каждой ТС по приходу нового бара каждого тикера. Нам нужно "поймать" состояние, когда пришли все новые бары всех тикеров по ТС.
Решений здесь можно придумать много. Один из вариантов такой. Вводим логическую переменную синхронности тикеров ТС. Изначально ставим ее в False. На каждом next сравниваем дату/время последнего бара каждого тикера ТС (номера их мы знаем из параметра ТС). Если тикеры до next были не синхронные, а с приходом next синхронизировались по времени, то выполняем расчеты алгоритма ТС. Ставим логическую переменную синхронизации тикеров в True. Если с приходом next дата/время тикеров ТС не синхронны, то ставим логическую переменную синхронизации тикеров в False. Расчеты алгоритма ТС не выполняем.
Этот алгоритм синхронизации можно использовать даже если данные приходят по разным временнЫм интервалам.
Переходим к глобальным вопросам. Одна из самых проблемных сущностей систем автоторговли.
Расписание торгов
У каждого рынка свое расписание торгов. Есть дополнительные сессии. У фьючерсов есть клиринги, когда торговать нельзя. Нужно для каждого рынка составить типичное расписание. Также добавлять нетипичные дни торговли. Например, перенесенные выходные, предпраздничные дни.
С одной стороны, рынок, обычно, торгуется в своем ритме. С другой, есть время приостановки рынков, которые мы прогнозировать не можем.
Все решения, которые я видел в системах Технического Анализа, предлагали простые варианты. Стандартное время начала и окончания сессии. Даты с особым временем начала и окончания.
Пока мысли такие. Если что-то приходит от тикера, значит, он торгуется. Если ничего от тикера не приходит, значит, или у нас локальный сбой, или тикер не торгуется. Событие прихода нового бара, это единственное, на что можно положиться.
Расписание торгов
У каждого рынка свое расписание торгов. Есть дополнительные сессии. У фьючерсов есть клиринги, когда торговать нельзя. Нужно для каждого рынка составить типичное расписание. Также добавлять нетипичные дни торговли. Например, перенесенные выходные, предпраздничные дни.
С одной стороны, рынок, обычно, торгуется в своем ритме. С другой, есть время приостановки рынков, которые мы прогнозировать не можем.
Все решения, которые я видел в системах Технического Анализа, предлагали простые варианты. Стандартное время начала и окончания сессии. Даты с особым временем начала и окончания.
Пока мысли такие. Если что-то приходит от тикера, значит, он торгуется. Если ничего от тикера не приходит, значит, или у нас локальный сбой, или тикер не торгуется. Событие прихода нового бара, это единственное, на что можно положиться.
Самая глобальная мысль по улучшению BackTrader.
Перевод работы с данными и индикаторами на библиотеки numpy/pandas.
Много кода в BT дублирует эти библиотеки. Т.к. часть кода в numpy/pandas реализована на C, то, возможен прирост производительности.
Сейчас приходится дублировать код компонент и индикаторов в исследованиях и ТС. В исследованиях мы используем "чистый" Python с numpy/pandas. Для ТС мы должны работать с Lines, которые не совместимы с Series/DataFrame.
Неизвестно, что будет лучше. Перевод существующего кода BT на numpy/pandas или написание своей библиотеки "с нуля". В любом случае, маловероятно, что новая библиотека будет обратно совместима с BT.
Перевод работы с данными и индикаторами на библиотеки numpy/pandas.
Много кода в BT дублирует эти библиотеки. Т.к. часть кода в numpy/pandas реализована на C, то, возможен прирост производительности.
Сейчас приходится дублировать код компонент и индикаторов в исследованиях и ТС. В исследованиях мы используем "чистый" Python с numpy/pandas. Для ТС мы должны работать с Lines, которые не совместимы с Series/DataFrame.
Неизвестно, что будет лучше. Перевод существующего кода BT на numpy/pandas или написание своей библиотеки "с нуля". В любом случае, маловероятно, что новая библиотека будет обратно совместима с BT.
В курсе Проектирование фильтра Калмана я использовал формулу Optimal Tracking Index. Благодаря этому индексу не нужно вручную подбирать альфу, бету и гамму для фильтров. Все что нам нужно, это ошибки процесса и измерения. Данный метод в 1984-м году представил Пол Калата.
Я ничего не принимаю на веру. Изучил его статью. Понял как появилась эта формула. Делюсь своими объяснениями с вами в летнем бесплатном мини-курсе Вывод формулы для Optimal Tracking Filter здесь >>>
Это мой первый опыт публичного разбора научной статьи. Жду ваши лайки :-)
Я ничего не принимаю на веру. Изучил его статью. Понял как появилась эта формула. Делюсь своими объяснениями с вами в летнем бесплатном мини-курсе Вывод формулы для Optimal Tracking Filter здесь >>>
Это мой первый опыт публичного разбора научной статьи. Жду ваши лайки :-)
В некоторых тикерах могут содержаться точки. Поправил код Провайдера для автоторговли в BackTrader из Quik чтобы с такими тикерами можно было работать. Благодарю Олега Шпагина за то, что обратил на это внимание!
В курсе Проектирование фильтра Калмана для трейдеров в бонусном видео, где разбираю формулы и код альфа-бета фильтра, есть небольшая ошибка. Поскольку у нас движение равномерное, а не хаотическое как в альфа-фильтре, то ошибку процесса нужно измерять с учетом скорости. Правильные формулы прописал под видео в уроке. У кого есть (приобретен) этот курс, обязательно посмотрите.
Ввожу новую сущность комбо курсов. Что это такое, и как они устроены, смотрите в новой записи блога здесь >>>
Предлагаю вашему вниманию первый комбо курс. Он построен на стыке курсов Проектирование фильтра Калмана для трейдеров и Замена индикаторов ATR, DMI, RSI, CSI.
Курс бесплатный.
Подробное описание курса смотрите здесь >>>
В описании есть условие получения курса.
Если есть вопросы, то пишите в личку Discord (для трейдеров ФинЛаба) или через обратную связь на сайте https://finlab.vip
Курс бесплатный.
Подробное описание курса смотрите здесь >>>
В описании есть условие получения курса.
Если есть вопросы, то пишите в личку Discord (для трейдеров ФинЛаба) или через обратную связь на сайте https://finlab.vip
Очень просили трейдеры "Финансовой Лаборатории" перевести один из моих лучших курсов Система Игоря Чечета: Торговля частотных полос на Python для платформы BackTrader.
Я не только аккуратно перенес код, но и вписал систему в настоящий скринер с ограничением по кол-ву одновременных позиций. Гурманы оценят 😊Про это записал 5 новых видео. Они находятся в конце курса.
• Посмотрите описание курса здесь >>>
• Посмотрите 8 открытых вводных видео прямо здесь и сейчас >>>
Я не только аккуратно перенес код, но и вписал систему в настоящий скринер с ограничением по кол-ву одновременных позиций. Гурманы оценят 😊Про это записал 5 новых видео. Они находятся в конце курса.
• Посмотрите описание курса здесь >>>
• Посмотрите 8 открытых вводных видео прямо здесь и сейчас >>>
Летом "Финансовая Лаборатория", традиционно, на каникулах. Я отдыхаю, набираюсь ума-разума, провожу исследования, перевожу курсы на Python/BackTrader. Словом, готовлюсь к очень плодотворной работе в торговом сезоне 2022-2023. Хорошего всем отдыха! До встречи!
В преддверии нового торгового сезона записал короткое видео про ресурсы "Финансовой Лаборатории" здесь >>>
- Сайт/блог/обратная связь
- Курсы
- Все новости в этом Telegram-канале
- Код
- Сайт/блог/обратная связь
- Курсы
- Все новости в этом Telegram-канале
- Код
YouTube
Полезные ресурсы Финансовой Лаборатории. Уход с YouTube
Сайт/блог/обратная связь: https://finlab.vip
Курсы: https://finlab.vip/wpm/start/
Все новости в Telegram-канале: https://tttttt.me/finlabvip
Код: https://github.com/cia76
Курсы: https://finlab.vip/wpm/start/
Все новости в Telegram-канале: https://tttttt.me/finlabvip
Код: https://github.com/cia76
Получил несколько писем с вопросом установки matplotlib 3.2.2 Дело в том, что в последней версии Python эта библиотека при установке выдает ошибку.
Решение такое. Сначала ставите Python 3.8.6, затем matplotlib 3.2.2, затем backtrader. Такая конфигурация будет рабочей.
Благодарю Павла за этот сетап!
P.S. Чует мое сердце, скоро полезем backtrader править. Уж слишком много вопросов к нему накопилось 😊
P.P.S. Напоминаю, что для работы matplotlib нужно поставить Microsoft Visual C++ Redistributable for Visual Studio 2015, 2017 and 2019
Решение такое. Сначала ставите Python 3.8.6, затем matplotlib 3.2.2, затем backtrader. Такая конфигурация будет рабочей.
Благодарю Павла за этот сетап!
P.S. Чует мое сердце, скоро полезем backtrader править. Уж слишком много вопросов к нему накопилось 😊
P.P.S. Напоминаю, что для работы matplotlib нужно поставить Microsoft Visual C++ Redistributable for Visual Studio 2015, 2017 and 2019
Docs
Latest supported Visual C++ Redistributable downloads
This article lists the download links for the latest versions of Visual C++ Redistributable packages.
Небольшие изменения в QuikPy. Когда перебираем позиции, то работаем с копией текущих позиций, т.к. в это время могут появляться и закрываться другие позиции.
GitHub
GitHub - cia76/QuikPy: Библиотека-обертка, которая позволяет получить доступ к функционалу Quik из Python
Библиотека-обертка, которая позволяет получить доступ к функционалу Quik из Python - cia76/QuikPy
Пришли модификации для AlorPy от Андрея, за что его благодарю!
1. Уникальность транзакции должна быть не до секунды, а меньше, т.к. за одну секунду может быть несколько транзакций. Уникальность сделана до наносекунды.
2. При получении ошибкок с сервера их нужно декодировать в UTF8.
3. Унификация аргументов в функциях GetTrade и GetFortsRisk. Сначала передаем портфель, затем биржу.
Новая версия библиотеки AlorPy ждет вас здесь >>>
1. Уникальность транзакции должна быть не до секунды, а меньше, т.к. за одну секунду может быть несколько транзакций. Уникальность сделана до наносекунды.
2. При получении ошибкок с сервера их нужно декодировать в UTF8.
3. Унификация аргументов в функциях GetTrade и GetFortsRisk. Сначала передаем портфель, затем биржу.
Новая версия библиотеки AlorPy ждет вас здесь >>>
GitHub
GitHub - cia76/AlorPy: Библиотека-обертка, которая позволяет работать с функционалом Alor OpenAPI V2 брокера Алор из Python
Библиотека-обертка, которая позволяет работать с функционалом Alor OpenAPI V2 брокера Алор из Python - cia76/AlorPy
Как мог, оттягивал день, когда придется обслуживать BackTrader...
Ситуация такая, что Python и библиотеки для него развиваются, а разработчики BackTrader не торопятся эти нововведения к себе внедрять. Мы с вами получаем ограничения. Новую версию Python не поставить. Matplotlib нужно брать старой версии.
Принимаю волевое решение. Я буду поддерживать работоспособность BT, смотреть, чтобы она была обратно совместима с оригиналом. Вместе с тем, оставляю за собой право дорабатывать и улучшать эту библиотеку во благо сообщества "Финансовой Лаборатории".
Начнем с того, что исправим ошибку для новых версий Python. В последних версиях Python collections.Iterable нужно заменить на collections.abc.Iterable. Если это не сделать, то будем получать ошибки при запуске ТС.
Также исправлена ошибка (в оригинальном репозитории) привязки старой версии matplotlib. Сейчас можете ставить последнюю версию, все будет работать.
Скачать BackTrader с этими изменениями вы можете здесь >>>
P.S. Вот мой сетап. Python 3.10.6, matplotlib 3.5.3 С ними все работает.
Ситуация такая, что Python и библиотеки для него развиваются, а разработчики BackTrader не торопятся эти нововведения к себе внедрять. Мы с вами получаем ограничения. Новую версию Python не поставить. Matplotlib нужно брать старой версии.
Принимаю волевое решение. Я буду поддерживать работоспособность BT, смотреть, чтобы она была обратно совместима с оригиналом. Вместе с тем, оставляю за собой право дорабатывать и улучшать эту библиотеку во благо сообщества "Финансовой Лаборатории".
Начнем с того, что исправим ошибку для новых версий Python. В последних версиях Python collections.Iterable нужно заменить на collections.abc.Iterable. Если это не сделать, то будем получать ошибки при запуске ТС.
Также исправлена ошибка (в оригинальном репозитории) привязки старой версии matplotlib. Сейчас можете ставить последнюю версию, все будет работать.
Скачать BackTrader с этими изменениями вы можете здесь >>>
P.S. Вот мой сетап. Python 3.10.6, matplotlib 3.5.3 С ними все работает.
GitHub
GitHub - cia76/backtrader: Версия библиотеки от Финансовой Лаборатории. Обратно совместима с оригинальным backtrader
Версия библиотеки от Финансовой Лаборатории. Обратно совместима с оригинальным backtrader - cia76/backtrader
Всех с Днем Знаний! "Финансовая Лаборатория" возвращается с летних каникул.
Начну с того, что отвечу на все вопросы, связанные с загрузкой, привязкой и обновлением моей версии библиотеки BackTrader. Новое видео добавил в бесплатный курс BackTrader: Быстрый старт здесь >>>
Начну с того, что отвечу на все вопросы, связанные с загрузкой, привязкой и обновлением моей версии библиотеки BackTrader. Новое видео добавил в бесплатный курс BackTrader: Быстрый старт здесь >>>
Надежда проверила мою вчерашнюю инструкцию по установке библиотеки BackTrader версии "Финансовой Лаборатории". За что ее благодарю!
Обнаружилось несколько нюансов. Как и что нужно делать, опубликовал в уроке курса BackTrader: Быстрый старт здесь >>>
Обнаружилось несколько нюансов. Как и что нужно делать, опубликовал в уроке курса BackTrader: Быстрый старт здесь >>>