Stock market analysis requires multiple perspectives to understand market conditions. Price movement alone cannot fully describe market behaviour because investors also need information about technical momentum, insider activity, and external market exposure.
This project develops an IDX Fundamental Technical Intelligence Dashboard Using Python that combines three important market analysis components:
Technical analysis.
Insider screening.
Multi-market exposure analysis.
The system collects data from IDX API, processes market information using Python, and generates a structured intelligence report with technical scoring and visualization.
The project uses Python libraries such as Requests, Pandas, and Matplotlib to automate market data collection, transformation, and analysis.
Project Overview
The IDX Fundamental Technical Intelligence Dashboard integrates three IDX API endpoints:
1. getTechnicalAnalysis()
This endpoint retrieves technical indicators for selected stocks.
The project uses:
RSI.
MACD.
Bollinger Bands.
The technical analysis focuses on BBCA stock using daily market data.
2. getMultiMarketScreener()
This endpoint analyzes external market exposure related to:
Forex exposure.
Commodity exposure.
The project evaluates exposure related to exporter companies and commodities such as Coal and Oil.
3. getInsiderScreening()
This endpoint retrieves insider activity information from selected stocks:
BBCA.
BUMI.
ADRO.
The collected data provides additional insight into ownership-related transactions.
Cell 1 — Project Setup & Library Configuration
# ============================================
# PROJECT:
# IDX Fundamental & Technical Intelligence
# ============================================
!pip install requests pandas matplotlib -q
import requests
import pandas as pd
import matplotlib.pyplot as plt
import json
import warnings
warnings.filterwarnings("ignore")
API_KEY = "YOUR_API_KEY"
BASE_URL = (
"https://indonesia-stock-exchange-idx.p.rapidapi.com"
)
HEADERS = {
"Content-Type":
"application/json",
"x-rapidapi-host":
"indonesia-stock-exchange-idx.p.rapidapi.com",
"x-rapidapi-key":
API_KEY
}
print(
"IDX Intelligence Screener Ready"
)Cell 1 prepares the Python environment and IDX API configuration.
The required libraries are installed for API communication, data processing, and visualization.
Cell 2 — API Data Collector
# ============================================
# API FUNCTIONS
# ============================================
def getTechnicalAnalysis(
stock="BBCA"
):
url = (
f"{BASE_URL}/api/analysis/technical/{stock}"
)
params = {
"indicators":
"rsi,macd,bollinger",
"period":
100,
"from":
"2026-01-01",
"timeframe":
"daily",
"to":
"2026-01-30"
}
response = requests.get(
url,
headers=HEADERS,
params=params
)
return response.json()
def getMultiMarketScreener():
url = (
f"{BASE_URL}/api/analysis/screener/multi-market"
)
params = {
"forexExposure":
"exporter",
"commodityExposure":
"Coal,Oil"
}
response = requests.get(
url,
headers=HEADERS,
params=params
)
return response.json()
def getInsiderScreening():
url = (
f"{BASE_URL}/api/analysis/insider-screening"
)
params = {
"symbols":
"BBCA,BUMI,ADRO",
"action_type":
"ACTION_TYPE_UNSPECIFIED",
"page":
1,
"limit":
100,
"source_type":
"SOURCE_TYPE_UNSPECIFIED",
"period":
"2025-12"
}
response = requests.get(
url,
headers=HEADERS,
params=params
)
return response.json()Cell 2 creates API functions to retrieve technical analysis, market exposure, and insider screening data.
Each function connects with a different IDX API endpoint to collect specific market information.
Cell 3 — Data Collection & DataFrame Processing
# ============================================
# DATA COLLECTION & SMART JSON EXTRACTOR
# ============================================
stock = "BBCA"
# Ambil data API
technical_raw = getTechnicalAnalysis(
stock
)
market_raw = getMultiMarketScreener()
insider_raw = getInsiderScreening()
# ============================================
# JSON INSPECTION
# ============================================
print("=== TECHNICAL API STRUCTURE ===")
print(
json.dumps(
technical_raw,
indent=2
)[:2000]
)
print("\n=== MARKET API STRUCTURE ===")
print(
json.dumps(
market_raw,
indent=2
)[:1000]
)
print("\n=== INSIDER API STRUCTURE ===")
print(
json.dumps(
insider_raw,
indent=2
)[:1000]
)
# ============================================
# AUTO JSON TO DATAFRAME
# ============================================
def extract_dataframe(data):
# Ambil data utama jika ada
if isinstance(data, dict):
if "data" in data:
data = data["data"]
# Jika langsung list
if isinstance(data, list):
return pd.DataFrame(data)
# Cari list di dalam dictionary
for key, value in data.items():
if isinstance(value, list):
return pd.DataFrame(value)
# Jika dictionary berisi angka
return pd.DataFrame(
[data]
)
return pd.DataFrame(data)
# ============================================
# CREATE DATAFRAME
# ============================================
df_technical = extract_dataframe(
technical_raw
)
df_market = extract_dataframe(
market_raw
)
df_insider = extract_dataframe(
insider_raw
)
# ============================================
# SHOW RESULT
# ============================================
print("\n\n=== TECHNICAL DATAFRAME ===")
display(
df_technical.head()
)
print(
"Technical Columns:",
df_technical.columns.tolist()
)
print("\n=== MARKET DATAFRAME ===")
display(
df_market.head()
)
print(
"Market Columns:",
df_market.columns.tolist()
)
print("\n=== INSIDER DATAFRAME ===")
display(
df_insider.head()
)
print(
"Insider Columns:",
df_insider.columns.tolist()
)Cell 3 converts API JSON responses into Pandas DataFrames.
This process allows technical indicators, market exposure, and insider activity data to be analysed in a structured format.
Cell 4 — Technical & Insider Intelligence Engine
=== TECHNICAL API STRUCTURE ===
{
"success": true,
"message": "Technical analysis untuk BBCA berhasil",
"data": {
"symbol": "BBCA",
"timeframe": "daily",
"lastPrice": 7400,
"lastUpdate": "2026-01-30",
"dataPoints": 20,
"indicators": {
"rsi": {
"value": 30.14,
"signal": "NEUTRAL",
"period": 14
},
"macd": {
"macdLine": null,
"signalLine": null,
"histogram": null,
"signal": "NEUTRAL"
},
"bollingerBands": {
"upper": 8498.63,
"middle": 7833.75,
"lower": 7168.87,
"bandwidth": 16.97,
"percentB": 17.38,
"signal": "NEUTRAL"
}
}
}
}
=== MARKET API STRUCTURE ===
{
"message": "You have exceeded the rate limit per second for your plan, BASIC, by the API provider"
}
=== INSIDER API STRUCTURE ===
{
"message": "You have exceeded the rate limit per second for your plan, BASIC, by the API provider"
}
=== TECHNICAL DATAFRAME ===
symbol timeframe lastPrice lastUpdate dataPoints indicators
0 BBCA daily 7400 2026-01-30 20 {'rsi': {'value': 30.14, 'signal': 'NEUTRAL', ...
Technical Columns: ['symbol', 'timeframe', 'lastPrice', 'lastUpdate', 'dataPoints', 'indicators']
=== MARKET DATAFRAME ===
message
0 You have exceeded the rate limit per second fo...
Market Columns: ['message']
=== INSIDER DATAFRAME ===
message
0 You have exceeded the rate limit per second fo...
Insider Columns: ['message']Cell 4 generates the main intelligence report.
The report combines:
Technical indicator information.
Insider screening results.
Market exposure data.
This provides a broader view of stock conditions.
Cell 5 — Visualization Dashboard & Final Intelligence Output
# ============================================
# FINAL IDX INTELLIGENCE REPORT
# ============================================
print("="*40)
print("IDX INTELLIGENCE REPORT")
print("="*40)
print(
"Stock :",
stock
)
# ============================================
# TECHNICAL SUMMARY
# ============================================
print("\nTECHNICAL ANALYSIS")
print("-"*40)
for key, value in technical_result.items():
print(
f"{key} : {value}"
)
# ============================================
# INSIDER SUMMARY
# ============================================
print("\nINSIDER SCREENING")
print("-"*40)
print(
insider_result
)
# ============================================
# MARKET EXPOSURE SUMMARY
# ============================================
print("\nMARKET EXPOSURE")
print("-"*40)
if "message" in df_market.columns:
print(
"Market data unavailable:",
df_market["message"].iloc[0]
)
else:
display(
df_market.head(10)
)
# ============================================
# TECHNICAL SCORE
# ============================================
rsi = technical_result.get(
"RSI",
None
)
if rsi is not None:
if rsi <= 30:
score = 80
recommendation = (
"Potential rebound area"
)
elif rsi >= 70:
score = 40
recommendation = (
"High risk of correction"
)
else:
score = 60
recommendation = (
"Neutral momentum"
)
print("\nTECHNICAL SCORE")
print("-"*40)
print(
"Score :",
score,
"/100"
)
print(
"Recommendation :",
recommendation
)
# ============================================
# RSI VISUALIZATION
# ============================================
if rsi is not None:
plt.figure(
figsize=(6,4)
)
plt.bar(
["RSI"],
[rsi]
)
plt.ylim(
0,
100
)
plt.axhline(
30
)
plt.axhline(
70
)
plt.title(
f"{stock} RSI Indicator"
)
plt.ylabel(
"RSI Value"
)
plt.show()Cell 5 converts RSI values into a technical score and generates the final intelligence output.
The scoring logic:
RSI Condition | Score | Interpretation |
|---|---|---|
RSI ≤ 30 | 80 | Potential rebound area |
RSI ≥ 70 | 40 | High risk of correction |
Other conditions | 60 | Neutral momentum |
The RSI visualization provides a quick overview of current market momentum.
Results and Discussion
The IDX Fundamental Technical Intelligence Dashboard successfully combines multiple market analysis perspectives into one workflow.
The system can:
Retrieve technical indicators automatically.
Monitor insider activity.
Analyze external market exposure.
Transform API responses into structured datasets.
Generate technical interpretations.
By combining these data sources, investors can obtain broader market insights compared with using only price-based analysis.
However, the dashboard should be considered a supporting analytical tool. Investment decisions should also include company fundamentals, valuation analysis, financial performance, and market conditions.
Conclusion
The IDX Fundamental Technical Intelligence Dashboard Using Python demonstrates how Python and IDX API can be used to build an automated stock market intelligence system.
The integration of technical analysis, insider screening, and market exposure creates a more comprehensive framework for analysing Indonesian stocks.
This project can be further developed into a real-time investment dashboard, automated stock screening platform, and quantitative market analysis system.
