Financial Fundamentals Labels for ThinkorSwim

The deluge of the earnings will have been reported by 2/14/26
Once again, scores will be available.

For those that can't wait; here is a workaround.
These are the fundamentals that most affect the score.
Turn on only these labels.​
count up the greens == that is your score***​
w0w2zKt.png

GimNdlj.png


***see below for caveats!
 
Yes, strong fundamentals are an excellent method for stacking the deck in your favor.
But more experienced traders should apply more in-depth analysis.

fZOpEzo.png

At first glance, these fundamentals look awful.
But for some stocks; the story turns out to be the same one we all lived after college.

The Analogy:
Student loans → high long‑term debt​
First mortgage → negative operating margin​
Credit card balances → red ROA/ROE​
Pennies in checking → low quick ratio​
On paper, we looked terrible.

But we had solid careers:
two incomes​
cash flow covering everything​
The debt wasn’t scary — because the cash engine was stronger than the liabilities.

Moral:
When cash flow is strong, the “bad” labels don’t define the balance sheet — the trajectory does.

There are companies/sectors work the same way: high leverage, thin liquidity, ugly margins… but massive cash coming in.
That green green cash outweighs the red debt.​

The catch?
They walk a tightrope. They’re fragile, volatile, and every whisper has an explosive effect on price.​
Which is precisely why they’re on a day trader’s watchlist—high-risk, high-reward, explosive movers.
Reason #901: Why trading a small corral of stocks whose behavior and catalysts are well-understood, is the path to retail trading profitability.


The High Risk / High Reward / Big‑Cash Universe
AMZNMassive AI‑data‑center capex, rising leverage, thin margins, huge AWS cash flow
METAAggressive AI infrastructure spend, debt‑market unease, enormous ad cash engine
GOOGLHeavy AI compute capex, margin compression, huge search + cloud cash flow
MSFTEnormous AI‑data‑center buildout, rising leverage, thin cloud margins, massive cash
ORCLVery high leverage, cloud/AI capex surge, strong enterprise cash flow
NVDAHeavy capex commitments, liquidity tight vs scale, enormous GPU cash inflow
TSMGigantic fab capex cycles, high leverage, strong manufacturing cash flow
AVGOHigh leverage from acquisitions + AI buildout, huge semiconductor cash engine
AMDHigh reinvestment, margin pressure, thin liquidity, strong AI‑chip cash inflow
MUCyclical leverage, thin liquidity, volatile margins, massive memory‑AI cash cycles
RBLXHigh leverage, thin liquidity, negative margins, strong recurring platform cash
UBERHeavy debt, thin liquidity, weak margins, massive global cash inflow
LYFTHigh leverage, fragile margins, thin liquidity, steady ride‑volume cash
SNAPUgly margins, high leverage, low liquidity, strong ad‑driven cash
PARAVery high debt, weak margins, thin liquidity, large legacy media cash
WBDEnormous leverage, negative margins, tight liquidity, big content cash flow
DISHExtreme leverage, negative margins, thin liquidity, cash from legacy subs
CHWYThin liquidity, weak margins, high reinvestment, strong subscription cash
DKNGHigh leverage, negative margins, thin liquidity, huge betting‑volume cash
AFRMVery high leverage, negative margins, thin liquidity, strong loan‑volume cash

This is not a complete list. But it provides companies to study that then interpolate your analysis to a larger pool.
 
Last edited by a moderator:
Structure Fundamental_Snippet
This topic popped up at just the right time, I found my “Round Tuitt” and playing it forward:
5Lq6ncq_d.jpeg

Shared Grid Link: https://tos.mx/!djKcMeEN

For Years MaryDay’s Fundamentals and a few other studies sat in a “Homework Pane” beside my weekly charts.
This Fundamental Snippet is phase one of a three phase project. Now my standard Fundamental Pane:
I’m neither a seasoned Programmer or a Fundamental analyst, but I do have the “Monkey” (somewhere) and a Copilot :).

Constructive comments welcomed and appreciated!

NOTE:
For best performance use a 3YR Daily Pane no Chart, no Vol, Lower study only

Study Outputs:
PE (Rolling))
Dividend Yield
Payout Ratio
% off 52W High
CAGR (Rolling)
Profitability
Cash Flow
Balance Sheet
Returns/Efficiency
Growth
Fundamental Quality Score

