Featured Photo by Karolina Grabowska on Pexels
- The U.S. labor market remains strong despite lingering macroeconomic headwinds. Moreover, consumer spending has been largely resilient in the face of high inflation and steep interest-rate hikes. According to Bank of America (BAC), their credit and debit card spending per household rose 5.1% year-over-year in January, compared to 2.2% in December 2022.
- The goal of this post is to perform a comprehensive QC assessment of the best selected U.S. 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.
- Following StockNews, the focus is on the best 3 growth stocks such as Walmart Inc. (WMT) , AstraZeneca PLC (AZN), and LSI Industries Inc. (LYTS).
Let’s begin with WMT that operates a chain of hypermarkets (also called supercenters), discount department stores, and grocery stores in the United States, headquartered in Bentonville, Arkansas.
Table of Contents
StockNews Rating
- Walmart Inc. (WMT) operates retail, wholesale, and other units worldwide.
- In terms of forward EV/Sales, WMT’s 0.75x is 57.2% lower than the industry average of 1.76x, while its forward Price/Sales of 0.64x is 45.8% lower than the industry average of 1.19x.
- WMT’s trailing-12-month ROCE and ROTC of 11.61% and 10.10% are 11.6% and 63.9% higher than the industry averages of 10.40% and 6.17%.
- Analysts expect WMT’s revenue to increase 5.9% year-over-year to $606.38 billion in the current fiscal year, 2023.
- Its EPS is expected to increase by 4.3% per annum for the next five years. It surpassed EPS estimates in three of the four trailing quarters.
- Over the past year, the stock has gained 5.6% to close the last trading session at $143.72.
- WMT’s POWR Ratings reflect this promising outlook. The stock has an overall A rating, which equates to a Strong Buy.
- WMT has a B grade for Stability and Sentiment. WMT is ranked #8 out of 39 stocks in the A-rated Grocery/Big Box Retailers industry.
- Click here for additional WMT ratings (Growth, Value, Momentum, and Quality).
TradingView Screening

The 1-week summary of Walmart Inc is 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 WMT in the past 3 months.

The 37 analysts offering 1 year price forecast for WMT.

Algo Trading Testing
Let’s set the working directory YOURPATH
import os
os.chdir(‘YOURPATH’)
os. getcwd()
Let’s apply the Algo Stock Trading algorithm to WMT:
- 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(‘WMT’, ‘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(‘WMT 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(‘WMT 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 WMT strategy by investing $10k in WMT : {}’.format(total_investment_ret), attrs = [‘bold’]))
print(cl(‘Profit percentage of the WMT strategy : {}%’.format(profit_percentage), attrs = [‘bold’]))
Profit gained from the WMT strategy by investing $10k in WMT : 255.6 Profit percentage of the WMT strategy : 2%
- BENCHMARK 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(‘WMT Strategy profit is {}% higher than the Benchmark Profit’.format(profit_percentage – benchmark_profit_percentage), attrs = [‘bold’]))
Benchmark profit by investing $10k : -1562.88 Benchmark Profit percentage : -16% WMT Strategy profit is 18% higher than the Benchmark Profit
Summary
- WMT’s POWR Ratings reflect a very promising outlook. The stock has an overall A rating, which equates to a Strong Buy.
- WMT has a B grade for Stability and Sentiment.
- TradingView Screening of WMT with technical indicators yields STRONG BUY, whereas 1 year price forecast indicates ~11% average growth.
- Algo Trading with DI shows that: the current DI position is 1 (BUY),
Backtesting: Profit gained from the WMT strategy by investing $10k in WMT is $255.6; Profit percentage of the WMT strategy is 2%.
Benchmark ETF Comparison: Benchmark profit by investing $10k is -$1562.88;
Benchmark Profit percentage is -16%; WMT Strategy profit is 18% higher than the Benchmark Profit.
Explore More
- Zacks Investment Research Update Q4’22
- The Zacks Steady Investor – A Quick Look
- All Eyes on ETFs Sep ’22
- Zacks Insights into this High Inflation/Rising Rate Market
- SeekingAlpha Risk/Reward July Rundown
- Zacks Insights into the Commodity Bull Market
- Are Blue-Chips Perfect for This Bear Market?
- Bear Market Similarity Analysis using Nasdaq 100 Index Data
- AAPL Stock Technical Analysis 2 June 2022
- Inflation-Resistant Stocks to Buy
- A Weekday Market Research Update
- Stocks on Watch Tomorrow
- Stocks to Watch in 2023: MarketBeat Ideas
- Upswing Resilient Investor Guide
- Investment Risk Management Study
- Track All Markets with TradingView
Related News
- US retail sales post biggest jump in nearly two years via @AJEnglish
- Walmart: Still A Stalwart In New Consumer Context
- Walmart: Analysts And Traders Agree On A Positive 2023 Outlook
- Zacks: Retail Sales Increased in January 2023.
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