Metrics Legend:
RSIi
SMAi
EMAi
MACDi
Bollingeri
P/Ei
P/Bi
P/Si
PEGi
CAGRi
Drawdowni
Volatilityi
Supporti
Resistancei
YTMi
Durationi
Convexityi
Current Yieldi
Accruedi
Dirty/Cleani
Spreadi
Market Indices Analysis
{% if analysis.index_results %}
| Symbol |
Index Name |
Close |
SMA 20 |
SMA 50 |
200D MA |
1W |
1M |
Trend (SMA20/50) |
1D Change |
RSI (14) |
{% for index in analysis.index_results %}
{% set index_name = {
'^NSEI': 'NIFTY 50',
'^CNXBL': 'NIFTY LargeMidcap 250',
'^CRSMID': 'NIFTY Midcap 150',
'^CRSSML': 'NIFTY Smallcap 250'
}.get(index.symbol, index.name) %}
| {{ index.symbol }} |
{{ index_name }} |
{% if index.technical_indicators.close is number %}{{ index.technical_indicators.close|round(2) }}{% else %}N/A{% endif %} |
{% if index.technical_indicators.sma_20 is number %}{{ index.technical_indicators.sma_20|round(2) }}{% else %}N/A{% endif %} |
{% if index.technical_indicators.sma_50 is number %}{{ index.technical_indicators.sma_50|round(2) }}{% else %}N/A{% endif %} |
{% if index.technical_indicators.sma_200 is number %}{{ index.technical_indicators.sma_200|round(2) }}{% else %}N/A{% endif %} |
{% if index.technical_indicators.weekly_return is number %}{{ index.technical_indicators.weekly_return|round(2) }}%{% else %}N/A{% endif %} |
{% if index.technical_indicators.monthly_return is number %}{{ index.technical_indicators.monthly_return|round(2) }}%{% else %}N/A{% endif %} |
{% set cross = index.technical_indicators.sma_20_50_crossover %}
{% if cross %}
{% set chip_class = 'chip-neutral' %}
{% if cross == 'bullish' %}{% set chip_class = 'chip-bullish' %}{% elif cross == 'bearish' %}{% set chip_class = 'chip-bearish' %}{% endif %}
{% if cross == 'bullish' %}Bullish 20>50{% elif cross == 'bearish' %}Bearish 20<50{% else %}Neutral{% endif %}
{% else %}
N/A
{% endif %}
|
{% set dr = index.technical_indicators.daily_return %}
{% if dr is number %}
{% set chip_class = 'chip-neutral' %}
{% if dr > 0 %}{% set chip_class = 'chip-bullish' %}{% elif dr < 0 %}{% set chip_class = 'chip-bearish' %}{% endif %}
{% if dr > 0 %}▲{% elif dr < 0 %}▼{% else %}•{% endif %}
{{ dr|round(2) }}%
{% else %}
N/A
{% endif %}
|
{% if index.technical_indicators.rsi is number %}{{ index.technical_indicators.rsi|round(2) }}{% else %}N/A{% endif %} |
{% endfor %}
{% else %}
No index data available.
{% endif %}
Stock Analysis Summary
| Stock |
Current Price |
1D Change |
1Y CAGR |
3Y CAGR |
5Y CAGR |
RSI (14) |
50D MA |
200D MA |
P/E |
P/B |
P/S |
PEG |
Recommendation |
{% for result in analysis.stock_results %}
| {{ result.symbol }} |
{% if result.technical_indicators.close is number %}{{ result.technical_indicators.close|round(2) }}{% else %}N/A{% endif %} |
{% set dr = result.technical_indicators.daily_return %}
{% if dr is number %}
{% set chip_class = 'chip-neutral' %}
{% if dr > 0 %}{% set chip_class = 'chip-bullish' %}{% elif dr < 0 %}{% set chip_class = 'chip-bearish' %}{% endif %}
{% if dr > 0 %}▲{% elif dr < 0 %}▼{% else %}•{% endif %} {{ dr|round(2) }}%
{% else %}
N/A
{% endif %}
|
{% if result.technical_indicators.cagr_1y is number %}{{ result.technical_indicators.cagr_1y|round(2) }}%{% else %}N/A{% endif %} |
{% if result.technical_indicators.cagr_3y is number %}{{ result.technical_indicators.cagr_3y|round(2) }}%{% else %}N/A{% endif %} |
{% if result.technical_indicators.cagr_5y is number %}{{ result.technical_indicators.cagr_5y|round(2) }}%{% else %}N/A{% endif %} |
{% if result.technical_indicators.rsi is number %}{{ result.technical_indicators.rsi|round(2) }}{% else %}N/A{% endif %} |
{% if result.technical_indicators.sma_50 is number %}{{ result.technical_indicators.sma_50|round(2) }}{% else %}N/A{% endif %} |
{% if result.technical_indicators.sma_200 is number %}{{ result.technical_indicators.sma_200|round(2) }}{% else %}N/A{% endif %} |
{% if result.fundamental_metrics.pe_ratio is number %}{{ result.fundamental_metrics.pe_ratio|round(2) }}{% else %}N/A{% endif %} |
{% if result.fundamental_metrics.pb_ratio is number %}{{ result.fundamental_metrics.pb_ratio|round(2) }}{% else %}N/A{% endif %} |
{% if result.fundamental_metrics.price_to_sales is number %}{{ result.fundamental_metrics.price_to_sales|round(2) }}{% else %}N/A{% endif %} |
{% if result.fundamental_metrics.peg_ratio is number %}{{ result.fundamental_metrics.peg_ratio|round(2) }}{% else %}N/A{% endif %} |
{{ result.recommendation.action if result.recommendation else 'N/A' }} |
{% endfor %}
{% if analysis.stock_results and analysis.stock_results|length > 0 %}
{% set sorted_by_change = analysis.stock_results|sort(attribute='technical_indicators.daily_return', reverse=true) %}
{% set top_gainers = sorted_by_change[:5] %}
{% set sorted_by_change_asc = analysis.stock_results|sort(attribute='technical_indicators.daily_return') %}
{% set top_losers = sorted_by_change_asc[:5] %}
Top 5 Gainers & Losers (1D)
| Top 5 Gainers |
|
Top 5 Losers |
| Stock | 1D Change | Price |
|
Stock | 1D Change | Price |
{% for i in range(0, 5) %}
| {% if top_gainers|length > i %}{{ top_gainers[i].symbol }}{% else %}-{% endif %} |
{% if top_gainers|length > i and top_gainers[i].technical_indicators.daily_return is number %}{{ top_gainers[i].technical_indicators.daily_return|round(2) }}%{% else %}-{% endif %} |
{% if top_gainers|length > i and top_gainers[i].technical_indicators.close is number %}{{ top_gainers[i].technical_indicators.close|round(2) }}{% else %}-{% endif %} |
|
{% if top_losers|length > i %}{{ top_losers[i].symbol }}{% else %}-{% endif %} |
{% if top_losers|length > i and top_losers[i].technical_indicators.daily_return is number %}{{ top_losers[i].technical_indicators.daily_return|round(2) }}%{% else %}-{% endif %} |
{% if top_losers|length > i and top_losers[i].technical_indicators.close is number %}{{ top_losers[i].technical_indicators.close|round(2) }}{% else %}-{% endif %} |
{% endfor %}
{% endif %}
Detailed Stock Analysis
{% for result in analysis.stock_results %}
{{ result.symbol }} - {{ result.metadata['info']['longName'] }}
Summary
| Current Price |
1D Change |
RSI (14) |
50D MA |
200D MA |
P/E |
P/B |
P/S |
PEG |
| {% if result.technical_indicators.close is number %}{{ result.technical_indicators.close|round(2) }}{% else %}N/A{% endif %} |
{% set dr = result.technical_indicators.daily_return %}
{% if dr is number %}
{% set chip_class = 'chip-neutral' %}
{% if dr > 0 %}{% set chip_class = 'chip-bullish' %}{% elif dr < 0 %}{% set chip_class = 'chip-bearish' %}{% endif %}
{% if dr > 0 %}▲{% elif dr < 0 %}▼{% else %}•{% endif %} {{ dr|round(2) }}%
{% else %}
N/A
{% endif %}
|
{% if result.technical_indicators.rsi is number %}{{ result.technical_indicators.rsi|round(2) }}{% else %}N/A{% endif %} |
{% if result.technical_indicators.sma_50 is number %}{{ result.technical_indicators.sma_50|round(2) }}{% else %}N/A{% endif %} |
{% if result.technical_indicators.sma_200 is number %}{{ result.technical_indicators.sma_200|round(2) }}{% else %}N/A{% endif %} |
{% if result.fundamental_metrics.pe_ratio is number %}{{ result.fundamental_metrics.pe_ratio|round(2) }}{% else %}N/A{% endif %} |
{% if result.fundamental_metrics.pb_ratio is number %}{{ result.fundamental_metrics.pb_ratio|round(2) }}{% else %}N/A{% endif %} |
{% if result.fundamental_metrics.price_to_sales is number %}{{ result.fundamental_metrics.price_to_sales|round(2) }}{% else %}N/A{% endif %} |
{% if result.fundamental_metrics.peg_ratio is number %}{{ result.fundamental_metrics.peg_ratio|round(2) }}{% else %}N/A{% endif %} |
Detailed Analysis
| Metric | Value | Metric | Value |
| Close | {% if result.technical_indicators.close is number %}{{ result.technical_indicators.close|round(2) }}{% else %}N/A{% endif %} | Daily Return | {% if result.technical_indicators.daily_return is number %}{{ result.technical_indicators.daily_return|round(2) }}%{% else %}N/A{% endif %} |
| SMA 20 ⓘ | {% if result.technical_indicators.sma_20 is number %}{{ result.technical_indicators.sma_20|round(2) }}{% else %}N/A{% endif %} | SMA 50 ⓘ | {% if result.technical_indicators.sma_50 is number %}{{ result.technical_indicators.sma_50|round(2) }}{% else %}N/A{% endif %} |
| SMA 200 ⓘ | {% if result.technical_indicators.sma_200 is number %}{{ result.technical_indicators.sma_200|round(2) }}{% else %}N/A{% endif %} | EMA 20 ⓘ | {% if result.technical_indicators.ema_20 is number %}{{ result.technical_indicators.ema_20|round(2) }}{% else %}N/A{% endif %} |
| EMA 50 ⓘ | {% if result.technical_indicators.ema_50 is number %}{{ result.technical_indicators.ema_50|round(2) }}{% else %}N/A{% endif %} | RSI ⓘ | {% if result.technical_indicators.rsi is number %}{{ result.technical_indicators.rsi|round(2) }}{% else %}N/A{% endif %} |
| MACD ⓘ | {% if result.technical_indicators.macd is number %}{{ result.technical_indicators.macd|round(2) }}{% else %}N/A{% endif %} | MACD Signal ⓘ | {% if result.technical_indicators.macd_signal is number %}{{ result.technical_indicators.macd_signal|round(2) }}{% else %}N/A{% endif %} |
| Bollinger Middle ⓘ | {% if result.technical_indicators.bollinger.middle is number %}{{ result.technical_indicators.bollinger.middle|round(2) }}{% else %}N/A{% endif %} | Bollinger Upper ⓘ | {% if result.technical_indicators.bollinger.upper is number %}{{ result.technical_indicators.bollinger.upper|round(2) }}{% else %}N/A{% endif %} |
| Bollinger Lower ⓘ | {% if result.technical_indicators.bollinger.lower is number %}{{ result.technical_indicators.bollinger.lower|round(2) }}{% else %}N/A{% endif %} | Volume | {{ '{:,.0f}'.format(result.technical_indicators.volume) if result.technical_indicators.volume is not none else 'N/A' }} |
| P/E | {% if result.fundamental_metrics.pe_ratio is number %}{{ result.fundamental_metrics.pe_ratio|round(2) }}{% else %}N/A{% endif %} | P/B | {% if result.fundamental_metrics.pb_ratio is number %}{{ result.fundamental_metrics.pb_ratio|round(2) }}{% else %}N/A{% endif %} |
| P/S | {% if result.fundamental_metrics.price_to_sales is number %}{{ result.fundamental_metrics.price_to_sales|round(2) }}{% else %}N/A{% endif %} | PEG | {% if result.fundamental_metrics.peg_ratio is number %}{{ result.fundamental_metrics.peg_ratio|round(2) }}{% else %}N/A{% endif %} |
| Market Cap | {{ '{:,.0f}'.format(result.fundamental_metrics.market_cap) if result.fundamental_metrics.market_cap is not none else 'N/A' }} | Enterprise Value | {{ '{:,.0f}'.format(result.fundamental_metrics.enterprise_value) if result.fundamental_metrics.enterprise_value is not none else 'N/A' }} |
| Price to Sales | {% if result.fundamental_metrics.price_to_sales is number %}{{ result.fundamental_metrics.price_to_sales|round(2) }}{% else %}N/A{% endif %} | Profit Margins | {% if result.fundamental_metrics.profit_margins is number %}{{ result.fundamental_metrics.profit_margins|round(2) }}{% else %}N/A{% endif %} |
| Revenue Growth | {% if result.fundamental_metrics.revenue_growth is number %}{{ result.fundamental_metrics.revenue_growth|round(2) }}{% else %}N/A{% endif %} | Earnings Growth | {% if result.fundamental_metrics.earnings_growth is number %}{{ result.fundamental_metrics.earnings_growth|round(2) }}%{% else %}N/A{% endif %} |
| Debt to Equity | {% if result.fundamental_metrics.debt_to_equity is number %}{{ result.fundamental_metrics.debt_to_equity|round(2) }}{% else %}N/A{% endif %} | Total Debt | {{ '{:,.0f}'.format(result.fundamental_metrics.total_debt) if result.fundamental_metrics.total_debt is not none else 'N/A' }} |
| Payout Ratio | {% if result.fundamental_metrics.payout_ratio is number %}{{ result.fundamental_metrics.payout_ratio|round(2) }}{% else %}N/A{% endif %} | | |
{% else %}
No stock data available.
{% endfor %}
Mutual Fund Summary
{% if analysis.mutual_fund_summaries %}
| Fund |
RSI (14) |
1Y CAGR |
3Y CAGR |
5Y CAGR |
Volatility |
{% for summary in analysis.mutual_fund_summaries %}
| {{ summary.name }} |
{% if summary.rsi is number %}{{ summary.rsi|round(2) }}{% else %}N/A{% endif %} |
{% if summary.cagr_1y is number %}{{ summary.cagr_1y|round(2) }}%{% else %}N/A{% endif %} |
{% if summary.cagr_3y is number %}{{ summary.cagr_3y|round(2) }}%{% else %}N/A{% endif %} |
{% if summary.cagr_5y is number %}{{ summary.cagr_5y|round(2) }}%{% else %}N/A{% endif %} |
{% if summary.annual_volatility is number %}{{ summary.annual_volatility|round(2) }}%{% else %}N/A{% endif %} |
{% endfor %}
{% else %}
No mutual fund data available.
{% endif %}
Mutual Fund Analysis
{% for summary in analysis.mutual_fund_summaries %}
{{ summary.name }}
Performance Metrics
| Period | CAGR |
| 1 Year | {% if summary.cagr_1y is number %}{{ summary.cagr_1y|round(2) }}%{% else %}N/A{% endif %} |
| 3 Years | {% if summary.cagr_3y is number %}{{ summary.cagr_3y|round(2) }}%{% else %}N/A{% endif %} |
| 5 Years | {% if summary.cagr_5y is number %}{{ summary.cagr_5y|round(2) }}%{% else %}N/A{% endif %} |
Indicators
| Indicator | Value |
| RSI (14) | {% if summary.rsi is number %}{{ summary.rsi|round(2) }}{% else %}N/A{% endif %} |
| 20-Day MA | {% if summary.ma_20 is number %}{{ summary.ma_20|round(2) }}{% else %}N/A{% endif %} |
| 20-Day Std Dev | {% if summary['20d_std'] is number %}{{ summary['20d_std']|round(2) }}{% else %}N/A{% endif %} |
| Support | {% if summary.support is number %}{{ summary.support|round(2) }}{% else %}N/A{% endif %} |
| Resistance | {% if summary.resistance is number %}{{ summary.resistance|round(2) }}{% else %}N/A{% endif %} |
| Bollinger Upper | {% if summary.upper_band is number %}{{ summary.upper_band|round(2) }}{% else %}N/A{% endif %} |
| Bollinger Lower | {% if summary.lower_band is number %}{{ summary.lower_band|round(2) }}{% else %}N/A{% endif %} |
Risk Analysis
| Metric | Value |
| Max Drawdown | {% if summary.max_drawdown is number %}{{ summary.max_drawdown|round(2) }}%{% else %}N/A{% endif %} |
| Standard Deviation | {% if summary.annual_volatility is number %}{{ summary.annual_volatility|round(2) }}%{% else %}N/A{% endif %} |
{% else %}
No mutual fund data available.
{% endfor %}
{% if analysis.bond_results and analysis.bond_results|length > 0 %}
Corporate Bonds Summary
| ISIN |
Issuer |
Coupon % |
Maturity |
Clean Price |
Dirty Price |
Accrued |
YTM % |
YTC % |
YTW % |
Current Yield % |
Mod Duration |
Convexity |
Spread (bps) |
Qty |
Market Value |
Next Call |
{% for b in analysis.bond_results %}
| {{ b.isin }} |
{{ b.issuer }} |
{% if b.coupon is number %}{{ b.coupon|round(2) }}{% else %}N/A{% endif %} |
{{ b.maturity_date }} |
{% if b.clean_price is number %}{{ b.clean_price|round(2) }}{% else %}N/A{% endif %} |
{% if b.dirty_price is number %}{{ b.dirty_price|round(2) }}{% else %}N/A{% endif %} |
{% if b.accrued_interest is number %}{{ b.accrued_interest|round(2) }}{% else %}N/A{% endif %} |
{% if b.ytm is number %}{{ b.ytm|round(2) }}{% else %}N/A{% endif %} |
{% if b.ytc is number %}{{ b.ytc|round(2) }}{% else %}N/A{% endif %} |
{% if b.ytw is number %}{{ b.ytw|round(2) }}{% else %}N/A{% endif %} |
{% if b.current_yield is number %}{{ b.current_yield|round(2) }}{% else %}N/A{% endif %} |
{% if b.modified_duration is number %}{{ b.modified_duration|round(3) }}{% else %}N/A{% endif %} |
{% if b.convexity is number %}{{ b.convexity|round(3) }}{% else %}N/A{% endif %} |
{% if b.spread is number %}{{ (b.spread * 100)|round(1) }}{% else %}N/A{% endif %} |
{{ b.quantity or 0 }} |
{% if b.market_value is number %}{{ b.market_value|round(2) }}{% else %}N/A{% endif %} |
{{ b.next_call_date or 'N/A' }} |
{% endfor %}
{% if analysis.bond_portfolio %}
Corporate Bond Portfolio Summary
| Total Bonds |
Total Market Value |
Weighted Mod Duration |
Weighted Convexity |
| {{ analysis.bond_portfolio.count }} |
{% if analysis.bond_portfolio.total_market_value is number %}{{ analysis.bond_portfolio.total_market_value|round(2) }}{% else %}N/A{% endif %} |
{% if analysis.bond_portfolio.weighted_modified_duration is number %}{{ analysis.bond_portfolio.weighted_modified_duration|round(3) }}{% else %}N/A{% endif %} |
{% if analysis.bond_portfolio.weighted_convexity is number %}{{ analysis.bond_portfolio.weighted_convexity|round(3) }}{% else %}N/A{% endif %} |
{% endif %}
Corporate Bonds - Details
{% for b in analysis.bond_results %}
{{ b.issuer }} ({{ b.isin }})
| Field | Value | Field | Value |
| ISIN | {{ b.isin }} | Issuer | {{ b.issuer }} |
| Coupon % | {% if b.coupon is number %}{{ b.coupon|round(2) }}{% else %}N/A{% endif %} | Frequency | {{ b.frequency }} |
| Maturity | {{ b.maturity_date }} | Face Value | {% if b.face_value is number %}{{ b.face_value|round(2) }}{% else %}N/A{% endif %} |
| Day Count | {{ b.day_count }} | Rating | {{ b.rating or 'N/A' }} |
| Settlement | {{ b.settlement_date or 'N/A' }} | Clean Price | {% if b.clean_price is number %}{{ b.clean_price|round(2) }}{% else %}N/A{% endif %} |
| Accrued | {% if b.accrued_interest is number %}{{ b.accrued_interest|round(2) }}{% else %}N/A{% endif %} | Dirty Price | {% if b.dirty_price is number %}{{ b.dirty_price|round(2) }}{% else %}N/A{% endif %} |
| YTM % | {% if b.ytm is number %}{{ b.ytm|round(2) }}{% else %}N/A{% endif %} | YTC % | {% if b.ytc is number %}{{ b.ytc|round(2) }}{% else %}N/A{% endif %} |
| YTW % | {% if b.ytw is number %}{{ b.ytw|round(2) }}{% else %}N/A{% endif %} | Current Yield % | {% if b.current_yield is number %}{{ b.current_yield|round(2) }}{% else %}N/A{% endif %} |
| Macaulay Duration | {% if b.macaulay_duration is number %}{{ b.macaulay_duration|round(3) }}{% else %}N/A{% endif %} | Modified Duration | {% if b.modified_duration is number %}{{ b.modified_duration|round(3) }}{% else %}N/A{% endif %} |
| Convexity | {% if b.convexity is number %}{{ b.convexity|round(3) }}{% else %}N/A{% endif %} | Spread (bps) | {% if b.spread is number %}{{ (b.spread * 100)|round(1) }}{% else %}N/A{% endif %} |
{% endfor %}
{% endif %}
Metrics Glossary
- P/E (Price-to-Earnings)
- Price per share divided by earnings per share.
Back to Top ↑
- P/B (Price-to-Book)
- Market price divided by book value per share.
Back to Top ↑
- P/S (Price-to-Sales)
- Stock price divided by sales per share.
Back to Top ↑
- PEG (Price/Earnings-to-Growth)
- PEG = (P/E) / (EPS growth). Lower values can indicate better value for the growth rate.
Back to Top ↑
- RSI (Relative Strength Index)
- Momentum oscillator; values above 70 may indicate overbought, below 30 oversold.
Back to Top ↑
- SMA (Simple Moving Average)
- Average of prices over a set window (e.g., 50D, 200D) indicating trend.
Back to Top ↑
- EMA (Exponential Moving Average)
- Moving average that weights recent prices more heavily.
Back to Top ↑
- MACD
- Difference between two EMAs with a signal line; used to identify momentum shifts.
Back to Top ↑
- Bollinger Bands
- Bands at ±2 standard deviations from a moving average, indicating volatility.
Back to Top ↑
- CAGR (Compound Annual Growth Rate)
- Mean annual growth rate of an investment over a specified time period.
Back to Top ↑
- Max Drawdown
- Largest observed loss from a peak to a trough before a new peak is attained.
Back to Top ↑
- Volatility (Std Dev)
- Annualized standard deviation of returns; higher values imply higher risk.
Back to Top ↑
- Support
- A price level where a downtrend can be expected to pause due to demand.
Back to Top ↑
- Resistance
- A price level where an uptrend can be expected to pause due to supply.
Back to Top ↑
- YTM (Yield to Maturity)
- Annualized return assuming the bond is held to maturity and coupons are reinvested at the same rate.
Back to Top ↑
- Duration
- Price sensitivity to yield changes. Modified duration approximates % price change for a 1% yield move.
Back to Top ↑
- Convexity
- Measures the curvature of the price-yield relationship; improves duration estimate for larger moves.
Back to Top ↑
- Current Yield
- Annual coupon divided by current clean price.
Back to Top ↑
- Accrued Interest
- Interest earned since the last coupon date, payable by the buyer to the seller.
Back to Top ↑
- Dirty vs Clean Price
- Clean price excludes accrued interest; dirty price includes it (dirty = clean + accrued).
Back to Top ↑
- Spread
- Difference between bond YTM and benchmark yield (e.g., government bond), often quoted in basis points.
Back to Top ↑
- YTC (Yield-to-Call)
- Annualized yield assuming the bond is called at the next call date at the call price.
Back to Top ↑
- YTW (Yield-to-Worst)
- The lowest yield among YTM, YTC, and yield-to-put (if applicable) across relevant dates.
Back to Top ↑
- Market Value
- Position value = Dirty Price/100 × Face Value × Quantity.
Back to Top ↑