Document the new from_date/to_date parameters, supported date formats, resolution options, and usage examples including intraday time windows.
26 KiB
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
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
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
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
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/highto 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
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
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
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
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
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
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
# 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 IndonesiaIDX:TLKM— Telkom IndonesiaIDX:ASII— Astra InternationalIDX:UNVR— Unilever IndonesiaIDX:ICBP— Indofood CBPIDX:INDF— Indofood Sukses MakmurIDX:BMRI— Bank MandiriIDX:BBNI— Bank Negara IndonesiaIDX:ADRO— Adaro EnergyIDX:ITMG— Indo Tambangraya MegahIDX:JSMR— Jasa MargaIDX:PGAS— Perusahaan Gas NegaraIDX:SMGR— Semen IndonesiaIDX:CTRA— Ciputra DevelopmentIDX:PWON— Pakuwon JatiIDX:BSDE— Bumi Serpong DamaiIDX:EXCL— XL AxiataIDX:ISAT— IndosatIDX:HMSP— HM SampoernaIDX: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