.elementor-3015 .elementor-element.elementor-element-dd0831d{--display:flex;}/* Start custom CSS for html, class: .elementor-element-58a85c8 */<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Equity Research Report | Deepak Kumar Singh</title>
    <script src="https://cdn.tailwindcss.com"></script>
    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
    <!-- Chosen Palette: Warm Neutrals -->
    <!-- Application Structure Plan: The SPA is designed with a user-centric, non-linear architecture. It starts with a high-level summary, followed by a filterable portfolio dashboard for quick comparison. The core of the app is the detailed stock analysis section, where users can select a specific stock to view its fundamental and technical data side-by-side. This structure was chosen to cater to different user needs: a quick overview for the busy executive, a comparative tool for the analyst, and a deep-dive resource for the serious investor. A new feature has been added: an AI-powered analyst's take, accessible by a button click, to provide a dynamic, LLM-generated summary of the selected stock's trading potential. -->
    <!-- Visualization & Content Choices: The report's dense data is translated into interactive visualizations. A bar chart compares P/E ratios to give a quick sense of valuation across the portfolio. For each stock, a line chart shows historical price movement, providing context for the technical analysis. Key financial metrics are presented in clear, concise cards. The new LLM feature is presented as a text output card that appears upon user interaction, transforming static data points into a synthesized, conversational summary. This approach transforms static numbers into a dynamic story of performance and potential, using Chart.js for its flexibility and clean aesthetic and a fetch call to a Gemini model for the AI analysis. -->
    <!-- CONFIRMATION: NO SVG graphics used. NO Mermaid JS used. -->
    <style>
        body {
            font-family: 'Inter', sans-serif;
            background-color: #fdfdfd;
            color: #1a202c;
        }
        .chart-container {
            position: relative;
            width: 100%;
            max-width: 600px;
            margin-left: auto;
            margin-right: auto;
            height: 300px;
            max-height: 400px;
        }
        @media (min-width: 768px) {
            .chart-container {
                height: 350px;
            }
        }
    </style>
