TL;DR: Я решил создать автоматизированную email-рассылку, предназначенную для наблюдения за фондовой биржей, дающую сведения об индексах S&P 500, Nasdaq и Dow Jones во время премаркет-сессии и в исторической перспективе.
На днях я прочитал этот твит Джейсона Фрайда, основателя Basecamp. Там говорилось о том, что в компании работают над новым email-приложением Hey. Это заставило меня задуматься.
Проверка почтового ящика — это одно из моих первых утренних дел. Быстро просмотрев почту, я узнаю о том, есть ли среди писем что-то важное, и о том, на что мне надо обратить внимание. Я читаю новости и уделяю время тому, чтобы содержать мой почтовый ящик в чистоте. Электронная почта — это мой центральный повседневный инструмент.
Мне нравится подписываться на рассылки. Преимущественно — на технические, вроде Techmeme, Ruby Weekly, Hacker News, Node Weekly. Ещё я подписан на новости WSJ, Morning Brew и NYT. Я постоянно подписываюсь на множество рассылок, но я очень требователен к тому, что попадает в мой почтовый ящик, поэтому отписываюсь от тех рассылок, которые не читаю.
За электронной почтой закрепилась плохая репутация. В почтовые ящики попадает спам, во «Входящих» легко заводится бардак. Но я, несмотря на это, всегда радуюсь, получая хорошо составленное письмо. Мне приятно то, что отправители такого письма потратили время на то, чтобы написать что-то стоящее. И, кроме того, они ещё и красиво оформили своё послание, постаравшись, чтобы оно хорошо выглядело бы в десятках различных почтовых клиентов, каждый из которых выводит разметку письма по-своему.
Я, сидя дома, самоизолировавшись, и имея при этом некоторое количество свободного времени, стал размышлять о том, чтобы сделать какой-нибудь собственный проект. Он должен был отвечать следующим требованиям:
Это должно быть что-то такое, что я смогу завершить максимум за неделю.
Любые используемые мной сторонние службы должны быть бесплатными или freemium-сервисами.
Проект должен был полностью автоматизирован. После того, как он заработает, ручного вмешательства в него не требуется.
Этот проект должен приносить мне какую-то пользу.
Горько было смотреть на мартовское падение рынка. Фондовый рынок был настолько волатильным, что сложно было отслеживать его взлёты и падения. В общем, мне захотелось создать что-то, связанное с биржами.
Существует множество порталов для наблюдения за рынком, вроде ресурса finviz.com, дающего массу информации в реальном времени. Существует много специализированных сайтов. Да что там говорить, достаточно ввести в Google биржевой код инструмента, и поисковик выдаст сведения о его стоимости и покажет график.
Когда читаешь финансовые новости или слушаешь подкаст на эту тему, там всегда сообщают о ситуации при открытии и закрытии рынка. Там говорят, например, о том, что фондовый индекс NASDAQ Composite по итогам торгов упал на 300 пунктов — до 7500 пунктов. Кому-то из сферы финансов, или тому, кто хорошо ориентируется в рынках, такие данные пригодятся. А мне было интересно лишь то, сколько процентов некий инструмент набрал или потерял за некий период. Например — за день, за неделю, за шесть месяцев. Благодаря таким сведениям я могу узнать о том, в каком направлении движется рынок, могу увидеть тренд.
Ещё кое-что, что я узнал некоторое время назад, имеет отношение к фьючерсным сделкам, к тому, что называют «премаркетом». Данные о премаркет-сессии дают, до открытия рынка, ценные сведения о тренде рынка.
Итак, если вернуться к электронной почте и к твиту Джейсона Фрайда, то случилось так, что я решил сделать рассылку с информацией о фондовых рынках и с данными, которые меня интересовали. А именно, речь идёт о следующем:
Премаркет-данные для основных индексов — S&P 500, Nasdaq и Dow Jones.
Исторические данные по индексам, выраженные в процентах.
Мне хотелось, чтобы рассылка выходила бы каждый будний день до открытия рынка. Это позволяло бы мне получить достаточно сведений для того, чтобы решить, стоит ли в этот день пристально наблюдать за рынком и стоит ли действовать.
Учитывая это всё, я занялся некоторыми исследованиями, стремясь разобраться в том, что мне нужно для того, чтобы создать подобную рассылку.
Вот что мне было нужно найти и сделать для того чтобы претворить мою задумку в реальность:
API для получения сведений по фьючерсным сделкам.
API, возвращающий исторические данные по основным индексам.
Некий инструмент для формирования рассылок, поддерживающий работу с API.
Интерфейс для настройки внешнего вида писем.
Сервис, умеющий отслеживать ошибки и поддерживающий уведомления по электронной почте.
Механизм планирования ежедневной отправки писем.
Веб-сайт, позволяющий всем желающим подписываться на рассылку.
Код, который всё это свяжет.
Запуск проекта.
Первые пару дней я потратил, регистрируясь на финансовых и почтовых сайтах и экспериментируя с соответствующими API. В результате я нашёл почтовый freemium-сервис Sendgrid. А рыночные данные я решил брать, обращаясь к недокументированному APIAlpha Vantage Yahoo Finance.
Удивительно то, сколько нужно труда для того, чтобы сделать даже что-то очень простое. Помимо написания кода, что очень интересно, мне понадобилось решить кучу скучных задач административного характера. Среди них — следующие:
Подбор названия проекта.
Покупка и настройка домена.
Создание и перенаправление адреса, вроде markets@bullish.email.
Валидация адреса и домена на Sendgrid.
Настройка Google Analytics и Google Search Console.
Создание учётных записей на Gravatar и на Google для того чтобы в письме было бы изображение профиля.
Настройка DNS с указанием на GitHub для хостинга сайта.
Вероятно, подбор названия проекта и поиск доступного домена занимают в моих домашних проектах больше всего времени. И это — первое, что я делаю, хотя это и противоречит мнению других людей. Мне нравится экспериментировать с названиями и находить именно то, что мне нужно. Когда мне это удаётся, меня это страшно радует, и я нахожу правильный позитивный настрой для работы над проектом.
Вот какие названия я рассматривал:
Buy high sell low
Buy the dip
Bull or bear
Mr. Market
Названием, которое, как я почувствовал, подходит проекту лучше всего, стало Bullish▲. Думаю, дело тут в том, что оно связано с окончанием самого длительного в истории бычьего рынка в США. Я нашёл отличный домен, всего за $3.88. Так родился проект https://bullish.email.
Знаете, где сделан промо-баннер? В Google Slides
У современных технологий есть по меньшей мере одна приятная черта: практически все предлагают бесплатные версии своих продуктов. Например, можно бесплатно и практически вечно пользоваться услугами некоего облачного провайдера — до тех пор, пока не превышаешь лимиты бесплатного предложения. Можно бесплатно опубликовать сайт на GitHub, можно бесплатно пользоваться SSL и ещё много чем. Это просто замечательно.
Но вернёмся к проекту. Я собрал воедино все его части. Потратил кучу времени на дизайн письма в Sendgrid. Дальше — написал корявый код, чтобы убедиться в том, что всё работает как надо. Потом переписал его как следует. В итоге у меня получилась рабочая версия проекта, которая соответствовала моим стандартам.
Последней задачей, которую мне предстояло решить, было планирование запуска кода, подготовка и вызов Sendgrid для отправки писем по утрам. Сначала я думал о бессерверном запуске кода. Но потом я понял, что у меня где-то валяется Raspberry Pi. Почему бы не воспользоваться этой штукой?
В результате я настроил Raspberry Pi так, чтобы каждый день, около 9 утра по восточному времени, за 30 минут до открытия рынка, выполнялось бы соответствующее cron-задание. Я, кроме того, воспользовался маленькой приятной программкой, Cronhub, которая умеет мониторить задания cron и отправлять уведомления в том случае, если задание не запустилось. Вот и всё. На проект я потратил чуть больше недели, а в результате, кроме сайта и рассылки, получил то приятное чувство, когда мой очередной проект добрался от идеи до работающей системы.
Вот как выглядит письмо
Кому интересно, можете скачать репозиторий проекта и попробовать на нашем VPS.
Уважаемые читатели! Есть ли у вас домашние проекты, вроде того, который сделал автор этого материала?