# AI Context

> Bối cảnh kỹ thuật tính sẵn cho LLM, dạng JSON hoặc văn bản.

Thay vì đưa nến thô cho LLM, `context()` tính sẵn xu hướng, chỉ báo, mốc giá, khối lượng và hiệu suất; `prompt()` trả cùng nội dung ở dạng văn bản để dán thẳng vào prompt.

```ts
import { vn } from "vnstock-js";

const ctx = await vn.stock("FPT").context();
const text = await vn.stock("FPT").prompt({ lang: "vi" }); // hoặc "en"
const past = await vn.stock("FPT").context({ asOf: "2026-10-10" });
const vni = await vn.index("VNINDEX").context();
```

Tuỳ chọn: `lookback` (số phiên dùng để tính, mặc định 200), `asOf` (`YYYY-MM-DD`, chỉ dùng nến tới hết phiên đó, để backtest không nhìn trước).

## Cấu trúc

```ts
{
  symbol: "FPT",
  asOf: "2026-10-20",
  trend: { direction: "bearish", strength: 1, rationale: "EMA20 < EMA50 < EMA200, ..." },
  indicators: {
    rsi14: 33.46,
    macd: { line, signal, histogram, crossover: "bullish" | "bearish" | "none" },
    sma: { 20, 50, 200 }, ema: { 20, 50, 200 },
    bollinger: { upper, middle, lower, percentB },
    atr14,
    superTrend: { value, direction },
    ichimoku: { tenkanSen, kijunSen, cloudTop, cloudBottom, priceVsCloud, tkCross },
  },
  levels: { support: number[], resistance: number[] },
  volume: { today, avg20, signal: "above_average" | "below_average" | "normal", zscore },
  performance: { change1d, change7d, change30d, change90d },
}
```

- Mọi mức giá (SMA, EMA, Bollinger, ATR, `levels`) tính bằng đồng với cổ phiếu, điểm với chỉ số.
- `trend.strength` từ 0 tới 1, tính theo độ dốc EMA20 tính bằng phần trăm nên không phụ thuộc mức giá.
- `performance.change*` là phần trăm so với giá đóng cửa 1, 7, 30, 90 phiên trước, cùng quy ước với `changePct` (`-5` là giảm 5%).

`prompt()` in giá theo dạng dễ đọc (`57.5k`), phù hợp để LLM đọc.

## Bối cảnh thị trường

```ts
const market = await vn.market.context({ index: "VNINDEX" });
console.log(market.regime, market.rationale, market.liquidity.signal, market.notes);
```

`regime` là một trong `trending_up`, `trending_down`, `sideways`. Với `asOf`, độ rộng và khối ngoại là `null` và `notes` giải thích lý do.

## Dùng với MCP

Tool `get_ai_context` và `to_ai_prompt` của [MCP Server](/docs/key-features/advanced/mcp) gọi đúng các hàm này, nên Claude hay Cursor nhận cùng dữ liệu.
