Methodology

Understanding the VP Investments signal ranking system

VP Investments Quantitative Signal Scoring
VP Investments uses a multi-factor quantitative model to rank investment opportunities across 6 distinct signal groups. Each stock receives a composite score based on 158 factors spanning technical analysis, fundamental metrics, news sentiment, social media buzz, risk characteristics, and institutional activity.

Key Principles

  • Data-driven: All signals derived from quantitative factors
  • Multi-dimensional: 6 distinct signal groups capture different aspects
  • Normalized scoring: Z-score normalization enables fair comparison
  • Weighted aggregation: Factor and group weights based on predictive power
  • Transparent: Full factor breakdown and methodology documentation
Signal Group Weights
How different signal categories contribute to the overall score
Fundamental45 factors
25.0%
Technical41 factors
20.0%
News & Macro18 factors
15.0%
Risk & Stability23 factors
15.0%
Institutional & Smart Money23 factors
15.0%
Social & Alternative10 factors
10.0%
Total Signal Groups:6
Total Factors:160
Scoring Process
How raw data is transformed into actionable signals

1. Normalization (Robust Z-Score)

Each factor is normalized using robust statistics to handle outliers: 1. Calculate median and MAD (Median Absolute Deviation) across all tickers 2. Compute z-score: (value - median) / (1.4826 * MAD) 3. Clip extreme values to [-5, +5] range 4. Result: normalized scores centered at 0, typically in [-3, +3] range

Advantages:

Resistant to outliers and extreme valuesComparable across factors with different scalesMaintains relative ranking informationStatistically interpretable (standard deviations from median)

2. Factor Weighting

Within each group, factors are weighted based on their relative importance and historical predictive power. Factor weights sum to 1.0 within each group. Configured in weights.yaml under factor_weights_[group_name].

3. Group Weighting

Six signal groups are combined using predefined weights that reflect their relative importance in the overall investment decision. Group weights sum to 1.0.

Score Interpretation
Understanding what the scores mean

Overall Score

The overall signal score is a weighted combination of all six group scores. Higher scores indicate stronger bullish signals across multiple dimensions.

strong buy> 0.75
buy0.50 to 0.75
hold-0.25 to 0.50
sell-0.50 to -0.25
strong sell< -0.50

Scores are relative rankings within the analyzed universe. A score of 0.80 means the stock ranks highly across most signal groups. Focus on top-ranked stocks for long positions, lowest-ranked for short or avoid.

Coverage Quality