Basic structure:
Metrics are grouped into category’s, Category’s evaluated / scored, Summed for a Quality range of 1 – 12.
A 7 or above good quality stock, 6 and below, not fundamental friendly (Deep Dive Time or you trade ignores Fundamentals) ….

I refer to the PE and CAGR as rolling, using bar counts as a workaround of TOS limits…. (PE trap for bad data from TOS forces a (N/A High) …)
While not technically/ numerically correct, the data is a close representation of real time dynamics.

shared study link: https://tos.mx/!1HmB99fc
Code:
# Assebled: ATCSAM, playing it Forward
# Credits

# usethinkscript Community

#Fundamental Data Labels _Mobius 4/26/20 (found on OneNote)
#
# @MerryDay revised 4/21:
# my interpretation of positive/negative values; should be modified to meet your strategy
# then calculated an overall weighted score based on:

#[email protected]
#This study is used for Ken Rose's Generating Income with Dividend Stocks webcast Monday's 7PM ET

# CAGR Total Chart Timeframe
# Source: Pensar, 03.06.2021
# Modified by golden.nonce, 02.14.2022




#========================================================
# Fundamental Quality Engine

#========================================================

declare lower;

#-----------------------------
# Global Colors
#-----------------------------
DefineGlobalColor("Strong", CreateColor(0, 165, 0));          # Full Green
DefineGlobalColor("Neutral", Color.LIGHT_GRAY);               # Neutral
DefineGlobalColor("Weak", CreateColor(220, 180, 180));        # Soft Red/Pink
DefineGlobalColor("Bad", CreateColor(225, 0, 0));             # Red
DefineGlobalColor("Info", CreateColor(50, 200, 255));         # Cyan
DefineGlobalColor("Warn", CreateColor(200, 125, 0));          # Amber
DefineGlobalColor("Danger", CreateColor(255, 60, 60));

#-----------------------------
# Aggregation Helpers
#-----------------------------
def isDaily   = GetAggregationPeriod() == AggregationPeriod.DAY;
def isWeekly  = GetAggregationPeriod() == AggregationPeriod.WEEK;
def isMonthly = GetAggregationPeriod() == AggregationPeriod.MONTH;

#-----------------------------
# shared
# Actual earnings per event (TOS often returns N/A for CEFs, REITs, ETFs)
def AE = if IsNaN(GetActualEarnings()) then 0 else GetActualEarnings();

# Manual trailing earnings (TTM) based on bar type
def epsTTM_manual =
    if isDaily   then Sum(AE, 252)
    else if isWeekly  then Sum(AE, 52)
    else if isMonthly then Sum(AE, 12)
    else 0;

# Safe EPS (fallback to tiny positive number to avoid divide-by-zero)
def _epsTTM_manual = if IsNaN(epsTTM_manual) or epsTTM_manual == 0
                     then 0.0001
                     else epsTTM_manual;


#-----------------------------
# Dividend Yield & Payout
#-----------------------------
def divYieldPct = if IsNaN(GetYield()) then Double.NaN else Round(GetYield() * 100, 2);



rec DCont = if IsNaN(GetDividend()) then DCont[1] else GetDividend();
def divAnnual = if DCont <> 0 then DCont * 4 else Double.NaN;

def payoutRatio =
    if !IsNaN(divAnnual) and epsTTM_manual != 0 and !IsNaN(epsTTM_manual)
    then Round(divAnnual * 100 / epsTTM_manual, 2)
    else Double.NaN;



#-----------------------------
# 52-Week High Context
#-----------------------------
def len52 =
    if isDaily   then 252
    else if isWeekly  then 52
    else if isMonthly then 12
    else Double.NaN;

def top52 = Highest(high, len52);

def pctOffHigh =
    if top52 != 0 and !IsNaN(top52)
    then (close / top52) - 1
    else Double.NaN;

def newHigh = high == top52;


#-----------------------------
# Manual EPS / PE (AE-based)
#-----------------------------

# Actual earnings per event (TOS often returns N/A for CEFs, REITs, ETFs)
# Manual trailing earnings (TTM) based on bar type

