- The goal of this post is to perform a comprehensive QC assessment of the best selected growth stocks in Q1’23. These stocks are A (Strong Buy) rated in the POWR Ratings system. The POWR Ratings assess stocks by 118 different factors, each with its own weighting.
- It is important to verify the A-score in a comparative technical analysis of two independent digital stock screeners such as TradingView and the Python Algo Trading algorithm.
- Today we look at AstraZeneca PLC (AZN). Headquartered in Cambridge, the United Kingdom, AZN is a global, science-led biopharmaceutical business that focuses on discovering, developing, manufacturing, and commercializing prescription medicines used by millions of patients worldwide.
- On January 9, 2023, AZN entered into a definitive agreement to acquire CinCor Pharma, Inc., a US-based clinical-stage biopharmaceutical company focused on developing novel treatments for resistant and uncontrolled hypertension and chronic kidney disease. This is expected to be an essential boost to the company’s portfolio.
StockNews
- AZN’s forward P/E of 24.25x is 6.5% lower than the industry average of 25.93x. Its forward EV/EBIT of 16.29x is 4.1% lower than the industry average of 17.00x.
- AZN’s trailing-12-month ROCE and ROTC of 8.62% and 7.61% are higher than the negative industry averages of 39.80% and 22.18%.
- AZN’s product sales came in at $10.80 billion for the 2022 fourth quarter, up 2% year-over-year. Its total revenue increased marginally year-over-year to $11.21 billion.
- Street expects AZN’s revenue to increase 3.9% year-over-year to $46.08 billion in the current fiscal year, 2023.
- Its EPS is expected to increase by 16.2% per annum for the next five years. It surpassed EPS estimates in all four trailing quarters.
- Over the past year, the stock has gained 17.5% to close the last trading session at $68.88.
- It’s no surprise that AZN has an overall A rating, which equates to a Strong Buy in POWR.
- In addition, it has a B grade for Growth, Stability, and Quality.
- AZN is ranked #10 out of 172 stocks in the Medical – Pharmaceuticals industry. Get additional POWR Ratings for AZN (Value, Momentum, and Sentiment) here.
TradingView

The 1-week summary of AZN based on the most popular technical indicators, such as Moving Averages, Oscillators and Pivots:

TradingView Analyst Rating based upon 42 analysts giving stock ratings to AZN in the past 3 months.

The 37 analysts offering 1 year price forecast for AZN.

AlgoTrading
Let’s set the working directory YOURPATH
import os
os.chdir(‘YOURPATH’)
os. getcwd()
Let’s apply the Algo Stock Trading algorithm to AZN:
- IMPORTING PACKAGES
import numpy as np
import requests
import pandas as pd
import matplotlib.pyplot as plt
from math import floor
from termcolor import colored as cl
plt.style.use(‘fivethirtyeight’)
plt.rcParams[‘figure.figsize’] = (20,10)
- EXTRACTING STOCK DATA
def get_historical_data(symbol, start_date):
api_key = ‘YOUR_API_KEY’
api_url = f’https://api.twelvedata.com/time_series?symbol={symbol}&interval=1day&outputsize=5000&apikey={api_key}’
raw_df = requests.get(api_url).json()
df = pd.DataFrame(raw_df[‘values’]).iloc[::-1].set_index(‘datetime’).astype(float)
df = df[df.index >= start_date]
df.index = pd.to_datetime(df.index)
return df
googl = get_historical_data(‘AZN’, ‘2022-01-01’)
googl.tail()

- DISPARITY INDEX CALCULATION
def get_di(data, lookback):
ma = data.rolling(lookback).mean()
di = ((data – ma) / ma) * 100
return di
googl[‘di_14’] = get_di(googl[‘close’], 14)
googl = googl.dropna()
googl.tail()

