document.getElementById('stockForm').addEventListener('submit', function(event) { event.preventDefault(); const stockSymbol = document.getElementById('stockSymbol').value.toUpperCase(); fetchStockData(stockSymbol) .then(stockData => { const result = analyzeStock(stockData); displayResult(result, stockSymbol); }) .catch(error => { document.getElementById('result').innerHTML = `

Error: ${error.message}

`; document.getElementById('result').style.display = 'block'; }); }); async function fetchStockData(symbol) { const apiKey = 'J5UAP2U359NIRLM0'; const baseUrl = 'https://www.alphavantage.co/query'; try { // Fetch RSI const rsiResponse = await fetch(`${baseUrl}?function=RSI&symbol=${symbol}&interval=daily&time_period=14&apikey=${apiKey}`); if (!rsiResponse.ok) throw new Error(`RSI fetch failed: ${rsiResponse.statusText}`); const rsiData = await rsiResponse.json(); const rsiTimeSeries = rsiData['Technical Analysis: RSI']; const latestRsiDate = Object.keys(rsiTimeSeries)[0]; // Get the latest date const rsiValue = parseFloat(rsiTimeSeries[latestRsiDate].RSI); // Fetch ADX const adxResponse = await fetch(`${baseUrl}?function=ADX&symbol=${symbol}&interval=daily&time_period=14&apikey=${apiKey}`); if (!adxResponse.ok) throw new Error(`ADX fetch failed: ${adxResponse.statusText}`); const adxData = await adxResponse.json(); const adxTimeSeries = adxData['Technical Analysis: ADX']; const latestAdxDate = Object.keys(adxTimeSeries)[0]; const adxValue = parseFloat(adxTimeSeries[latestAdxDate].ADX); // Fetch MACD const macdResponse = await fetch(`${baseUrl}?function=MACD&symbol=${symbol}&interval=daily&apikey=${apiKey}`); if (!macdResponse.ok) throw new Error(`MACD fetch failed: ${macdResponse.statusText}`); const macdData = await macdResponse.json(); const macdTimeSeries = macdData['Technical Analysis: MACD']; const latestMacdDate = Object.keys(macdTimeSeries)[0]; const macdLatest = macdTimeSeries[latestMacdDate]; const macdValue = parseFloat(macdLatest.MACD); const macdSignalValue = parseFloat(macdLatest.MACD_Signal); const macdCross = (macdValue > macdSignalValue) ? 'positive' : 'negative'; // Fetch EMA (20 and 50) const ema20Response = await fetch(`${baseUrl}?function=EMA&symbol=${symbol}&interval=daily&time_period=20&apikey=${apiKey}`); if (!ema20Response.ok) throw new Error(`EMA 20 fetch failed: ${ema20Response.statusText}`); const ema20Data = await ema20Response.json(); const ema20TimeSeries = ema20Data['Technical Analysis: EMA']; const latestEma20Date = Object.keys(ema20TimeSeries)[0]; const ema20Value = parseFloat(ema20TimeSeries[latestEma20Date].EMA); const ema50Response = await fetch(`${baseUrl}?function=EMA&symbol=${symbol}&interval=daily&time_period=50&apikey=${apiKey}`); if (!ema50Response.ok) throw new Error(`EMA 50 fetch failed: ${ema50Response.statusText}`); const ema50Data = await ema50Response.json(); const ema50TimeSeries = ema50Data['Technical Analysis: EMA']; const latestEma50Date = Object.keys(ema50TimeSeries)[0]; const ema50Value = parseFloat(ema50TimeSeries[latestEma50Date].EMA); // Fetch Global Quote for price and momentum const quoteResponse = await fetch(`${baseUrl}?function=GLOBAL_QUOTE&symbol=${symbol}&apikey=${apiKey}`); if (!quoteResponse.ok) throw new Error(`Global Quote fetch failed: ${quoteResponse.statusText}`); const quoteData = await quoteResponse.json(); const globalQuote = quoteData['Global Quote']; const latestPrice = parseFloat(globalQuote['05. price']); const previousClose = parseFloat(globalQuote['08. previous close']); const momentum = (latestPrice > previousClose) ? 'positive' : 'negative'; // Placeholder for fundamentals const fundamentals = { q1: { revenue: 0, profit: 0 }, q2: { revenue: 0, profit: 0 } }; return { symbol: symbol, rsi: rsiValue, adx: adxValue, macd: macdCross, ema20: ema20Value, ema50: ema50Value, fundamentals: fundamentals, momentum: momentum }; } catch (error) { console.error("Error fetching data:", error); throw error; } } function analyzeStock(data) { const { rsi, adx, macd, ema20, ema50, fundamentals, momentum } = data; const isRSIValid = rsi > 70; const isADXValid = adx > 30; const isMACDValid = macd === 'positive'; const isEMAValid = ema20 > ema50; const avgRevenue = (fundamentals.q1.revenue + fundamentals.q2.revenue) / 2; const avgProfit = (fundamentals.q1.profit + fundamentals.q2.profit) / 2; const isFundamentalsValid = avgRevenue > 90 && avgProfit > 25; const isMomentumValid = momentum === 'positive'; if (isRSIValid && isADXValid && isMACDValid && isEMAValid && isFundamentalsValid && isMomentumValid) { return 'BUY'; } else { return 'SELL'; } } function displayResult(result, symbol) { const resultDiv = document.getElementById('result'); resultDiv.innerHTML = `

Analysis Result for ${symbol}

Recommendation: ${result}

`; resultDiv.style.display = 'block'; }