# Raw PE calculation
def PE_raw = Round(close / _epsTTM_manual, 2);

# Trap missing/invalid EPS as extremely high PE
def PE = if IsNaN(PE_raw) or PE_raw < 0 then 999 else PE_raw;
def PE_safe = if IsNaN(PE) then 999 else PE;

# PE trap flag
def PE_isTrapped = PE >= 999;



#-----------------------------
# SAFE INPUTS
#-----------------------------
def _pctOffHigh = if IsNaN(pctOffHigh) then 0 else pctOffHigh;
def _divYieldPct = if IsNaN(divYieldPct) then 0 else divYieldPct;



# -----------------------------
# SAFE, CAGR
# -----------------------------


def agg = AggregationPeriod.YEAR;
def c = close(period = agg);
def yearbars = if c then yearbars[1] + 1 else yearbars[1];
def o = First(open(period = agg));
def CAGR = Power(c / o, 1 / yearbars) - 1;

def hasYears = yearbars >= 3 and !IsNaN(o) and o > 0 and !IsNaN(c);
def CAGR_safe = if hasYears then CAGR else Double.NaN;



#-----------------------------
# Core Fundamental Metrics
#-----------------------------
def gpMargin =
    if IsNaN(GrossProfitMargin()) then gpMargin[1] else GrossProfitMargin();
def opMargin =
    if IsNaN(OperatingProfitMargin()) then opMargin[1] else OperatingProfitMargin();
def netMargin =
    if IsNaN(NetProfitMargin()) then netMargin[1] else NetProfitMargin();

def fcfPerShare =
    if IsNaN(FreeCashFlowPerShare()) then fcfPerShare[1] else FreeCashFlowPerShare();
def epsTTM =
    if IsNaN(EarningsPerShareTTM()) then epsTTM[1] else EarningsPerShareTTM();

def fixCov =
    if IsNaN(FixedChargeCoverageRatio()) then fixCov[1] else FixedChargeCoverageRatio();

def curRatio =
    if IsNaN(CurrentRatio()) then curRatio[1] else CurrentRatio();
def quickRatio =
    if IsNaN(QuickRatio()) then quickRatio[1] else QuickRatio();
def ltdToCap =
    if IsNaN(LongTermDebtToCapital()) then ltdToCap[1] else LongTermDebtToCapital();

def roa =
    if IsNaN(ReturnOnAssets()) then roa[1] else ReturnOnAssets();
def roe =
    if IsNaN(ReturnOnEquity()) then roe[1] else ReturnOnEquity();
def assetTurn =
    if IsNaN(TotalAssetTurnover()) then assetTurn[1] else TotalAssetTurnover();

def salesPerShare =
    if IsNaN(SalesPerShare()) then salesPerShare[1] else SalesPerShare();

#-----------------------------
# Category Scoring (0–3 each)
#-----------------------------

# Profitability
def scoreProfitability =
    if gpMargin > 0 and opMargin > 0 and netMargin > 0 then 3
    else if (gpMargin > 0 and (opMargin > 0 or netMargin > 0)) then 2
    else if gpMargin > 0 or opMargin > 0 or netMargin > 0 then 1
    else 0;


# Cash Flow
def scoreCashFlow =
    if fcfPerShare > 0 and epsTTM > 0 and fixCov >= 1 then 3
    else if (fcfPerShare > 0 and epsTTM > 0) or (fcfPerShare > 0 and fixCov >= 1) then 2
    else if fcfPerShare > 0 or epsTTM > 0 or fixCov >= 1 then 1
    else 0;



# Balance Sheet
def scoreBalance =
    if quickRatio >= 1 and curRatio >= 1 and ltdToCap < 40 then 3
    else if (quickRatio >= 1 and curRatio >= 1) or (curRatio >= 1 and ltdToCap < 60) then 2
    else if quickRatio >= 1 or curRatio >= 1 then 1
    else 0;



# Returns & Efficiency
def scoreReturns =
    if roa >= 10 and roe >= 15 and assetTurn > 1 then 3
    else if (roa >= 5 and roe >= 10) or (roe >= 15 and assetTurn > 0.8) then 2
    else if roa > 0 or roe > 0 or assetTurn > 0.5 then 1
    else 0;


