Financial Fundamentals Labels for ThinkorSwim

does anybody know how to enable fundamental function in TOS? I am using the following simple scan, but I get this error, "

input price = close;
def EPS = EarningsPerShareTTM();
plot signal = EPS;
Input Price2=FundamentalType.Close;
Try this the line before the Fundamental you want use.
 
@bubba1944 It was well-worth the try! But no, fundamentals cannot be used in the scanner, in this manner:
O038Tdu.png
 
Updated the 1st post w/ @wtf_dude revised dividend labels:
https://usethinkscript.com/threads/fundamentals-labels-for-thinkorswim.5308/page-2#post-62262


Hi so just to confirm the higher the score and more green labels the better right?
@drewski408 Yes, the higher the score, the better overall financial health of the company. As far as the more green labels the better? I would not make that an unequivocal statement. It is VERY IMPORTANT to google and understand these indicators if you are trading stocks. There has to be an understanding of the NUMBERS. You can NOT go by colors.

Inventory turnover, book value, and a few more. I originally left these off because how to interpret them varies drastically by sector. Example: What might be positive for the manufacturing sector might not be applicable or be VERY different for the service sector.

Bottom line: You need to decide what and which are important to you. I started out only investing in equities that had a profit and low debt. It was wrong-headed. Companies investing in the future might not have a current profit and may have significant but hopefully manageable debt. I still place some emphasis current & quick ratios but am now more interested in how companies are spending their money.
 
Last edited:
Updated the 1st post w/ @wtf_dude revised dividend labels:
https://usethinkscript.com/threads/fundamentals-labels-for-thinkorswim.5308/page-2#post-62262



@drewski408 Yes, the higher the score, the better overall financial health of the company. As far as the more green labels the better? I would not make that an unequivocal statement. It is VERY IMPORTANT to google and understand these indicators if you are trading stocks. There has to be an understanding of the NUMBERS. You can NOT go by colors.

Inventory turnover, book value, and a few more. I originally left these off because how to interpret them varies drastically by sector. Example: What might be positive for the manufacturing sector might not be applicable or be VERY different for the service sector.

Bottom line: You need to decide what and which are important to you. I started out only investing in equities that had a profit and low debt. It was wrong-headed. Companies investing in the future might not have a current profit and may have significant but hopefully manageable debt. I still place some emphasis current & quick ratios but am now more interested in how companies are spending their money.
"Companies investing in the future might not have a current profit and may have significant but hopefully manageable debt. I still place some emphasis current & quick ratios but am now more interested in how companies are spending their money."

One of my considerations for filtering good candidates are companies with accelerating EPS and sales growth and the positive future EPS expansion too.

Can check out this scanner too
https://usethinkscript.com/threads/scanner-based-on-the-canslim-conditions.4851/post-71596

@MerryDay like to know how or where do you sieve out this information >>" now more interested in how companies are spending their money"
 
@Nick
Learning to read financial statements is analogous to learning to read price action on charts. The numbers tell the tale.
It is VERY IMPORTANT to google and understand these indicators if you are trading stocks. There has to be an understanding of the NUMBERS.
 
This is awesome stuff, thanks for sharing. Would it be possible to create a column in a watchlist for current P/E? I was thinking close price divided by EPS (earnings per share). This could be used to find the lowest and highest current P/E ratios and then study the Fundamental Data Labels. Anyone have a suggestion or solution? Thx
 
Really like this indicator, but is there a reason it only works on the daily time frame? There's a few fundamentals I like to use for penny stocks and it would be great to throw up those labels on a 10 minute chart. Anyone know if that is possible? Thanks!
 
Really like this indicator, but is there a reason it only works on the daily time frame? There's a few fundamentals I like to use for penny stocks and it would be great to throw up those labels on a 10 minute chart. Anyone know if that is possible? Thanks!
Labels must be on a daily chart.

A workaround is to detach a daily chart w/ the labels and overlay it on your 10 min chart or put it anywhere else on your screen.
In the top right of the chart, there is a pin symbol. If you pin the chart it won't keep falling behind whatever it is overlaid on.
4uKWJSb.png
 
Last edited:
This indicator displays fundamental data of a stock, including financial info such as Free Cash Flow, Profit Margin, etc., on your chart.
An overall weighted Score is calculated to gauge the overall financial health.

Use on a Daily Chart. Useful for anyone interested in fundamental stock research.
AiGdPyb.png

