Хочу рассказать о своем опыте поиска ценных бумаг на американском рынке, которые торгуются на NYSE, NASDAQ и AMEX.
Из России покупать акции иностранных компаний в 2024 году сложно, но варианты до сих пор остаются: иностранный брокер, страховая или некоторые российские брокеры, которые не попали под санкции.
Обычно я покупаю индексные фонды, но иногда хочется купить конкретные акции. Акции какой конкретной компании выбрать, ведь на американском рынке на август 2024 года их торгуется 10 522 штуки? Ответ на вопрос сложен и зависит от многих факторов. Правда, часто не хочется тратить много времени на анализ, но и совсем случайную акцию покупать не хочется.
Существует популярный ресурс Яху Финанс, который предоставляет различные данные по акциям, включая фундаментальные данные, а ещё сводные рекомендации аналитиков различных инвестиционных компаний: прогнозируемую цену бумаги и рекомендацию: покупать / продавать / держать. Все эти данные представлены на Яху в структурированном виде. По одной компании может быть дано множество прогнозов, например для Apple Inc. (AAPL) в августе 2024 таких прогнозов было дано 38 от различных инвестиционных компаний.
Мне пришла идея - а почему бы не собрать эти данные по каждой бумаге, отфильтровать по потенциалу роста - проценту между текущей и прогнозируемой по мнению этих аналитиков ценой, а ещё учесть сколько компаний-аналитиков проводило анализ за два последних месяца. Обязательно фильтровать и учитывать текущую дивидендную доходностью. При практических исследованиях оказалось, что не все акции имеют такие данные о прогнозной цене, а только 4 250 из 10 522 бумаг. Оставшиеся 6 272 акции не имеют данных о прогнозируемой цене.
Акции с прогнозными ценами - можно перебирать каждую из 4 250 бумаг и если она отвечает требованиям - включать в выборку. Ну а с выборкой уже работать самому, когда механический отбор произведён.
Почему именно американский рынок?
Доминирование американского рынка капитала – это не просто недавнее явление; это результат столетнего экономического, технологического и геополитического развития.
Об этом говорит один график, отражающий историю капитализации мирового фондового рынка. До Первой мировой войны мир был действительно многополярным с точки зрения экономической мощи. Великобритания, крупнейшая экономика того времени, занимала лишь 24% мировой рыночной капитализации, за ней следовали США с 15% и Германия с 13%. Ни одна страна не доминировала с подавляющим большинством на мировых рынках капитала.
Но ситуация резко изменилась в 1920-х годах, когда США начали отдаляться от своих коллег. К концу 20-го и в начале 21-го века Соединенные Штаты укрепили свои позиции ведущего мирового рынка капитала. Сегодня на ее долю приходится ошеломляющий 61% капитализации мирового фондового рынка, что намного превосходит любую другую страну. Масштаб этого доминирования таков, что ни одна другая нация не достигает даже двузначных цифр. Даже Китай, вторая по величине экономика мира, остается далеким конкурентом в сфере рынков капитала.
На протяжении прошлого столетия ни одна страна не смогла успешно бросить вызов лидерству Америки в мировых финансах. Ближе всего к этому пришла Япония в 1980-х годах, оседлав волну экономического процветания и быстрого роста. Однако к началу 1990-х годов японский пузырь лопнул, и она отступила от своего вызова американскому доминированию.
Несколько факторов объясняют подъем американского рынка капитала. Огромный размер, устойчивость и рост экономики США сыграли центральную роль. Уолл-стрит стала синонимом финансовой мощи, поддерживаемой сильными институтами, глубокими пулами капитала и нормативно-правовой средой, которая, несмотря на ее сложности, способствовала созданию стабильного и предсказуемого рынка.
В других странах наблюдается снижение их относительного влияния на мировых рынках капитала. Столетие назад, например, на долю России приходилось 6% мировой рыночной капитализации.
Где взять список тикеров, торгуемых на NYSE, NASDAQ и AMEX?
Если искать полный список тикеров, торгуемых на NYSE, NASDAQ и AMEX, его можно найти на официальном сайте Nasdaq Trader. Страница по этому адресу предоставляет доступ к полному каталогу всех акций, котирующихся на этих биржах.
На nasdaqtrader.com можно скачать файлы, содержащие тикеры, названия компаний и другую информацию. Эти файлы доступны в различных форматах, включая .txt и .zip, что упрощает доступ к данным и работу с ними.
Для конвертации в json формат я использую скрипт nasdaqtraded.sh
:
#!/bin/bash
# $ sh nasdaqtraded.sh
echo -n '["' > nasdaqtraded.json
curl -o nasdaq.txt ftp://ftp.nasdaqtrader.com/symboldirectory/nasdaqtraded.txt
cat nasdaq.txt | grep -Eo '^w|w*' | sed 's/^w|//g' | sed 'H;1h;$!d;x;y/n/,/' | sed 's/,/","/g' >> nasdaqtraded.json
echo '"]' >> nasdaqtraded.json
sed -i ':a;N;$!ba;s/n//' nasdaqtraded.json
rm nasdaq.txt
Где брать данные цен, финансовую информацию и прогнозы по компаниям?
Хотя официальное API Яху Финанс было закрыто ещё в 2017 году, однако практически сразу же появилась его недокументированная работоспособная версия, которая жива до сих пор.
Примерно год назад, в прошлом 2023 году, API которое до сих пор живо и работает стало требовать требовать куки для каждого запроса. Привычным способом возвращалась только ошибка Invalid Crumb
. Однако на stackoverflow.com практически сразу появилось решение этой проблемы.
Теперь в 2024 году рабочий код запроса к API Яху Финанс выглядит следующим образом:
async function getCredentials() { // на основе https://stackoverflow.com/a/76555529
// Inline the API and User-Agent values
const API = 'https://query2.finance.yahoo.com';
const USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36';
// get the A3 cookie
const response = await fetch('https://fc.yahoo.com', {
headers: {
'User-Agent': USER_AGENT
},
timeout: 10000 // Увеличиваем таймаут до 10 секунд
})
const cookie = response.headers.get('set-cookie')
// now get the crumb
const url = new URL('/v1/test/getcrumb', API)
const request = new Request(url, {
headers: {
'User-Agent': USER_AGENT,
'cookie': cookie
}
})
const crumbResponse = await fetch(request)
const crumb = await crumbResponse.text()
return {
cookie,
crumb
}
}
async function USAStockGetName(ID, cookie, crumb) { //получаем имя бумаги
// https://query1.finance.yahoo.com/v10/finance/quoteSummary/GRMN?modules=price&crumb=rxBh.H4z62E
const url = `https://query1.finance.yahoo.com/v10/finance/quoteSummary/${ID}?modules=price&crumb=${crumb}`;
console.log("%s. URL for %s: %s", getFunctionName(), ID, url);
try {
const response = await fetch(url, {
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
'cookie': cookie
},
timeout: 10000 // Увеличиваем таймаут до 10 секунд
});
const json = await response.json();
const value = json.quoteSummary.result[0].price.longName;
console.log("%s. Name for %s: %s", getFunctionName(), ID, value);
if (value == 0) return 'нет';
return value.replace(/'/g, '');
} catch (e) {
console.log(`Ошибка: ${e}.`);
}
}
То есть как источник данных можно выбрать Yahoo Finance, потому что API предоставляет структурированные данные, включая прогнозируемые цены и рекомендации по покупке/продаже/держать от разных аналитиков.
Проблема выбора акций: слишком много вариантов
Когда есть пул более 10 000 компаний - сложно что-то выбрать вручную. На сайте Яху Финанс есть хорошие скринеры - фильтры, но вот по рекомендациям аналитиков они не работают.
Поэтому захотел написать свою реализацию скринера.
Система фильтрации акций - как работает скрипт
Этот скрипт предназначен для автоматизации процесса поиска недооцененных акций, торгуемых на фондовых биржах США (NYSE, NASDAQ и AMEX), путем получения данных из Yahoo Finance. Вот как это работает:
-
Инициализация и настройка. Скрипт начинается с записи текущего времени и инициализации необходимых модулей, таких как
fs
,path
,moment
иfetch
. Скрипт позволяет настроить пороговые значения для выбора акций, в том числе:-
Потенциал роста: минимальный процентный рост между текущей и прогнозируемой ценой акций (например, 40% или более).
-
Рекомендации аналитиков: минимальное количество аналитических фирм, предоставивших рекомендации в течение последних двух месяцев (например, не менее 20).
-
Дивидендная доходность: минимальная текущая дивидендная доходность (например, 1% или более).
-
-
Загрузка базы тикеров. Скрипт загружает файл JSON (
nasdaqtraded.json
), содержащий тикеры компаний, акции которых торгуются на биржах США. Он обеспечивает уникальность тикеров за счет фильтрации дубликатов.
-
Процесс анализа. Основная функциональность включает в себя перебор тикеров и получение финансовых данных для каждой акции из Yahoo Finance. Скрипт проверяет:
-
Потенциал роста: разница между текущей ценой акций и прогнозируемой ценой.
-
Аналитический тренд: количество рекомендаций аналитиков по акциям.
-
Дивидендная доходность акций.
В окончательный отбор включаются только акции, соответствующие всем заданным условиям (потенциал роста, рекомендации аналитиков и дивидендная доходность).
-
-
Обработка ошибок. Скрипт отслеживает ошибки, особенно когда для определенных акций отсутствуют данные о прогнозируемых ценах.
-
Сортировка и регистрация данных. Выбранные акции сортируются по потенциалу роста, а результаты периодически регистрируются: каждые 100 обработанных акций скрипт сохраняет текущий прогресс на диск, создавая HTML-файл, суммирующий результаты.
-
После того как скрипт обработает все тикеры, скрипт генерирует окончательный отчет, включающий все выбранные акции, соответствующие критериям, и выводит общее время, затраченное на исполнение.
Пошаговое руководство по использованию скрипта YahooFinance_Analyst Price Targets
Прежде чем приступить к работе, убедитесь, что на вашем компьютере установлено следующее:
-
Node.js и npm (менеджер пакетов Node): Node.js позволяет запускать JavaScript на вашем компьютере, а npm — это менеджер пакетов, входящий в состав Node.js. Вы можете скачать оба с официального сайта Node.js.
-
Редактор кода (необязательно). Для редактирования и просмотра файлов проекта рекомендуется использовать редактор кода, например Visual Studio Code. Загрузите его с веб-сайта Visual Studio Code.
Скачайте репозиторий проекта
Первый шаг - загрузить (клонировать) проект с GitHub.
Установка зависимостей
Следующим шагом будет установка необходимых пакетов, необходимых для запуска проекта.
Для Windows воспользуйтесь файлом first start.bat
.
Для Mac и Linux в терминале введите:
npm install
Эта команда установит все пакеты, перечисленные в файле package.json
.
Запуск проекта
После установки зависимостей вы можете запустить проект.
Для Windows:
Воспользуйтесь файлом YahooFinance_Analyst Price Targets_start_windows.bat
Запуск занимает около 10 часов:
Для Mac:
Откройте терминал и выполните команду, изменив путь на свой собственный:
node /Users/mike/Desktop/YahooFinance_Analyst Price Targets/index.js 2>&1 | tee /Users/mike/Desktop/YahooFinance_Analyst Price Targets/log/log_$(date +%F_%T).txt
Процесс также занимает около 10 часов, все логи можно посмотреть в папке log
.
Для Linux:
Откройте терминал и выполните команду, изменив путь на свой собственный:
node /home/mike/YahooFinance_Analyst Price Targets 2>&1 | tee /home/mike/YahooFinance_Analyst Price Targets/log/log_$(date +%F_%T).txt
Просмотр результатов
После успешного выполнения скрипта в папке searching_results
появится ещё один файл с текущей датой.
На названия столбцов можно нажимать - сортировка будет меняться.
Прошлые результаты поиска за несколько лет можно посмотреть здесь.
Вместо итогов
Скрипт всегда доступен на Гитхабе.
Автор: Михаил Шардин
19 августа 2024 г.
Автор: empenoso