BUY SELL ( RSI, MACD, ADX, 20 EMA CROSS
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'; }
Post a Comment
0 Comments