Files
Achmad c48e188b81 Update README and SKILL.md for get_historical_candles date/time range
Document the new from_date/to_date parameters, supported date formats,
resolution options, and usage examples including intraday time windows.
2026-05-17 08:14:10 +00:00

670 lines
26 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# SKILL: Indonesian Stock Analysis Using TradingView Screener MCP
## Overview
Use the TradingView Screener MCP tools to analyze Indonesian stocks (IDX: Jakarta Stock Exchange) by combining **fundamental analysis** (company financial health) and **technical analysis** (price/volume action). This skill provides structured methodologies to produce actionable stock analysis reports.
Indonesian stocks are accessed via `market_type="stocks"` and `market_country="indonesia"`.
---
## Available MCP Tools
| Tool | Purpose |
|------|---------|
| `get_stock_quotes(tickers=["IDX:SYMBOL"])` | Get real-time price & indicators for 1+ tickers |
| `screen_market(market_country="indonesia", ...)` | Screen across all IDX stocks with filters |
| `find_top_gainers(market_country="indonesia")` | Top gainers by % change |
| `find_top_losers(market_country="indonesia")` | Top losers by % change |
| `find_most_active(market_country="indonesia")` | Most active by volume |
| `technical_scan(market_country="indonesia", ...)` | Screen using technical conditions |
| `fundamental_scan(market_country="indonesia", ...)` | Screen using fundamental metrics |
| `get_historical_candles(ticker, resolution, ...)` | Fetch OHLCV candles with pattern detection; supports date/time ranges |
| `check_holidays(mode="upcoming", limit=10)` | Check IDX holidays (SQLite-cached, `refresh=True` to re-fetch) |
| `check_holidays(mode="check", date="2026-05-14")` | Check if a specific date is a holiday |
| `check_holidays(mode="range", start_date="...", end_date="...")` | List holidays in a date range |
---
## 1. Get Indonesian Stock Data
### 1.1 Quote Data for Specific Stocks
```json
get_stock_quotes({
"tickers": ["IDX:BBRI", "IDX:TLKM", "IDX:ASII"],
"columns": ["name","close","change","volume","RSI","MACD.macd","MACD.signal","SMA50","SMA200","market_cap_basic","price_earnings_ttm","price_to_book_fq","dividends_yield_current","return_on_equity","sector","industry"]
})
```
### 1.2 Screen Indonesian Market
```json
screen_market({
"market_country": "indonesia",
"columns": ["name","close","change","volume","RSI","market_cap_basic","price_earnings_ttm"],
"order_by": "volume",
"limit": 50
})
```
### 1.3 Fundamental Screen
```json
fundamental_scan({
"market_country": "indonesia",
"filters": [
{"field": "market_cap_basic", "operator": ">", "value": 10000000000000},
{"field": "price_earnings_ttm", "operator": "between", "value": [5, 20]},
{"field": "dividends_yield_current", "operator": ">", "value": 2},
{"field": "return_on_equity", "operator": ">", "value": 10}
],
"columns": ["name","close","market_cap_basic","price_earnings_ttm","price_to_book_fq","dividends_yield_current","return_on_equity","debt_to_equity","profit_margin","sector"]
})
```
### 1.4 Technical Scan
```json
technical_scan({
"market_country": "indonesia",
"filters": [
{"field": "RSI", "operator": "<", "value": 35},
{"field": "close", "operator": "above_pct", "value": ["SMA200", 0.95]}
],
"columns": ["name","close","change","RSI","SMA50","SMA200","volume","relative_volume_10d_calc"]
})
```
---
## 2. Fundamental Analysis Framework
### Core Metrics Table
| Metric | Field Name | What It Tells You | Healthy Range (IDX) |
|--------|-----------|-------------------|-------------------|
| **Market Cap** | `market_cap_basic` | Company size (in IDR) | Large-cap: >10T IDR |
| **P/E Ratio** | `price_earnings_ttm` | Price per unit of earnings | 8-18 (value); 18-30 (growth) |
| **P/B Ratio** | `price_to_book_fq` | Price vs book value | <2.5 for banks; <1.5 for cyclicals |
| **P/S Ratio** | `price_to_sales` | Price per unit of revenue | <3 (undervalued) >5 (premium) |
| **P/CF Ratio** | `price_to_cash_flow` | Price vs operating cash flow | <15 (reasonable) |
| **EPS (TTM)** | `earnings_per_share_diluted_ttm` | Profit per share | Positive & growing |
| **EPS Growth** | `earnings_per_share_diluted_yoy_growth_ttm` | Earnings momentum | >10% YoY |
| **Revenue Growth** | `revenue_growth` | Top-line growth | >5% (mature) >15% (growth) |
| **Earnings Growth** | `earnings_growth` | Bottom-line growth | Should track revenue growth |
| **ROE** | `return_on_equity` | Return on shareholder equity | >12% (good) >20% (excellent) |
| **ROA** | `return_on_assets` | Return on total assets | >5% (good) |
| **Profit Margin** | `profit_margin` | Net profit margin | >10% (good) |
| **Operating Margin** | `operating_margin` | Operating efficiency | >15% (good) |
| **Debt/Equity** | `debt_to_equity` | Leverage ratio | <1 (conservative) <2 (moderate) |
| **Current Ratio** | `current_ratio_fq` | Liquidity | >1.5 (safe) |
| **Dividend Yield** | `dividends_yield_current` | Dividend return | 2-6% (varies by sector) |
| **Beta** | `beta_1_year` | Volatility vs market | 0.5-1.5 (typical) |
| **Sector** | `sector` | Industry classification | — |
| **Industry** | `industry` | Sub-industry | — |
### 2.1 Valuation Analysis
Use this combo to assess if a stock is **undervalued, fair, or overvalued**:
```
P/E + P/B + P/S + Dividend Yield + EPS Growth → Valuation Picture
<10 + <1 + <1 + >4% + positive → Deep value
10-15 + 1-2 + 1-3 + 2-4% + 5-15% → Fair value
15-25 + 2-4 + 3-6 + 1-2% + 15-25% → Growth premium
>25 + >4 + >6 + <1% + >25% → Overvalued / high growth
```
### 2.2 Quality Analysis (PEG + ROE + Debt)
```
PEG Ratio = P/E ÷ EPS Growth
- <1.0 → Undervalued relative to growth
- 1.0-2.0 → Fairly valued
- >2.0 → Overvalued relative to growth
Quality Score (0-3):
- ROE > 15% → +1
- D/E < 1.0 → +1
- Profit Margin > 10% → +1
```
### 2.3 Indonesian Market-Specific Notes
- **Sector concentration**: IDX is dominated by Financials (banks: BBRI, BMRI, BBNI), Consumer (UNVR, ICBP, INDF), Telecom (TLKM), Mining/Energy (ADRO, ITMG, BUMI), and Infrastructure (JSMR, TLKM).
- **Liquidity matters**: Only stocks with daily volume > 1M shares are reliably tradeable.
- **Foreign ownership**: Sudden changes affect price — track institutional/insider ownership.
- **Regulatory influence**: Government policy (energy, mining, banking) heavily impacts IDX.
- **Rupiah (IDR) risk**: Currency depreciation hurts import-heavy sectors, benefits export/mining.
- **Dividend season**: Most IDX companies pay dividends once a year around April-June.
- **ARB / ARA limits**: IDX has daily price limits (7% down = ARB, up = ARA typically for most stocks, but can vary). Use `low`/`high` to check.
---
## 3. Technical Analysis Framework
### Core Indicators
| Indicator | Field | What It Does | How to Interpret |
|-----------|-------|-------------|------------------|
| **RSI (14)** | `RSI` | Momentum oscillator (0-100) | >70 overbought, <30 oversold |
| **RSI (5)** | `RSI.5` | Short-term momentum | Same, faster signals |
| **MACD** | `MACD.macd`, `MACD.signal`, `MACD.histogram` | Trend-momentum | Line > Signal → bullish, < Signal → bearish |
| **Stochastic** | `Stoch.K`, `Stoch.D` | %K & %D lines | >80 overbought, <20 oversold; K crosses D → signal |
| **Bollinger Bands** | `BB.upper`, `BB.middle`, `BB.lower` | Volatility bands | Touch upper → overextended; touch lower → potential bounce |
| **SMA 20** | `SMA20` | Short-term trend | Price > SMA20 → short-term uptrend |
| **SMA 50** | `SMA50` | Medium-term trend | Price > SMA50 → medium-term uptrend |
| **SMA 200** | `SMA200` | Long-term trend | Price > SMA200 → long-term bull market |
| **EMA 5/20/50/200** | `EMA5`, `EMA20`, `EMA50`, `EMA200` | Exponential MA (faster response) | Same as SMA but more current-price-sensitive |
| **ADX** | `ADX` | Trend strength | >25 → trending; <25 → ranging |
| **ATR** | `ATR` | Volatility measure | Higher → wider stops needed |
| **CCI (20)** | `CCI20` | Commodity Channel Index | >100 overbought, <-100 oversold |
| **OBV** | `OBV` | On-Balance Volume | Confirms price trends; divergence warns of reversal |
| **Williams %R** | `Williams %R` | Momentum (-100 to 0) | <-80 oversold, >-20 overbought |
| **Awesome Osc** | `AO` | Momentum (SMA5-SMA34) | >0 bullish momentum, <0 bearish |
| **VWAP** | `VWAP` | Volume-weighted avg price | Above VWAP → bullish intraday |
| **52W High/Low** | `52 Week High`, `52 Week Low` | Yearly range | Near 52W high → strong trend; near 52W low → weak |
| **Rel Volume** | `relative_volume_10d_calc` | Volume vs 10d avg | >1.5 → unusually active |
| **Tech Rating** | `TechRating_1D` | Aggregate daily rating | 0-6 range (6 = best) |
### 3.1 Trend Confirmation Pattern
```
Bullish Setup:
- Price > SMA50 > SMA200 (golden arrangement)
- SMA50 > SMA200 (golden cross already happened)
- RSI between 40-70 (room to run)
- MACD > Signal line (momentum up)
- ADX > 25 (trending)
Bearish Setup:
- Price < SMA50 < SMA200 (death arrangement)
- SMA50 < SMA200 (death cross)
- RSI between 30-50
- MACD < Signal line
- ADX > 25 (trending)
```
### 3.2 Reversal / Bounce Pattern
```
Potential Bottom:
- RSI < 30 (oversold)
- Price near BB.lower or below SMA200
- MACD histogram narrowing (bearish momentum fading)
- Stoch.K crossing above Stoch.D near <20
- OBV diverging bullish (price lower, OBV higher)
Potential Top:
- RSI > 70 (overbought)
- Price near BB.upper or far above SMA200
- MACD histogram narrowing (bullish momentum fading)
- Stoch.K crossing below Stoch.D near >80
- OBV diverging bearish (price higher, OBV lower)
```
### 3.3 Volume Analysis
```
relative_volume_10d_calc:
- > 2.0 → Extraordinary volume (breakout / breakdown)
- 1.5-2.0 → Above average (institutional interest)
- 1.0-1.5 → Normal activity
- < 0.5 → Low interest (illiquid)
Powerful signals:
- Price up + Volume > 1.5x → Strong accumulation
- Price up + Volume < 0.7x → Weak rally (may reverse)
- Price down + Volume > 1.5x → Strong distribution
- Price down + Volume < 0.7x → Exhaustion (may bottom)
```
---
## 4. Comprehensive Analysis Template
Use this structure when asked to analyze a specific Indonesian stock. Fetch data in a single batch call using `get_stock_quotes` with ALL relevant columns.
### Required Data Fetch
```json
get_stock_quotes({
"tickers": ["IDX:{TICKER}"],
"columns": [
"name","description","sector","industry","exchange","currency",
"close","open","high","low","volume","change","change_abs",
"market_cap_basic","price_earnings_ttm","earnings_per_share_diluted_ttm",
"earnings_per_share_diluted_yoy_growth_ttm","price_to_book_fq","price_to_sales",
"price_to_cash_flow","dividends_yield_current","dividends_payout_ratio",
"return_on_equity","return_on_assets","operating_margin","profit_margin",
"revenue_growth","earnings_growth","debt_to_equity","current_ratio_fq",
"beta_1_year","float","shares_outstanding",
"RSI","RSI.5","Stoch.K","Stoch.D","MACD.macd","MACD.signal","MACD.histogram",
"BB.upper","BB.middle","BB.lower","SMA20","SMA50","SMA200",
"ADX","ATR","CCI20","OBV","AO","Williams %R",
"VWAP","52 Week High","52 Week Low","relative_volume_10d_calc","volume_ma_10",
"TechRating_1D"
]
})
```
### 4.1 Analysis Report Format
```
# Stock Analysis: {NAME} ({TICKER})
## Company Overview
- Sector: {sector}
- Industry: {industry}
- Market Cap: {market_cap_basic} IDR
- Description: {description}
## Price Snapshot
- Current Price: {close}
- Daily Change: {change}% ({change_abs})
- 52W Range: {52 Week Low} - {52 Week High}
- VWAP: {VWAP}
## Fundamental Analysis
### Valuation
- P/E (TTM): {price_earnings_ttm} — [Undervalued/Fair/Overvalued — explain vs sector avg]
- P/B: {price_to_book_fq} — [Price vs book value assessment]
- P/S: {price_to_sales}
- P/CF: {price_to_cash_flow}
- Dividend Yield: {dividends_yield_current}%
### Profitability
- ROE: {return_on_equity}%
- ROA: {return_on_assets}%
- Operating Margin: {operating_margin}%
- Profit Margin: {profit_margin}%
### Growth & Momentum
- EPS (TTM): {earnings_per_share_diluted_ttm}
- EPS YoY Growth: {earnings_per_share_diluted_yoy_growth_ttm}%
- Revenue Growth: {revenue_growth}%
- Earnings Growth: {earnings_growth}%
### Financial Health
- Debt/Equity: {debt_to_equity}
- Current Ratio: {current_ratio_fq}
- Beta (1Y): {beta_1_year}
## Technical Analysis
### Trend
- Price vs SMA20: {close vs SMA20}
- Price vs SMA50: {close vs SMA50}
- Price vs SMA200: {close vs SMA200}
- ADX: {ADX} — [Trending (ADX>25) or Ranging]
- Overall Trend: [Bullish/Bearish/Neutral]
### Momentum
- RSI (14): {RSI} — [Overbought/Oversold/Neutral]
- RSI (5): {RSI.5}
- MACD: {MACD.macd} vs Signal {MACD.signal} — [Bullish/Bearish crossover? Histogram {MACD.histogram}]
- Stochastic: %K {Stoch.K} vs %D {Stoch.D}
- CCI (20): {CCI20}
- Williams %R: {Williams %R}
- Awesome Osc: {AO} — [Positive=Bearish momentum waiting / Negative=Bearish / Positive=Bulish / Negative=Bearish momentum waiting]
### Volatility
- ATR: {ATR}
- Bollinger Bands Position: {close relative to BB.upper/BB.lower}
- 52W Range Position: {(close - 52W Low) / (52W High - 52W Low) * 100}%
### Volume
- Volume: {volume}
- vs 10d Avg: {relative_volume_10d_calc}x
- OBV: {OBV}
- Vol MA(10): {volume_ma_10}
### Technical Rating
- TechRating_1D: {TechRating_1D}/6
## Summary & Verdict
### Fundamental Verdict
- [BUY / HOLD / SELL] — Based on valuation, profitability, growth, and financial health
### Technical Verdict
- [BUY / HOLD / SELL] — Based on trend, momentum, volume, and volatility
### Overall Recommendation
- [Strong Buy / Buy / Hold / Sell / Strong Sell]
- Key Catalysts/Risks:
1. ...
2. ...
3. ...
```
### 4.2 Interpretation for Specific Indonesian Sectors
**Financials / Banks (BBRI, BMRI, BBNI, BBTN)**:
- Focus on: P/B (<1.5 is cheap), ROE (>15%), NIM, D/E
- Healthy D/E is higher for banks (5-10x is normal)
- Low P/B + ROE > 15% = classic Graham-style buy for Indonesian banks
**Consumer Goods (UNVR, ICBP, INDF, HMSP, GGRM)**:
- Focus on: Profit Margin > 12%, Revenue Growth > 5%, Dividend Yield
- Low D/E expected (< 0.8)
- Stable performers during economic uncertainty
**Mining / Energy (ADRO, ITMG, PTBA, MEDC)**:
- Focus on: P/E (cyclical — buy at high P/E when earnings are low, avoid low P/E when earnings peak)
- Revenue Growth & Earnings Growth are commodity-price-driven
- High dividend yields common in coal sector
**Infrastructure / Telco (TLKM, ISAT, JSMR, EXCL)**:
- Focus on: D/E (cap-ex heavy), Profit Margin, Revenue Growth
- P/E range 10-20 is normal for TLKM
**Property / Real Estate (BSDE, PWON, CTRA, SMRA)**:
- Focus on: P/B, Current Ratio, D/E
- Highly sensitive to interest rates and BI policy
### 4.3 Rating Scale
When combining fundamental + technical into an overall verdict:
| Score | Rating | Criteria |
|-------|--------|----------|
| 4.5-5.0 | **Strong Buy** | Undervalued + Bullish technical + Strong financials |
| 3.5-4.4 | **Buy** | Fair/Undervalued + Bullish/neutral technical + Good financials |
| 2.5-3.4 | **Hold** | Fair value + mixed technical + average financials |
| 1.5-2.4 | **Sell** | Overvalued + bearish technical + weak financials |
| 1.0-1.4 | **Strong Sell** | Overvalued + bearish technical + poor financials |
---
## 5. Quick Screening Commands
### Find Undervalued Large-Caps in IDX
```json
fundamental_scan({
"market_country": "indonesia",
"filters": [
{"field": "market_cap_basic", "operator": ">", "value": 10000000000000},
{"field": "price_earnings_ttm", "operator": "between", "value": [5, 15]},
{"field": "price_to_book_fq", "operator": "<", "value": 2},
{"field": "return_on_equity", "operator": ">", "value": 12}
],
"columns": ["name","close","change","market_cap_basic","price_earnings_ttm","price_to_book_fq","return_on_equity","dividends_yield_current","sector"],
"order_by": "market_cap_basic",
"limit": 20
})
```
### Find Oversold Bounce Candidates
```json
technical_scan({
"market_country": "indonesia",
"filters": [
{"field": "RSI", "operator": "<", "value": 30},
{"field": "close", "operator": "above_pct", "value": ["SMA200", 0.9]},
{"field": "relative_volume_10d_calc", "operator": ">", "value": 1.2}
],
"columns": ["name","close","change","RSI","SMA200","relative_volume_10d_calc","MACD.histogram"],
"order_by": "RSI",
"limit": 20
})
```
### Find Breakout Candidates
```json
technical_scan({
"market_country": "indonesia",
"filters": [
{"field": "RSI", "operator": "between", "value": [50, 70]},
{"field": "close", "operator": ">", "value": "SMA50"},
{"field": "close", "operator": ">", "value": "SMA200"},
{"field": "relative_volume_10d_calc", "operator": ">", "value": 1.5},
{"field": "ADX", "operator": ">", "value": 25}
],
"columns": ["name","close","change","RSI","SMA50","SMA200","ADX","relative_volume_10d_calc"],
"order_by": "relative_volume_10d_calc",
"limit": 20
})
```
### Find High-Dividend Stocks
```json
fundamental_scan({
"market_country": "indonesia",
"filters": [
{"field": "dividends_yield_current", "operator": ">", "value": 4},
{"field": "market_cap_basic", "operator": ">", "value": 5000000000000},
{"field": "price_earnings_ttm", "operator": "<", "value": 20},
{"field": "dividends_payout_ratio", "operator": "<", "value": 80}
],
"columns": ["name","close","dividends_yield_current","dividends_payout_ratio","price_earnings_ttm","market_cap_basic","sector"],
"order_by": "dividends_yield_current",
"limit": 20
})
```
### Find Growth Stocks
```json
fundamental_scan({
"market_country": "indonesia",
"filters": [
{"field": "revenue_growth", "operator": ">", "value": 15},
{"field": "earnings_growth", "operator": ">", "value": 10},
{"field": "return_on_equity", "operator": ">", "value": 10},
{"field": "market_cap_basic", "operator": ">", "value": 1000000000000}
],
"columns": ["name","close","revenue_growth","earnings_growth","return_on_equity","price_earnings_ttm","market_cap_basic","sector"],
"order_by": "revenue_growth",
"limit": 20
})
```
---
## 5. Historical Candle Data
Use `get_historical_candles` to retrieve OHLCV (Open, High, Low, Close, Volume) candlestick data for trend and pattern analysis. The tool also auto-detects common candlestick patterns (Doji, Hammer, Engulfing, etc.) on the latest candle.
### Resolution Options
| Resolution | Value | Use When |
|-----------|-------|----------|
| 1 minute | `"1"` | Intraday scalping / micro windows |
| 5 minutes | `"5"` | Short intraday sessions |
| 15 minutes | `"15"` | Intraday analysis |
| 30 minutes | `"30"` | Half-session analysis |
| 1 hour | `"60"` | Multi-day intraday view |
| 4 hours | `"240"` | Swing trade context |
| Daily | `"D"` | Standard daily chart (default) |
| Weekly | `"W"` | Long-term trend |
| Monthly | `"M"` | Macro view |
### Query Forms
```python
# Last N daily candles (count-based)
get_historical_candles("IDX:BBRI", resolution="D", count=30)
# Specific date range — daily candles
get_historical_candles("IDX:BBRI", from_date="2026-05-08", to_date="2026-05-13")
# Specific date range — hourly candles
get_historical_candles("IDX:BBRI", resolution="60", from_date="2026-05-08", to_date="2026-05-13")
# From a date until now — daily
get_historical_candles("IDX:BBRI", from_date="2026-05-01")
# Intraday time window — 1-minute candles
get_historical_candles("IDX:BBRI", resolution="1", from_date="2026-05-17 09:00", to_date="2026-05-17 12:00")
```
**Date format:** `YYYY-MM-DD` or `YYYY-MM-DD HH:MM` or `YYYY-MM-DD HH:MM:SS` — all interpreted as **UTC**. IDX Session 1 opens at 02:00 UTC (09:00 WIB), Session 2 closes at 08:50 UTC (15:50 WIB).
### When to Use Candle Data
- **Pattern detection**: Doji, Hammer, Shooting Star, Engulfing — confirms entry/exit signals from screener scans
- **Price action around events**: Earnings dates, BI rate decisions, commodity price shocks
- **Holiday gap analysis**: Fetch candles across a multi-day holiday break to measure the gap at reopen
- **Intraday session analysis**: Compare Session 1 vs Session 2 behavior using hourly resolution
- **Trend confirmation**: Check that a breakout screener result is backed by clean candle structure
---
## 6. Pre-Analysis Checklist
Before running any analysis, always perform these 3 preliminary checks:
### 6.1 Check Today's Date & Market Status
IDX (Bursa Efek Indonesia) trading schedule:
- **Session 1:** 09:00 12:00 WIB
- **Session 2:** 13:30 15:50 WIB (pre-closing: 15:50-16:00)
- **Trading days:** Monday Friday
- **Weekend:** Closed Saturday & Sunday
Use `bash` with `date` to check today's date and day-of-week. Determine if market is open/closed.
### 6.2 Check Indonesian Holidays (MCP Tool — SQLite Cached)
IDX is also closed on national holidays. Holidays can cause multi-day breaks (e.g., 4 days off for long weekends), which significantly impacts BSJP and short-term strategies.
**Use the `check_holidays` MCP tool instead of the shell script** — the data is stored in `holidays.db` (SQLite) so subsequent calls are instant:
```
# Upcoming holidays (default, next 10):
check_holidays(mode="upcoming", limit=10)
# All holidays for a given year:
check_holidays(mode="year", year=2026)
# Check if a specific date is a holiday:
check_holidays(mode="check", date="2026-05-14")
# List holidays in a date range:
check_holidays(mode="range", start_date="2026-05-01", end_date="2026-05-31")
# Force re-fetch from API (bypass cache):
check_holidays(mode="upcoming", refresh=True)
```
The first call fetches from the API and caches. Subsequent calls read directly from SQLite. Pass `refresh=True` to force a fresh fetch.
Requires `API_CO_ID_KEY` in `.env`.
**Holiday impact on analysis:**
- If today is the last trading day before a multi-day holiday, BSJP entries become **extended holds** (2-4 days instead of overnight). The gap at reopening can be larger.
- Historical candle data showing "flat" prices across dates may actually mean the market was closed — that the stock didn't move.
- Always cross-reference dates against the holiday calendar before drawing conclusions about price action.
### 6.3 Include Market Calendar in Every Report
```
Analysis Date: {YYYY-MM-DD HH:MM WIB}
Day: {Monday/Tuesday/...}
Market Status: [OPEN / CLOSED]
Last Trading Day: {YYYY-MM-DD}
Next Trading Day: {YYYY-MM-DD}
Upcoming Holidays: {list any within next 14 days}
Holiday Note: {if next trading day is after a break, flag this}
```
### 6.4 News Search for Target Stocks
Before analyzing any stock, search for recent news that may affect price:
```
websearch(query="{Stock Name} {Ticker} berita saham terbaru {YYYY}")
```
Key things to look for:
- Earnings releases / financial reports
- Insider buying/selling
- Sector-wide news (commodity prices, regulation changes)
- Corporate actions (stock split, rights issue, buyback)
- Analyst ratings changes
Include relevant news in the report under a "Recent News & Catalysts" section.
### 6.5 Determine Analysis Type
Depending on what the user asks, pick one of these paths:
| Analysis Type | Data Needed |
|--------------|-------------|
| **Full fundamental + technical** | All columns (Section 4 template) |
| **BSJP (Beli Sore Jual Pagi)** | Top losers today, RSI, volume, BB.lower, market cap |
| **Breakout scan** | RSI 50-70, SMA50/200, ADX >25, rel volume >1.5 |
| **Oversold bounce** | RSI <30, near SMA200/SMA50, volume confirmation |
| **Dividend hunting** | Dividend yield, payout ratio, P/E, market cap |
---
## 7. Workflow: How to Run Full Analysis
**Step 0** — Run Pre-Analysis Checklist (Section 6):
```
date → check today's date & day
check_holidays(mode="upcoming") → check upcoming IDX holidays (SQLite-cached)
check_holidays(mode="check", date="YYYY-MM-DD") → verify if key dates are holidays
websearch → check news for target ticker
```
**Step 1** — Get company overview & fundamentals:
```
get_stock_quotes(tickers=["IDX:BBRI"], columns=[all fundamental + general fields])
```
**Step 2** — Get technical indicators:
```
get_stock_quotes(tickers=["IDX:BBRI"], columns=[all technical fields + price fields])
```
**Step 3** — Get sector context:
```
screen_market({
"market_country": "indonesia",
"filters": [{"field": "sector", "operator": "==", "value": "Financials"}],
"columns": ["name","close","change","price_earnings_ttm","return_on_equity","market_cap_basic"],
"limit": 10
})
```
**Step 4** — Produce report following Section 4 template.
---
## 8. Field Reference (for constructing queries)
### Indonesian Stock Ticker Format
- `IDX:BBRI` — Bank Rakyat Indonesia
- `IDX:TLKM` — Telkom Indonesia
- `IDX:ASII` — Astra International
- `IDX:UNVR` — Unilever Indonesia
- `IDX:ICBP` — Indofood CBP
- `IDX:INDF` — Indofood Sukses Makmur
- `IDX:BMRI` — Bank Mandiri
- `IDX:BBNI` — Bank Negara Indonesia
- `IDX:ADRO` — Adaro Energy
- `IDX:ITMG` — Indo Tambangraya Megah
- `IDX:JSMR` — Jasa Marga
- `IDX:PGAS` — Perusahaan Gas Negara
- `IDX:SMGR` — Semen Indonesia
- `IDX:CTRA` — Ciputra Development
- `IDX:PWON` — Pakuwon Jati
- `IDX:BSDE` — Bumi Serpong Damai
- `IDX:EXCL` — XL Axiata
- `IDX:ISAT` — Indosat
- `IDX:HMSP` — HM Sampoerna
- `IDX:GGRM` — Gudang Garam
### All Available Columns (for easy copy-paste)
```
General: name, description, ticker, exchange, market, sector, industry, country, currency, type, typespecs, is_primary
Price: open, high, low, close, volume, change, change_abs, premarket_change, postmarket_change, VWAP, 52 Week High, 52 Week Low
Fundamental: market_cap_basic, price_earnings_ttm, earnings_per_share_diluted_ttm, earnings_per_share_diluted_yoy_growth_ttm, dividends_yield_current, dividends_payout_ratio, price_to_book_fq, price_to_sales, price_to_cash_flow, return_on_equity, return_on_assets, operating_margin, profit_margin, revenue_growth, earnings_growth, debt_to_equity, current_ratio_fq, beta_1_year, float, shares_outstanding, insider_ownership, institutional_ownership, AnalystRating
Technical: RSI, RSI.5, Stoch.K, Stoch.D, MACD.macd, MACD.signal, MACD.histogram, BB.upper, BB.middle, BB.lower, SMA, EMA, SMA20, SMA50, SMA200, EMA5, EMA20, EMA50, EMA200, ADX, ATR, AO, OBV, CCI20, ROC, Williams %R, relative_volume_10d_calc, volume_ma_10, TechRating_1D
```