Ruby:
#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:
# https://tradestation.tradingappstore.com/products/FundamentalScore/document/Fundamental_Score.pdf
# and other information found on the web
declare lower;
declare hide_on_intraday;
input show_labels = yes ;
input show_summaries = no ;
DefineGlobalColor("Pre_Cyan", CreateColor(50, 200, 255)) ;
DefineGlobalColor("LabelGreen",  CreateColor(0, 165, 0)) ;
DefineGlobalColor("LabelRed",  CreateColor(225, 0, 0)) ;
DefineGlobalColor("Violet", CreateColor (200, 125, 255)) ;
DefineGlobalColor("GrayGreen",  CreateColor(155, 167, 76)) ;
DefineGlobalColor("LitePink", CreateColor (220, 180, 180)) ;
DefineGlobalColor("neutral",  color.light_gray) ;
def fp = FiscalPeriod.YEAR;
def EPS = EarningsPerShareTTM(fiscalPeriod = fp);
def PE = round(close / EPS,1);
AddLabel(show_labels and PE, "P/E ratio = " + Round(PE, 2),
                      if PE < 0 then GlobalColor("LitePink") else
                      if PE < 20 then GlobalColor("LabelGreen") else
                      if PE < 40 then GlobalColor("GrayGreen") else GlobalColor("Pre_Cyan"));

def EarnPerShare = if IsNaN(EarningsPerShareTTM())
                   then EarnPerShare[1]
                   else EarningsPerShareTTM();
AddLabel(show_labels and EarnPerShare, "EPS-TTM = " + AsDollars(EarnPerShare),
                      if EarnPerShare > 0 then GlobalColor("LabelGreen") else GlobalColor("LitePink"));

def FreeCashFlowPerSh = if isNaN(FreeCashFlowPerShare())
                        then FreeCashFlowPerSh[1]
                        else FreeCashFlowPerShare();
AddLabel(show_labels and FreeCashFlowPerSh, "Free Cash Flow Per Share = " + AsDollars(FreeCashFlowPerSh),
                  if FreeCashFlowPerSh > 0 then GlobalColor("LabelGreen") else GlobalColor("LitePink"));
def score_EarnCash = if PE <0 and FreeCashFlowPerSh < 0 and EarnPerShare < 0 then 0 else 5;

def Gross_Profit_Margin = if IsNaN(GrossProfitMargin())
                          then Gross_Profit_Margin[1]
                          else GrossProfitMargin();
AddLabel(show_labels and Gross_Profit_Margin, "Gross Profit Margin = " + Round(Gross_Profit_Margin, 2),
               if Gross_Profit_Margin > 0 then GlobalColor("LabelGreen") else GlobalColor("LitePink"));

def Operating_Profit_Margin = if IsNaN(OperatingProfitMargin())
                              then Operating_Profit_Margin[1]
                              else OperatingProfitMargin();
AddLabel(show_labels and Operating_Profit_Margin, "Operating Profit Margin = " + Round(Operating_Profit_Margin, 2),            
              if Operating_Profit_Margin > 0 then GlobalColor("LabelGreen") else GlobalColor("LitePink"));


def Net_Profit_Margin = if IsNaN(NetProfitMargin())
                        then Net_Profit_Margin[1]
                        else NetProfitMargin();
AddLabel(show_labels and Net_Profit_Margin, "Net Profit Margin = " + Round(Net_Profit_Margin, 2),
               if Net_Profit_Margin > 0 then GlobalColor("LabelGreen") else GlobalColor("LitePink"));
def score_Profits = if Gross_Profit_Margin>0 or Net_Profit_Margin>0 or Operating_Profit_Margin > 0 then 3 else 0 ;

def CurRatio = if IsNaN(CurrentRatio())
               then CurRatio[1]
               else CurrentRatio();
AddLabel(show_labels and CurRatio, "Current Ratio = " + Round(CurRatio, 2),
               if CurRatio > 2  then GlobalColor("GrayGreen") else
               if CurRatio >= 1 then GlobalColor("LabelGreen") else GlobalColor("LitePink"));

def Quick_Ratio = if IsNaN(QuickRatio())
                  then Quick_Ratio[1]
                  else QuickRatio();
AddLabel(show_labels and Quick_Ratio, "Quick Ratio = " + Round(Quick_Ratio, 2),
               if Quick_Ratio > 2  then GlobalColor("GrayGreen") else
               if Quick_Ratio >= 1 then GlobalColor("LabelGreen") else GlobalColor("LitePink"));
