Metadata-Version: 2.4
Name: invezgo-sdk
Version: 2.0.1
Summary: Python SDK for Invezgo API - Indonesian Stock Market Data
Home-page: https://invezgo.com
Author: Invezgo
Author-email: Invezgo <admin@invezgo.com>
License: MIT
Project-URL: Homepage, https://invezgo.com
Project-URL: Documentation, https://invezgo.com
Project-URL: Repository, https://github.com/invezgo/invezgo-sdk-python
Project-URL: Bug Reports, https://github.com/invezgo/invezgo-sdk-python/issues
Keywords: invezgo,indonesia,stock,market,api,sdk,investment,trading
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Operating System :: OS Independent
Requires-Python: >=3.7
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests>=2.28.0
Requires-Dist: typing-extensions>=4.0.0; python_version < "3.8"
Dynamic: author
Dynamic: home-page
Dynamic: license-file
Dynamic: requires-python

# Invezgo Python SDK - API Saham Indonesia

[![Python Version](https://img.shields.io/badge/python-3.7+-blue.svg)](https://www.python.org/downloads/)
[![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
[![PyPI](https://img.shields.io/pypi/v/invezgo-sdk.svg)](https://pypi.org/project/invezgo-sdk/)

Python SDK untuk mengakses [Invezgo API](https://invezgo.com) - Platform data saham Indonesia terlengkap dengan data real-time dari Bursa Efek Indonesia (BEI).

## Tentang Invezgo API

Invezgo API menyediakan akses data saham Indonesia yang komprehensif untuk kebutuhan analisis teknikal, fundamental, dan trading. Data mencakup seluruh perusahaan tercatat di BEI dengan update real-time dan historis.

### Fitur Utama

- ✅ **Data Saham Real-time** - Harga, volume, dan order book real-time dari BEI
- ✅ **Data Historis Lengkap** - Chart OHLCV dan data perdagangan historis
- ✅ **Analisis Broker** - Broker summary, inventory chart, dan stalker
- ✅ **Kepemilikan Saham** - Data KSEI, insider trading, shareholder composition
- ✅ **Laporan Keuangan** - Financial statement dan key statistics perusahaan
- ✅ **Indikator Teknikal** - Berbagai indikator untuk analisis teknikal
- ✅ **Type Hints** - Full type hints untuk better IDE support
- ✅ **Error Handling** - Comprehensive error handling

## Instalasi

```bash
pip install invezgo-sdk
```

## Quick Start

```python
from invezgo import InvezgoClient

# Inisialisasi client dengan API key
client = InvezgoClient(api_key="your-api-key-here")

# Contoh: Dapatkan daftar saham
stocks = client.analysis.get_stock_list()
print(stocks)

# Contoh: Dapatkan informasi perusahaan
info = client.analysis.get_information(code="BBCA")
print(info)

# Contoh: Dapatkan chart harga saham
chart = client.analysis.get_chart_stock(
    code="BBCA",
    from_date="2024-12-01",
    to_date="2024-12-30"
)
print(chart)
```

## Dokumentasi Lengkap API Saham Indonesia

### Authentication

Semua request memerlukan API key yang valid. Dapatkan API key di [Invezgo API Settings](https://invezgo.com/id/setting/api).

```python
client = InvezgoClient(api_key="your-api-key")
```

### Data Master Saham Indonesia

#### Daftar Saham, Broker, dan Index

```python
# Daftar semua saham yang tercatat di BEI
stocks = client.analysis.get_stock_list()

# Daftar semua broker/sekuritas di BEI
brokers = client.analysis.get_broker_list()

# Daftar semua index (IHSG, LQ45, IDX30, sektoral, dll)
indexes = client.analysis.get_index_list()
```

#### Informasi Perusahaan

```python
# Informasi lengkap perusahaan
info = client.analysis.get_information(code="BBCA")
```

### Data Real-time Saham Indonesia

#### Intraday dan Order Book

```python
# Intraday chart saham
intraday = client.analysis.get_intraday(code="BBCA", market="RG")

# Order book saham (bid/offer)
order_book = client.analysis.get_order_book(code="BBCA", market="RG")

# Intraday data ringkas
intraday_data = client.analysis.get_intraday_data(code="BBCA", market="RG")

# Intraday data untuk index
index_intraday = client.analysis.get_intraday_index(code="COMPOSITE", market="RG")
```

### Chart dan Harga Saham Indonesia

```python
# Chart harga saham lengkap dengan OHLCV
chart = client.analysis.get_chart_stock(
    code="BBCA",
    from_date="2024-12-01",
    to_date="2024-12-30"
)

# Chart index (IHSG, LQ45, dll)
index_chart = client.analysis.get_chart_index(
    code="COMPOSITE",
    from_date="2024-12-01",
    to_date="2024-12-30"
)

# Chart dengan indikator teknikal (bdm, foreign, ritel, ratio)
indicator_chart = client.analysis.get_chart_indicator(
    code="BBCA",
    indicator="bdm",
    from_date="2024-12-01",
    to_date="2024-12-30"
)
```

### Top Gainer & Loser Harian

```python
# Top gainer dan loser harian
top_change = client.analysis.get_top_change(date="2024-12-30")

# Top akumulasi dan distribusi asing
top_foreign = client.analysis.get_top_foreign(date="2024-12-30")

# Top akumulasi dan distribusi bandarmologi
top_bdm = client.analysis.get_top_accumulation(date="2024-12-30")

# Top akumulasi dan distribusi ritel
top_ritel = client.analysis.get_top_ritel(date="2024-12-30")
```

### Analisis Broker Saham Indonesia

#### Broker Summary

```python
# Broker summary per saham
summary = client.analysis.get_summary_stock(
    code="BBCA",
    from_date="2024-12-01",
    to_date="2024-12-30",
    investor="all",  # all, f (foreign), d (domestic)
    market="RG"
)

# Broker summary per broker (bisa multiple broker)
broker_summary = client.analysis.get_summary_broker(
    code="AG,AK",  # bisa single atau multiple dipisah koma
    from_date="2024-12-01",
    to_date="2024-12-30",
    investor="all",
    market="RG"
)
```

#### Broker Stalker

```python
# Melacak aktivitas broker pada saham tertentu
stalker = client.analysis.get_broker_stalker(
    broker="AG",
    stock="BBCA",
    from_date="2024-12-01",
    to_date="2024-12-30",
    investor="all",
    market="RG",
    scope="value"
)

# Daftar saham yang diperdagangkan broker
stalker_list = client.analysis.get_broker_stalker_list(
    code="AG",
    from_date="2024-12-01",
    to_date="2024-12-30",
    investor="all",
    scope="value",
    market="RG"
)
```

#### Inventory Chart

```python
# Inventory chart saham
inventory = client.analysis.get_inventory_chart_stock(
    code="BBCA",
    from_date="2024-12-01",
    to_date="2024-12-30",
    scope="val",  # vol, val, freq
    investor="all",  # all, f, d
    market="RG"
)

# Inventory chart broker
broker_inventory = client.analysis.get_inventory_chart_broker(
    code="AG",
    from_date="2024-12-01",
    to_date="2024-12-30",
    scope="val",
    investor="all",
    market="RG"
)
```

### Kepemilikan Saham (Shareholder)

#### Komposisi Kepemilikan

```python
# Komposisi kepemilikan saham (pengendali, direksi, masyarakat)
shareholders = client.analysis.get_shareholder(code="BBCA")

# Jumlah pemegang saham historis
shareholder_number = client.analysis.get_shareholder_number(code="BBCA")

# Kepemilikan KSEI (klasifikasi investor asing/domestik)
ksei = client.analysis.get_shareholder_ksei(code="BBCA", range_months=6)

# Detail kepemilikan 5%
detail = client.analysis.get_shareholder_detail(code="BBCA", name="NAMA PEMEGANG")

# Detail kepemilikan 1%
detail_one = client.analysis.get_shareholder_detail_one(code="BBCA", name="NAMA PEMEGANG")

# Graph relasi kepemilikan
relation = client.analysis.get_shareholder_relation(
    code="BBCA",
    depth=3,
    max_nodes=120
)
```

#### Insider Trading

```python
# Perubahan kepemilikan diatas 5%
above = client.analysis.get_shareholder_above(
    from_date="2024-12-01",
    to_date="2024-12-30",
    page=1,
    limit=10
)

# Chart kepemilikan diatas 5%
above_chart = client.analysis.get_shareholder_above_chart(
    code="BBCA",
    broker="AG",
    name="NAMA PEMEGANG"
)

# Perubahan kepemilikan diatas 1%
one = client.analysis.get_shareholder_one(
    from_date="2024-12-01",
    to_date="2024-12-30"
)

# Insider trading (direksi, komisaris)
insider = client.analysis.get_shareholder_insider(
    from_date="2024-12-01",
    to_date="2024-12-30"
)
```

### Analisis Sektoral Saham Indonesia

```python
# Sector stalker - pergerakan index sektoral
sector = client.analysis.get_sector_stalker(
    from_date="2024-12-01",
    to_date="2024-12-30",
    base="COMPOSITE"
)

# Sector rotation chart
rotation = client.analysis.get_sector_rotation(
    from_date="2024-12-01",
    to_date="2024-12-30",
    base="COMPOSITE",
    length=10,
    tail=5
)
```

### Laporan Keuangan dan Fundamental

```python
# Laporan keuangan (BS: Balance Sheet, IS: Income Statement, CF: Cash Flow)
financial = client.analysis.get_financial_statement(
    code="BBCA",
    statement="BS",
    type_period="Q",  # FY, Q, Q1, Q2, Q3, Q4
    limit=10
)

# Chart laporan keuangan
financial_chart = client.analysis.get_financial_statement_chart(
    code="BBCA",
    statement="BS",
    type_period="Q",
    limit=10,
    account="ACCOUNT_ID"
)

# Key statistics
keystat = client.analysis.get_keystat(
    code="BBCA",
    type_period="Q",
    limit=10
)

# Chart key statistics
keystat_chart = client.analysis.get_keystat_chart(
    code="BBCA",
    type_period="Q",
    limit=10,
    name="PER"  # PER, PBV, ROE, dll
)
```

### Data Real-time Lanjutan

```python
# Momentum chart
momentum = client.analysis.get_momentum_chart(
    code="BBCA",
    date="2024-12-30",
    range_minutes=60,
    scope="value"
)

# Intraday inventory chart
intraday_inventory = client.analysis.get_intraday_inventory_chart(
    code="BBCA",
    date="2024-12-30",
    range_minutes=60,
    type_name="value",
    total=10,
    buyer="ALL",
    seller="ALL",
    market="RG"
)

# Sankey/Crossing chart
sankey = client.analysis.get_sankey_chart(
    code="BBCA",
    date="2024-12-30",
    type_name="value",
    buyer="ALL",
    seller="ALL",
    market="RG"
)

# Price table (transaksi per harga)
price_table = client.analysis.get_price_table(code="BBCA", date="2024-12-30")

# Time table (transaksi per waktu)
time_table = client.analysis.get_time_table(
    code="BBCA",
    date="2024-12-30",
    range_minutes=60
)

# Price diary (histori harga harian)
price_diary = client.analysis.get_price_diary(code="BBCA")

# Price seasonality (histori harga bulanan)
seasonality = client.analysis.get_price_seasonality(code="BBCA", range_months=12)
```

### Kalender Corporate Action

```python
# Kalender corporate action (dividen, rights issue, dll)
calendar = client.analysis.get_calendar()
```

## Personal Features

### Watchlists

```python
# Daftar watchlist
watchlists = client.watchlists.list(group="default")

# Tambah watchlist baru
client.watchlists.add(data={"code": "BBCA", "group": "default"})

# Update watchlist
client.watchlists.update(id="watchlist-id", data={"note": "Catatan"})

# Hapus watchlist
client.watchlists.delete()

# Daftar grup watchlist
groups = client.watchlists.list_group()
```

### Journals (Jurnal Trading)

```python
# Daftar transaksi jurnal
transactions = client.journals.list(from_date="2024-12-01", to_date="2024-12-30")

# Tambah transaksi jurnal
client.journals.add(data={"code": "BBCA", "type": "buy", "price": 8000, "lot": 10})

# Ringkasan transaksi
summary = client.journals.get_summary(from_date="2024-12-01", to_date="2024-12-30")

# Update catatan transaksi
client.journals.update_note(id="journal-id", data={"note": "Catatan"})

# Ekstrak jurnal dari file
client.journals.extract_from_file(file_data={"file": "..."})
```

### Portfolios

```python
# Daftar portofolio
portfolios = client.portfolios.list()

# Ringkasan portofolio
summary = client.portfolios.get_summary()
```

### Realized Trades

```python
# Daftar transaksi terealisasi
trades = client.trades.list(from_date="2024-12-01", to_date="2024-12-30")

# Ringkasan transaksi
summary = client.trades.get_summary(from_date="2024-12-01", to_date="2024-12-30")

# Ringkasan grafik
chart = client.trades.get_summary_chart(from_date="2024-12-01", to_date="2024-12-30", code="BBCA")

# Update catatan
client.trades.update_note(id="trade-id", data={"note": "Catatan"})
```

## Live Alerts & API Usage

### Live Alerts

```python
# Buat Alert baru
client.alerts.create(data={
    "name": "Alert BBCA",
    "description": "Alert jika harga naik",
    "category": ["SYARIAH"],
    "every": "1d",
    "send": "email",
    "formula": "close > 10000"
})

# Daftar Alert yang aktif
alerts = client.alerts.list()

# Test formula alert
result = client.alerts.test(data={
    "formula": "close > 10000",
    "category": ["SYARIAH"]
})

# Update Alert yang sudah ada
client.alerts.update(id="alert-id", data={
    "name": "Alert BBCA Baru",
    "category": ["SYARIAH"],
    "every": "1d",
    "send": "email",
    "formula": "close > 10500"
})

# Hapus Alert
client.alerts.delete(id="alert-id")
```

### API Usage

```python
# Cek kuota dan penggunaan API saat ini
usage = client.usage.get_api_usage()
print(usage)
```

## Social Features

### Posts

```python
# Daftar semua postingan
posts = client.posts.get_all(page=1, limit=10)

# Postingan berdasarkan kategori
posts = client.posts.get_by_category(category="analisis", page=1, limit=10)

# Postingan saham tertentu
posts = client.posts.get_by_stock(code="BBCA", page=1, limit=10)

# Detail postingan
detail = client.posts.get_by_id(id="post-id")

# Komentar postingan
comments = client.posts.get_comments(id="post-id", page=1, limit=10)

# Daftar voting
voters = client.posts.get_voters(id="post-id")
```

### Profile

```python
# Rekomendasi pengguna
recommendations = client.profile.get_recommendations()
```

## Screener Saham Indonesia

```python
# Daftar preset screener
presets = client.screener.list_presets()

# Jalankan screener saham
results = client.screener.screen({
    "formula": "close >= 5000 AND change > 2",
    "category": ["SYARIAH", "IDXENERGY"]
})

# Simpan preset screener
client.screener.save_preset({
    "name": "Preset Baru",
    "description": "Deskripsi preset",
    "formula": "close >= 5000",
    "category": ["SYARIAH"]
})

# Update preset screener
client.screener.update_preset(id="preset-id", data={
    "name": "Preset Baru Updated",
    "formula": "close >= 5500",
    "category": ["SYARIAH"]
})

# Hapus preset screener
client.screener.delete_preset(id="preset-id")
```

## Search

```python
# Cari saham atau pengguna
results = client.search.search(query="BBCA")

# Cari saham
stocks = client.search.search_stock(query="BBCA", cursor="")

# Cari pengguna
users = client.search.search_user(query="username", cursor="")
```

## Error Handling

SDK ini meng-handle berbagai jenis error:

```python
from invezgo.exceptions import (
    InvezgoError,
    AuthenticationError,
    PaymentRequiredError,
    RateLimitError,
    NotFoundError,
    BadRequestError,
    ServerError
)

try:
    result = client.analysis.get_stock_list()
except AuthenticationError:
    print("API key tidak valid")
except PaymentRequiredError:
    print("Paket berlangganan tidak mencukupi")
except RateLimitError:
    print("Melebihi batas permintaan API")
except NotFoundError:
    print("Data tidak ditemukan")
except BadRequestError:
    print("Request tidak valid")
except ServerError:
    print("Error server")
except InvezgoError as e:
    print(f"Error: {e}")
```

## Keywords

Invezgo SDK, API Saham Indonesia, Data Saham BEI, Bursa Efek Indonesia, IDX, IHSG, LQ45, IDX30, Saham Indonesia, Trading Indonesia, Broker Summary, Foreign Flow, Bandarmologi, Analisis Saham, Real-time Stock Data, Intraday Chart, Order Book, Financial Statement, Laporan Keuangan, Insider Trading, KSEI, Shareholder Analysis, Stock Screener, Technical Analysis, Fundamental Analysis.

## Lisensi

MIT License - lihat [LICENSE](LICENSE) untuk detail.

## Support

- Email: admin@invezgo.com
- Website: https://invezgo.com
- Dokumentasi API: https://invezgo.com

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.
