import * as chart from './chart.js'; import { calculatePV } from './indicators/pv.js'; import { calculateMFI } from './indicators/mfi.js'; import { analyzeVSA } from './indicators/vsa.js'; let stockData = []; let entryPoint = 0; let stopLoss = 0; let takeProfit = 0; document.getElementById('analyze-button').addEventListener('click', () => { const stockSymbol = document.getElementById('stock-symbol').value; fetchStockData(stockSymbol); }); document.getElementById('set-points-button').addEventListener('click', () => { entryPoint = parseFloat(document.getElementById('entry-point').value); stopLoss = parseFloat(document.getElementById('stop-loss').value); takeProfit = parseFloat(document.getElementById('take-profit').value); updateTradePoints(); }); async function fetchStockData(symbol) { try { const response = await fetch(`http://localhost:5000/api/stock_data?symbol=${symbol}`); const data = await response.json(); if (!Array.isArray(data) || data.length === 0) { alert('Không có dữ liệu cho mã cổ phiếu này!'); return; } processStockData(data); } catch (error) { alert('Lỗi khi lấy dữ liệu từ server: ' + error); } } function processStockData(data) { // Chuẩn hóa dữ liệu cho các hàm chỉ báo const priceArr = data.map(d => d.price); const volumeArr = data.map(d => d.volume); const pv = calculatePV(priceArr, volumeArr); const mfi = calculateMFI(data, volumeArr); const vsaAnalysis = analyzeVSA(priceArr, volumeArr); // Vẽ biểu đồ chart.renderPriceVolumeChart({labels: priceArr.map((_,i)=>i+1), values: priceArr}, {labels: volumeArr.map((_,i)=>i+1), values: volumeArr}); chart.renderPVChart({labels: pv.map((_,i)=>i+1), values: pv}); chart.renderMFIChart({labels: mfi.map((_,i)=>i+1), values: mfi}); displayAnalysisResults(vsaAnalysis); } function updateTradePoints() { document.getElementById('trade-points').innerText = `Điểm vào: ${entryPoint}, Dừng lỗ: ${stopLoss}, Chốt lời: ${takeProfit}`; } function displayAnalysisResults(analysis) { document.getElementById('analysis-results').innerText = JSON.stringify(analysis, null, 2); }