Раскрытие лидерства на рынке: точное определение выигрышных акций
Введение
В мире финансов определение наиболее эффективных акций имеет решающее значение для успешного инвестирования. Среди различных показателей рейтинг относительной силы (RS) выделяется как мощный инструмент, позволяющий отличить лидеров рынка от отстающих. В этой статье мы рассмотрим, как использовать Python для расчета рейтинга RS, аналогичного собственной метрике Investor’s Business Daily. Следуя этому руководству, вы получите знания и навыки для анализа динамики акций и принятия обоснованных инвестиционных решений. Итак, давайте погрузимся в увлекательный мир Python для финансов и раскроем секреты рейтинга RS!
Раздел 1: Понимание рейтинга RS
Прежде чем мы углубимся в код Python, давайте сначала поймем суть рейтинга RS и почему это жизненно важный показатель для инвесторов. Рейтинг RS оценивает динамику цены акции за последние 52 недели и сравнивает ее с динамикой других акций. Он дает четкое указание на то, является ли акция лидером рынка или отстающим с точки зрения относительной динамики цены. Рейтинг RS варьируется от 1 (худший) до 99 (лучший). Рейтинг 99 указывает на то, что акции опережают 99% всех других акций на основе их относительной динамики цен акций за последние 52 недели. Как инвесторы, мы ищем акции с рейтингом RS 80 или выше, поскольку они часто демонстрируют большой потенциал для запуска значительных ценовых скачков.
Раздел 2: Настройка среды
Чтобы начать наше путешествие, нам нужно настроить нашу среду Python, установив необходимые пакеты и импортировав необходимые модули. Мы будем использовать популярные библиотеки, такие как yfinance
, pandas
, pandas-datareader
и yahoo-fin
, для сбора и анализа финансовых данных. Эти библиотеки предоставляют мощные функции для извлечения исторических данных о запасах, расчета процентных изменений и выполнения различных финансовых расчетов. Давайте установим необходимые пакеты и импортируем модули, чтобы начать.
# Imports import yfinance as yf import pandas as pd from pandas_datareader import data as pdr from yahoo_fin import stock_info as si import datetime import time # Override yfinance API yf.pdr_override()
Раздел 3: Получение данных о запасах
Чтобы рассчитать рейтинг RS, нам нужен доступ к историческим данным о ценах как для отдельных акций, так и для индекса S&P 500. Мы будем работать с акциями S&P 500, поскольку они представляют широкий спектр компаний и обычно используются в качестве эталона для всего рынка. Давайте получим тикеры для всех акций S&P 500 и отформатируем их для совместимости с Yahoo Finance.
# Get tickers for all S&P 500 stocks and replace "." with "-" for compatibility with Yahoo Finance sp500_tickers = si.tickers_sp500() sp500_tickers = [ticker.replace(".", "-") for ticker in sp500_tickers]
Затем мы определяем индекс S&P 500 как ^GSPC и указываем диапазон дат, для которого мы хотим собрать данные об акциях. В этом примере мы рассматриваем прошлый год в качестве временных рамок.
# Define S&P 500 index sp500_index = '^GSPC' # Define date range for stock data start_date = datetime.datetime.now() - datetime.timedelta(days=365) end_date = datetime.date.today()
Раздел 4: Расчет относительной доходности
Теперь начинается захватывающая часть: расчет относительной доходности каждой акции по сравнению с индексом S&P 500. Начнем с создания пустого списка relative_returns
для хранения относительной доходности каждой акции.
# Create empty list to store relative returns for each stock relative_returns = []
Мы получаем исторические данные о ценах для индекса S&P 500, используя функцию pdr.get_data_yahoo()
из библиотеки pandas-datareader
. Затем мы рассчитываем дневное процентное изменение индекса S&P 500 и кумулятивно умножаем эти изменения, чтобы получить общее процентное изменение.
# Retrieve historical price data for the S&P 500 index sp500_df = pdr.get_data_yahoo(sp500_index, start_date, end_date) sp500_df['Percent Change'] = sp500_df['Adj Close'].pct_change() sp500_returns = sp500_df['Percent Change'].cumprod() sp500_return = sp500_returns.iloc[-1]
Раздел 5: Итерация по акциям
Чтобы рассчитать рейтинг RS для каждой акции, мы перебираем акции S&P 500 и выполняем следующие шаги:
- Загрузите исторические данные для каждой акции с помощью
pdr.get_data_yahoo()
и сохраните их в виде файла CSV для более быстрой обработки. - Рассчитайте столбец процентного изменения для исторических данных каждой акции.
- Вычислите относительную доходность, которая представляет собой средневзвешенное значение последнего квартала и предыдущих 63 торговых дней.
- Сохраните относительную доходность в списке
relative_returns
.
# Iterate over all S&P 500 stocks to calculate their relative returns for ticker in sp500_tickers: # Download historical data as CSV for each stock to speed up the process stock_df = pdr.get_data_yahoo(ticker, start_date, end_date) stock_df.to_csv(f'{ticker}.csv') # Calculate percent change column stock_df['Percent Change'] = stock_df['Adj Close'].pct_change() # Calculate the relative return with double weight for the most recent quarter stock_returns = stock_df['Percent Change'].cumprod() stock_return = (stock_returns.iloc[-1] * 2 + stock_returns.iloc[-63]) / 3 # Double weight for the most recent quarter relative_return = round(stock_return / sp500_return, 2) relative_returns.append(relative_return) # Print relative return for each stock print(f'Ticker: {ticker}; Relative Return against S&P 500: {relative_return}\n') # Pause for 1 second to avoid overloading the server with requests time.sleep(1)
Раздел 6: Расчет рейтинга RS
Теперь, когда мы собрали относительную доходность для всех акций S&P 500, мы можем создать фрейм данных для хранения результатов и расчета соответствующих рейтингов RS. Мы используем функцию pd.DataFrame()
из библиотеки pandas
и объединяем тикеры и относительную доходность в столбцы.
# Create dataframe with relative returns and corresponding RS ratings rs_df = pd.DataFrame(list(zip(sp500_tickers, relative_returns)), columns=['Ticker', 'Relative Return'])
Для расчета рейтинга RS мы используем функции rank()
и pct_change()
, предоставляемые pandas
. Эти функции ранжируют относительную доходность в процентах, предоставляя стандартизированный рейтинг RS по шкале от 1 до 100.
rs_df['RS_Rating'] = rs_df ['Relative Return'].rank(pct=True) * 100
Раздел 7: Раскрытие возможностей рейтингов RS
Наконец, пришло время раскрыть всю мощь RS Ratings! Теперь мы можем проанализировать фрейм данных, чтобы определить наиболее эффективные акции на основе их рейтингов RS. Отсортировав кадр данных в порядке убывания рейтинга RS, мы можем легко определить лидеров рынка.
# Print RS Ratings for all stocks print(rs_df)
Заключение
В этой статье мы погрузились в увлекательный мир Python для финансов и узнали, как рассчитать рейтинг относительной силы (RS) с помощью Python. Используя мощные библиотеки, такие как pandas
, pandas-datareader
и yahoo-fin
, мы смогли получить исторические данные о ценах, рассчитать относительную доходность и создать рейтинги RS для всестороннего анализа динамики акций. Вооружившись этими знаниями, теперь вы можете определять наиболее прибыльные акции и принимать обоснованные инвестиционные решения. Так что вперед, раскрывайте секреты рынка и отправляйтесь в успешное путешествие в сфере финансов!
Помните, что RS Rating — лишь один из многих инструментов в арсенале опытного инвестора. Дальнейшие усовершенствования этого кода могут включать в себя включение дополнительных финансовых показателей и расширение анализа на другие рыночные индексы. Постоянно совершенствуя свои навыки Python и изучая передовые методы, вы можете получить конкурентное преимущество в постоянно развивающемся мире финансов.
Вот полный код программы IBD RS Calculation Python. Не стесняйтесь проверить это в своей собственной среде кодирования!
# Imports import yfinance as yf import pandas as pd from pandas_datareader import data as pdr from yahoo_fin import stock_info as si import datetime import time # Override yfinance API yf.pdr_override() # Get tickers for all S&P 500 stocks and replace "." with "-" for compatibility with Yahoo Finance sp500_tickers = si.tickers_sp500() sp500_tickers = [ticker.replace(".", "-") for ticker in sp500_tickers] # Define S&P 500 index sp500_index = '^GSPC' # Define date range for stock data start_date = datetime.datetime.now() - datetime.timedelta(days=365) end_date = datetime.date.today() # Create empty list to store relative returns for each stock relative_returns = [] # Retrieve historical price data for the S&P 500 index sp500_df = pdr.get_data_yahoo(sp500_index, start_date, end_date) sp500_df['Percent Change'] = sp500_df['Adj Close'].pct_change() sp500_returns = sp500_df['Percent Change'].cumprod() sp500_return = sp500_returns.iloc[-1] # Iterate over all S&P 500 stocks to calculate their relative returns relative to the S&P 500 for ticker in sp500_tickers: # Download historical data as CSV for each stock to speed up the process stock_df = pdr.get_data_yahoo(ticker, start_date, end_date) stock_df.to_csv(f'{ticker}.csv') # Calculate percent change column stock_df['Percent Change'] = stock_df['Adj Close'].pct_change() # Calculate the relative return with double weight for the most recent quarter stock_returns = stock_df['Percent Change'].cumprod() stock_return = (stock_returns.iloc[-1] * 2 + stock_returns.iloc[-63]) / 3 # Double weight for the most recent quarter relative_return = round(stock_return / sp500_return, 2) relative_returns.append(relative_return) # Print relative return for each stock print(f'Ticker: {ticker}; Relative Return against S&P 500: {relative_return}\n') # Pause for 1 second to avoid overloading the server with requests time.sleep(1) # Create dataframe with relative returns and corresponding Relative Strength (RS) rating rs_df = pd.DataFrame(list(zip(sp500_tickers, relative_returns)), columns=['Ticker', 'Relative Return']) rs_df['RS_Rating'] = rs_df.relative_return.rank(pct=True) * 100 # Print RS ratings for all stocks print(rs_df)
Удачных инвестиций!
Отказ от ответственности. Материал в этой статье носит исключительно образовательный характер и не должен восприниматься как профессиональный совет по инвестированию. Инвестируйте по своему усмотрению.
Если вам понравилась эта статья, ознакомьтесь с другими моими статьями о Python для финансов ниже!
Подпишитесь на DDIntel Здесь.
Посетите наш сайт здесь: https://www.datadriveninvestor.com
Присоединяйтесь к нашей сети здесь: https://datadriveninvestor.com/collaborate