Финансовая Лаборатория
710 subscribers
2 photos
112 links
Download Telegram
Сегодня "добил" одну задачу, связанную со стабильным определением максимумов случайных чисел более, чем в 50% случаев. Выложил ее видеоразбор сюда >>> В курсе Стабильный заработок на случайных ценах уже 4 видео. Все они доступны здесь >>>

UPD: Случайно приложил исходное видео, где математики не смогли решить эту задачу. Заменил на видео со своим решением 😊 Ссылку на исходник также оставил в уроке.
Очень много вопросов получаю о том, как, глобально, устроена моя система трейдинга и инвестиций. Поэтому, решил сделать отдельное видео, где расскажу об этом, и дам рекомендации, что нужно и не нужно делать. Смотрите здесь >>>
Записал и выложил последний в этом торговом сезоне курс "Замена индикаторов ATR, DMI, RSI, CSI". Чего это вдруг меня понесло на "древние" индикаторы Веллеса Вайлдера 1978 года? Изменились рынки, изменилось и наше понимание торговли. Что-то из его индикаторов нужно "докрутить", от чего-то избавиться, а что-то создать заново. Этим и займемся в курсе. Будут и мои авторские исследования, и гипотезы от меня и Джона Элерса, и новый индикатор, и, как обычно, много идей и кода. Все материалы курса публикуются здесь >>>
Внимание! Обычно я не прикладываю к курсам книги, т.к. их можно довольно просто приобрести или поискать в свободном доступе. Сейчас я понятия не имею, какой Интернет нас ждет в ближайшем будущем, поэтому заботливо выложил для вас оригинальную книгу Веллеса Вайлдера в уроке, где начинаю разбирать оригинальные индикаторы >>>

UPD: Исправил ссылку на урок с книгой
Немного про сами индикаторы.

Волатильность

Если использовать для описания рынка модель нестационарного сигнала, то какой смысл в ATR? Что мы там усредняем? Случайные колебания? Что он означает? Можно ли ATR использовать как прогностический индикатор? Сделал исследование, где отвечаю на эти вопросы.

Направленные движения

Опять моментумы. Верно ли разложил автор движения? У Джона Элерса на это есть свое мнение. А у меня - свое. Поэтому, будем сравнивать 3 версии направленных движений: от автора, от Джона Элерса и от меня. Интересно, какой из них идеологически правильно построен?

RSI

Идея Джона Элерса, озвученная им на Workshop в конце 2021 года, показалась мне интересной. Без проблем, переделаем RSI под его идеи.

Выбор тикера для торговли

Эта часть - самая важная для меня в курсе. Дело в том, что каждый год я пополняю ИИС для налогового вычета. И каждый год решаю один и тот же вопрос. Что купить? На какие качества тикера нужно смотреть перед покупкой? Когда посмотрел индикатор CSI, то понял, что можно очень красиво через наглядное исследование сделать отбор самого перспективного тикера. Сначала ввел критерии отбора. Мне потребовалась средняя цена для расчета объемов. Поскольку мы умеем работать со Странным Аттрактором из Теории Хаоса, то на его основе создал индикатор Average Chaos Price. В исследовании использовал функциональное программирование, и показал, как красиво в одну строку делаются массовые операции над столбцами. Ввел ранги (места) как в музыкальном хит-параде. В итоге, получил наглядную таблицу с лучшими тикерами для покупки по заданным критериям отбора. Эту модель вы сможете не только использовать "как есть", но и по аналогии доработать под ваши критерии отбора.
Раз уж взялся рецензировать и комментировать книги по финансовой грамотности, то решил переделать давнюю рецензию на книгу Джорджа Клейсона "Самый богатый человек в Вавилоне". Как обычно, со своим взглядом на управление личными финансами. Читайте в новом посте здесь >>>
Мы с вами выходим на финишную прямую 10-го торгового сезона 2021-2022 "Финансовой Лаборатории". Я хотел бы от вас получить обратную связь на тему: Чего бы "докрутить" в BackTrader?

Вместе с трейдерами "ФинЛаба" обсудим этот вопрос в закрытом чате "Автоторговля". Пожалуйста, пишите ваши мысли туда.

Остальные участники могут свои мысли на тему черкнуть по кнопке "Обратная связь" внизу сайта.

Свои мысли расскажу прямо здесь. И вот первая из них...
События изменения статуса заявки (notify_order) и изменения статуса сделки (notify_trade) фиксируются в BT по мере их выполнения. Однако, в ТС они передаются только со следующим пришедшим баром. Данные события должны приходить в ТС во время их выполнения без привязки к приходу бара.

Решение этого вопроса достаточно простое. Нужно при инициализации Cerebro поставить параметр quicknotify=True. Вот так:

cerebro = bt.Cerebro(quicknotify=True)
Продолжаю публикацию своих мыслей по улучшению BackTrader. Сегодня будет про улучшение визуального представления баров, индикаторов, графиков.

Сейчас вывод идет через библиотеку 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. Посмотрим, насколько это сложно...
Переходим к работе ТС с заданными тикерами в 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. Расчеты алгоритма ТС не выполняем.

Этот алгоритм синхронизации можно использовать даже если данные приходят по разным временнЫм интервалам.
Переходим к глобальным вопросам. Одна из самых проблемных сущностей систем автоторговли.

Расписание торгов

У каждого рынка свое расписание торгов. Есть дополнительные сессии. У фьючерсов есть клиринги, когда торговать нельзя. Нужно для каждого рынка составить типичное расписание. Также добавлять нетипичные дни торговли. Например, перенесенные выходные, предпраздничные дни.

С одной стороны, рынок, обычно, торгуется в своем ритме. С другой, есть время приостановки рынков, которые мы прогнозировать не можем.

Все решения, которые я видел в системах Технического Анализа, предлагали простые варианты. Стандартное время начала и окончания сессии. Даты с особым временем начала и окончания.

Пока мысли такие. Если что-то приходит от тикера, значит, он торгуется. Если ничего от тикера не приходит, значит, или у нас локальный сбой, или тикер не торгуется. Событие прихода нового бара, это единственное, на что можно положиться.
Самая глобальная мысль по улучшению BackTrader.

Перевод работы с данными и индикаторами на библиотеки numpy/pandas.

Много кода в BT дублирует эти библиотеки. Т.к. часть кода в numpy/pandas реализована на C, то, возможен прирост производительности.

Сейчас приходится дублировать код компонент и индикаторов в исследованиях и ТС. В исследованиях мы используем "чистый" Python с numpy/pandas. Для ТС мы должны работать с Lines, которые не совместимы с Series/DataFrame.

Неизвестно, что будет лучше. Перевод существующего кода BT на numpy/pandas или написание своей библиотеки "с нуля". В любом случае, маловероятно, что новая библиотека будет обратно совместима с BT.
В курсе Проектирование фильтра Калмана я использовал формулу Optimal Tracking Index. Благодаря этому индексу не нужно вручную подбирать альфу, бету и гамму для фильтров. Все что нам нужно, это ошибки процесса и измерения. Данный метод в 1984-м году представил Пол Калата.

Я ничего не принимаю на веру. Изучил его статью. Понял как появилась эта формула. Делюсь своими объяснениями с вами в летнем бесплатном мини-курсе Вывод формулы для Optimal Tracking Filter здесь >>>

Это мой первый опыт публичного разбора научной статьи. Жду ваши лайки :-)
В некоторых тикерах могут содержаться точки. Поправил код Провайдера для автоторговли в BackTrader из Quik чтобы с такими тикерами можно было работать. Благодарю Олега Шпагина за то, что обратил на это внимание!
В курсе Проектирование фильтра Калмана для трейдеров в бонусном видео, где разбираю формулы и код альфа-бета фильтра, есть небольшая ошибка. Поскольку у нас движение равномерное, а не хаотическое как в альфа-фильтре, то ошибку процесса нужно измерять с учетом скорости. Правильные формулы прописал под видео в уроке. У кого есть (приобретен) этот курс, обязательно посмотрите.
Ввожу новую сущность комбо курсов. Что это такое, и как они устроены, смотрите в новой записи блога здесь >>>
Предлагаю вашему вниманию первый комбо курс. Он построен на стыке курсов Проектирование фильтра Калмана для трейдеров и Замена индикаторов ATR, DMI, RSI, CSI.

Курс бесплатный.

Подробное описание курса смотрите здесь >>>

В описании есть условие получения курса.

Если есть вопросы, то пишите в личку Discord (для трейдеров ФинЛаба) или через обратную связь на сайте https://finlab.vip
Очень просили трейдеры "Финансовой Лаборатории" перевести один из моих лучших курсов Система Игоря Чечета: Торговля частотных полос на Python для платформы BackTrader.

Я не только аккуратно перенес код, но и вписал систему в настоящий скринер с ограничением по кол-ву одновременных позиций. Гурманы оценят 😊Про это записал 5 новых видео. Они находятся в конце курса.

Посмотрите описание курса здесь >>>
Посмотрите 8 открытых вводных видео прямо здесь и сейчас >>>
Летом "Финансовая Лаборатория", традиционно, на каникулах. Я отдыхаю, набираюсь ума-разума, провожу исследования, перевожу курсы на Python/BackTrader. Словом, готовлюсь к очень плодотворной работе в торговом сезоне 2022-2023. Хорошего всем отдыха! До встречи!