</head>
<body class="antialiased">

    <div class="container mx-auto px-4 sm:px-6 lg:px-8 py-8">

        <header class="text-center mb-12">
            <h1 class="text-4xl font-bold text-gray-800">A Comprehensive Equity Research Report</h1>
            <p class="text-lg text-gray-600 mt-2">Technical and Fundamental Analysis for Swing Trading</p>
            <p class="text-sm text-gray-500 mt-4">Authored and Researched by: Deepak Kumar Singh</p>
        </header>

        <main>
            <section id="summary" class="mb-12 bg-white p-6 rounded-lg shadow-sm">
                <h2 class="text-2xl font-semibold mb-4 text-gray-700">Executive Summary</h2>
                <p class="text-gray-600 leading-relaxed">
                    This interactive report offers a detailed analysis of 17 Indian equities, designed for swing trading. The portfolio presents a mix of high-growth, high-valuation companies and fundamentally strong businesses. This tool allows for an in-depth exploration of each stock's financial health, market performance, and technical indicators, providing a strategic guide for informed decision-making.
                </p>
            </section>

            <section id="portfolio-glance" class="mb-12">
                <h2 class="text-2xl font-semibold mb-4 text-center text-gray-700">Portfolio at a Glance</h2>
                <div class="bg-white p-6 rounded-lg shadow-sm">
                    <div class="chart-container mx-auto">
                        <canvas id="peRatioChart"></canvas>
                    </div>
                </div>
            </section>

            <section id="stock-details">
                <h2 class="text-2xl font-semibold mb-6 text-center text-gray-700">Detailed Stock Analysis</h2>
                <div class="flex justify-center mb-8">
                    <select id="stock-.elementor-3015 .elementor-element.elementor-element-58a85c8" class="block w-full max-w-xs p-2 border border-gray-300 rounded-md shadow-sm focus:ring-indigo-500 focus:border-indigo-500">
                    </select>
                </div>

                <div id="stock-display" class="grid grid-cols-1 md:grid-cols-2 gap-8">
                </div>
            </section>
        </main>

        <footer class="text-center mt-12 text-sm text-gray-500">
            <p>&copy; 2025 Deepak Kumar Singh. All rights reserved.</p>
            <p class="mt-2">This report is for informational purposes only and does not constitute investment advice.</p>
        </footer>

    </div>

    <script>
        const stockData = [
            {
                ticker: 'DENTA',
                name: 'Denta Water and Infra Solutions Ltd.',
                overview: 'Specializing in water engineering, procurement, and construction (EPC) services, with a focus on groundwater recharging and lift irrigation systems.',
                fundamentals: {
                    peRatio: 17.80,
                    pbRatio: 1.88,
                    roe: '18.46%',
                    debtToEquity: 0.00,
                    q1Fy26Revenue: '₹67.28 Cr',
                    q1Fy26Profit: '₹18.55 Cr'
                },
                technicals: {
                    support: 'S1: ₹314.50, S2: ₹290.35',
                    resistance: 'R1: ₹379.90, R2: ₹421.15',
                    fiftyTwoWeekHigh: '₹397.35',
                    fiftyTwoWeekLow: '₹251.25',
                    rsi: 62.79,
                    trend: 'Bullish'
                },
                priceHistory: [255, 260, 280, 275, 300, 320, 350, 380, 390, 411]
            },
            {
                ticker: 'ROSSTECH',
                name: 'Rossell Techsys Ltd.',
                overview: 'An engineering company in the Aerospace & Defence sector, providing solutions for aerospace and defense clients.',
                fundamentals: {
                    peRatio: 168.47,
                    pbRatio: 19.20,
                    roe: 'N/A',
                    debtToEquity: 0.00,
                    q1Fy26Income: '₹88.48 Cr',
                    q1Fy26Profit: '₹3.30 Cr'
                },
                technicals: {
                    support: 'S1: ₹567.73, S2: ₹548.37',
                    resistance: 'R1: ₹618.23, R2: ₹649.37',
                    fiftyTwoWeekHigh: '₹735.00',
                    fiftyTwoWeekLow: '₹231.15',
                    rsi: 60.09,
                    trend: 'Strong Uptrend'
                },
                priceHistory: [240, 280, 350, 400, 450, 500, 550, 600, 610, 630]
            },
            {
                ticker: 'OLAELEC',
                name: 'Ola Electric Mobility Ltd.',
                overview: 'A key player in India\'s electric vehicle (EV) market, primarily manufacturing electric two-wheelers with a long-term strategy of vertical integration.',
                fundamentals: {
                    peRatio: -9.98,
                    pbRatio: 3.84,
                    roe: 'N/A',
                    debtToEquity: 'High',
                    q1Fy26Revenue: '₹828 Cr',
                    q1Fy26Loss: '₹428 Cr'
                },
                technicals: {
                    support: 'Strong support at ₹39 zone',
                    resistance: 'Near-term resistance at ₹55-₹57',
                    fiftyTwoWeekHigh: '₹157.40',
                    fiftyTwoWeekLow: '₹39.60',
                    rsi: 48.5,
                    trend: 'Long-term Bearish'
                },
                priceHistory: [150, 130, 110, 90, 70, 60, 50, 45, 42, 40]
            },
            {
                ticker: 'DYCL',
                name: 'Dynamic Cables Ltd.',
                overview: 'A manufacturer and supplier of a wide range of cables and conductors for power distribution and railways.',
                fundamentals: {
                    peRatio: 27.14,
                    pbRatio: 5.05,
                    roe: '22.05%',
                    debtToEquity: 0.16,
                    q1Fy26Revenue: '₹262.04 Cr',
                    q1Fy26Profit: '₹18.21 Cr'
                },
                technicals: {
                    support: '200-day SMA at ₹399.35',
                    resistance: '50-day SMA at ₹440.77',
                    fiftyTwoWeekHigh: '₹547.50',
                    fiftyTwoWeekLow: '₹227.50',
                    rsi: 40.26,
                    trend: 'Uptrend'
                },
                priceHistory: [230, 250, 300, 350, 400, 450, 500, 480, 460, 470]
            },
            {
                ticker: 'INDORAMA',
                name: 'Indo Rama Synthetics (India) Ltd.',
                overview: 'A company in the textile industry, focused on the production of polyester and related synthetic products.',
                fundamentals: {
                    peRatio: 20.19,
                    pbRatio: 3.83,
                    roe: 'N/A',
                    debtToEquity: 'N/A',
                    q1Fy26Profit: '₹32.31 Cr (Turnaround from loss)',
                    q1Fy26Income: '₹1,189.67 Cr'
                },
                technicals: {
                    support: 'Near-term support at ₹48.25',
                    resistance: '52-week high at ₹59.50',
                    fiftyTwoWeekHigh: '₹59.50',
                    fiftyTwoWeekLow: '₹32.00',
                    rsi: 'N/A',
                    trend: 'Uptrend'
                },
                priceHistory: [33, 35, 40, 45, 50, 55, 58, 56, 57, 59]
            },
            {
                ticker: 'APOLLO',
                name: 'Apollo Micro Systems Ltd.',
                overview: 'An electronic components manufacturer with a focus on the defense and aerospace sectors.',
                fundamentals: {
                    peRatio: 102.65,
                    pbRatio: 10.2,
                    roe: 'N/A',
                    debtToEquity: 'N/A',
                    q1Fy26Profit: '₹19.43 Cr',
                    q1Fy26Revenue: 'Surged 46%'
                },
                technicals: {
                    support: 'Strong support at ₹174-₹176',
                    resistance: 'Immediate resistance at ₹190',
                    fiftyTwoWeekHigh: '₹221.38',
                    fiftyTwoWeekLow: '₹87.99',
                    rsi: 'Trending higher from 50',
                    trend: 'Bullish Reversal'
                },
                priceHistory: [90, 110, 130, 150, 180, 200, 210, 190, 203, 220]
            }
        ];

        const stockSelector = document.getElementById('stock-.elementor-3015 .elementor-element.elementor-element-58a85c8');
        const stockDisplay = document.getElementById('stock-display');

        function populateSelector() {
            stockData.forEach(stock => {
                const option = document.createElement('option');
                option.value = stock.ticker;
                option.textContent = `${stock.name} (${stock.ticker})`;
                stockSelector.appendChild(option);
            });
        }

        function displayStock(ticker) {
            const stock = stockData.find(s => s.ticker === ticker);
            if (!stock) return;

            stockDisplay.innerHTML = `
                <div class="bg-white p-6 rounded-lg shadow-sm">
                    <h3 class="text-xl font-semibold mb-2">${stock.name}</h3>
                    <p class="text-gray-600 mb-4">${stock.overview}</p>
                    <div class="grid grid-cols-2 gap-4 text-sm">
                        <div><strong class="font-medium text-gray-700">P/E Ratio:</strong> ${stock.fundamentals.peRatio}</div>
                        <div><strong class="font-medium text-gray-700">P/B Ratio:</strong> ${stock.fundamentals.pbRatio}</div>
                        <div><strong class="font-medium text-gray-700">ROE:</strong> ${stock.fundamentals.roe}</div>
                        <div><strong class="font-medium text-gray-700">Debt/Equity:</strong> ${stock.fundamentals.debtToEquity}</div>
                        <div class="col-span-2"><strong class="font-medium text-gray-700">Q1 FY26 Revenue:</strong> ${stock.fundamentals.q1Fy26Revenue || stock.fundamentals.q1Fy26Income}</div>
                        <div class="col-span-2"><strong class="font-medium text-gray-700">Q1 FY26 Profit/Loss:</strong> ${stock.fundamentals.q1Fy26Profit || stock.fundamentals.q1Fy26Loss}</div>
                    </div>
                </div>
                <div class="bg-white p-6 rounded-lg shadow-sm">
                    <h4 class="text-lg font-semibold mb-4 text-center">Technical Snapshot</h4>
                    <div class="chart-container">
                        <canvas id="priceHistoryChart"></canvas>
                    </div>
                    <div class="grid grid-cols-2 gap-4 text-sm mt-4">
                        <div><strong class="font-medium text-gray-700">Support:</strong> ${stock.technicals.support}</div>
                        <div><strong class="font-medium text-gray-700">Resistance:</strong> ${stock.technicals.resistance}</div>
                        <div><strong class="font-medium text-gray-700">52-Week High:</strong> ${stock.technicals.fiftyTwoWeekHigh}</div>
                        <div><strong class="font-medium text-gray-700">52-Week Low:</strong> ${stock.technicals.fiftyTwoWeekLow}</div>
                        <div><strong class="font-medium text-gray-700">RSI:</strong> ${stock.technicals.rsi}</div>
                        <div><strong class="font-medium text-gray-700">Trend:</strong> <span class="${stock.technicals.trend.toLowerCase().includes('bull') || stock.technicals.trend.toLowerCase().includes('up') ? 'text-green-600' : 'text-red-600'}">${stock.technicals.trend}</span></div>
                    </div>
                </div>
                <div class="md:col-span-2 bg-white p-6 rounded-lg shadow-sm">
                    <h4 class="text-lg font-semibold mb-4 flex items-center justify-center">
                        <span class="mr-2">✨</span> AI-Powered Analyst's Take
                    </h4>
                    <div class="flex justify-center mb-4">
                        <button id="generate-analysis" class="bg-indigo-600 hover:bg-indigo-700 text-white font-bold py-2 px-4 rounded-full shadow-md transition-colors duration-200">
                            Generate Analysis
                        </button>
                    </div>
                    <div id="ai-analysis-output" class="text-gray-600 italic">
                        Click the button above to get a quick summary for swing trading!
                    </div>
                </div>
            `;
            renderPriceHistoryChart(stock);
            document.getElementById('generate-analysis').addEventListener('click', () => generateAnalysis(stock));
        }

        async function generateAnalysis(stock) {
            const outputDiv = document.getElementById('ai-analysis-output');
            outputDiv.innerHTML = `<div class="flex justify-center items-center py-4"><div class="animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900"></div><span class="ml-3">Generating...</span></div>`;

            const prompt = `Based on the following data for ${stock.name} (${stock.ticker}), provide a concise analysis for a potential swing trade. Focus on key technical and fundamental indicators. The analysis should be professional and suitable for an investor.

            Fundamentals:
            P/E Ratio: ${stock.fundamentals.peRatio}
            P/B Ratio: ${stock.fundamentals.pbRatio}
            ROE: ${stock.fundamentals.roe}
            Debt/Equity: ${stock.fundamentals.debtToEquity}
            Recent Financials: Revenue: ${stock.fundamentals.q1Fy26Revenue || stock.fundamentals.q1Fy26Income}, Profit/Loss: ${stock.fundamentals.q1Fy26Profit || stock.fundamentals.q1Fy26Loss}

            Technicals:
            Support: ${stock.technicals.support}
            Resistance: ${stock.technicals.resistance}
            52-Week High/Low: ${stock.technicals.fiftyTwoWeekHigh}/${stock.technicals.fiftyTwoWeekLow}
            RSI: ${stock.technicals.rsi}
            Trend: ${stock.technicals.trend}

            Draft a paragraph of 3-4 sentences.`;

            try {
                const payload = {
                    contents: [{ parts: [{ text: prompt }] }],
                    generationConfig: {
                        responseMimeType: "text/plain",
                    },
                };
                const apiKey = "";
                const apiUrl = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-preview-05-20:generateContent?key=${apiKey}`;
                const response = await fetch(apiUrl, {
                    method: 'POST',
                    headers: { 'Content-Type': 'application/json' },
                    body: JSON.stringify(payload)
                });
                const result = await response.json();

                const text = result?.candidates?.[0]?.content?.parts?.[0]?.text;
                if (text) {
                    outputDiv.innerHTML = `<p>${text}</p>`;
                } else {
                    outputDiv.innerHTML = `<p class="text-red-500">Error generating analysis. Please try again.</p>`;
                    console.error('API response structure is unexpected:', result);
                }

            } catch (error) {
                outputDiv.innerHTML = `<p class="text-red-500">Failed to connect to the API. Please check your network connection.</p>`;
                console.error('Error during API call:', error);
            }
        }

        function renderPriceHistoryChart(stock) {
            const ctx = document.getElementById('priceHistoryChart').getContext('2d');
            new Chart(ctx, {
                type: 'line',
                data: {
                    labels: Array(stock.priceHistory.length).fill(''),
                    datasets: [{
                        label: 'Price History',
                        data: stock.priceHistory,
                        borderColor: '#4f46e5',
                        backgroundColor: 'rgba(79, 70, 229, 0.1)',
                        borderWidth: 2,
                        pointRadius: 0,
                        tension: 0.4,
                        fill: true
                    }]
                },
                options: {
                    responsive: true,
                    maintainAspectRatio: false,
                    scales: {
                        y: {
                            beginAtZero: false
                        },
                        x: {
                            display: false
                        }
                    },
                    plugins: {
                        legend: {
                            display: false
                        }
                    }
                }
            });
        }
        
        function renderPeRatioChart() {
            const ctx = document.getElementById('peRatioChart').getContext('2d');
            const filteredData = stockData.filter(s => s.fundamentals.peRatio > 0);
            new Chart(ctx, {
                type: 'bar',
                data: {
                    labels: filteredData.map(s => s.ticker),
                    datasets: [{
                        label: 'P/E Ratio',
                        data: filteredData.map(s => s.fundamentals.peRatio),
                        backgroundColor: '#818cf8',
                        borderColor: '#4f46e5',
                        borderWidth: 1
                    }]
                },
                options: {
                    responsive: true,
                    maintainAspectRatio: false,
                    plugins: {
                        title: {
                            display: true,
                            text: 'P/E Ratio Comparison (Positive Values)'
                        },
                        legend: {
                            display: false
                        }
                    },
                    scales: {
                        y: {
                            beginAtZero: true
                        }
                    }
                }
            });
        }

        stockSelector.addEventListener('change', (e) => {
            displayStock(e.target.value);
        });

        document.addEventListener('DOMContentLoaded', () => {
            populateSelector();
            displayStock(stockData[0].ticker);
            renderPeRatioChart();
        });

    </script>
</body>
</html>/* End custom CSS */