IDX Position Sizing Calculator API
Menghitung ukuran posisi optimal berdasarkan modal, persentase risiko, dan level stop-loss. Menghasilkan tiga skenario risiko beserta saran manajemen posisi dari FLARIA AI.
Base Information
- BASE_URL_API:
https://api.maelyn.eu/api - Path / Endpoint:
/financial/idx/position-sizing - Method:
POST - Credit Usage:
12
Authentication
x-maelyn-auth: YOUR_API_KEY
Content-Type: application/json
Description
Endpoint ini menghitung berapa lot/lembar yang harus dibeli berdasarkan prinsip risk management. Dengan modal dan persentase risiko yang ditentukan, kalkulator akan menghitung jumlah lot optimal agar potensi kerugian tidak melebihi batas risiko yang ditetapkan. Juga menghasilkan tiga skenario (1%, 2%, 3% risiko) dan saran dari FLARIA AI.
Request Body
{
"symbol": "BBCA",
"capital": 50000000,
"entry_price": 9500,
"stop_loss_price": 9000,
"take_profit_price": 10500,
"risk_pct": 2,
"lot_size": 100,
"market_context": "Pasar sedang sideways, IHSG di sekitar 7200"
}
Body Parameters
| Name | Type | Required | Description |
|---|---|---|---|
symbol | string | Yes | Kode saham IDX. Contoh: BBCA |
capital | number | Yes | Modal total dalam IDR |
entry_price | number | Yes | Harga entry per lembar saham |
stop_loss_price | number | Yes | Harga stop-loss per lembar. Harus lebih kecil dari entry_price |
take_profit_price | number | No | Harga take-profit per lembar. Harus lebih besar dari entry_price |
risk_pct | number | No | Persentase risiko per trade (0.1–10). Default: 2 |
lot_size | number | No | Jumlah lembar per lot. Default: 100 |
market_context | string | No | Konteks tambahan untuk analisis AI |
Example Usage
1. Kalkulasi dengan take profit
{
"symbol": "BBCA",
"capital": 50000000,
"entry_price": 9500,
"stop_loss_price": 9000,
"take_profit_price": 10500,
"risk_pct": 2
}
2. Kalkulasi konservatif tanpa take profit
{
"symbol": "GOTO",
"capital": 10000000,
"entry_price": 68,
"stop_loss_price": 60,
"risk_pct": 1,
"lot_size": 100
}
Success Response
{
"success": true,
"data": {
"symbol": "BBCA",
"calculation": {
"capital": 50000000,
"risk_pct": 2,
"entry_price": 9500,
"stop_loss_price": 9000,
"take_profit_price": 10500,
"lot_size": 100,
"risk_amount": 1000000,
"risk_per_share": 500,
"lots_optimal": 20,
"shares_optimal": 2000,
"capital_required": 19000000,
"capital_usage_pct": 38.0,
"actual_risk": 1000000,
"rr_ratio": 2.0,
"potential_profit": 2000000,
"expected_value": 500000,
"scenarios": [
{ "risk_pct": 1, "lots": 10, "shares": 1000, "capital_required": 9500000, "risk_amount": 500000 },
{ "risk_pct": 2, "lots": 20, "shares": 2000, "capital_required": 19000000, "risk_amount": 1000000 },
{ "risk_pct": 3, "lots": 30, "shares": 3000, "capital_required": 28500000, "risk_amount": 1500000 }
],
"warnings": []
},
"ai_advice": {
"penilaian_rencana": "Cukup",
"komentar_sizing": "Posisi 38% dari modal cukup besar, pertimbangkan 2 lot lebih sedikit...",
"komentar_rr": "R/R 2.0 sudah memadai untuk trade ini",
"kondisi_saham_saat_ini": "BBCA dalam uptrend dengan RSI moderat...",
"saran_penyesuaian": "Pertimbangkan turunkan entry ke 9.450 untuk R/R lebih baik",
"faktor_risiko_tambahan": ["Rilis data inflasi AS akhir bulan", "RUPS BBCA minggu depan"],
"tips_manajemen_posisi": "Jual 50% posisi di TP1 (10.000), trailing stop untuk sisanya",
"disclaimer": "Analisis ini bukan saran investasi resmi."
},
"sources": []
}
}
Response Fields
| Field | Type | Description |
|---|---|---|
calculation.lots_optimal | number | Jumlah lot optimal berdasarkan risk management |
calculation.capital_usage_pct | number | Persentase modal yang digunakan |
calculation.rr_ratio | number | Risk/Reward ratio (null jika take_profit tidak diisi) |
calculation.potential_profit | number | Potensi profit jika TP tercapai |
calculation.scenarios | array | Tiga skenario: 1%, 2%, 3% risiko |
calculation.warnings | array | Peringatan jika ada parameter yang tidak ideal |
ai_advice.penilaian_rencana | string | Baik, Cukup, atau Perlu Revisi |
Error Response
Field wajib tidak diisi
{
"success": false,
"message": "Field berikut wajib diisi: capital, entry_price"
}
Stop loss >= entry price
{
"success": false,
"message": "\"stop_loss_price\" harus lebih kecil dari \"entry_price\"."
}