# Growth
def scoreGrowth =
    if  CAGR > 0.08 and salesPerShare > 0 then 3
    else if CAGR >= 0.03 and salesPerShare > 0 then 2
    else if CAGR > 0 or salesPerShare > 0 then 1
    else 0;


#-----------------------------
# Final Quality Score (0–12)
#-----------------------------
def rawTotal =
    scoreProfitability +
    scoreCashFlow +
    scoreBalance +
    scoreReturns +
    scoreGrowth;

def qualityScore = Round(rawTotal * 12 / 15, 0);



#-----------------------------
# Fundamental Score Plot (Hidden)
#-----------------------------
#plot FundamentalScore = qualityScore;
#FundamentalScore.HideBubble();
#FundamentalScore.HideTitle();
#FundamentalScore.Hide();
#-------------------------
# Label Hierarchy
# ------------------
# PE (Rolling))
# Dividend Yield
# Payout Ratio
# % off 52W High
# CAGR (Rolling)
# Profitability
# Cash Flow
# Balance Sheet
# Returns/Efficiency
# Growth
# Fundamental Quality
#------------------------

AddLabel(
    yes,
    "P/E : " +
    (if PE_isTrapped
     then "N/A (High)"
     else AsText(PE)),
    if PE_isTrapped then GlobalColor("Danger")
    else if PE < 20 then GlobalColor("Strong")
    else if PE < 40 then GlobalColor("Warn")
    else GlobalColor("Weak")
);

AddLabel(!IsNaN(divYieldPct),
         "Dividend Yield: " + divYieldPct + "%",
         if IsNaN(divYieldPct) then GlobalColor("Neutral")
         else if divYieldPct < 2 then GlobalColor("Neutral")
         else if divYieldPct <= 6 then GlobalColor("Strong")
         else GlobalColor("Warn"));

AddLabel(!IsNaN(payoutRatio),
         "Payout Ratio: " + payoutRatio + "%",
         if IsNaN(payoutRatio) then GlobalColor("Neutral")
         else if payoutRatio < 60 then GlobalColor("Strong")
         else if payoutRatio <= 100 then GlobalColor("Warn")
         else GlobalColor("Bad"));


AddLabel(!IsNaN(pctOffHigh) and !newHigh,
         AsPercent(pctOffHigh) + " off 52 Wk High: ",
         if pctOffHigh >= -0.10 then GlobalColor("Strong")
         else if pctOffHigh >= -0.25 then GlobalColor("Warn")
         else GlobalColor("Weak"));

AddLabel(newHigh,
         "New 52-Week High TODAY",
         GlobalColor("Info"));



AddLabel(1,
    if hasYears
    then "CAGR: " + AsPercent(CAGR_safe) + " " + (yearbars - 1) + "/Yrs"
    else "CAGR: N/A (Insufficient Data)",
    if hasYears and CAGR_safe > 0.08 then GlobalColor("Strong")
    else if hasYears and CAGR_safe >= 0.03 then CreateColor(120, 200, 120)
    else GlobalColor("Weak")
);

AddLabel(yes,
         "Profitability: " +
         (if scoreProfitability == 3 then "Strong"
          else if scoreProfitability == 2 then "Moderate"
          else if scoreProfitability == 1 then "Weak"
          else "Bad"),
         if scoreProfitability == 3 then GlobalColor("Strong")
         else if scoreProfitability == 2 then GlobalColor("Neutral")
         else if scoreProfitability == 1 then GlobalColor("Weak")
         else GlobalColor("Bad"));

AddLabel(yes,
         "Cash Flow: " +
         (if scoreCashFlow == 3 then "Strong"
          else if scoreCashFlow == 2 then "Moderate"
          else if scoreCashFlow == 1 then "Weak"
          else "Bad"),
         if scoreCashFlow == 3 then GlobalColor("Strong")
         else if scoreCashFlow == 2 then GlobalColor("Neutral")
         else if scoreCashFlow == 1 then GlobalColor("Weak")
         else GlobalColor("Bad"));

