V-Score Performance Report Highlights: 5/31/25 Update

TL/DR: The last 30 and 90 days have seen a strong rebound in V-Score performance, with positive V-Scores outperforming negative V-Scores as well as the SPY and QQQ. That said, performance at the tails of the V-Score distribution (>9, <-9), continue to perform relatively inconsistently. Fortunately, such scores are quite rare.

Here we depict rolling 10d forward performance for tickers with Positive V-Scores that are higher than expected given their VaR (green), and those with Negative V-Scores whose VaR is more deeply negative than expected (red). After rough first couple months of atypical performance to start 2025 we have seen a good rebound in the performance of tickers with positive V-Scores relative to those with negative V-Scores.

First, a refresher (or quick intro) on the V-Score:

VecViz offers the V-Score to pre-emptively answer the question “Does this VecViz framework chart suggest a bullish or bearish outlook?”. Our hope is that with that question answered VecViz users will have more energy and impetus to engage with the Vector Strength Histogram. In so doing we believe they will improve their cognition of risk and opportunity. We have many examples of how engaging with the Vector Strength Histogram chart can uncover valuable insights in our “Case Study” blogs.

The V-Score is calculated using machine learning techniques applied to Vector Model inputs and outputs across six time horizons (from 1 day to 1 year)1. The training period for the V-Score includes 250 model dates randomly selected from June 2005 to January 2021. Tickers included in the V-Score training data include nearly all the tickers presented in this report (and very few others). See the full V-Score performance report for more detail.

Each of 6 forward time horizons (1d through 252d, denominated in trading days1) is assigned a quintile ranking score ranging from -2 and +2. The final V-Score is the sum of these horizon scores, thus ranging from -12 (bearish) to +12 (bullish). The full frequency distribution of out of sample V-Score observations over the prior 90 days is depicted below.

V-Scores calculated as of the prior day’s close can be found on the “Dashboards” page of the VecViz website. Detailed descriptions of each of the features contributing to the V-Score can also be found there, by hovering your mouse over the labels in the spider chart, as depicted in the video below. Note that the descriptions refer to primarily visual aspects of other VecViz dashboards.

Performance Metrics Utilized in the V-Score Report

The primary metric used in the report is average price return. No transaction costs, borrowing cost or repo costs are included. See the report for additional important disclosures on how returns are calculated.

A secondary metric used in the report is Information Ratio (IR), which we calculate by dividing the average return by the standard deviation of returns2. The information ratio allows comparison on the basis of average return adjusted for return volatility.

The report allows for easy comparison between V-Score interval groupings of ticker-model dates (TMD’s). Price returns and IR’s for the average ticker for which VecViz generates V-Scores (“AvgTicker_VV”), and to well known ETF’s such as “SPY” and “QQQ” are also provided, for comparison purposes.

Ticker Groupings Utilized in the V-Score Report

Some V-Score interval TMD groupings are broad, such as “PosVS” and “NegVS”, which represent all positive and negative VS, respectively. Others are much, much more narrow, such as VS>9 and VS <-9, representing TMD’s with VS greater than 9 and less than -9, respectively (see V-Score frequency histogram above). Note that the thinner diversification of such groupings makes their performance more vulnerable to the influence of outliers.

To illustrate the ability to utilize the V-Score in conjunction with other metrics, we also include V-Score groupings that take into consideration VaR as well: “PosVaRAdjVS (Bull)” and “NegVaRAdjVS (Bear)”.

  • The PosVaRAdjVS grouping includes ticker-model dates for which the ticker has a positive V-Score that is greater than expected given its 95% VaR level. The rationale here is that tickers with the most bullish (V-Score based) outlooks relative to their downside.
  • The NegVaRAdjVS grouping includes ticker-model dates for which the ticker has a negative V-Score that is less negative than expected given their 95% VaR level. The rationale here is more subtle – the downside for these tickers suggests that the bearishness of their outlook is underappreciated, even by the V-Score.

