A Comparative Analysis of The 3 Best Global Growth Stocks in Q1’23 – 2. AZN

  • 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

TradingView stock AZN 1-month

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

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.

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()

AZN historical stock data table
  • 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()

AZZ stock data table with the DI column
  • 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()

AZN closing prices vs DI-14 with trading signals
  • 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()

AZN stock position vs trading signals
  • 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

Drag Review Data Analytics

AI-Guided Drug Recommendation

COVID-19 Data Visualization, Impact and Vaccine Sentiment Analysis


One-Time
Monthly
Yearly

Make a one-time donation

Make a monthly donation

Make a yearly donation

Choose an amount

$5.00
$15.00
$100.00
$5.00
$15.00
$100.00
$5.00
$15.00
$100.00

Or enter a custom amount

$

Your contribution is appreciated.

Your contribution is appreciated.

Your contribution is appreciated.

DonateDonate monthlyDonate yearly
Advertisement

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: