async function buildTAMessage(ticker){ const tone = getTone(); // 'conservative' | 'balanced' | 'aggressive' // 1) أسعار const ohlc = await fetch(API(`/market/ohlc?ticker=${encodeURIComponent(ticker)}&days=14`)).then(r=>r.json()).catch(()=>[]); const closes = (ohlc||[]).map(p=> p.c ?? p.close ?? p.price).filter(v=>isFinite(v)); // 2) حدث قريب const ev = await fetch(API(`/market/events?ticker=${encodeURIComponent(ticker)}`)).then(r=>r.json()).catch(()=>null); const upcomingEvent = ev && Array.isArray(ev.upcoming) && ev.upcoming[0] ? (ev.upcoming[0].title || ev.upcoming[0].type || '') : ''; // 3) Prompt (نبرة الرسالة تفرق التعليمات) const prompt = { system: 'أنت محلل أسواق محترف. أعدّ تحليلاً عربيًا قصيرًا جدًا وواضحًا، دون توصيات صريحة أو أرقام أهداف.', user: `النبرة: ${tone} المعطيات: - الرمز: ${ticker} - نافذة: 14 يوم (إغلاق يومي) - السلسلة (الأحدث في النهاية): ${JSON.stringify(closes)} - حدث قريب: ${upcomingEvent || 'لا يوجد'} قواعد النبرة: - conservative (محافظ): لهجة حذرة، تركيز على المخاطر وإدارة الوقت/التذبذب. - balanced (متوازن): حيادية ومعلوماتية، TL;DR واضح، نقطتان قصيرتان. - aggressive (هجومي): موجز وسريع يبرز الزخم، مع تنبيه مخاطرة مختصر. المطلوب بإيجاز شديد (<= 40 كلمة): 1) TL;DR جملة واحدة. 2) نقطتان: ✔︎ إشارة، ⚠︎ مخاطرة. أخرج JSON: { "tldr":"...", "points":["...","..."] }` }; let ai={}; try{ ai = await fetch(API('/ai/ta'), { method:'POST', headers:{'Content-Type':'application/json'}, body: JSON.stringify({ticker, closes, windowDays:14, upcomingEvent, tone, prompt}) }).then(r=>r.json()); }catch{} const tldr = ai.tldr || 'ملخص فني مختصر غير متاح.'; const pts = (ai.points||[]).slice(0,2).map(s=>`• ${s}`).join('\n'); const toneBadge = tone==='conservative' ? '🛡️ محافظ' : tone==='aggressive' ? '⚡ هجومي' : '⚖️ متوازن'; const evLine = upcomingEvent ? `حدث قريب: ${upcomingEvent}` : ''; return [ `—`, `TA (${toneBadge}):`, tldr, pts, evLine ].filter(Boolean).join('\n'); }