Отключване на пазарно лидерство: Идентифицирайте печелившите акции с прецизност

Въведение

В света на финансите идентифицирането на най-добре представящите се акции е от решаващо значение за успешното инвестиране. Сред различните показатели, рейтингът на относителната сила (RS) се откроява като мощен инструмент за разграничаване на пазарните лидери от изоставащите. В тази статия ще проучим как да използваме Python, за да изчислим RS рейтинга, подобно на собствения показател на Investor’s Business Daily. Следвайки това ръководство, вие ще придобиете знания и умения за анализиране на представянето на акциите и вземане на информирани инвестиционни решения. И така, нека се потопим в завладяващия свят на Python за финанси и да отключим тайните на RS Rating!

Раздел 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 рейтингът е само един от многото инструменти в арсенала на опитен инвеститор. Допълнителни подобрения на този код могат да включват включване на допълнителни финансови индикатори и разширяване на анализа към други пазарни индекси. Като непрекъснато усъвършенствате уменията си за 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