def score_Ratios = if Quick_Ratio >= 1 or CurRatio >= 1 then 3 else 0;

def Return_On_Assets = if IsNaN(ReturnOnAssets())
                       then Return_On_Assets[1]
                       else ReturnOnAssets();
AddLabel(show_labels and Return_On_Assets, "Return On Assets = " + Round(Return_On_Assets),
              if Return_On_Assets >= 15 then GlobalColor("Pre_Cyan") else
              if Return_On_Assets >= 10 then GlobalColor("LabelGreen") else
              if Return_On_Assets > 0 then GlobalColor("GrayGreen") else GlobalColor("LitePink"));


def Return_On_Equity = if IsNaN(ReturnOnEquity())
                       then Return_On_Equity[1]
                       else ReturnOnEquity();
AddLabel(show_labels and Return_On_Equity, "Return On Equity = " + Round(Return_On_Equity),
              if Return_On_Equity >= 15 then GlobalColor("Pre_Cyan") else
              if Return_On_Equity >= 10 then GlobalColor("LabelGreen") else
              if Return_On_Equity > 0 then GlobalColor("GrayGreen") else GlobalColor("LitePink"));
def score_Returns = if Return_On_Equity >= 10 or Return_On_Assets >=10 then 1 else 0 ;


def Sales_Per_Share = if IsNaN(SalesPerShare())
                      then Sales_Per_Share[1]
                      else SalesPerShare();
AddLabel(show_labels and Sales_Per_Share, "Sales Per Share = " + Round(Sales_Per_Share, 2),
                      if Sales_Per_Share > 0 then GlobalColor("LabelGreen") else GlobalColor("LitePink"));
def score_Sales_Per_Share = if Sales_Per_Share > 0 then 1 else 0;

def FixChgCovRatio = if IsNaN(FixedChargeCoverageRatio())
                     then FixChgCovRatio[1]
                     else FixedChargeCoverageRatio();
AddLabel(show_labels and FixChgCovRatio, "Fixed Charge Coverage Ratio = " + Round(FixChgCovRatio, 2),
                     if FixChgCovRatio >= 1 then GlobalColor("LabelGreen") else GlobalColor("LitePink"));

def Total_Asset_Turnover = if IsNaN(TotalAssetTurnover())
                           then Total_Asset_Turnover[1]
                           else TotalAssetTurnover();
AddLabel(show_labels and Total_Asset_Turnover, "Total Asset Turnover = " + Round(Total_Asset_Turnover, 2),
               if Total_Asset_Turnover > 1 then GlobalColor("LabelGreen") else  GlobalColor("neutral"));

def FinLev = if IsNaN(FinancialLeverage())
             then FinLev[1]
             else FinancialLeverage();
AddLabel(show_labels and FinLev, "Financial Leverage = " + Round(FinLev, 2),
                      if FinLev > 0 and FinLev < 2 then GlobalColor("LabelGreen") else GlobalColor("LitePink"));
def score_FinLev = if FinLev < 2 then 1 else 0;

def BookValue = if IsNaN(BookValuePerShare())
                then BookValue[1]
                else BookValuePerShare();
AddLabel(show_labels and BookValue, "Book Value Per Share = " + Round(BookValue),
                if BookValue < 2 then GlobalColor("Pre_Cyan") else
                if BookValue < 3 then GlobalColor("LabelGreen") else GlobalColor("neutral"));

def Long_Term_Debt_To_Capital = if IsNaN(LongTermDebtToCapital())
                                then Long_Term_Debt_To_Capital[1]
                                else LongTermDebtToCapital();
AddLabel(show_labels and Long_Term_Debt_To_Capital, "Long Term Debt To Capital = " + Round(Long_Term_Debt_To_Capital, 2),
 if Long_Term_Debt_To_Capital < 5 then GlobalColor("LabelGreen") else GlobalColor("LitePink"));
def score_Long_Term_Debt_To_Capital = if Long_Term_Debt_To_Capital < 5 then 1 else 0;

def Inventory_Turnover = if IsNaN(InventoryTurnover())
                         then Inventory_Turnover[1]
                         else InventoryTurnover();
