MT5 "Not enough money" (134/10019): 7 Penyebab & Solusi
Daftar Isi
- Apa Itu ERR_NO_MONEY (Perbedaan 134 dan 10019)
- ① ERR_NO_MONEY = 134 (runtime error dari `GetLastError()`)
- ② TRADE_RETCODE_NO_MONEY = 10019 (return code dari `OrderSend()`)
- Diagnosis Cepat dalam 30 Detik
- Penyebab dan Solusi (6 Pola)
- ① Margin memang benar-benar tidak cukup
- ② Lot terlalu besar (dibandingkan saldo)
- ③ Leverage rendah / dibatasi saat akhir pekan atau event tertentu
- ④ Margin terkunci oleh posisi yang sudah ada
- ⑤ Bonus/kredit ikut dihitung sebagai margin
- ⑥ Perbedaan contract size antar jenis akun (Standard vs Cent/Mikro)
- Catatan per Broker
- Kode MQL5 untuk Mencegah Error Ini (untuk Developer EA)
- Mengecek margin yang dibutuhkan sebelum order
- Menormalkan lot ke minimum dan step yang berlaku
- Selalu periksa retcode dari OrderSend
- Penghentian darurat berdasarkan margin level
- Daftar Periksa Prioritas
- Kesimpulan
- FAQ
- T: Saldo sebenarnya cukup, tapi ERR_NO_MONEY tetap muncul. Kenapa?
- T: Apa bedanya 134 dan 10019?
- T: Error ini tidak muncul saat backtest, tapi muncul di akun real. Kenapa?
- T: EA averaging/grid mengalami ERR_NO_MONEY saat levelnya semakin dalam.
- T: Bisakah dicegah secara otomatis lewat kode EA?
- T: Minimal berapa modal agar bisa mulai dengan wajar?
Solusi Lengkap ERR_NO_MONEY (MT5/MQL5)
Saat menjalankan EA, melihat ERR_NO_MONEY atau not enough money muncul di tab Expert atau Journal memang bikin panik—"apakah dana sudah habis?" Padahal, error ini bisa muncul meskipun saldo masih mencukupi. Penyebabnya bukan hanya "dana nol", tetapi bisa juga dari perhitungan lot, leverage, hingga margin yang terkunci oleh posisi yang sudah terbuka.
Artikel ini ditujukan baik untuk pengguna EA di MT5 maupun developer yang menulis EA dengan MQL5, merangkum secara tuntas hakikat ERR_NO_MONEY, 6 penyebabnya, solusi cepat, catatan per-broker, hingga pencegahan permanen di sisi kode. Untuk daftar kode error MT5 secara umum, lihat Panduan Lengkap Mengatasi Kode Error MQL5 / MT5.
Artikel ini mengacu pada MT5 (build seri 4xxx) per Juni 2026. Angka dan tampilan layar dapat sedikit berbeda tergantung broker dan versi build.
Apa Itu ERR_NO_MONEY (Perbedaan 134 dan 10019)
Di MQL5, nilai yang menandakan "dana tidak cukup" ada dua jenis, tergantung dari mana nilai itu diambil. Jika keduanya tertukar, proses mencari akar masalah akan berputar-putar.
① ERR_NO_MONEY = 134 (runtime error dari GetLastError())
Ini adalah kode runtime error yang dikembalikan oleh GetLastError(). Kode 134 muncul saat fungsi perhitungan seperti OrderCalcMargin() atau OrderCalcProfit(), atau kode gaya lama, mendeteksi bahwa "margin yang dibutuhkan melebihi margin bebas".
Arti : dana yang dibutuhkan untuk operasi trading tidak cukup (not enough money)
Konstanta: ERR_NO_MONEY
Nilai : 134
② TRADE_RETCODE_NO_MONEY = 10019 (return code dari OrderSend())
Hasil eksekusi order sesungguhnya melalui OrderSend() di MQL5 tersimpan dalam MqlTradeResult.retcode. Ketika order ditolak oleh server karena "dana tidak cukup", kodenya bukan 134, melainkan 10019 (TRADE_RETCODE_NO_MONEY). Ini bukan error dari sisi MT5, melainkan notifikasi penolakan dari server broker.
Arti : dana tidak cukup untuk menyelesaikan permintaan order (There is not enough money to complete the request)
Konstanta: TRADE_RETCODE_NO_MONEY
Nilai : 10019
// Contoh output khas yang bisa dilihat di log
2026.06.12 09:15:32.441 EA_NAME XAUUSD,H1: OrderSend error 10019
Panduan praktis membedakannya:
| Sumber | Nilai | Muncul di mana |
|---|---|---|
GetLastError() | 134 (ERR_NO_MONEY) | Perhitungan seperti OrderCalcMargin, pengecekan internal |
MqlTradeResult.retcode | 10019 (TRADE_RETCODE_NO_MONEY) | OrderSend ditolak oleh server |
CTrade.ResultRetcode() | 10019 | Penolakan order melalui CTrade |
Jika log menampilkan "134", berarti masalah ada di tahap perhitungan/pengecekan internal; jika muncul "10019" atau not enough money di tab Expert, berarti masalah ada di tahap penolakan server. Akar masalah keduanya sama (margin yang dibutuhkan > margin yang tersedia), sehingga penanganannya pun sama.
Diagnosis Cepat dalam 30 Detik
Buka tab "Toolbox → Trade" di MT5 dan periksa tiga hal berikut.
Balance : dana tunai di akun
Equity : Balance ± floating profit/loss
Free Margin : margin yang bisa dipakai untuk order baru ← ini yang paling menentukan
Margin Level (%) : Equity / Margin × 100
- Jika Free Margin lebih kecil dari margin yang dibutuhkan untuk 1 posisi baru → 100% akan muncul ERR_NO_MONEY.
- Jika saldo terlihat cukup tapi error tetap muncul, kemungkinan penyebabnya ada di "②lot terlalu besar", "④margin terkunci oleh posisi yang ada", atau "⑥jenis akun berbeda" yang dibahas di bawah.
Margin yang dibutuhkan untuk 1 posisi bisa dicek di MT5 melalui "Market Watch → klik kanan simbol → Specification" (Margin per 1 lot). Secara garis besar, rumusnya sebagai berikut.
Margin dibutuhkan ≈ (lot × contract size × harga) / leverage
Penyebab dan Solusi (6 Pola)
① Margin memang benar-benar tidak cukup
Gejala: Floating loss membesar, Free Margin turun di bawah kebutuhan untuk posisi baru. Sering terjadi setelah kalah beruntun atau saat level averaging sudah dalam.
Solusi:
- Tambah deposit, atau
- Tutup sebagian posisi secara manual untuk membebaskan margin
- Turunkan
RiskPercentpada EA agar lot berikutnya lebih kecil
Jika pola ini terus berulang pada EA tertentu, berarti lotnya memang terlalu besar untuk dana yang tersedia. Lanjut ke poin ②.
② Lot terlalu besar (dibandingkan saldo)
Gejala: Saldo sebenarnya cukup, tapi ERR_NO_MONEY sudah muncul sejak entry pertama. Sering terjadi pada penggunaan lot tetap (fixed lot).
Penyebab: FixedLot tidak sesuai dengan saldo dan leverage akun. Misalnya, pada akun dengan dana 100.000 yen (≈$670) yang mencoba membuka XAUUSD 0.1 lot, margin yang dibutuhkan bisa melebihi saldo tergantung leverage-nya.
Solusi:
- Turunkan fixed lot ke minimum (0.01) untuk mengecek apakah bisa entry
- Beralih ke perhitungan otomatis berbasis risiko (
UseFixedLot=false/RiskPercent) - Jika 0.01 pun tetap tidak bisa entry, berarti leverage atau dana akun kurang → lanjut ke ③ atau ⑥
Patokan umum: desain yang wajar adalah bisa mulai dari lot minimum 0.01 dengan akun standard bermodal 100.000 yen (≈$670). Jika dana di bawah itu, atau ingin berjalan lebih aman dengan ukuran kecil, pertimbangkan "akun mikro (cent)" yang dibahas berikutnya.
③ Leverage rendah / dibatasi saat akhir pekan atau event tertentu
Gejala: EA dan lot yang sama berjalan normal di akun lain, tapi ERR_NO_MONEY hanya muncul di akun ini. Atau error terkonsentrasi di Jumat sore hingga Senin pagi.
Penyebab: Leverage akun yang rendah (misalnya akun regulasi EU 1:30 dibandingkan akun luar negeri 1:1000) membuat margin yang dibutuhkan bisa berbeda puluhan kali lipat. Selain itu, beberapa broker menurunkan leverage saat akhir pekan atau menjelang rilis data penting (XM membatasi leverage menjadi 200:1 saat akhir pekan), sehingga margin yang dibutuhkan tiba-tiba naik saat posisi sedang terbuka. Untuk emas atau kripto, batas leverage juga bisa diatur secara terpisah per simbol.
Solusi:
- Cek leverage akun (di halaman member broker atau informasi akun di MT5)
- Cek "margin rate" pada spesifikasi simbol (bisa lebih rendah untuk instrumen tertentu)
- Gunakan pengaturan yang menutup posisi sebelum akhir pekan (
CloseAllBeforeWeekend=true, dsb.), atau pindah ke broker tanpa pembatasan leverage akhir pekan - Pindah ke akun leverage tinggi atau turunkan lot
④ Margin terkunci oleh posisi yang sudah ada
Gejala: Posisi pertama berhasil dibuka, tapi posisi kedua atau tambahan (averaging) gagal dengan ERR_NO_MONEY.
Penyebab: Posisi yang sedang terbuka mengunci sebagian margin, sehingga Free Margin turun di bawah kebutuhan untuk posisi baru. Sering terjadi jika menjalankan beberapa pair atau beberapa EA dalam satu akun.
Solusi:
- Cek Margin yang terpakai dan Free Margin di tab "Trade"
- Periksa apakah antar-EA saling memperebutkan margin di akun yang sama (jika menjalankan banyak EA)
- Batasi jumlah maksimum posisi bersamaan lewat parameter EA
- EA averaging/grid menghabiskan margin secara cepat saat level semakin dalam → tinjau ulang batas level, kelipatan lot, dan pengaturan penutupan darurat
⑤ Bonus/kredit ikut dihitung sebagai margin
Gejala: Seharusnya cukup jika dihitung "saldo + bonus", tapi ERR_NO_MONEY tetap muncul.
Penyebab: Pada sebagian broker, kredit (bonus) tidak dihitung sepenuhnya atau bahkan tidak dihitung sama sekali dalam perhitungan margin. Akibatnya, saldo yang ditampilkan berbeda dengan margin yang sebenarnya digunakan oleh server.
Solusi: Cek ketentuan bonus broker apakah "kredit dihitung sebagai margin". Jika tidak, turunkan lot agar margin yang dibutuhkan sesuai dengan dana setoran murni saja.
⑥ Perbedaan contract size antar jenis akun (Standard vs Cent/Mikro)
Gejala: Meski sama-sama "lot 0,01", ERR_NO_MONEY tiba-tiba muncul saat pindah akun. Atau sebaliknya, lot menjadi terlalu besar.
Penyebab: Contract size akun cent (mikro) berbeda sekitar 100 kali lipat dari akun standard. Lot 0,01 di akun cent eksposur riilnya hanya sekitar 1/100. Jika EA menggunakan fixed lot tanpa membedakan jenis akun, salah satu akun bisa kekurangan margin.
Solusi:
- Untuk dana kecil dan trading yang lebih aman, gunakan akun cent/mikro agar lot minimum pun tidak menimbulkan risiko berlebih
- Desain EA sebaiknya tidak melakukan hardcode jenis akun, melainkan menentukan lot berdasarkan margin riil yang dihitung dengan
OrderCalcMargin()(dibahas di bab berikutnya)
Catatan per Broker
| Broker | Karakteristik | Frekuensi ERR_NO_MONEY |
|---|---|---|
| XM | Ada pembatasan leverage akhir pekan, Stop Out 20% | Sedang (lebih tinggi saat akhir pekan) |
| Exness | Tersedia akun leverage tanpa batas, Stop Out 0% | Rendah |
| HFM / FXGT dll. | Tersedia akun leverage tinggi | Rendah |
Akun leverage tanpa batas dari Exness (akun Pro/Raw Spread) sering kali tetap bisa entry meski Free Margin nyaris nol, sehingga error ini jarang muncul. Cocok untuk EA jenis averaging, namun perlu diwaspadai bahwa stop out menjadi kurang efektif sehingga risiko kerugian membesar justru meningkat. Untuk perbandingan broker, lihat juga Halaman Perbandingan Broker.
Kode MQL5 untuk Mencegah Error Ini (untuk Developer EA)
Bukan sekadar "memperbaiki", desain EA yang benar adalah mencegah ERR_NO_MONEY sejak sebelum order dikirim. Intinya adalah "hitung margin yang dibutuhkan sebelum order, dan jika tidak cukup, jangan entry atau perkecil lot".
Mengecek margin yang dibutuhkan sebelum order
// Gate sebelum order: pastikan margin dibutuhkan <= free margin sebelum memanggil OrderSend
bool HasEnoughMargin(ENUM_ORDER_TYPE type, double lots)
{
double price = (type == ORDER_TYPE_BUY)
? SymbolInfoDouble(_Symbol, SYMBOL_ASK)
: SymbolInfoDouble(_Symbol, SYMBOL_BID);
double margin = 0.0;
if(!OrderCalcMargin(type, _Symbol, lots, price, margin))
{
Print("OrderCalcMargin failed: ", GetLastError()); // 134 dsb.
return false;
}
double freeMargin = AccountInfoDouble(ACCOUNT_MARGIN_FREE);
if(margin > freeMargin)
{
PrintFormat("Skip: need %.2f > free %.2f (ERR_NO_MONEY guard)", margin, freeMargin);
return false; // Tidak entry = mencegah ERR_NO_MONEY sejak awal
}
return true;
}
Menormalkan lot ke minimum dan step yang berlaku
Jika nilai hasil perhitungan risiko% dikirim apa adanya, order bisa ditolak karena tidak sesuai lot minimum atau lot step (kelalaian normalisasi adalah penyebab umum penolakan order). Daripada menyerah saat tidak bisa entry, perkecil ke rentang yang masih memungkinkan agar peluang tidak terlewat.
double NormalizeLot(double lots)
{
double minLot = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
double maxLot = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX);
double step = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP);
lots = MathFloor(lots / step) * step; // Bulatkan sesuai step
lots = MathMax(minLot, MathMin(maxLot, lots)); // Clamp ke rentang min-maks
return NormalizeDouble(lots, 2);
}
Selalu periksa retcode dari OrderSend
Jangan hanya melihat nilai kembalian (bool) dari OrderSend(), tapi periksa juga result.retcode untuk menangani 10019 (TRADE_RETCODE_NO_MONEY) secara khusus.
MqlTradeRequest req; MqlTradeResult res;
ZeroMemory(req); ZeroMemory(res);
// ... susun req ...
if(!OrderSend(req, res) || res.retcode != TRADE_RETCODE_DONE)
{
if(res.retcode == TRADE_RETCODE_NO_MONEY) // 10019
Print("Not enough money. Perlu memperkecil lot atau menambah deposit.");
else
PrintFormat("OrderSend failed: retcode=%d, lastError=%d", res.retcode, GetLastError());
}
Jika menggunakan CTrade, bisa dicek melalui trade.ResultRetcode() apakah bernilai 10019, atau lewat trade.ResultRetcodeDescription().
Penghentian darurat berdasarkan margin level
Dengan menambahkan pengaman yang menghentikan entry baru atau menutup semua posisi saat margin level turun di bawah persentase tertentu, EA bisa mencegah baik ERR_NO_MONEY yang berulang maupun kebangkrutan akun.
double level = AccountInfoDouble(ACCOUNT_MARGIN_LEVEL); // Margin level (%)
if(level > 0 && level < EmergencyMarginLevel) // Contoh: 150%
{
// Hentikan entry baru / tutup sebagian posisi bila diperlukan
}
EA yang didistribusikan FXEA365 sudah mengimplementasikan secara standar "lot otomatis berbasis risiko%", "pengecekan margin sebelum order", dan "penghentian darurat berdasarkan margin level (UseMarginEmergencyClose)", sehingga bisa dijalankan dengan wajar bahkan dari modal minimum.
Daftar Periksa Prioritas
| Prioritas | Yang Dicek | Solusi |
|---|---|---|
| 🚨 Utama | Apakah Free Margin < margin yang dibutuhkan | Tambah deposit / tutup sebagian posisi / perkecil lot |
| 🚨 Utama | Apakah fixed lot terlalu besar untuk saldo | Turunkan ke 0.01 / beralih ke risiko% otomatis |
| ⚠️ Berikutnya | Apakah leverage akun rendah / ada pembatasan akhir pekan | Akun leverage tinggi / tutup posisi akhir pekan / perkecil lot |
| ⚠️ Berikutnya | Apakah margin terkunci oleh posisi lain/EA lain | Rapikan posisi terbuka pada akun yang sama |
| ✅ Periksa | Perbedaan contract size cent/standard | Sesuaikan lot dengan jenis akun |
| 🛠 Developer | Proteksi lewat OrderCalcMargin sebelum order | Terapkan kode di atas |
Kesimpulan
ERR_NO_MONEYpunya dua wajah: 134 (dari GetLastError) dan 10019 (retcode OrderSend = TRADE_RETCODE_NO_MONEY), namun akar masalahnya sama, yaitu "margin dibutuhkan > margin yang tersedia".- Meski saldo mencukupi, error ini bisa muncul karena lot terlalu besar, leverage rendah (termasuk pembatasan akhir pekan), margin terkunci oleh posisi yang ada, atau perbedaan jenis akun.
- Pengguna EA sebaiknya mencegahnya dengan "lot otomatis berbasis risiko%" dan "jenis akun yang sesuai", sementara developer EA perlu menerapkan pencegahan permanen lewat "gate
OrderCalcMarginsebelum order", "normalisasi lot", dan "penanganan retcode 10019".
Untuk kode error secara umum, lihat Panduan Lengkap Mengatasi Kode Error MQL5 / MT5, dan untuk EA gratis yang bisa berjalan dengan pengaturan dana yang wajar, lihat Daftar EA. Jika Anda menggunakan EA dari situs ini dan masalah tetap tidak teratasi meski sudah mengubah pengaturan, silakan hubungi kami melalui formulir dukungan dengan melampirkan tangkapan layar kondisi margin akun Anda.
FAQ
T: Saldo sebenarnya cukup, tapi ERR_NO_MONEY tetap muncul. Kenapa?
Karena penilaiannya didasarkan pada Free Margin, bukan Balance. Jika Free Margin berkurang akibat floating loss atau margin yang terkunci oleh posisi yang ada, posisi baru tidak bisa dibuka meski saldo terlihat cukup. Silakan cek Free Margin di tab "Trade".
T: Apa bedanya 134 dan 10019?
134 (ERR_NO_MONEY) adalah runtime error yang dikembalikan oleh GetLastError(), sedangkan 10019 (TRADE_RETCODE_NO_MONEY) adalah hasil (retcode) dari OrderSend(). Keduanya hanya berbeda dari sisi kemunculannya, tapi penyebabnya (dana tidak cukup) sama.
T: Error ini tidak muncul saat backtest, tapi muncul di akun real. Kenapa?
Ini karena leverage, jenis akun (cent/standard), dan posisi yang sudah ada di akun real berbeda dari pengaturan saat testing. Perbedaan leverage dan contract size khususnya sangat berpengaruh.
T: EA averaging/grid mengalami ERR_NO_MONEY saat levelnya semakin dalam.
Ini pertanda hampir mencapai batas normal. Semakin banyak level, semakin cepat margin terkuras. Turunkan batas level dan kelipatan lot, pastikan fitur penutupan darurat seperti UseMarginEmergencyClose selalu aktif, dan gunakan dana yang memang siap untuk ditanggung risikonya.
T: Bisakah dicegah secara otomatis lewat kode EA?
Bisa. Hitung margin yang dibutuhkan dengan OrderCalcMargin() sebelum order, lalu pasang gate agar tidak entry (atau perkecil lot) jika nilainya melebihi AccountInfoDouble(ACCOUNT_MARGIN_FREE). Lihat contoh kode pada bagian isi artikel.
T: Minimal berapa modal agar bisa mulai dengan wajar?
Patokan yang wajar adalah mulai dari lot minimum 0,01 dengan akun standard bermodal 100.000 yen (≈$670). Jika ingin memulai dengan modal lebih kecil atau lebih aman, gunakan akun cent (mikro) agar eksposur riil tetap kecil meski di lot minimum, sehingga lebih mudah menghindari ERR_NO_MONEY.
Terkait
📧 Peringatan sebelum harga naik + kursus email gratis 5 hari
Semua EA dijual dengan harga peluncuran dan naik bertahap seiring penjualan. Dapatkan pemberitahuan sebelum setiap kenaikan, plus email harian tentang trading algo, membaca backtest, dan memilih broker.
* Privasi sangat dilindungi. Anda dapat berhenti berlangganan kapan saja.