- DISPARITY INDEX STRATEGY
def implement_di_strategy(prices, di):
buy_price = []
sell_price = []
di_signal = []
signal = 0
for i in range(len(prices)):
if di[i-4] < 0 and di[i-3] < 0 and di[i-2] < 0 and di[i-1] < 0 and di[i] > 0:
if signal != 1:
buy_price.append(prices[i])
sell_price.append(np.nan)
signal = 1
di_signal.append(signal)
else:
buy_price.append(np.nan)
sell_price.append(np.nan)
di_signal.append(0)
elif di[i-4] > 0 and di[i-3] > 0 and di[i-2] > 0 and di[i-1] > 0 and di[i] < 0:
if signal != -1:
buy_price.append(np.nan)
sell_price.append(prices[i])
signal = -1
di_signal.append(signal)
else:
buy_price.append(np.nan)
sell_price.append(np.nan)
di_signal.append(0)
else:
buy_price.append(np.nan)
sell_price.append(np.nan)
di_signal.append(0)
return buy_price, sell_price, di_signal
buy_price, sell_price, di_signal = implement_di_strategy(googl[‘close’], googl[‘di_14’])
- DISPARITY INDEX TRADING SIGNALS PLOT
ax1 = plt.subplot2grid((11,1), (0,0), rowspan = 5, colspan = 1)
ax2 = plt.subplot2grid((11,1), (6,0), rowspan = 5, colspan = 1)
ax1.plot(googl[‘close’], linewidth = 2, color = ‘#1976d2’)
ax1.plot(googl.index, buy_price, marker = ‘^’, markersize = 12, linewidth = 0, label = ‘BUY SIGNAL’, color = ‘green’)
ax1.plot(googl.index, sell_price, marker = ‘v’, markersize = 12, linewidth = 0, label = ‘SELL SIGNAL’, color = ‘r’)
ax1.legend()
ax1.set_title(‘AZN CLOSING PRICES’)
for i in range(len(googl)):
if googl.iloc[i, 5] >= 0:
ax2.bar(googl.iloc[i].name, googl.iloc[i, 5], color = ‘#26a69a’)
else:
ax2.bar(googl.iloc[i].name, googl.iloc[i, 5], color = ‘#ef5350’)
ax2.set_title(‘AZN DISPARITY INDEX 14’)
plt.show()

- STOCK POSITION
position = []
for i in range(len(di_signal)):
if di_signal[i] > 1:
position.append(0)
else:
position.append(1)
for i in range(len(googl[‘close’])):
if di_signal[i] == 1:
position[i] = 1
elif di_signal[i] == -1:
position[i] = 0
else:
position[i] = position[i-1]
close_price = googl[‘close’]
di = googl[‘di_14’]
di_signal = pd.DataFrame(di_signal).rename(columns = {0:’di_signal’}).set_index(googl.index)
position = pd.DataFrame(position).rename(columns = {0:’di_position’}).set_index(googl.index)
frames = [close_price, di, di_signal, position]
strategy = pd.concat(frames, join = ‘inner’, axis = 1)
strategy.tail()

- BACKTESTING
googl_ret = pd.DataFrame(np.diff(googl[‘close’])).rename(columns = {0:’returns’})
di_strategy_ret = []
for i in range(len(googl_ret)):
returns = googl_ret[‘returns’][i]*strategy[‘di_position’][i]
di_strategy_ret.append(returns)
di_strategy_ret_df = pd.DataFrame(di_strategy_ret).rename(columns = {0:’di_returns’})
investment_value = 10000
number_of_stocks = floor(investment_value/googl[‘close’][0])
di_investment_ret = []
for i in range(len(di_strategy_ret_df[‘di_returns’])):
returns = number_of_stocks*di_strategy_ret_df[‘di_returns’][i]
di_investment_ret.append(returns)
di_investment_ret_df = pd.DataFrame(di_investment_ret).rename(columns = {0:’investment_returns’})
total_investment_ret = round(sum(di_investment_ret_df[‘investment_returns’]), 2)
profit_percentage = floor((total_investment_ret/investment_value)*100)
print(cl(‘Profit gained from the AZN strategy by investing $10k in AZN : {}’.format(total_investment_ret), attrs = [‘bold’]))
print(cl(‘Profit percentage of the AZN strategy : {}%’.format(profit_percentage), attrs = [‘bold’]))
Profit gained from the AZN strategy by investing $10k in AZN : 3474.64 Profit percentage of the AZN strategy : 34%
- SPY ETF COMPARISON
def get_benchmark(start_date, investment_value):
spy = get_historical_data(‘SPY’, start_date)[‘close’]
benchmark = pd.DataFrame(np.diff(spy)).rename(columns = {0:’benchmark_returns’})
investment_value = investment_value
number_of_stocks = floor(investment_value/spy[-1])
benchmark_investment_ret = []
for i in range(len(benchmark['benchmark_returns'])):
returns = number_of_stocks*benchmark['benchmark_returns'][i]
benchmark_investment_ret.append(returns)
benchmark_investment_ret_df = pd.DataFrame(benchmark_investment_ret).rename(columns = {0:'investment_returns'})
return benchmark_investment_ret_df
benchmark = get_benchmark(‘2022-01-01’, 10000)
investment_value = 10000
total_benchmark_investment_ret = round(sum(benchmark[‘investment_returns’]), 2)
benchmark_profit_percentage = floor((total_benchmark_investment_ret/investment_value)*100)
print(cl(‘Benchmark profit by investing $10k : {}’.format(total_benchmark_investment_ret), attrs = [‘bold’]))
print(cl(‘Benchmark Profit percentage : {}%’.format(benchmark_profit_percentage), attrs = [‘bold’]))
print(cl(‘AZN Strategy profit is {}% higher than the Benchmark Profit’.format(profit_percentage – benchmark_profit_percentage), attrs = [‘bold’]))
Benchmark profit by investing $10k : -1570.8 Benchmark Profit percentage : -16% AZN Strategy profit is 50% higher than the Benchmark Profit
Summary
- AZN’s POWR Ratings reflect a very promising outlook. The stock has an overall A rating, which equates to a Strong Buy.
- AZN has a B grade for Stability and Sentiment.
- TradingView Screening of AZN with technical indicators yields STRONG BUY, whereas 1 year price forecast indicates ~11.5% average growth.
- AlgoTrading with DI shows that: the current DI position is 1 (BUY).
- Backtesting Profit gained from the AZN strategy by investing $10k in AZN is 3474.64; Profit percentage of the AZN strategy is 34%.
- SPY ETF Benchmark profit by investing $10k is -1570.8; Benchmark Profit percentage is -16%; AZN Strategy profit is 50% higher than the Benchmark Profit.
Explore More
A Comparative Analysis of The 3 Best U.S. Growth Stocks in Q1’23 – 1. WMT
Biotech Genmab Hold Alert via Fibonacci Retracement Trading Simulations
Python Technical Analysis for BioTech – Get Buy Alerts on ABBV in 2023
COVID-19 Data Visualization, Impact and Vaccine Sentiment Analysis
Make a one-time donation
Make a monthly donation
Make a yearly donation
Choose an amount
Or enter a custom amount
Your contribution is appreciated.
Your contribution is appreciated.
Your contribution is appreciated.
DonateDonate monthlyDonate yearly