Finally, to illustrate the magnitude and stability of return differentials between “bullish” and “bearish” V-Scores we also include in the tables featured below two “Long-Short”3 groupings: “PosNeg_Diff” and “VaRAdjPosNeg_Diff”.

  • “PosNeg_Diff” reflects the performance differential between “PosVS (Bull)4” and “NegVS (Bear)5 groupings
  • “VaRAdjPosNeg_Diff” reflects the performance differential between the “PosVaRAdjVS (Bull)” and “NegVaRAdjVS (Bear)”, groupings.

Fig1: V-Score Performance By Grouping for the prior 30 and 90 days (P30D & P90D):

IR = Information Ratio = Avg Return / Std Dev Returns. Overlapping periods for horizons > 1d make associated IR’s valid for comparison within the bounds of these tables only. Excerpted from pages 36 and 43 of the 5/31/25 V-Score Performance Report.

Fig2: V-Score Performance By Grouping for the prior 365 and the entire 3+ year out of sample VecViz performance period (P365D & “AllD”):

IR = Information Ratio = Avg Return / Std Dev Returns. Overlapping periods for horizons > 1d make associated IR’s valid for comparison within the bounds of these tables only. Excerpted from pages 22 and 29 of the 5/31/25 V-Score Performance Report.

Fig3: Tickers driving P30D performance of Pos & Neg V-Scores.

“Bullish” tickers here have positive V-Scores, “Bearish” tickers have negative V-Scores. On the left we look at the highest average 10d horizon returns over the prior 30 days. We like to see high returns for positive V-Scores, so we highlight the “Bullish” column on the left green to indicate that the V-Score worked well for those tickers (and we mark the “Bearish” column red). On the right we look at the lowest average 10d returns over the prior 30 days. We like to see negative V-Scores have low returns, so we highlight the “Bearish” column green, to indicate that the V-Score worked well for those tickers (and we mark the “Bullish” column red). The “Count” column indicates how many model dates over the prior 30 days did the ticker have a “Bullish” or “Bearish” V-Score. Thus, the occurrence of some tickers in both the “Bullish” and “Bearish” columns. These tables were excerpted from p.112 and p.193 of the 5/31/25 V-Score Performance Report. Similar tables for the 1d time horizon is also available in the report for the P30d performance window.

Fig4: Tickers driving P90D performance of Pos & Neg V-Scores.

“Bullish” tickers here have positive V-Scores, “Bearish” tickers have negative V-Scores. On the left we look at the highest average 10d horizon returns over the prior 90 days. We like to see high returns for positive V-Scores, so we highlight the “Bullish” column on the left green to indicate that the V-Score worked well for those tickers (and we mark the “Bearish” column red). On the right we look at the lowest average 10d returns over the prior 90 days. We like to see negative V-Scores have low returns, so we highlight the “Bearish” column green, to indicate that the V-Score worked well for those tickers (and we mark the “Bullish” column red). The “Count” column indicates how many model dates over the prior 90 days did the ticker have a “Bullish” or “Bearish” V-Score. Thus, the occurrence of some tickers in both the “Bullish” and “Bearish” columns. These tables were excerpted from p.109 and p.174 of the 5/31/25 V-Score Performance Report. Similar tables for the 1d and 21d time horizon are also available in the report for the P90d performance window.

Fig5: Tickers driving P365D performance of Pos & Neg V-Scores.

“Bullish” tickers here have positive V-Scores, “Bearish” tickers have negative V-Scores. On the left we look at the highest average 10d horizon returns over the prior 365 days. We like to see high returns for positive V-Scores, so we highlight the “Bullish” column on the left green to indicate that the V-Score worked well for those tickers (and we mark the “Bearish” column red). On the right we look at the lowest average 10d returns over the prior 365 days. We like to see negative V-Scores have low returns, so we highlight the “Bearish” column green, to indicate that the V-Score worked well for those tickers (and we mark the “Bullish” column red). The “Count” column indicates how many model dates over the prior 365 days did the ticker have a “Bullish” or “Bearish” V-Score. Thus, the occurrence of some tickers in both the “Bullish” and “Bearish” columns. These tables were excerpted from p.104 and p.185 of the 5/31/25 V-Score Performance Report. Similar tables for the 1d, 21d, 63d and 126d time horizons are also available in the report for the P365d performance window.