AddLabel(yes,
         "Balance Sheet: " +
         (if scoreBalance == 3 then "Strong"
          else if scoreBalance == 2 then "Moderate"
          else if scoreBalance == 1 then "Weak"
          else "Bad"),
         if scoreBalance == 3 then GlobalColor("Strong")
         else if scoreBalance == 2 then GlobalColor("Neutral")
         else if scoreBalance == 1 then GlobalColor("Weak")
         else GlobalColor("Bad"));

AddLabel(yes,
         "Returns/Efficiency: " +
         (if scoreReturns == 3 then "Strong"
          else if scoreReturns == 2 then "Moderate"
          else if scoreReturns == 1 then "Weak"
          else "Bad"),
         if scoreReturns == 3 then GlobalColor("Strong")
         else if scoreReturns == 2 then GlobalColor("Neutral")
         else if scoreReturns == 1 then GlobalColor("Weak")
         else GlobalColor("Bad"));

AddLabel(yes,
         "Growth: " +
         (if scoreGrowth == 3 then "Strong"
          else if scoreGrowth == 2 then "Moderate"
          else if scoreGrowth == 1 then "Weak"
          else "Bad"),
         if scoreGrowth == 3 then GlobalColor("Strong")
         else if scoreGrowth == 2 then CreateColor(120, 200, 120)
         else if scoreGrowth == 1 then GlobalColor("Weak")
         else GlobalColor("Bad"));

AddLabel(yes,
         "Fundamental Quality: " + qualityScore + " / 12",
         if qualityScore >= 10 then GlobalColor("Strong")
         else if qualityScore >= 7 then CreateColor(120, 200, 120)
         else if qualityScore >= 4 then GlobalColor("Weak")
         else GlobalColor("Bad"));

#
This is Phase I of a III phase Project
(In Work)

Phase II adds a Valuation Engine to the project.
Extended Narratives include:
1. Cheap but Extended
2. High Quality on Sale
3. Value Trap Risk (Yes, hard look on these)
4. Rich Valuation but Improving Fundamentals
5. Speculative Growth — Fundamentals Not Applicable
6. Cash-Flow Machine Trading at a Premium
7. Long-Term Candidate (Accumulate) (one of my favorites)


Phase III
Adds a Trade Sentiment Indicator
Score/ risk level

################################
Usage: AMD//NVDA all look good as expected.
Plug in INTC note Wild PE and Payout Ratio (Deep Dive Flag). Pros take a peek and say "Yea, Turnaround"
The curious/ uniformed (Me) need to dive deeper.
xXrtpdJ.jpeg

  • I used Greenshot to capture just the fundamental screen.
  • Dropped it into Copilot with one simple question “What’s going on here?”
Output was generally spot on. Just based on the fundamental pane no chart, homework getting easier…
Copilot output as of 2/8/26
############################################################

🔹 1. The P/E ratio is extremely high (123.39)
This doesn’t mean Intel is a crazy‑expensive stock.
It means earnings are very low right now, so even a normal stock price produces a huge P/E.
This happens when a company is in a turnaround phase.

🔹 2. Dividend Yield = 0% but Payout Ratio = 121.95%
This looks contradictory, but it’s actually simple:
  • Intel still pays a dividend
  • But earnings are so low that the payout ratio becomes mathematically huge
  • The yield rounds down to 0% at this chart resolution
So the dividend isn’t gone — the math is just distorted by weak earnings.

🔹 3. Profitability and Cash Flow are Strong
This tells you Intel’s core business still generates good margins and cash, even though net income is temporarily depressed.
This is typical for a company investing heavily in new manufacturing capacity.

🔹 4. Balance Sheet and Returns are Moderate
Intel has taken on more debt to fund new fabs, and returns (ROE/ROA/ROIC) are low because earnings are low.
This is normal during a multi‑year rebuild.

🔹 5. Growth is Strong
Revenue and forward expectations have been improving, so the growth metrics look good.

🔹 6. Fundamental Quality = 10/12
This score means:
  • The business itself is solid
  • Margins are good
  • Cash flow is strong
  • Growth is improving
The only real weaknesses are:
  • depressed earnings
  • distorted valuation metrics
Summary
Intel is a high‑quality company going through a low‑earnings period, which makes valuation numbers look weird. The fundamentals underneath are solid, but the earnings distortion creates:
  • a huge P/E
  • a huge payout ratio
  • a yield that rounds to zero
