Избранное трейдера OnlyHuman
Хочу поделиться своим опытом разработки скринера и бектестера для анализа акций на основе фундаментальных данных. Это не только автоматизация, но и способ глубже разобраться в инвестиционных стратегиях, которые можно заложить в алгоритм.
Фундаментальный анализ — это метод оценки акций, основанный на финансовых показателях компаний, таких как прибыль, выручка, коэффициенты ликвидности и другие экономические параметры. В отличие от технического анализа, который фокусируется на движении цен, фундаментальный анализ помогает определить реальную стоимость компании и ее перспективы в долгосрочной перспективе.
При этом фундаментальный анализ не так популярен среди частных инвесторов, как технический анализ, поскольку требует глубокого изучения отчетности, макроэкономических факторов и финансовых коэффициентов.
Хочу создать собственный скринер и бектестер для анализа акций по фундаментальным показателям. Чтобы сделать это правильно, нужно понимать не только программирование, но и сам предмет — фундаментальный анализ. В этой статье я разбираюсь какие вообще существуют подходы, а также ищу источники данных.
Понимание силы тренда помогает трейдерам оценить устойчивость движения цены и находить оптимальные точки входа и выхода. Идея индикатора взята из комментария Ийона Тихого (https://smart-lab.ru/mobile/topic/1119895/#comment17905643): он предложил измерять силу тренда через относительное отклонение цены от средней. Формула проста: разница между ценой и средней, деленная на среднюю. Это позволяет оценить тренд независимо от абсолютных значений цены.
В тексте привожу открытый исходный код индикатора для того, чтобы любой человек мог проверить его в своём TradingView.
Индикатор силы тренда показывает, насколько цена отклоняется от своего среднего значения. Он рассчитывается по формуле:
Сила тренда = (Цена – Средняя) / Средняя × 100
Где:
Цена – текущая цена актива (например, цена закрытия свечи).
Средняя – значение скользящей средней (например, 21-периодная экспоненциальная средняя EMA).
Абсолютное отклонение цены от средней меняется в зависимости от уровня цены актива. Например, отклонение в 10 рублей на акции стоимостью 100 рублей и 1000 рублей будет восприниматься по-разному. Деление на среднюю нормализует это значение, позволяя объективно сравнивать силу тренда на разных инструментах и таймфреймах.
На Московской бирже торгуется более 2500 облигаций, но большая часть из них неликвидна — в стакане почти нет предложений и сделок совершается крайне мало. Это затрудняет покупку и продажу таких бумаг. При этом известные мне публичные сервисы не суммируют объемы торгов за период, поэтому сложно быстро найти облигации с высокой ликвидностью.
Пять лет назад написал Node.js-скрипт, затем адаптировал его для Google Таблиц, а теперь разрабатываю Python версию. При помощи сообщества на GitHub эта Python версия идёт к созданию полноценной библиотеки с расширенными возможностями: автоматический поиск ликвидных облигаций, расчет денежных потоков, сбор новостей по эмитентам и вычисление оптимального объема покупки. Все это направлено на помощь простым инвесторам, вроде нас с вами, чтобы оперативно находить выгодные инвестиционные инструменты и принимать решения на основе актуальной информации.
Ликвидность это один из ключевых параметров, поскольку даже высокодоходная бумага бесполезна, если её невозможно купить. В моём скрипте для поиска облигаций используются несколько основных критериев:
В этой статье расскажу о том, как воспроизвел и протестировал торговую систему для фьючерсов Московской биржи, основанную на идеях Александра Резвякова. Недавно, просматривая раздел алготрейдинга на Смартлабе, я наткнулся на видео с его выступления на конференции 2024 года под названием "5-6 идей для построения прибыльной торговой системы на фьючерсах". Меня привлекла четкость и понятность предложенных им правил торговли.
Поскольку я активно занимаюсь автоматизацией процессов и стремлюсь глубже изучить возможности Python библиотеки backtesting.py, мне показалось это хорошей идеей для практического применения.
Хотя я лично не знаком с Александром, полагаю, что публичное представление идеи предполагает возможность её независимого анализа и тестирования сообществом трейдеров и программистов.
Основная идея — открывать сделки в строго определенное время и использовать структуру рынка последних дней для принятия решений.
Поскольку тема операций с наличным, физическим золотом в России в последние несколько лет является очень актуальной, решил рассказать о некоем своем опыте в этой интересной теме. Физическое золото и другие драгметаллы представлены у нас в стране двумя видами:
Эти два вида инвестиций, как известно, несколько различаются. Слитки из драгметаллов в России официально продаются только производства российских аффинажных заводов. Приобретены и проданы официально они могут быть только российским банкам. Инвестиционная же монета является официальным платежным средством центрального банка той страны, где эта монета выпущена. На российском рынке имеют легальное хождение инвестиционные монеты не только Банка России, но и других стран. Покупать и продавать инвестиционные монеты из драгметаллов можно не только у российских банков, но и у юридических и физических лиц – резидентов РФ.
Но вернемся к сути вопроса. Недавно у меня возникла необходимость продать свой слиток из драгметалла, а точнее несколько слитков.
import pylunar
import pandas as pd
import matplotlib.pyplot as plt
df = intraday_df.resample('D').agg({'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last'})
df = df.dropna()
Теперь в df содержатся дневки IMOEX.
*** Вычисляем процентное изменение цены за один день
df['pct'] = df['Close'].pct_change().shift(-1)
*** Изменение цены за один день
df['diff'] = df['Close'].diff().shift(-1)
Делаем стобец для хранения лунных дней
df['age'] = 0.0
mi = pylunar.MoonInfo((55,45,7),(37,36,56))
Здесь цифры (55,45,7),(37,36,56) — широта и долгота г.Москвы
Бывает, что частные инвесторы не доверяют сервисам для ведения портфеля ценных бумаг и ведут учет своих инвестиций в «Экселе» или «Гугл Таблицах».
Если количество ценных бумаг не так велико, то подобное использование таблиц оправдано:
Но у такого метода учета есть и свои минусы, главным образом связанные с необходимостью ручного обновления котировок. Если раз в квартал сделать это несложно и вручную, но чтобы поддерживать актуальность чаще, потребуется много времени: нужно зайти на сайт, где опубликованы текущие котировки, найти нужную цену, скопировать ее и вставить в ячейку таблицу. И так для каждой ценной бумаги в портфеле. Печально и долго.
Зачем вообще нужны актуальные цены в таблицах:
Пробой диапазонов – один из популярных видов трендовой торговли. Его популярность основывается на простоте и эффективности. Достаточно выбрать некий горизонтальный диапазон и обложить отложенными стоповыми ордерами. Куда пробьёт – в то направление и становимся. А отложку на другой стороне диапазона можно даже не трогать – она исполнит роль стоп-лосса, если цене вздумается развернуться.
Строить диапазоны можно как угодно: по экстремумам (хай и лоу цены) за период времени, по последним фракталам, да как угодно!
Чем более узкий диапазон мы обкладываем, тем проще цене пройти несколько таких расстояний.
Биткоин прошёл 5000$ за день? Это круто, если мы поймали это движение из диапазона 500$ (10 к 1!). И так себе, если взять его же получилось из диапазона 2500$ (всего-то 2 к 1).
Лайфхак: торгуйте только диапазоны, являющиеся самыми узкими за определённое количество прошлых диапазонов!
Как всегда, ловите пример.
На своей платформе алготрейдинга я сгенерировал простую стратегию, крутящуюся около нуля (такие я называю «мусорными»).