Coverage percentage indicates what fraction of factors could be calculated. Low coverage may indicate missing data or lack of applicability (e.g., ETFs don't have fundamental data like earnings).

excellent:> 90% coverage
good:80-90% coverage
acceptable:70-80% coverage
caution:< 70% coverage

Higher coverage generally means more reliable signals. Be cautious with low-coverage scores as they may be based on incomplete information.

Important Limitations
  • Historical performance does not guarantee future results
  • Quantitative models may not capture all market dynamics
  • Data quality and availability vary across tickers
  • Model performance depends on market regime and conditions
  • Not investment advice - for informational purposes only
  • Backtesting in development - current signals not validated
  • ETFs and certain securities may have limited factor coverage
Factor Library
Complete catalog of all 160 factors used in signal ranking
Showing 160 of 160 factors
operating_marginFundamental
Weight: 4.50%

Operating Profit Margin (operating income / revenue)

roeFundamental
Weight: 4.20%

Return on Equity (net income / shareholder equity)

pe_ratioFundamental
Weight: 4.00%

Price-to-Earnings ratio (trailing 12 months)

peg_ratioFundamental
Weight: 4.00%

Price/Earnings-to-Growth ratio (PE / earnings growth rate)

earnings_growth_yoyFundamental
Weight: 4.00%

Year-over-year earnings growth rate

gross_marginFundamental
Weight: 3.80%

Gross Profit Margin (gross profit / revenue)

net_marginFundamental
Weight: 3.70%

Net Profit Margin (net income / revenue)

forward_peFundamental
Weight: 3.60%

Forward Price-to-Earnings ratio (next 12 months estimate)

roicFundamental
Weight: 3.60%

Return on Invested Capital (NOPAT / invested capital)

revenue_growth_yoyFundamental
Weight: 3.60%

Year-over-year revenue growth rate

eps_growth_yoyFundamental
Weight: 3.60%

Year-over-year earnings per share growth rate

ev_ebitdaFundamental
Weight: 3.10%

Enterprise Value to EBITDA ratio

ebitda_marginFundamental
Weight: 3.10%

EBITDA Margin (EBITDA / revenue)

roaFundamental
Weight: 3.10%

Return on Assets (net income / total assets)

ev_fcfFundamental
Weight: 2.70%

Enterprise Value to Free Cash Flow ratio

fcf_marginFundamental
Weight: 2.70%

Free Cash Flow Margin (FCF / revenue)

roceFundamental
Weight: 2.70%

Return on Capital Employed (EBIT / capital employed)

debt_to_equityFundamental
Weight: 2.70%

Debt-to-Equity ratio (total debt / shareholder equity)

pb_ratioFundamental
Weight: 2.20%

Price-to-Book ratio (market cap / book value)

earnings_growth_qoqFundamental
Weight: 2.20%

Quarter-over-quarter earnings growth rate

current_ratioFundamental
Weight: 2.20%

Current Ratio (current assets / current liabilities)

ps_ratioFundamental
Weight: 1.80%

Price-to-Sales ratio (market cap / revenue)

ev_salesFundamental
Weight: 1.80%

Enterprise Value to Sales ratio

p_fcfFundamental
Weight: 1.80%

Price to Free Cash Flow ratio

earnings_yieldFundamental
Weight: 1.80%

Earnings Yield (inverse of PE ratio)

revenue_growth_qoqFundamental
Weight: 1.80%

Quarter-over-quarter revenue growth rate

eps_growth_qoqFundamental
Weight: 1.80%

Quarter-over-quarter earnings per share growth rate

quick_ratioFundamental
Weight: 1.80%

Quick Ratio (liquid assets / current liabilities)

debt_to_assetsFundamental
Weight: 1.80%

Debt-to-Assets ratio (total debt / total assets)

gross_profit_to_assetsFundamental
Weight: 1.50%

Gross Profit to Assets ratio (profitability efficiency metric)

accruals_ratioFundamental
Weight: 1.50%

Accruals Ratio: (Net Income - Operating CF) / Total Assets

interest_coverageFundamental
Weight: 1.40%

Interest Coverage ratio (EBIT / interest expense)

interest_burdenFundamental
Weight: 1.20%

Interest Burden ratio (EBIT / Interest Expense)

capex_to_cfoFundamental
Weight: 1.20%

Capital Expenditure to Operating Cash Flow ratio

net_debt_to_ebitdaFundamental
Weight: 1.20%

Net Debt to EBITDA: (Total Debt - Cash) / EBITDA

fcf_growth_yoyFundamental
Weight: 1.00%

Year-over-year free cash flow growth rate

asset_turnoverFundamental
Weight: 1.00%

Asset Turnover ratio (revenue / average total assets)

inventory_turnoverFundamental
Weight: 1.00%

Inventory Turnover ratio (COGS / average inventory)

receivables_turnoverFundamental
Weight: 1.00%

Receivables Turnover ratio (revenue / average receivables)

profitability_trend_3yFundamental
Weight: 1.00%

3-year profitability trend (slope of quarterly gross margins)

cash_to_debtFundamental
Weight: 0.90%

Cash-to-Debt ratio (cash & equivalents / total debt)

book_value_per_shareFundamental
Weight: 0.70%

Book Value per Share (equity / shares outstanding)

fcf_per_shareFundamental
Weight: 0.70%

Free Cash Flow per Share (FCF / shares outstanding)

tangible_book_per_shareFundamental
Weight: 0.60%

Tangible Book Value per Share (tangible equity / shares)

shares_change_1yFundamental
Weight: 0.40%

Year-over-year change in shares outstanding (dilution/buyback)

analyst_rating_momentum_3mInstitutional & Smart Money
Weight: 7.00%

3-month analyst rating momentum (upgrade/downgrade trend)

analyst_rating_avgInstitutional & Smart Money
Weight: 6.00%

Average analyst rating (1=Strong Buy, 5=Strong Sell)

inst_ownership_pctInstitutional & Smart Money
Weight: 5.00%

Percentage of shares held by institutional investors

price_target_upside_pctInstitutional & Smart Money
Weight: 5.00%

Implied upside from current price to mean target

smart_money_flowInstitutional & Smart Money
Weight: 5.00%

Composite smart money indicator (institutional + insider + analyst signals)

inst_holder_countInstitutional & Smart Money
Weight: 4.00%

Number of institutional holders

insider_txn_count_6mInstitutional & Smart Money
Weight: 4.00%

Number of insider transactions over past 6 months

analyst_countInstitutional & Smart Money
Weight: 4.00%

Number of analysts covering the stock

strong_buy_countInstitutional & Smart Money
Weight: 4.00%

Number of Strong Buy ratings

inst_concentration_top10Institutional & Smart Money
Weight: 3.00%

Percentage of shares held by top 10 institutions

insider_net_shares_6mInstitutional & Smart Money
Weight: 3.00%

Net insider buying/selling (shares bought - sold)

analyst_consensus_changeInstitutional & Smart Money
Weight: 3.00%

Change in analyst consensus rating

strong_sell_countInstitutional & Smart Money
Weight: 3.00%

Number of Strong Sell ratings

price_target_meanInstitutional & Smart Money
Weight: 3.00%

Mean analyst price target

institutional_concentration_top5Institutional & Smart Money
Weight: 3.00%

Percentage of shares held by top 5 institutions

price_target_highInstitutional & Smart Money
Weight: 2.00%

Highest analyst price target

price_target_lowInstitutional & Smart Money
Weight: 2.00%

Lowest analyst price target

price_target_dispersionInstitutional & Smart Money
Weight: 2.00%

Standard deviation of analyst price targets

insider_transaction_intensityInstitutional & Smart Money
Weight: 2.00%

Log-transformed insider transaction count

analyst_consensus_strengthInstitutional & Smart Money
Weight: 0.00%

Strength of analyst consensus (low dispersion = high strength)

analyst_upgrade_count_3mInstitutional & Smart Money
Weight: 0.00%

Number of analyst upgrades over past 3 months

analyst_downgrade_count_3mInstitutional & Smart Money
Weight: 0.00%

Number of analyst downgrades over past 3 months

analyst_momentumInstitutional & Smart Money
Weight: 0.00%

Net analyst momentum score (upgrades - downgrades)

news_sentimentNews & Macro
Weight: 12.00%

Average sentiment score from recent news articles

news_sentiment_consensusNews & Macro
Weight: 11.00%

Consensus news sentiment (% positive articles)

market_regimeNews & Macro
Weight: 9.00%

Current market regime classification (bull/bear/neutral)

earnings_surprise_lastNews & Macro
Weight: 8.00%

Most recent earnings surprise (actual - expected)

earnings_beat_streakNews & Macro
Weight: 7.00%

Consecutive quarters of beating earnings estimates

days_to_earningsNews & Macro
Weight: 5.00%

Days until next earnings announcement

spy_correlation_60dNews & Macro
Weight: 5.00%

60-day correlation with S&P 500 index

sector_momentum_30dNews & Macro
Weight: 5.00%

30-day momentum of stock's sector

vix_levelNews & Macro
Weight: 5.00%

Current VIX volatility index level

pre_earnings_flagNews & Macro
Weight: 4.00%

Boolean flag indicating within 5 days before earnings

post_earnings_flagNews & Macro
Weight: 4.00%

Boolean flag indicating within 5 days after earnings

sector_relative_strengthNews & Macro
Weight: 4.00%

Stock's relative strength versus sector

treasury_yield_10yNews & Macro
Weight: 4.00%

10-year US Treasury yield

credit_spreadNews & Macro
Weight: 3.00%

Corporate credit spread (BBB - Treasury)

earnings_revision_3mNews & Macro
Weight: 2.00%

Net analyst earnings revisions over 3 months (upgrades - downgrades)

eps_surprise_std_4qNews & Macro
Weight: 2.00%

Standard deviation of earnings surprises over last 4 quarters

post_earnings_drift_21dNews & Macro
Weight: 2.00%

21-day cumulative return following earnings announcement

price_target_dispersion_ratioNews & Macro
Weight: 2.00%

Price target dispersion: (High - Low) / Mean target

volatility_60dRisk & Stability
Weight: 9.00%

60-day annualized volatility

volatility_30dRisk & Stability
Weight: 7.00%

30-day annualized volatility (standard deviation of returns)

correlation_spy_60dRisk & Stability
Weight: 7.00%

60-day correlation coefficient with S&P 500

volatility_90dRisk & Stability
Weight: 6.00%

90-day annualized volatility

volatility_percentileRisk & Stability
Weight: 6.00%

Current volatility percentile versus 1-year history

max_drawdown_1yRisk & Stability
Weight: 6.00%

Maximum peak-to-trough decline over past year

sharpe_ratio_60dRisk & Stability
Weight: 6.00%

60-day Sharpe ratio (risk-adjusted return)

beta_60dRisk & Stability
Weight: 5.00%

60-day beta versus S&P 500 (systematic risk measure)

drawdown_currentRisk & Stability
Weight: 5.00%

Current drawdown from most recent peak

recovery_timeRisk & Stability
Weight: 5.00%

Days elapsed since maximum drawdown

sortino_ratio_60dRisk & Stability
Weight: 5.00%

60-day Sortino ratio (downside risk-adjusted return)

downside_deviation_60dRisk & Stability
Weight: 4.00%

60-day downside deviation (volatility of negative returns only)

beta_252dRisk & Stability
Weight: 4.00%

252-day (1-year) beta versus S&P 500

max_drawdown_6mRisk & Stability
Weight: 4.00%

Maximum peak-to-trough decline over past 6 months

liquidity_scoreRisk & Stability
Weight: 4.00%

Composite liquidity score (volume, spread, market cap)

calmar_ratioRisk & Stability
Weight: 3.00%

Calmar ratio (annual return / max drawdown)

bid_ask_spread_pctRisk & Stability
Weight: 3.00%

Bid-ask spread as percentage of mid price

days_to_trade_positionRisk & Stability
Weight: 2.00%

Estimated days to liquidate position without market impact

volatility_of_volatility_30dRisk & Stability
Weight: 2.00%

Volatility of volatility (standard deviation of 30-day rolling vol)

skewness_90dRisk & Stability
Weight: 2.00%

90-day return distribution skewness (asymmetry measure)

kurtosis_90dRisk & Stability
Weight: 2.00%

90-day return distribution kurtosis (tail risk measure)

drawdown_frequency_90dRisk & Stability
Weight: 2.00%

Frequency of drawdowns exceeding -3% over 90 days

downside_capture_1yRisk & Stability
Weight: 1.00%

1-year downside capture ratio vs S&P 500

reddit_sentimentSocial & Alternative
Weight: 18.00%

Current Reddit sentiment score

reddit_mentions_7dSocial & Alternative
Weight: 15.00%

Number of Reddit mentions over last 7 days

reddit_sentiment_consensusSocial & Alternative
Weight: 15.00%

Reddit sentiment consensus (% positive mentions)

reddit_sentiment_7dSocial & Alternative
Weight: 12.00%

Average Reddit sentiment score over last 7 days

buzz_vs_baselineSocial & Alternative
Weight: 9.00%

Current buzz level versus historical baseline

mention_velocitySocial & Alternative
Weight: 8.00%

Rate of mentions (mentions per hour)

sentiment_consensusSocial & Alternative
Weight: 8.00%

Overall social sentiment consensus (% positive)

reddit_upvotes_avgSocial & Alternative
Weight: 7.00%

Average upvotes per Reddit mention

reddit_comments_avgSocial & Alternative
Weight: 5.00%

Average comments per Reddit mention

contrarian_signalSocial & Alternative
Weight: 3.00%

Contrarian indicator (high mentions with negative price action)

price_1d_pctTechnical
Weight: 7.00%

1-day percentage price change

price_7d_pctTechnical
Weight: 7.00%

7-day percentage price change

price_30d_pctTechnical
Weight: 6.00%

30-day percentage price change

rsi_14Technical
Weight: 5.00%

14-period Relative Strength Index (0-100 scale)

macd_histTechnical
Weight: 4.00%

MACD histogram (MACD value minus signal line)

momentum_30d_pctTechnical
Weight: 3.00%

30-day momentum indicator (rate of change)

momentum_60d_pctTechnical
Weight: 3.00%

60-day momentum indicator (rate of change)

macd_valueTechnical
Weight: 3.00%

Moving Average Convergence Divergence value

macd_bullishTechnical
Weight: 3.00%

Boolean flag indicating positive MACD histogram

sma_50Technical
Weight: 3.00%

50-day Simple Moving Average

sma_200Technical
Weight: 3.00%

200-day Simple Moving Average

price_vs_sma_50_pctTechnical
Weight: 3.00%

Percentage distance of price from 50-day SMA

volume_20d_avgTechnical
Weight: 3.00%

20-day average trading volume

volume_spike_ratioTechnical
Weight: 3.00%

Current volume divided by 20-day average volume

volume_price_correlationTechnical
Weight: 3.00%

Correlation between volume and price changes

off_high_52w_pctTechnical
Weight: 3.00%

Percentage distance from 52-week high

momentum_90d_pctTechnical
Weight: 2.00%

90-day momentum indicator (rate of change)

rsi_overboughtTechnical
Weight: 2.00%

Boolean flag indicating RSI > 70 (overbought condition)

rsi_oversoldTechnical
Weight: 2.00%

Boolean flag indicating RSI < 30 (oversold condition)

macd_signalTechnical
Weight: 2.00%

MACD signal line (9-period EMA of MACD)

sma_20Technical
Weight: 2.00%

20-day Simple Moving Average

price_vs_sma_200_pctTechnical
Weight: 2.00%

Percentage distance of price from 200-day SMA

bb_widthTechnical
Weight: 2.00%

Bollinger Band width (normalized volatility measure)

bb_positionTechnical
Weight: 2.00%

Price position within Bollinger Bands (0-1 scale)

adv_20d_usdTechnical
Weight: 2.00%

Average daily dollar volume over 20 trading days

off_low_52w_pctTechnical
Weight: 2.00%

Percentage distance from 52-week low

intraday_range_pctTechnical
Weight: 2.00%

Intraday high-low range as percentage of close

momentum_consistency_3mTechnical
Weight: 2.00%

Percentage of up-days over 63 trading days (3 months)

breakout_flag_20dTechnical
Weight: 2.00%

Boolean flag for price breakout above 20-day high with volume confirmation

ema_12Technical
Weight: 1.00%

12-day Exponential Moving Average

ema_26Technical
Weight: 1.00%

26-day Exponential Moving Average

sma_50_above_200Technical
Weight: 1.00%

Boolean golden cross indicator (50-day SMA > 200-day SMA)

bb_upperTechnical
Weight: 1.00%

Upper Bollinger Band (20-day SMA + 2 std dev)

bb_middleTechnical
Weight: 1.00%

Middle Bollinger Band (20-day SMA)

bb_lowerTechnical
Weight: 1.00%

Lower Bollinger Band (20-day SMA - 2 std dev)

atr_14Technical
Weight: 1.00%

14-period Average True Range (absolute volatility)

atr_14_normTechnical
Weight: 1.00%

Normalized ATR (ATR divided by current price)

volatility_contraction_rankTechnical
Weight: 1.00%

ATR percentile rank versus 1-year historical distribution

intraday_reversal_strengthTechnical
Weight: 1.00%

Intraday reversal measure: (Close-Low)/(High-Low)

volume_dryup_ratioTechnical
Weight: 1.00%

Volume decline indicator: 5-day avg / 60-day avg volume

gap_strength_30dTechnical
Weight: 1.00%

Average opening gap size over 30 days (normalized by close)

Methodology Version 1.0 • Last Updated: 2025-10-20