It’s a classic turnaround profile: strong business, weak earnings, mixed signals.
#############################################################
Once again, any feedback welcomed.

(Game Time)
 
Last edited by a moderator:
Fundamental_Snippet
This topic popped up at just the right time, I found my “Round Tuitt” and playing it forward:
5Lq6ncq_d.jpeg

Shared Grid Link: https://tos.mx/!djKcMeEN

For Years MaryDay’s Fundamentals and a few other studies sat in a “Homework Pane” beside my weekly charts.
This Fundamental Snippet is phase one of a three phase project. Now my standard Fundamental Pane:
I’m neither a seasoned Programmer or a Fundamental analyst, but I do have the “Monkey” (somewhere) and a Copilot :).

Constructive comments welcomed and appreciated!


The original study provides data;
This updated version provides analysis.

@atcsam's updated version is a must for all traders' charts.
Recommend running it along with the original to understand what it is actually doing
Bq1sGXL.png

shared grid link: http://tos.mx/!DZYqC6VQ MUST follow these instructions for loading shared links.
 
Last edited by a moderator:
After digging into this pretty hard, it looks like the fundamental data in TOS is not reliable for traders who need timely fundamental data updates.

What I found is that earnings event data and fundamental field data do not behave the same. Actual earnings can show up on the report timeline, but TTM EPS and profit margin fields can still lag or fail to update where you would expect. In practice, that means you can be looking at what appears to be “current” fundamentals when the platform is really still plotting older data.

That is a serious problem if you are trying to use fundamentals in a trading workflow. If the next real update point is missing after earnings, then the chart is not giving you the latest usable picture. At that point, you are not analyzing fresh fundamentals you are analyzing stale fundamentals dressed up as if they are current.

For longer-term background context, maybe that is acceptable. For traders, it is not.

The biggest issue is not just that the data may update late, but that it gives the impression that the information is current when it may already be behind the actual earnings release. That makes fundamental fields in TOS much less useful for timing decisions than many people probably assume.

If others have tested this, I would be interested to know whether you found the same thing: earnings data updates on time, but several fundamental fields appear delayed, inconsistent, or stuck on older values. Or bluntly put, purposely not updating the data.
 
Last edited:
Are TOS Earnings reported on chart GAAP or non-GAAP?
From what I have Googled it seems to always be Non-GAAP reported on TOS charts?
I see no way of getting data from TOS to formulate a EPS GAAP number.
 
Last edited:
Fundamental data feels stale because vendors are locked to the reporting requirements for that data.

The only part of the pipeline that behaves in real time is the press release.
3rd party vendors hit the release the moment it drops; scrape it, parse it, and push the update into the data feeds within minutes.
Companies will report earnings and non‑GAAP EPS in that release, so that becomes the fresh EPS the market sees on earnings day.

Everything after the press release waits for the 10‑Q or 10‑K.
The filing process moves through audit, review, internal controls, and legal sign‑off, and the timeline reflects that.

Filer TypePublic Float10‑K Deadline10‑Q Deadline
Large accelerated$700M+60 days40 days
Accelerated$75M–$700M75 days40 days
Non‑accelerated<$75M90 days45 days
Missed deadlines~20% of filers~20% of filers

Vendors cannot publish what does not exist.
They do not invent EPS, estimate filings, delay updates, or choose to be stale.
They ingest what the company publishes.
If the company has not filed, the vendor has nothing new to ingest. The source is stale, so the feed is stale.
On top of all that, the 3rd party vendor pipeline updates are uneven, thus furthering the chaos.

Currently, the SEC is preparing to eliminate quarterly reporting.
https://www.reuters.com/business/fi...ly-reporting-requirement-wsj-says-2026-03-16/

So if you find the current reporting cycles stale, the future ones are likely to disappoint even more.
Press releases will become the only fresh signal. Guidance becomes the only forward anchor.

For companies that do not prepare press releases, there will be no meaningful "fresh" data.

Hope this helps
@Ricky_005
 
Last edited:
When earnings are reported; 3rd party vendors hit the release; scrape it, parse it, and push the update into their feed within minutes.
Companies will report non‑GAAP EPS in that release, so that becomes the fresh EPS the market sees on earnings day.