Fig6: Tickers driving “AllD” performance of Pos & Neg V-Scores.

“Bullish” tickers here have positive V-Scores, “Bearish” tickers have negative V-Scores. On the left we look at the highest average 10d horizon returns over VecViz’s entire 3+ year out of sample performance period (“AllD”). We like to see high returns for positive V-Scores, so we highlight the “Bullish” column on the left green to indicate that the V-Score worked well for those tickers (and we mark the “Bearish” column red). On the right we look at the lowest average 10d returns over AllD. We like to see negative V-Scores have low returns, so we highlight the “Bearish” column green, to indicate that the V-Score worked well for those tickers (and we mark the “Bullish” column red). The “Count” column indicates how many model dates over AllD did the ticker have a “Bullish” or “Bearish” V-Score. Thus, the occurrence of some tickers in both the “Bullish” and “Bearish” columns. These tables were excerpted from p.82 and p.179 of the 5/31/25 V-Score Performance Report. Similar tables for the 1d, 21d, 63d, 126d and 252d time horizons are also available in the report for the AllD performance window.

Fig 7: The V-Score Report Card, a broader view of V-Score performance

Each column of the table is a time horizon and each row is a ticker grouping described by the tickers excluded2 and lookback window (from 5/31/2025) combination. For example, the Average Price Return and IR heatmaps in the earlier section represent all tickers for the entire out of sample performance history. The evaluation of the results presented in those heatmaps appears in the “None_30D”, “None_90D”, “None_365D”, “None_AllD” rows of the Report Card below (because tickers excluded are “None” and the lookback window includes “All” model dates). For example, during the prior 90d window 70% of V-Score objectives were met for the 10d performance horizon  if tickers in the “Debt” category are excluded.   Finally, cells for which the time horizon exceeds the lookback window have a “nan%” value.
This table details the performance objective criteria utilized in the report card, with % of objectives met across forward time horizons by lookback window populating the body of the table. This is from p.20 of the 5/31/25 V-Score Performance Report. The report also includes a table showing % of Objectives met for each criteria across lookback windows by forward time horizon and overall, across horizons and lookback windows.

Related reports and reference info:

See the Reports page of our site for the full V-Score Performance Report, and similar reports on Value at Risk (VaR), Opportunity at Risk (OaR), Expected Body Up and Down, and our Option Fair Value Estimates. There is also a report that aggregates the report cards of all the metrics.

See our Methodology oriented blogs, including those relating to Vector Strength and Support and Resistance, to learn more about the Vector Model and the V-Score which relies exclusively upon its inputs and outputs.

  1. 10d = 2 weeks, 21d = 1 month, 63d = 3 months, 126d= 6 months, 252d = 1 year, approximately. ↩︎
  2. Ticker Exclusion Groupings:
    None: all ~150 tickers covered included, none excluded
    CryptMem: excludes MSTR, GBTC, AMC, GME
    FailedBanks: excludes SIVBQ, SBNY, FRCB
    SmallCap: excludes NAVI, LUMN, CYH, NWL, KALU, IEP, POST, GT, BHC
    Mag7: excludes NVDA, NFLX, MSFT, AMZN, GOOGL, META, TSLA
    Semi: excludes NVDA, AMD, AVGO, MU, AMAT, CDNS, TXN, ON, QCOM, INTC, WDC
    Debt: excludes TLT, LQD, MUB, VCSH, HYG, EMB, FRA ↩︎

Leave a Comment

Your email address will not be published. Required fields are marked *