AddLabel(show_labels and Inventory_Turnover, "Inventory Turnover = " + Round(Inventory_Turnover, 2),
               if Inventory_Turnover < 5  then GlobalColor("LitePink") else
               if Inventory_Turnover < 10 then GlobalColor("Pre_Cyan") else
               if Inventory_Turnover < 15 then GlobalColor("GrayGreen") else GlobalColor("LitePink"));

def DivPayout = if IsNaN(DividendPayout())
                then DivPayout[1]
                else DividendPayout();
AddLabel(show_labels and DivPayout, "Dividend Payout = " + round(DivPayout,2) + "%", GlobalColor("neutral"));

def DivPerShare = if IsNaN(DividendsPerShareTTM())
                  then DivPerShare[1]
                  else DividendsPerShareTTM();
AddLabel(show_labels and DivPerShare, "Dividend Per Share = " + AsDollars(DivPerShare), GlobalColor("neutral"));

def DivYield = if IsNaN(DividendsPerShareTTM())
                  then DivPerShare[1]
                  else DividendsPerShareTTM()/Close;
AddLabel(show_labels and DivPerShare, "Dividend Yield = " + AsPercent(DivYield), GlobalColor("neutral"));

def Interest_Rate = if IsNaN(InterestRate())
                    then Interest_Rate[1]
                    else InterestRate();
AddLabel(show_labels and Interest_Rate, "Interest Rate = " + Round(Interest_Rate, 2), GlobalColor("neutral"));

def Tax_Rate = if IsNaN(TaxRate())
               then Tax_Rate[1]
               else TaxRate();
AddLabel(show_labels and Tax_Rate, "Tax Rate = " + Round(Tax_Rate, 2), GlobalColor("neutral"));

plot score = score_Returns + score_EarnCash + score_ratios + score_Profits
           + score_FinLev + score_Sales_Per_Share + score_Long_Term_Debt_To_Capital;
AddLabel(show_summaries, "SCORE: " + score,
if score >= 12 then GlobalColor("Pre_Cyan") else
if score >= 10 then GlobalColor("LabelGreen") else
if score >= 8 then GlobalColor("GrayGreen") else GlobalColor("LitePink"));
score.hide();
Hello,
DivYield is wrong. It should be:
def DivYield = if IsNaN(DividendsPerShareTTM())
then DivPerShare[1]/close
else DividendsPerShareTTM()/Close;
 
I copied the whole codes with so many addlabels but it only produced EPS_TTM label. why it did not produce other addlabel?
Thanks,
 
Last edited by a moderator:
I copied the whole codes with so many addlabels but it only produced EPS_TTM label. why it did not produce other addlabel?
Thanks,
There are only two reasons that labels don't populate.
  1. You are using the wrong aggregation, refer to post#1 for instructions of how to use.
  2. The equity is a small cap which doesn't publish that data.
 
Fundamentals are a great factor to confirmation of a trade, I trade SPX mainly so not much use at this time.
 
How do you use stock fundamentals like EarningsPerShareTTM() in a column? It seems to work in a study, but not in a column.
 
Last edited:
OIH7KnI.png

You can place the ToS financial references directly into a watchlist column but you can not use them in watchlist scripts:
Invalid symbol in Stock Fundamentals function.
 
I really like this indicator, I love the ROE banner especially! just curious since i cant seem to find what im looking for in the scan tool, is it possible to get the earnings growth and sales growth over a period time to show as a percentage and maybe its earning 2, 3 and current quarter earnings and sales as percentage, or just the earnings and sales numbers? with possibility of putting them into scanner?
 
TOS is a nice platform, but the scan hacker needs work!
It has to do with the format that the data provider feeds the information.
If you have a script from another platform that has found a workaround to the issue, we could use that logic to jerry-rig something for ToS.
 
It has to do with the format that the data provider feeds the information.
If you have a script from another platform that has found a workaround to the issue, we could use that logic to jerry-rig something for ToS.
Thank you for the response, I will look around and see if I can find something. I have been using Marketsmith to find the combination of technical and fundamental strength, but if I can save $1500 a year and get some close to the same results scanning on a free platform then im all for it.
 
Thank you for the response, I will look around and see if I can find something. I have been using Marketsmith to find the combination of technical and fundamental strength, but if I can save $1500 a year and get some close to the same results scanning on a free platform then im all for it.
I also pay for a service to collect the data that is not available on the platform.
The alpha, beta, PEG, analyst composite value all figure into determining my corral of preferred stocks. None of which is available on any of the platforms that I trade on.
 

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
448 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