For companies that do not issue a press release; then by law, they must report GAAP EPS on the deadlines described here:
https://usethinkscript.com/threads/...are-looking-at-old-numbers.22249/#post-161470
 
Fundamental data feels stale because vendors are locked to the reporting requirements for that data.

The only part of the pipeline that behaves in real time is the press release.
3rd party vendors hit the release the moment it drops; scrape it, parse it, and push the update into the data feeds within minutes.
Companies will report earnings and non‑GAAP EPS in that release, so that becomes the fresh EPS the market sees on earnings day.

Everything after the press release waits for the 10‑Q or 10‑K.
The filing process moves through audit, review, internal controls, and legal sign‑off, and the timeline reflects that.

Filer TypePublic Float10‑K Deadline10‑Q Deadline
Large accelerated$700M+60 days40 days
Accelerated$75M–$700M75 days40 days
Non‑accelerated<$75M90 days45 days
Missed deadlines~20% of filers~20% of filers

Vendors cannot publish what does not exist.
They do not invent EPS, estimate filings, delay updates, or choose to be stale.
They ingest what the company publishes.
If the company has not filed, the vendor has nothing new to ingest. The source is stale, so the feed is stale.
On top of all that, the 3rd party vendor pipeline updates are uneven, thus furthering the chaos.

Currently, the SEC is preparing to eliminate quarterly reporting.
https://www.reuters.com/business/fi...ly-reporting-requirement-wsj-says-2026-03-16/

So if you find the current reporting cycles stale, the future ones are likely to disappoint even more.
Press releases will become the only fresh signal. Guidance becomes the only forward anchor.

For companies that do not prepare press releases, there will be no meaningful "fresh" data.

Hope this helps
@Ricky_005
For example NetProfitMargin fundamentals function in TOS the newest data on tickers range between 10/1/25 to 1/26/26 depending on ticker. Nvidia is 10/1/25 :oops: for latest data. This is typical with all of the fundamentals function in TOS and also to top it off the data seems to all be Non GAAP financial data which is not what we need to be using, and especially relying on for decisions. They should provide GAAP data option.
 
Last edited:
For example NetProfitMargin fundamentals function in TOS the newest data on tickers range between 10/1/25 to 1/26/26 depending on ticker. Nvidia is 10/1/25 :oops: for latest data. This is typical with all of the fundamentals function in TOS and also to top it off the data seems to all be Non GAAP financial data which is not what we need to be using, and especially relying on for decisions. They should provide GAAP data option.

I'm posting this from my phone, so I am not entirely certain what you're describing, but the data retroactively back-fills into the quarter that's actually being reported on. It doesn't sync to the time of the announcement.
 
Last edited by a moderator:
I'm posting this from my phone, so I am not entirely certain what you're describing, but the data retroactively back-fills into the quarter that's actually being reported on. It doesn't sync to the time of the announcement.
Ticker Nvidia.
thinkorswim_HOFMdpfXls.png


The bright yellow line plotted at the top is Net Margins. The latest data is from 10/1/25. This apparently is common with fundamental data functions in ThinkScript, where the data can be nearly six months old.

The bottom plots are EPS and a custom EPS TTM that I built from EPS data. If you use the built-in EarningsPerShareTTM function, that data is also about six months old, which is why I created my own version from EPS instead.

EPS can be pulled from the chart under Corporate Actions, and that data is up to date. However, it is the lower-quality non-GAAP EPS data. As far as I know, that is the only up-to-date EPS option ThinkScript gives us. I guess we should be grateful they at least provide Non-GAAP EPS.

The main reason I brought this topic up is because there are some fundamental label studies on the forum, and a lot of them appear to be using old data. I would say most people probably assume the data is current and correct when forum administratives endorse them when there really Not!!!
 
Last edited:
@Ricky_005

Sadly, no. There are no third-party retail data feeds that provide both GAAP and non-GAAP EPS
Industrial feeds: Bloomberg Terminal and Reuters Terminals have that data

Everything else—ToS, Barchart, Yahoo, TradingView, MarketWatch, Zacks, Benzinga, MT Newswire, even most institutional feeds—defaults to non‑GAAP if the company prepares a press release

But no, you cannot assume the data in the data feed is non‑GAAP. If the company does not have a press release or does not report non-GAAP in that release. Then the GAAP EPS is pulled from that old stale 10-Q

