Referensi API¶
Konsep umum ¶
Volume, harga, jenis order, dan time in force
Volume¶
Volume ditentukan dalam sen (unit 0,0000001 lot).
| Lot | Volume (sen) |
|---|---|
| 0,01 | 100.000 |
| 0,1 | 1.000.000 |
| 1,0 | 10.000.000 |
Harga¶
Nilai harga dalam pipette. Untuk mengonversi: display_price = pipette_value / 10^pipDigits
Untuk EURUSD (5 digit), nilai pipette 112345 = 1,12345.
Jenis order¶
| Jenis | Deskripsi | Kolom yang diperlukan |
|---|---|---|
MARKET | Eksekusi segera pada harga saat ini | symbolId, tradeSide, volume |
LIMIT | Eksekusi pada harga limit atau lebih baik | + limitPrice |
STOP | Terpicu saat pasar mencapai harga stop | + stopPrice |
MARKET_RANGE | Eksekusi dalam rentang harga | + baseSlippagePrice |
STOP_LIMIT | Order limit yang terpicu pada harga stop | + stopPrice, limitPrice |
Time in force¶
| Kebijakan | Deskripsi |
|---|---|
GOOD_TILL_CANCEL | Order tetap aktif hingga terisi atau dibatalkan |
GOOD_TILL_DATE | Order kedaluwarsa pada expirationTimestamp yang ditentukan |
IMMEDIATE_OR_CANCEL | Isi yang tersedia segera, batalkan sisanya |
Info akun ¶
GET /v1/balance Get account balance
Mengembalikan saldo akun, ekuitas, dan margin bebas.
Tidak ada parameter.
200 Respons berhasil
{
"balance": 10000.00,
"equity": 10250.75,
"freeMargin": 9800.50,
"balanceVersion": 42,
"moneyDigits": 2,
"depositAssetId": 1
}
| Bidang | Tipe | Deskripsi |
|---|---|---|
balance | double | Saldo akun dalam mata uang deposit |
equity | double | Saldo + P&L mengambang |
freeMargin | double | Margin yang tersedia untuk trade baru |
balanceVersion | int64 | Penghitung versi saldo |
moneyDigits | int32 | Tempat desimal untuk nilai moneter |
depositAssetId | int64 | ID aset mata uang deposit |
GET /v1/symbols Dapatkan simbol yang tersedia
Mengembalikan semua simbol yang tersedia untuk trading pada akun.
Tidak ada parameter.
200 Array objek Symbol
[
{
"symbolId": 1,
"symbolName": "EURUSD",
"enabled": true,
"baseAssetId": 2,
"quoteAssetId": 1,
"description": "Euro vs US Dollar"
}
]
Symbol
| Bidang | Tipe | Deskripsi |
|---|---|---|
symbolId | int64 | ID simbol (digunakan dalam panggilan API lainnya) |
symbolName | string | Nama simbol (mis., "EURUSD") |
enabled | boolean | Apakah simbol dapat diperdagangkan |
baseAssetId | int64 | ID aset dasar |
quoteAssetId | int64 | ID aset kuotasi |
description | string | Deskripsi yang dapat dibaca manusia |
GET /v1/assets Dapatkan aset yang tersedia
Mengembalikan aset yang tersedia (mata uang).
Tidak ada parameter.
200 Array objek Asset
[
{
"assetId": 1,
"name": "USD",
"displayName": "US Dollar"
}
]
Asset
| Bidang | Tipe | Deskripsi |
|---|---|---|
assetId | int64 | ID aset |
name | string | Kode aset (mis., "USD") |
displayName | string | Nama tampilan |
Data pasar ¶
GET /v1/prices Dapatkan harga spot
Mengembalikan harga bid/ask saat ini untuk simbol yang ditentukan. Ini adalah snapshot – API tidak mendukung streaming.
| Nama | Terletak di | Tipe | Wajib | Deskripsi |
|---|---|---|---|---|
symbolId | query | int64[] | ID simbol yang dipisahkan koma |
200 Array objek SpotPrice
[
{
"symbolId": 1,
"bid": 112340,
"ask": 112355,
"high": 112890,
"low": 111950,
"sessionClose": 112100,
"timestamp": 1700000000000
}
]
SpotPrice
| Bidang | Tipe | Deskripsi |
|---|---|---|
symbolId | int64 | ID Simbol |
bid | int64 | Harga bid terbaik (pipette) |
ask | int64 | Harga ask terbaik (pipette) |
high | int64 | Tertinggi sesi (pipette) |
low | int64 | Terendah sesi (pipette) |
sessionClose | int64 | Penutupan sesi sebelumnya (pipette) |
timestamp | int64 | Timestamp kuotasi (epoch ms) |
GET /v1/trendbars Dapatkan data OHLCV historis
Mengembalikan data candlestick (OHLCV) historis untuk simbol.
| Nama | Terletak di | Tipe | Wajib | Default | Deskripsi |
|---|---|---|---|---|---|
symbolId | query | int64 | – | ID Simbol | |
period | query | string | – | Periode bar | |
fromTimestamp | query | string | – | Waktu mulai (ISO-8601) | |
toTimestamp | query | string | – | Waktu akhir (ISO-8601) | |
count | query | int32 | 100 | Bar maksimum untuk dikembalikan |
Periode yang tersedia
M_1 M_2 M_3 M_4 M_5 M_10 M_15 M_30 H_1 H_2 H_3 H_4 H_6 H_8 H_12 D_1 W_1 MN_1
200 Array objek Trendbar
[
{
"timestamp": 1700000000000,
"open": 112340.0,
"high": 112890.0,
"low": 111950.0,
"close": 112500.0,
"volume": 4521
}
]
Trendbar
| Bidang | Tipe | Deskripsi |
|---|---|---|
timestamp | int64 | Waktu buka bar (epoch ms) |
open | double | Harga buka (pipettes) |
high | double | Harga tinggi (pipettes) |
low | double | Harga rendah (pipettes) |
close | double | Harga tutup (pipettes) |
volume | int64 | Volume tick |
Order ¶
POST /v1/orders Pasang order baru
Memasang order trading baru. Mengembalikan ExecutionResponse.
Tidak ada parameter path atau query.
| Bidang | Tipe | Wajib | Deskripsi |
|---|---|---|---|
symbolId | int64 | Simbol untuk trading | |
orderType | string | MARKET, LIMIT, STOP, MARKET_RANGE, STOP_LIMIT | |
tradeSide | string | BUY atau SELL | |
volume | int64 | Volume dalam sen | |
limitPrice | double | Harga limit – diperlukan untuk LIMIT, STOP_LIMIT | |
stopPrice | double | Harga pemicu stop – diperlukan untuk STOP, STOP_LIMIT | |
stopLoss | double | Harga Stop Loss | |
takeProfit | double | Harga Take Profit | |
comment | string | Komentar teks bebas (maks 256 karakter) | |
label | string | Label bot (maks 100 karakter) | |
timeInForce | string | GOOD_TILL_CANCEL, GOOD_TILL_DATE, IMMEDIATE_OR_CANCEL | |
baseSlippagePrice | double | Harga dasar untuk slippage – diperlukan untuk MARKET_RANGE | |
slippageInPoints | int32 | Slippage maksimal dalam poin | |
expirationTimestamp | int64 | Timestamp kedaluwarsa (epoch ms) – untuk GOOD_TILL_DATE |
{
"symbolId": 1,
"orderType": "MARKET",
"tradeSide": "BUY",
"volume": 10000000,
"stopLoss": 112000,
"takeProfit": 113000
}
200 ExecutionResponse – order diterima atau terisi
400 INVALID_REQUEST atau TRADING_BAD_VOLUME
422 NOT_ENOUGH_MONEY
409 MARKET_CLOSED
{
"orderId": 12345,
"positionId": 67890,
"executionType": "ORDER_FILLED",
"order": { "..." : "..." },
"position": { "..." : "..." },
"deal": { "..." : "..." }
}
GET /v1/orders Dapatkan order pending
Mengembalikan semua order pending (belum terisi).
Tidak ada parameter.
200 Array objek Order pending
PUT /v1/orders/{orderId} Ubah order pending
Mengubah order pending yang ada. Mengembalikan ExecutionResponse.
| Nama | Terletak di | Tipe | Wajib | Deskripsi |
|---|---|---|---|---|
orderId | path | int64 | Order yang akan diubah |
Subset apa pun dari field berikut.
| Bidang | Tipe | Deskripsi |
|---|---|---|
volume | int64 | Volume baru dalam sen |
limitPrice | double | Harga limit baru |
stopPrice | double | Harga stop baru |
stopLoss | double | Harga Stop Loss baru |
takeProfit | double | Harga Take Profit baru |
expirationTimestamp | int64 | Timestamp kedaluwarsa baru (epoch ms) |
200 ExecutionResponse dengan ORDER_REPLACED
404 Order tidak ditemukan
DELETE /v1/orders/{orderId} Batalkan order pending
Membatalkan order pending. Mengembalikan ExecutionResponse.
| Nama | Terletak di | Tipe | Wajib | Deskripsi |
|---|---|---|---|---|
orderId | path | int64 | Order yang akan dibatalkan |
200 ExecutionResponse dengan ORDER_CANCELLED
404 Order tidak ditemukan
GET /v1/orders/history Dapatkan riwayat order
Mengembalikan order historis dalam rentang waktu.
| Nama | Terletak di | Tipe | Wajib | Deskripsi |
|---|---|---|---|---|
fromTimestamp | query | string | Waktu mulai (ISO-8601) | |
toTimestamp | query | string | Waktu akhir (ISO-8601) |
200 OrderListResponse
| Bidang | Tipe | Deskripsi |
|---|---|---|
orders | Order[] | Array order historis |
hasMore | boolean | Apakah halaman tambahan tersedia |
Posisi ¶
GET /v1/positions Dapatkan posisi terbuka
Mengembalikan semua posisi terbuka dan order pending.
Tidak ada parameter.
200 Array objek Position
[
{
"positionId": 67890,
"symbolId": 1,
"tradeSide": "BUY",
"volume": 10000000,
"entryPrice": 112345.0,
"stopLoss": 112000.0,
"takeProfit": 113000.0,
"unrealizedPnl": 155.25,
"commission": -7.00,
"swap": -1.20
}
]
Posisi
| Bidang | Tipe | Deskripsi |
|---|---|---|
positionId | int64 | ID Posisi |
symbolId | int64 | ID Simbol |
tradeSide | string | BUY atau SELL |
volume | int64 | Volume dalam sen |
entryPrice | double | Harga masuk VWAP |
stopLoss | double | Harga Stop Loss |
takeProfit | double | Harga Take Profit |
unrealizedPnl | double | Profit/loss mengambang |
commission | double | Komisi yang dikenakan |
swap | double | Jumlah Swap |
GET /v1/positions/{positionId} Dapatkan detail posisi
Mengembalikan posisi dengan order dan deal terkait.
| Nama | Terletak di | Tipe | Wajib | Deskripsi |
|---|---|---|---|---|
positionId | path | int64 | ID posisi |
200 PositionDetailResponse
| Bidang | Tipe | Deskripsi |
|---|---|---|
position | Position | Objek posisi |
orders | Order[] | Order terkait |
deals | Deal[] | Deal terkait |
PUT /v1/positions/{positionId} Ubah SL/TP posisi
Memperbarui Stop Loss dan/atau Take Profit untuk posisi terbuka. Mengembalikan ExecutionResponse.
| Nama | Terletak di | Tipe | Wajib | Deskripsi |
|---|---|---|---|---|
positionId | path | int64 | ID posisi |
| Bidang | Tipe | Deskripsi |
|---|---|---|
stopLoss | double | Harga Stop Loss baru (null untuk menghapus) |
takeProfit | double | Harga Take Profit baru (null untuk menghapus) |
trailingStopLoss | boolean | Aktifkan trailing Stop Loss |
{
"stopLoss": 111500,
"takeProfit": 113500,
"trailingStopLoss": false
}
POST /v1/positions/{positionId}/close Tutup posisi
Menutup posisi terbuka secara penuh atau sebagian. Gunakan nilai yang lebih kecil dari volume penuh posisi untuk penutupan sebagian. Mengembalikan ExecutionResponse.
| Nama | Terletak di | Tipe | Wajib | Deskripsi |
|---|---|---|---|---|
positionId | path | int64 | ID posisi |
| Bidang | Tipe | Wajib | Deskripsi |
|---|---|---|---|
volume | int64 | Volume yang akan ditutup dalam sen |
{
"volume": 10000000
}
422 NOT_ENOUGH_MONEY – margin tidak mencukupi untuk penutupan sebagian
Deals ¶
GET /v1/deals Dapatkan riwayat deal
Mengembalikan deal yang dieksekusi dalam rentang waktu.
| Nama | Terletak di | Tipe | Wajib | Default | Deskripsi |
|---|---|---|---|---|---|
fromTimestamp | query | string | – | Waktu mulai (ISO-8601) | |
toTimestamp | query | string | – | Waktu akhir (ISO-8601) | |
maxRows | query | int32 | 50 | Jumlah deal maksimal yang dikembalikan |
200 Array objek Deal
[
{
"dealId": 11111,
"orderId": 12345,
"positionId": 67890,
"symbolId": 1,
"tradeSide": "BUY",
"volume": 10000000,
"filledVolume": 10000000,
"executionPrice": 112345.0,
"executionTimestamp": 1700000000000,
"dealStatus": "FILLED",
"commission": -7.00
}
]
Deal
| Bidang | Tipe | Deskripsi |
|---|---|---|
dealId | int64 | ID Deal |
orderId | int64 | Order yang memicu deal ini |
positionId | int64 | ID Posisi |
symbolId | int64 | ID Simbol |
tradeSide | string | BUY atau SELL |
volume | int64 | Volume yang diminta dalam sen |
filledVolume | int64 | Volume yang dieksekusi dalam sen |
executionPrice | double | Harga eksekusi |
executionTimestamp | int64 | Waktu eksekusi (epoch ms) |
dealStatus | string | Status – lihat nilai di bawah |
commission | double | Komisi yang dikenakan |
Nilai dealStatus
| Nilai | Artinya |
|---|---|
FILLED | Order sepenuhnya dieksekusi |
PARTIALLY_FILLED | Order tereksekusi parsial |
REJECTED | Ditolak oleh server trading |
INTERNALLY_REJECTED | Ditolak secara internal sebelum mencapai server |
ERROR | Terjadi kesalahan selama eksekusi |
MISSED | Order terlewat (misalnya, gap di pasar) |
Skema { #execution-response-schema } ¶
ExecutionResponse ¶
Semua operasi penempatan, perubahan, dan pembatalan order mengembalikan objek ini.
| Bidang | Tipe | Deskripsi |
|---|---|---|
orderId | int64 | ID order yang terpengaruh |
positionId | int64 | ID posisi yang terpengaruh |
executionType | string | Jenis hasil – lihat nilai di bawah |
order | Order | Detail order (jika berlaku) |
position | Position | Detail posisi (jika berlaku) |
deal | Deal | Detail deal (jika berlaku) |
Nilai executionType
| Nilai | Artinya |
|---|---|
ORDER_ACCEPTED | Order pending diterima |
ORDER_FILLED | Order sepenuhnya dieksekusi |
ORDER_REPLACED | Order diubah |
ORDER_CANCELLED | Order dibatalkan |
ORDER_EXPIRED | Order kedaluwarsa |
ORDER_REJECTED | Order ditolak |
ORDER_CANCEL_REJECTED | Permintaan pembatalan ditolak |
ORDER_PARTIAL_FILL | Order tereksekusi parsial |
SWAP | Swap posisi diterapkan |
DEPOSIT | Deposit akun |
WITHDRAW | Penarikan dana akun |
BONUS_DEPOSIT_WITHDRAW | Deposit atau penarikan dana bonus |
Batas laju ¶
Gateway memberlakukan batas laju di berbagai tingkat.
| Level | Deskripsi |
|---|---|
| Per IP | Membatasi total permintaan dari satu alamat IP |
| Per pengguna | Membatasi total permintaan di semua akun untuk satu token |
| Per akun | Membatasi permintaan yang menargetkan satu akun trading |
Batas laju terlampaui
Ketika batas laju terlampaui, API mengembalikan 429 Too Many Requests dengan header Retry-After.
Penanganan galat ¶
Ketika permintaan gagal, API mengembalikan respons kesalahan JSON.
{
"error": {
"code": "NOT_ENOUGH_MONEY",
"message": "Insufficient free margin for this order",
"httpStatus": 422,
"retryAfter": null
}
}
Kode kesalahan ¶
| Kode | HTTP | Deskripsi |
|---|---|---|
INVALID_REQUEST | 400 | Parameter permintaan tidak valid atau hilang |
UNAUTHORIZED | 401 | Token tidak valid, kedaluwarsa, atau hilang |
TRADING_BAD_VOLUME | 400 | Volume tidak valid (di bawah minimum atau melebihi posisi) |
NOT_ENOUGH_MONEY | 422 | Margin bebas tidak mencukupi |
SYMBOL_NOT_FOUND | 404 | ID simbol tidak ada |
MARKET_CLOSED | 409 | Pasar untuk simbol saat ini ditutup |
MAINTENANCE | 503 | Server trading dalam mode pemeliharaan |
TIMEOUT | 504 | Server trading tidak merespons tepat waktu |
GATEWAY_RATE_LIMIT | 429 | Batas laju terlampaui – lihat header Retry-After |
Penanganan batas laju
Ketika Anda menerima respons 429, header Retry-After dan bidang retryAfter menunjukkan berapa detik Anda harus menunggu sebelum mengirim permintaan berikutnya.