Most Investors today rely heavily on charting. Whether it’s breakouts, moving averages, price structure, or volume patterns, everything starts with the chart. But a chart alone cannot give the full picture. A simple fundamental snapshot often decides whether the stock deserves your attention.

This usually means jumping to Screener.in, typing the company name, scrolling through the key numbers and then coming back to the chart. If you monitor 20–30 stocks every morning, this back-and-forth adds friction, slows down decision-making and breaks focus.
A new method fixes this problem completely:
You can now view Screener fundamentals inside Amibroker itself.
No manual search. No switching tabs. No browser distraction.
Just change the stock in Amibroker and basic fundamentals appear instantly.
Why Traders Need Fundamentals Alongside Charts
Even if you trade purely on technicals, a handful of fundamental numbers matter. They act like a quick “sanity filter”.
Before entering a trade, most traders want answers to questions like:
- How big is the company? (Market Cap)
- Is the valuation stretched? (P/E)
- Is the business financially disciplined? (ROCE, ROE)
- Where is the stock trading relative to its 52-week range?
- How much cushion exists through dividends? (Dividend Yield)
- Is the stock sitting far above Book Value?
Looking up each stock manually breaks your flow.
But when the data appears on the chart, fundamentals become a natural part of your reading process.
The biggest advantage is speed.
Technical traders don’t need an entire balance sheet. They need only five to ten ratios that immediately tell whether the trend has fundamental support.
What This Feature Shows You Inside Amibroker
_SECTION_BEGIN("Screener Fundamentals Table");
/* === Required Chart Options === */
SetChartOptions(0, chartShowArrows | chartShowDates);
/* === Required Default Title === */
_N( Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} "
+ "Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}",
O, H, L, C, SelectedValue( ROC(C,1 ) ) ) );
/* === Required Candle Plot === */
Plot( Close, "Close",
ParamColor("Color", colorDefault),
styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
/* ===========================================================
USER-DEFINED FUNCTIONS (Correct AFL Syntax)
=========================================================== */
/* Extract a single <span class="number"> value */
function ExtractVal( fulltext, blockname )
{
out = "N/A";
pos = StrFind( fulltext, blockname );
if( pos > 0 )
{
seg = StrMid( fulltext, pos - 1, 3000 );
tag = "<span class=\"number\">";
tpos = StrFind( seg, tag );
if( tpos > 0 )
{
tpos = (tpos - 1) + StrLen( tag );
part = StrMid( seg, tpos, 1000 );
rel = StrFind( part, "</span>" );
if( rel > 0 )
{
endp = tpos + rel - 1;
out = StrMid( seg, tpos, endp - tpos );
out = StrReplace( out, ",", "" );
}
}
}
return out;
}
/* Extract High / Low pair */
function ExtractHighLow( fulltext )
{
hl = "N/A";
pos = StrFind( fulltext, "High / Low" );
if( pos > 0 )
{
seg = StrMid( fulltext, pos - 1, 3000 );
tag = "<span class=\"number\">";
/* --- High --- */
t1 = StrFind( seg, tag );
if( t1 > 0 )
{
t1 = (t1 - 1) + StrLen( tag );
part1 = StrMid( seg, t1, 800 );
e1 = StrFind( part1, "</span>" );
if( e1 > 0 )
{
hv = StrMid( seg, t1, e1 - 1 );
hv = StrReplace( hv, ",", "" );
/* --- Low (second number) --- */
seg2 = StrMid( seg, t1 + e1, 2000 );
t2 = StrFind( seg2, tag );
if( t2 > 0 )
{
t2 = (t2 - 1) + StrLen( tag );
part2 = StrMid( seg2, t2, 800 );
e2 = StrFind( part2, "</span>" );
if( e2 > 0 )
{
lv = StrMid( seg2, t2, e2 - 1 );
lv = StrReplace( lv, ",", "" );
hl = hv + " / " + lv;
}
}
}
}
}
return hl;
}
/* ===========================================================
FETCH FUNDAMENTALS (LIVE)
=========================================================== */
symbol = Name(); //symbol -> SBIN, RELIANCE not like SBIN
symbol = StrReplace(symbol,".NS","");
symbol = StrReplace(symbol,"-EQ","");
symbol = StrReplace(symbol,".NSE","");
symbol = StrReplace(symbol,"-NSE","");
url = "https://www.screener.in/company/" + symbol + "/consolidated/";
ih = InternetOpenURL( url );
mc = cp = hl = pe = bv = dy = roce = roe = fv = "N/A";
if( ih )
{
full = "";
s = InternetReadString( ih );
while( s != "" )
{
full = full + s;
s = InternetReadString( ih );
}
InternetClose( ih );
mc = ExtractVal( full, "Market Cap" );
cp = ExtractVal( full, "Current Price" );
pe = ExtractVal( full, "Stock P/E" );
bv = ExtractVal( full, "Book Value" );
dy = ExtractVal( full, "Dividend Yield" );
roce = ExtractVal( full, "ROCE" );
roe = ExtractVal( full, "ROE" );
fv = ExtractVal( full, "Face Value" );
hl = ExtractHighLow( full );
}
/* ===========================================================
GFX TABLE DISPLAY
=========================================================== */
/* User table settings */
cellHeight = 28;
cellWidth = 140;
startX = 20;
startY = 60;
/* Table colors */
tableBorder = colorLightBlue;
tableBG = colorBlack;
headerBG = colorBlue;
headerFG = colorWhite;
cellFG = colorWhite;
/* FUNCTION FOR TABLE CELL */
function TableCell( text, col, row, bgColor, fgColor )
{
x1 = startX + (col-1) * cellWidth;
y1 = startY + (row-1) * cellHeight;
x2 = x1 + cellWidth;
y2 = y1 + cellHeight;
GfxSelectPen( tableBorder, 1 );
GfxSelectSolidBrush( bgColor );
GfxRectangle( x1, y1, x2, y2 );
GfxSetBkColor( bgColor );
GfxSetTextColor( fgColor );
GfxTextOut( text, x1 + 4, y1 + 6 );
}
/* -----------------------------
HEADER ROW
------------------------------ */
TableCell( "Field", 1, 1, headerBG, headerFG );
TableCell( "Value", 2, 1, headerBG, headerFG );
/* -----------------------------
FUNDAMENTALS TABLE
------------------------------ */
TableCell( "Market Cap (Cr)", 1, 2, tableBG, cellFG ); TableCell( mc, 2, 2, tableBG, cellFG );
TableCell( "Current Price", 1, 3, tableBG, cellFG ); TableCell( cp, 2, 3, tableBG, cellFG );
TableCell( "High / Low", 1, 4, tableBG, cellFG ); TableCell( hl, 2, 4, tableBG, cellFG );
TableCell( "Stock P/E", 1, 5, tableBG, cellFG ); TableCell( pe, 2, 5, tableBG, cellFG );
TableCell( "Book Value", 1, 6, tableBG, cellFG ); TableCell( bv, 2, 6, tableBG, cellFG );
TableCell( "Dividend Yield", 1, 7, tableBG, cellFG ); TableCell( dy, 2, 7, tableBG, cellFG );
TableCell( "ROCE %", 1, 8, tableBG, cellFG ); TableCell( roce, 2, 8, tableBG, cellFG );
TableCell( "ROE %", 1, 9, tableBG, cellFG ); TableCell( roe, 2, 9, tableBG, cellFG );
TableCell( "Face Value", 1,10, tableBG, cellFG ); TableCell( fv, 2,10, tableBG, cellFG );
_SECTION_END();
What This Feature Shows You Inside Amibroker
Every time you switch symbols, Amibroker fetches the latest numbers from Screener.in and displays a clean two-column table on your chart.
The table includes:
- Market Cap (Cr)
- Current Price (as per Screener)
- 52-Week High / Low
- Stock P/E
- Book Value
- Dividend Yield
- ROCE
- ROE
- Face Value
This is exactly the cluster of fundamentals that traders check most frequently before taking positions.
Within one second of switching symbols, these details appear—just like a mini Moneycontrol snapshot, but inside your chart.
A Unified View: Technical + Fundamental
This single-screen workflow does two important things:
1. Shortens the Research Cycle
When you watch a chart forming a breakout, the fundamentals tell whether the story has legs.
A low ROE and weak numbers may stop you from chasing the move.
A strong ROCE and clean balance-sheet may convince you to hold longer.
2. Reduces the Research Noise
Opening multiple sites leads to distraction. Each website tries to pull you into more data.
But when the information appears on the chart, your attention stays where it matters: price.
3. Makes Watchlist Scanning Faster
Traders typically review charts in a sequence. With fundamentals embedded into the chart layout, the process becomes seamless.
Designed for Traders, Not Programmers
This feature is built purely for practical use.
You don’t need technical knowledge or programming skills to use it.
You just:
- Paste the provided AFL into Amibroker
- Apply it on any chart
- View fundamentals instantly for every stock you scan
Everything else runs in the background.
Amibroker quietly fetches data from Screener, reads only the sections you need, and presents it in a clean visual format.
A Smarter Workflow for Morning Scans
A practical routine many traders follow:
- Create a watchlist of stocks near breakout zones
- Open Amibroker
- Scroll through your list
- Read both the chart and fundamentals on the same screen
- Shortlist stocks within minutes
For positional traders, this can become a powerful edge.
For intraday traders, fundamentals may not influence entries but help in stock selection and long-term confidence.
Use Responsibly
Screener.in is one of the most trader-friendly websites in India.
This integration uses only the publicly available company pages.
Avoid flipping symbols too fast or running automated loops.
A moderate scanning speed is perfectly fine.
ih = InternetOpenURL(url);
Very excellent. if other parameters like debt equity, cfo. fcf sales profit growth are included , it will immensely benefit the trading/investing community.