Purpose and recommended workflow
This application combines historical share-price performance with several simplified intrinsic-value estimates in one dashboard. It retrieves market history and company fundamentals from Yahoo Finance, calculates performance metrics and valuation estimates, and saves each completed analysis as a report.
- Select a saved watchlist and choose a date range.
- Optionally adjust Intrinsic Value Models and their assumptions.
- Run Analyze Market & Valuation.
- Review, sort, filter, and export the Valuation Results.
- Use Analysis Logs & History to revisit a report, load its results, or save its tickers as a watchlist.
All estimates are informational calculations, not investment advice, guarantees, or recommendations to buy or sell a security.
Market Analysis Controls
Select Watchlist
Choose the ticker list to analyze. The active watchlist name is also shown in the application header. Changes made in Watchlist Manager become analysis inputs after they are saved.
Choose dates
Enter a Start Date and End Date directly, or use one of the date presets. A preset updates both dates and uses today as its end date:
| Preset | Start date |
|---|---|
| MTD | First day of the current month |
| 1D / 5D / 30D | 1/5/30 days before today |
| 1M / 3M / 6M | One/Three/Six calendar months before today |
| YTD | January 1 of the current year |
| 1Y / 2Y | One/Two year before today |
Analyze Market & Valuation
Runs the analysis for the selected watchlist tickers and dates using the current model settings. The app retrieves up to 24 months of price history through the requested end date, calculates metrics, saves an analysis log, and switches to Valuation Results. The selected date period is used for period return and maximum drawdown; the extended history is used for the 24-month high and low.
Valuation Results
Summary cards
- Total Stocks Analyzed shows the number of result rows.
- Tickers at/above [level] counts stocks whose Upside % meets the selected Summary Count Level. The card shows the selected percentage threshold without the configurable level name.
- Top Performer shows the ticker with the greatest Period % Change in the current results.
- Max Drawdown shows the ticker with the most negative maximum drawdown in the selected period.
Maximum Drawdown calculation example
Maximum Drawdown measures the largest percentage decline from a running peak to a subsequent trough within the selected date range. For each date , the drawdown is calculated relative to the cumulative peak price observed up to that date, and the Maximum Drawdown is the lowest (most negative) percentage observed:
The table below illustrates this calculation across 4 closing prices for ticker IONQ:
| Date | Closing Price | Step 1: Running Peak (Rolling Max) | Step 2: Drawdown Formula | Step 3: Result |
|---|---|---|---|---|
| 2026-10-01 | $20.00 | $20.00 | ($20.00 − $20.00) / $20.00 |
0.00% |
| 2026-10-02 | $25.00 | $25.00 | ($25.00 − $25.00) / $25.00 |
0.00% |
| 2026-10-03 | $20.00 | $25.00 | ($20.00 − $25.00) / $25.00 |
−20.00% |
| 2026-10-04 | $18.00 | $25.00 | ($18.00 − $25.00) / $25.00 |
−28.00% |
Across the four dates, the most negative drawdown is −28.00% (from the running peak of $25.00 down to the $18.00 trough on 2026-10-04). Thus, the reported Maximum Drawdown for IONQ is −28.00%.
Results table
The Total Stocks With Data summary card shows how many requested stocks have a value in at least one enabled intrinsic valuation model. Hiding a column does not affect this count. Stocks skipped during analysis remain in the denominator; for a loaded historical log, the denominator is the number of rows in that log. Hover over the count for details.
- Click a column heading to sort by that column. Click it again to reverse the sort order.
- Use the ticker search field to filter the displayed rows by ticker symbol.
- Use the Columns menu to hide or restore intrinsic model columns and Lowest Intrinsic. Use Show all or Hide all to change every available intrinsic column at once; click outside the panel, click the close button, or press Escape to dismiss the menu. Your choice is saved in this browser.
- Click a ticker to open its Yahoo Finance quote page in a new browser tab. Click the purple y button beside it to fetch and inspect all attributes Yahoo Finance currently returns for that ticker. The panel supports searching and copying the attributes; because data is fetched on demand, values may differ from those used in the analysis.
- Click an information icon beside a supported heading to read its explanation.
- Use Export as CSV or Export as Excel (.xlsx) to download the result rows with all available columns, including columns hidden in the table.
Results include historical price performance, selected intrinsic model values, the lowest available enabled intrinsic value, analyst target, calculated Upside %, its Upside Level, and maximum drawdown.
Upside Level appearance
Each available Upside % is mapped to one of ten fixed percentage bands. The names can be edited in Intrinsic Value Models, but the percentage boundaries are fixed. Positive levels use green shades; negative levels use red shades. Levels at or above the selected Summary Count Level have a softly glowing border and an up arrow. The highlight changes when the summary level selection changes.
| Upside % band | Default label |
|---|---|
| 25% and above | Exceptional upside |
| 15% to below 25% | Very high upside |
| 10% to below 15% | High upside |
| 5% to below 10% | Moderate upside |
| 0% to below 5% | Flat to upside |
| Below 0% to above -5% | Flat to downside |
| -5% to above -10% | Weak downside |
| -10% to above -15% | Moderate downside |
| -15% to above -25% | High downside |
| -25% and below | Very high downside |
Terminal output and assumptions
Expand View Terminal Output & Model Assumptions Log to inspect the generated text report and assumptions used for the calculation. Use Copy Text to copy the report text.
Watchlist Manager
Watchlists hold a display name and a list of stock ticker symbols. The tab badge shows how many watchlists are currently loaded.
- Refresh Lists requests the latest watchlist list from the backend, useful if a watchlist was added while the app was already running. It keeps the current selection when it still exists.
- Selected Watchlist changes which saved list is being edited.
- Watchlist Name changes its display name.
- Active Tickers displays current tickers. Use the adjacent add control to add a symbol, or a ticker's remove button to remove it. Symbols are normalized to uppercase.
- Bulk Edit Tickers accepts ticker symbols separated by spaces or commas. Select Sync Tickers from Text Box to replace the active ticker list with the unique symbols entered.
- Save Changes overwrites the selected watchlist.
- Save as New Watchlist opens a dialog to create a separate watchlist using the current tickers and a new name.
- In Saved Watchlists, select Edit Watchlist on a row to load that watchlist into the editor.
Watchlist creation and update timestamps are managed by the application. Saving an existing watchlist preserves its creation timestamp and advances its update timestamp.
Intrinsic Value Models
Toggle a model on or off to control whether it is calculated and shown in Valuation Results. Model assumptions can be changed here; use Save Model Settings to persist the settings. Reset to Defaults reloads the settings currently saved by the application into the editor; unsaved edits are discarded. By default, R-GN is disabled and R-GN Capped is enabled.
Model controls
| Model | Purpose / adjustable assumptions |
|---|---|
| GN — Graham Number | Conservative estimate based on EPS and book value per share, with configurable P/E and P/B caps. |
| R-GN — Revised Graham Number (disabled by default) | Estimates value from positive EPS and earnings growth (or revenue growth when earnings growth is unavailable or zero), adjusted by bond yields. Configure the base P/E, benchmark yield, and current bond yield. |
| R-GN Capped — Revised Graham with Guardrails (enabled by default) | Applies growth, formula-multiplier, and effective P/E caps to R-GN. Configure all three caps; the effective P/E ceiling is relative to EPS, not current share price. |
| DCF — Discounted Cash Flow | Projects and discounts free cash flow. Configure projection years, fallback growth, discount rate, and perpetual growth. |
| DDM — Dividend Discount Model | Estimates value from annual dividends using the Gordon Growth Model. Configure discount and perpetual dividend growth rates. |
| Lynch — Peter Lynch Fair Value | Uses EPS and a growth-informed P/E. Configure minimum and maximum P/E multiples and fallback earnings growth. |
| EPV — Earnings Power Value | Capitalizes operating cash flow without growth and adjusts for cash and debt. Configure cost of capital / WACC. |
Model explanations, formulas, and examples
Each model produces an estimated value per share when its required market data is available. The examples below use hypothetical inputs to demonstrate the arithmetic; they are not forecasts or investment recommendations. Percentages in formulas are decimal rates (for example, 10% = 0.10).
GN — Graham Number
This conservative screening formula combines positive trailing earnings per share (EPS) with book value per share (BVPS). The P/E and P/B caps are multipliers that limit the assumed valuation multiples:
Example: With a P/E cap of 15, P/B cap of 1.5, EPS of $4, and BVPS of $20:
sqrt(15 × 1.5 × 4 × 20) = sqrt(1800) ≈ $42.43 per share. The app returns no estimate if EPS
or BVPS is missing, zero, or negative.
Learn more about the Graham Number
R-GN — Revised Graham Number
The revised Graham formula applies a growth-adjusted P/E multiple to positive trailing EPS and adjusts that value for the configured benchmark and current bond yields. The app uses earnings growth when it is non-zero; otherwise it falls back to revenue growth. Growth values from the data provider are decimals and are converted to percentages (for example, 0.08 becomes 8%).
Example: With EPS of $4, growth of 8%, a base P/E of 8.5, a benchmark yield of 4.4%,
and a current bond yield of 4.5%:
4 × (8.5 + 2 × 8) × (4.4 ÷ 4.5) ≈ $97.78 per share. The estimate is unavailable unless
EPS, selected growth, and current bond yield are all positive. This is a formula-based estimate, not a
forecast or investment recommendation.
R-GN Capped — Revised Graham with Guardrails
R-GN Capped uses the same formula and base assumptions as R-GN, with three safeguards intended to reduce extreme growth-driven estimates:
- Growth cap: Limits the growth input before it is used in the formula (15% by default).
- Formula multiplier cap: Limits the Base P/E + 2 × Growth % term (45 by default).
- Effective P/E ceiling: Caps the final value at a maximum multiple of EPS (50x by default), after the bond-yield adjustment.
All three caps can be adjusted in Intrinsic Value Models. The effective P/E ceiling is based on EPS, not the current share price, so it does not guarantee that the estimate is close to the market price. The capped model is a separate result column and can be enabled or disabled independently of R-GN.
DCF — Discounted Cash Flow
DCF projects the company's trailing free cash flow (FCF) for the configured number of years, grows each projection using reported earnings growth (or the configured fallback when growth is unavailable), and discounts the projections to present value. It then adds a discounted terminal value to represent cash flows beyond the projection period and divides by shares outstanding:
Example: Assume $100 million in current FCF, 5% annual projection growth, a 10% discount rate, 2.5% perpetual growth, five projection years, and 10 million shares. Applying those inputs to the app's projection and terminal-value calculation gives approximately $151.89 per share. The result is unavailable when FCF or shares are not positive, or when the discount rate is not greater than perpetual growth. DCF can change substantially when its assumptions change.
Learn more about the DCF Formula Guide (Corporate Finance Institute)
DDM — Dividend Discount Model
The Gordon Growth Model estimates a dividend-paying share's value from its current annual dividend, assuming dividends grow at a constant rate indefinitely. The app uses the annual dividend rate when available, otherwise the trailing annual dividend rate:
Example: With a $2 annual dividend, 2.5% perpetual growth, and a 9% discount rate:
2 × 1.025 ÷ (0.09 − 0.025) ≈ $31.54 per share. The estimate is unavailable if no positive
dividend is reported or if the discount rate is not greater than the growth rate. The constant-growth
assumption may not reflect a company's actual dividend policy.
Lynch — Peter Lynch Fair Value
This simplified growth-based method multiplies positive trailing EPS by a fair P/E multiple. The app estimates that multiple from reported earnings growth (or the configured fallback) plus dividend yield, then clamps it between the configured minimum and maximum P/E:
Example: With EPS of $4, reported earnings growth of 12%, no dividend yield, and a
minimum/maximum P/E of 10 and 25, the fair P/E is 12 and the estimate is
$4 × 12 = $48 per share. If the calculated multiple is below or above the configured bounds,
the corresponding bound is used. The result is unavailable when trailing EPS is not positive.
EPV — Earnings Power Value
EPV values current operating cash flow as if it remains steady and the business has no growth. It capitalizes operating cash flow at the configured cost of capital, adjusts for cash and debt, and divides by shares outstanding:
Example: With $100 million in operating cash flow, a 10% WACC, $200 million cash,
$300 million debt, and 50 million shares: enterprise value is $1 billion; adjusted equity value is
$900 million; and $900 million ÷ 50 million = $18 per share. The result is unavailable when
operating cash flow or shares are not positive, or WACC is not positive. Negative calculated equity value
is floored at zero per share.
How model estimates feed into Upside %
The app first takes the lowest available value among enabled intrinsic models. If an analyst target is available, it compares that target with the lowest intrinsic value and uses whichever is higher as the valuation basis. It then calculates:
Example: If current price is $40, the lowest enabled intrinsic estimate is $50, and the
analyst target is $55, the valuation basis is $55 and Upside % is
($55 − $40) ÷ $40 × 100 = 37.5%. The result falls in the 25%-and-above Upside Level band.
Upside Levels and summary count
Edit the display label beside each fixed percentage range in the Upside Levels table. These labels affect the result badge text; they do not change the thresholds. The Summary Count Level selector chooses the minimum non-negative level used by the dashboard count and the glowing border/up-arrow highlight. It defaults to the 15% level.
Analysis Logs & History
Completed analyses are saved as timestamped text reports. The tab badge displays the number of logs currently listed.
- Refresh Logs reloads the list of stored reports.
- Select a report in Saved Analysis Reports to display its contents.
- Save as Watchlist extracts the tickers from the selected report and opens the new watchlist dialog.
- Load Into Valuation Results parses the selected report and displays its rows in the results table. The result title indicates that it was loaded from the report. CSV and Excel export are available for loaded rows as well.
Loading a report displays its saved analysis data; it does not rerun calculations or fetch new market data.
Interpretation and limitations
- Upside % compares the selected valuation basis to current price. The basis is the greater of analyst target and the lowest available value among enabled intrinsic models.
- Period % Change and Max Drawdown % describe historical share-price movements over the selected analysis period. They do not predict future performance.
- Intrinsic models are simplified, depend on reported financial data and assumptions, and may be unavailable when required inputs are missing or invalid.
- Yahoo Finance data availability and quality can vary by ticker and time.
- Use the results as analytical information only. They are not financial advice or a substitute for independent research.