Beranda > Blog > MT5 "Not enough money" (134/10019): 7 Penyebab & Solusi

MT5MQL5ErrorTroubleshootingEAMargin

MT5 "Not enough money" (134/10019): 7 Penyebab & Solusi

Dipublikasikan: 2026-06-12Waktu baca: sekitar 6 menit
This article reflects information as of its publish date. EA performance figures (PF, DD, annual return) change with live trading and re-validation — check the latest on the EA pages. See the latest EA results

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:

SumberNilaiMuncul di mana
GetLastError()134 (ERR_NO_MONEY)Perhitungan seperti OrderCalcMargin, pengecekan internal
MqlTradeResult.retcode10019 (TRADE_RETCODE_NO_MONEY)OrderSend ditolak oleh server
CTrade.ResultRetcode()10019Penolakan 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:

  1. Tambah deposit, atau
  2. Tutup sebagian posisi secara manual untuk membebaskan margin
  3. Turunkan RiskPercent pada 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:

  1. Turunkan fixed lot ke minimum (0.01) untuk mengecek apakah bisa entry
  2. Beralih ke perhitungan otomatis berbasis risiko (UseFixedLot=false / RiskPercent)
  3. 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:

  1. Cek leverage akun (di halaman member broker atau informasi akun di MT5)
  2. Cek "margin rate" pada spesifikasi simbol (bisa lebih rendah untuk instrumen tertentu)
  3. Gunakan pengaturan yang menutup posisi sebelum akhir pekan (CloseAllBeforeWeekend=true, dsb.), atau pindah ke broker tanpa pembatasan leverage akhir pekan
  4. 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:

  1. Cek Margin yang terpakai dan Free Margin di tab "Trade"
  2. Periksa apakah antar-EA saling memperebutkan margin di akun yang sama (jika menjalankan banyak EA)
  3. Batasi jumlah maksimum posisi bersamaan lewat parameter EA
  4. 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:

  1. Untuk dana kecil dan trading yang lebih aman, gunakan akun cent/mikro agar lot minimum pun tidak menimbulkan risiko berlebih
  2. 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

BrokerKarakteristikFrekuensi ERR_NO_MONEY
XMAda pembatasan leverage akhir pekan, Stop Out 20%Sedang (lebih tinggi saat akhir pekan)
ExnessTersedia akun leverage tanpa batas, Stop Out 0%Rendah
HFM / FXGT dll.Tersedia akun leverage tinggiRendah

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

PrioritasYang DicekSolusi
🚨 UtamaApakah Free Margin < margin yang dibutuhkanTambah deposit / tutup sebagian posisi / perkecil lot
🚨 UtamaApakah fixed lot terlalu besar untuk saldoTurunkan ke 0.01 / beralih ke risiko% otomatis
⚠️ BerikutnyaApakah leverage akun rendah / ada pembatasan akhir pekanAkun leverage tinggi / tutup posisi akhir pekan / perkecil lot
⚠️ BerikutnyaApakah margin terkunci oleh posisi lain/EA lainRapikan posisi terbuka pada akun yang sama
✅ PeriksaPerbedaan contract size cent/standardSesuaikan lot dengan jenis akun
🛠 DeveloperProteksi lewat OrderCalcMargin sebelum orderTerapkan kode di atas

Kesimpulan

  • ERR_NO_MONEY punya 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 OrderCalcMargin sebelum 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.

📧 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.

Komentar & pertanyaan