And yes, you are correct; all other fundamentals come from the old stale 10-Q
And yes, now that they are doing away with the 10-Q; the data will be more than 6mths old.
This isn't a ToS issue. The data feeds can't report data that does not exist.
This is precisely why, the Forum Fundamentals thread emphasizes that individual fundamentals cannot be overweighted.
Use the score here or here to get an idea of the soundness of a ticker overall

On February 25th NVDA's press release reported non-GAAP earnings of $1.62
t6llfMs.png

https://nvidianews.nvidia.com/news/...al-results-for-fourth-quarter-and-fiscal-2026

$1.62 is what appears on the script that you posted:
https://usethinkscript.com/threads/quarterly-eps-shown-as-a-line-graph.6418/#post-161407
7svs8Ve.png

shared chart link: http://tos.mx/!YkyCQ8YZ
Must always do this when importing shared chart links: https://usethinkscript.com/threads/how-to-use-shared-chart-links.20899/


If your question is about the flat line created when attempting to "trend" with EarningsPerShareTTM
Your linked script above with the $1.62; is how all earning trend scripts on the forum are built.​
It is built around GetActualEarnings because it is the only Thinkorswim function that delivers discrete quarterly EPS values tied to the actual earnings event rather than a rolling fundamental, EarningsPerShareTTM​
Because the data is event‑driven, your script can compare the current quarter’s EPS to the previous quarter, place markers only on earnings dates, color those markers based on EPS direction, and align analyst estimates with the corresponding actual EPS.​
None of that is possible with a trailing twelve-month metric such as EPS-TTM (Trailing Twelve Months)​
The image in your post fails because EPS-TTM (Trailing Twelve Months) is a rolling twelve‑month fundamental that updates whenever the fundamentals database updates (after the 10-Q posts)​
It is not anchored to earnings dates, and does not represent individual quarters; trailing twelve months, by definition, produces smooth lines and does not step at earnings events.​
Yes, substituting it will produce a smooth rolling line unrelated to quarterly behavior and would break every mechanism that depends on discrete quarterly values.​
This is how EPS-TTM (trailing twelve months) works, not just for ToS but for all data feeds.​
While most data feeds/brokerages use the same general formula for the EPS-TTM (trailing twelve months) that you plotted.​
The actual number you see can vary significantly between platforms/websites (like Yahoo Finance vs. Bloomberg vs. Robinhood) due to how they handle special accounting items.​
Hope this helps.
 
Last edited by a moderator:

Join useThinkScript to post your question to a community of 21,000+ developers and traders.

Similar threads

Not the exact question you're looking for?

Start a new thread and receive assistance from our community.

87k+ Posts
660 Online
Create Post

Similar threads

Similar threads

The Market Trading Game Changer

Join 2,500+ subscribers inside the useThinkScript VIP Membership Club
  • Exclusive indicators
  • Proven strategies & setups
  • Private Discord community
  • ‘Buy The Dip’ signal alerts
  • Exclusive members-only content
  • Add-ons and resources
  • 1 full year of unlimited support

Frequently Asked Questions

What is useThinkScript?

useThinkScript is the #1 community of stock market investors using indicators and other tools to power their trading strategies. Traders of all skill levels use our forums to learn about scripting and indicators, help each other, and discover new ways to gain an edge in the markets.

How do I get started?

We get it. Our forum can be intimidating, if not overwhelming. With thousands of topics, tens of thousands of posts, our community has created an incredibly deep knowledge base for stock traders. No one can ever exhaust every resource provided on our site.

If you are new, or just looking for guidance, here are some helpful links to get you started.

What are the benefits of VIP Membership?
VIP members get exclusive access to these proven and tested premium indicators: Buy the Dip, Advanced Market Moves 2.0, Take Profit, and Volatility Trading Range. In addition, VIP members get access to over 50 VIP-only custom indicators, add-ons, and strategies, private VIP-only forums, private Discord channel to discuss trades and strategies in real-time, customer support, trade alerts, and much more. Learn all about VIP membership here.
How can I access the premium indicators?
To access the premium indicators, which are plug and play ready, sign up for VIP membership here.
Back
Top