✨ 智能分析儀表板 v3.0 上線

掌握台股脈動
AI 驅動未來

結合大語言模型與深度技術分析,為您提供最精準的市場洞察、策略回測與個股健診,打造機構級的看盤體驗。

🧩 核心功能總覽

四大核心功能
全方位投資輔助

結合 AI 深度分析與機構級數據,從盤面總覽到策略驗證,
為您打造一站式的專業投資決策平台。

🔥
STEP 01

盤面熱點與排行

即時追蹤上市櫃成交量與漲跌幅榜單,市場資金流向一目了然。

✦ 成交量 / 漲跌幅 TOP 排行 ✦ 即時資金流向追蹤 ✦ 主流題材板塊總覽
📊
STEP 02

基本面與籌碼分析

一鍵查看企業 EPS、本益比、殖利率,深度剖析個股體質。

✦ EPS / PE Ratio / 殖利率 ✦ 外資 / 投信 買賣超動向 ✦ 個股財報快速診斷
🤖
STEP 03

AI 關聯供應鏈

利用大語言模型自動爬梳產業上下游,挖掘潛在投資機會。

✦ LLM 智能產業鏈分析 ✦ 上中下游關聯概念股 ✦ 視覺化供應鏈圖譜
📈
STEP 04

歷史策略回測

內建 MA20 + RSI 等技術指標,一鍵執行量化回測模擬。

✦ MA / RSI 策略自動執行 ✦ 勝率 / 最大回撤統計 ✦ 歷史績效視覺化圖表

準備好顛覆您的
投資體驗了嗎?

載入中
API AI
🔥 盤面熱點 (上市成交量 Top 5)
讀取中...
📰 各大財經頭條 (最新 10 則)
無最新新聞
📅 近期重點行事曆
  • 明天
    2330 台積電
    第二季法說會 (14:00)
  • 後天
    2317 鴻海
    除息 5.4 元 (現金殖利率 ~2.6%)
  • 下週一
    2603 長榮
    除息 10 元
  • 下週三
    聯準會 FOMC
    利率決議會議
🤖 每日大盤摘要與 AI 觀點
點擊上方即時更新以獲取最新 AI 解析...
投資組合設定
標的代號 (.TW)資產類型平均成本持有股數
熱門權值股技術分析總覽 點擊欄位可排序
標的 收盤價 AI 估值 技術訊號 評分 建議
📈 請輸入股票代號以載入圖表
回測參數設定
📋 策略說明
MA20 交叉 + RSI 過濾策略
買入條件:收盤價突破 MA20 且 RSI < 70 → 全額進場
賣出條件:收盤價跌破 MA20 或 RSI > 75 → 全數出場
• 初始資金:¥100,000 | 手續費:未計入
📋 AI 情緒解析列表 (最新 5 則)
-
等待掃描
📊 貪婪指數等級參考表
區間狀態市場意義
0-25極度恐懼超跌區,反彈機率高
26-45恐懼市場保守,量能縮減
46-55中立多空拉鋸,等待表態
56-75樂觀買盤轉強,注意追高
76-100極度貪婪過熱訊號,宜減碼獲利
🤖 AI 情緒判斷成因
尚未進行分析,請點擊上方按鈕。AI 將根據最新的五則財經新聞進行加權判斷。

📰 近五則新聞情緒摘要

