Отключване на пазарно лидерство: Идентифицирайте печелившите акции с прецизност
Въведение
В света на финансите идентифицирането на най-добре представящите се акции е от решаващо значение за успешното инвестиране. Сред различните показатели, рейтингът на относителната сила (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