設定目標核心標的
尚未設定目標標的...
🤖 MaiAgent 投資助理
您好!我是股金往來的 AI 投資助理,已連線至您的後端分析引擎。有什麼可以幫您的?🚀
async function sendChat() { const input = document.getElementById('chat-input'); const msg = input.value.trim(); if (!msg) return; input.value = ''; const messagesDiv = document.getElementById('chat-messages'); const sendBtn = document.getElementById('chat-send-btn'); messagesDiv.innerHTML += `
${msg}
`; messagesDiv.scrollTop = messagesDiv.scrollHeight; const typingId = 'typing-' + Date.now(); messagesDiv.innerHTML += `
思考中...
`; messagesDiv.scrollTop = messagesDiv.scrollHeight; sendBtn.disabled = true; const body = { message: msg }; if (currentChatbotId) body.conversation_id = currentChatbotId; const res = await apiCall('/chat', 'POST', body); document.getElementById(typingId).remove(); if (res.status === 'success') { if (res.conversation_id) currentChatbotId = res.conversation_id; messagesDiv.innerHTML += `
${renderMarkdown(res.reply)}
`; } else { messagesDiv.innerHTML += `
⚠️ ${res.message}
`; } messagesDiv.scrollTop = messagesDiv.scrollHeight; sendBtn.disabled = false; input.focus(); } // ============================ // LANDING PAGE & GSAP ANIMATIONS // ============================ let landingAnimationDone = false; function initLanding() { if (typeof gsap === 'undefined') return; gsap.registerPlugin(ScrollTrigger); // Hero entrance const tl = gsap.timeline(); tl.from(".landing-nav", { y: -50, opacity: 0, duration: 0.8, ease: "power3.out" }) .from(".hero-elem", { y: 40, opacity: 0, duration: 0.8, stagger: 0.15, ease: "power3.out" }, "-=0.4"); // Feature cards fade in stagger gsap.from(".feature-card", { scrollTrigger: { trigger: "#features", start: "top 80%", }, y: 30, opacity: 0, duration: 0.8, stagger: 0.15, ease: "power2.out" }); // End text gsap.from(".end-text", { scrollTrigger: { trigger: ".end-text", start: "top 80%", }, y: 50, opacity: 0, duration: 1, ease: "power3.out" }); } function scrollToFeatures() { document.getElementById('features').scrollIntoView({ behavior: 'smooth' }); } function startJourney() { if (!currentUser) { showAuthModal('login'); } else { enterDashboard(); } } function enterDashboard() { if (landingAnimationDone) return; landingAnimationDone = true; if (typeof gsap === 'undefined') { document.getElementById('landing').style.display = 'none'; document.querySelector('.app').classList.add('active'); return; } const tl = gsap.timeline({ onComplete: () => { document.getElementById('landing').style.display = 'none'; document.querySelector('.app').classList.add('active'); // Dashboard entrance animations gsap.from(".sidebar", { x: -100, opacity: 0, duration: 0.6, ease: "power3.out" }); gsap.from(".top-bar", { y: -30, opacity: 0, duration: 0.5, ease: "power3.out" }, "-=0.4"); gsap.from(".card", { y: 30, opacity: 0, duration: 0.6, stagger: 0.05, ease: "power3.out" }, "-=0.2"); gsap.from(".stat-card", { scale: 0.9, opacity: 0, duration: 0.5, stagger: 0.05, ease: "back.out(1.5)" }, "-=0.4"); // Trigger initial data load now that UI is visible fetchMacroData(); } }); // Animate landing out tl.to(".landing", { y: "-100vh", opacity: 0, duration: 0.8, ease: "power4.inOut" }); } // ============================ // KEYBOARD SHORTCUTS // ============================ document.addEventListener('keydown', (e) => { // Don't trigger shortcuts when typing in inputs if (e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA' || e.target.tagName === 'SELECT') return; const pageKeys = { '1': 'war', '2': 'stress', '3': 'tech', '4': 'kline', '5': 'backtest', '6': 'news', '7': 'sentiment', '8': 'screener' }; if (pageKeys[e.key]) { navigateTo(pageKeys[e.key]); e.preventDefault(); } else if (e.key === '/') { document.getElementById('quick-search-input').focus(); e.preventDefault(); } else if (e.key === 'c' || e.key === 'C') { toggleChat(); e.preventDefault(); } else if (e.key === 'Escape') { if (chatOpen) toggleChat(); document.querySelectorAll('.modal-backdrop.open').forEach(m => { m.classList.remove('open'); m.style.display = 'none'; }); } }); // ============================ // INIT // ============================ function init() { fetchStockNames(); checkHealth(); updateAuthUI(); if (currentUser) { document.getElementById('hero-main-btn').innerText = '進入您的儀表板 ➔'; } initLanding(); loadPositionsFromServer(); fetchMacroData(); fetchRankings(); fetchMarketStatus(); updateClock(); setInterval(updateClock, 1000); setInterval(fetchMarketStatus, 60000); } window.onload = init;