Ana Sayfa > Blog > MT5 "Not enough money" (10019/134): 6 Neden ve Çözüm

MT5MQL5HataSorun GidermeEATeminat

MT5 "Not enough money" (10019/134): 6 Neden ve Çözüm

Yayınlandı: 2026-06-12Okuma süresi: yaklaşık 5 dk
⏱ Bu makale, yayın tarihi itibarıyla geçerli bilgileri yansıtır. EA performans rakamları (PF, DD, yıllık getiri) canlı işlem ve yeniden doğrulamayla değişir — en güncel değerler için EA sayfalarına bakın. En güncel EA sonuçlarını gör →

ERR_NO_MONEY (MT5/MQL5) Hatasının Kesin Çözümü

EA çalıştırırken Expert sekmesinde veya Journal'da ERR_NO_MONEY ya da not enough money hatasını gördüğünüzde "paramız mı bitti?" diye endişelenebilirsiniz, ama bu hata bakiyede yeterli miktar olsa bile ortaya çıkabilir. Nedeni sadece "bakiye sıfır" değildir; lot hesaplama, kaldıraç, mevcut pozisyonların yol açtığı teminat kilitlenmesi gibi birçok farklı sebep söz konusu olabilir.

Bu yazı, hem MT5'te EA kullananlar hem de MQL5 ile EA yazanlar için ERR_NO_MONEY hatasının ne olduğunu, 6 farklı nedenini, hemen uygulanabilecek çözümleri, brokere özgü dikkat noktalarını ve kod tarafında kalıcı önlemleri tek bir yazıda toplayan nihai rehberdir. Hata kodlarının tamamı için MQL5 / MT5 Hata Kodları Kapsamlı Çözüm Rehberi sayfasına bakabilirsiniz.

Bu yazı 2026 Haziran itibarıyla MT5'in (4xxx build serisi) güncel sürümünü esas almaktadır. Rakamlar ve ekran isimleri brokere ve build sürümüne göre az miktarda farklılık gösterebilir.


Önce 30 Saniyede Yapılabilecek Ayrım

MT5'te "Toolbox → Trade" sekmesinde şu üç değere bakın.

Bakiye (Balance)             : Hesaptaki nakit
Özsermaye (Equity)           : Bakiye ± açık pozisyon kâr/zararı
Serbest Teminat (Free Margin): Şu an yeni işlem için kullanılabilir teminat ← Asıl belirleyici
Teminat Seviyesi (Margin Level %): Equity / Margin × 100
  • Serbest teminat (Free Margin), açmak istediğiniz 1 pozisyon için gerekli teminattan azsa → %100 ERR_NO_MONEY alırsınız.
  • Bakiye yeterli olduğu halde hata alıyorsanız, aşağıda anlatılan "②aşırı lot", "④mevcut pozisyonların teminatı kilitlemesi" veya "⑥hesap tipi farkı" nedenlerinden biridir.

1 pozisyon için gerekli teminatı, MT5'te "Market Watch → sembole sağ tık → Özellikler" üzerinden görebilirsiniz (1 lot için teminat). Kabaca formül şöyledir:

Gerekli Teminat ≈ (Lot × Kontrat Büyüklüğü × Fiyat) / Kaldıraç

Önerilen Broker Karşılaştırma →

🎁 Ücretsiz EA İndir

📧 Ücretsiz e-posta kursu (8 e-posta) + abonelere özel 13 MT5 göstergesi paketi

* Gizlilik kesinlikle korunur. İstediğiniz zaman abonelikten çıkabilirsiniz.

ERR_NO_MONEY nedir (MT5'te 10019, MT4'te 134)

ERR_NO_MONEY yaygın kullanılan bir kısaltmadır, resmi bir sabit değildir: ne MQL5 ne de MQL4 referansı bu adı tanımlar. Resmi ad ve numara platforma göre değişir (MQL5: işlem sunucusu dönüş kodları, MQL4: hata kodları).

① MT5: TRADE_RETCODE_NO_MONEY = 10019 (işlem sunucusu dönüş kodu)

MQL5'te OrderSend() sonucu MqlTradeResult.retcode alanına yazılır. Sunucu emri yetersiz bakiye nedeniyle reddettiğinde kod 10019 (TRADE_RETCODE_NO_MONEY) olur. Bu, broker sunucusundan gelen bir ret bildirimidir. OrderCheck() göndermeden önce bakiyeyi kontrol eder ve sonucu MqlTradeCheckResult.retcode alanına yazar.

Anlamı: Emri tamamlamak için yeterli para yok (There is not enough money to complete the request)
Sabit  : TRADE_RETCODE_NO_MONEY
Değer  : 10019
// Logda görebileceğiniz tipik çıktı örneği
2026.06.12 09:15:32.441 EA_NAME XAUUSD,H1: OrderSend error 10019

② MT4: ERR_NOT_ENOUGH_MONEY = 134 (MQL4'te GetLastError())

134, MT4 (MQL4) numarasıdır. MQL5'te GetLastError() tarafından döndürülen çalışma zamanı hataları listesinde ne 134 ne de yetersiz bakiye için bir kod vardır; MT5'te retcode değerine bakın.

Anlamı: İşlem için gerekli para yeterli değil (not enough money)
Sabit  : ERR_NOT_ENOUGH_MONEY
Değer  : 134 (MT4)

Pratikte ayrım şöyle yapılır:

KaynakDeğerNe zaman görülür
MqlTradeResult.retcode (MT5)10019 (TRADE_RETCODE_NO_MONEY)OrderSend sunucu tarafından reddedildiğinde
CTrade.ResultRetcode() (MT5)10019CTrade üzerinden gönderilen emir reddedildiğinde
GetLastError() (MT4)134 (ERR_NOT_ENOUGH_MONEY)OrderSend (MT4 / MQL4)

Günlükte «10019» veya not enough money görünüyorsa emri MT5 işlem sunucusu reddetmiştir; «134» ise bir MT4 terminalinden veya MT4 EA'sından gelir. Kök neden aynıdır (gerekli teminat > kullanılabilir teminat), bu yüzden çözümler ortaktır.


Nedenler ve Çözümler (6 Senaryo)

① Gerçekten teminat yetersiz

Belirti: Açık zarar büyümüş, Free Margin yeni işlem için gerekenin altına düşmüş. Art arda kayıplardan sonra veya derin martingale/ortalama düşürme kademelerinde sıkça görülür.

Çözüm:

  1. Ek para yatırın, ya da
  2. Mevcut pozisyonlardan bir kısmını manuel kapatarak teminatı geri kazanın
  3. EA tarafında RiskPercent değerini düşürerek sonraki lotları küçültün

Bu durum tekrar tekrar yaşanıyorsa, sorun genelde lotun bakiyeye göre baştan çok büyük olmasıdır. ②'ye bakın.


② Lot çok büyük (bakiyeye göre)

Belirti: Bakiye yeterli olduğu halde ilk emirden itibaren ERR_NO_MONEY alınıyor. Sabit lot kullanımında sık görülür.

Neden: FixedLot değeri, hesap bakiyesi ve kaldıracıyla uyumsuz. Örneğin 100.000 Yen (≈670 dolar) bakiyeli bir hesapta XAUUSD için 0.1 lot açmaya çalışmak, kaldıraca bağlı olarak gerekli teminatın bakiyeyi aşmasına yol açabilir.

Çözüm:

  1. Sabit lotu minimum (0,01) seviyesine düşürüp açılıp açılmadığını kontrol edin
  2. Risk% otomatik hesaplamaya geçin (UseFixedLot=false / RiskPercent)
  3. 0,01 lot bile açılamıyorsa hesabın kaldıracı veya bakiyesi yetersizdir → ③ ve ⑥'ya bakın

Referans: 100.000 Yen (≈670 dolar) standart hesapta minimum 0,01 lottan başlayabilecek bir tasarım, zorlamasız bir eşiktir. Bu tutarın altında sermayeniz varsa veya daha küçük ve güvenli işlem yapmak istiyorsanız aşağıdaki "mikro (cent) hesap" seçeneğini değerlendirin.


③ Kaldıraç düşük / hafta sonu veya önemli veri öncesi kısıtlanmış

Belirti: Aynı EA, aynı lot başka bir hesapta sorunsuz açılırken bu hesapta ERR_NO_MONEY veriyor. Ya da hata Cuma akşamı ile Pazartesi sabahı arasında yoğunlaşıyor.

Neden: Hesabın kaldıracı düşükse (örneğin 1:30 AB düzenlemeli hesap ile 1:1000 offshore hesap arasında) gerekli teminat onlarca kat farklılaşır. Ayrıca bazı brokerler hafta sonları veya önemli veri açıklamaları öncesinde kaldıracı düşürür (XM hafta sonu kaldıracı 200:1'e sınırlandırır) ve pozisyon açıkken gerekli teminat aniden artabilir. Altın veya kripto gibi enstrümanlarda sembol bazında ayrı kaldıraç üst sınırları da olabilir.

Çözüm:

  1. Hesabın kaldıracını kontrol edin (broker üye paneli / MT5 hesap bilgileri)
  2. Sembol özelliklerindeki "teminat oranını" kontrol edin (bazı enstrümanlarda daha düşük olabilir)
  3. Hafta sonuna pozisyon taşımayan bir ayar kullanın (CloseAllBeforeWeekend=true vb.) veya hafta sonu kaldıraç kısıtlaması olmayan bir brokere geçin
  4. Daha yüksek kaldıraçlı bir hesaba geçin ya da lotu düşürün

④ Mevcut pozisyonlar teminatı kilitliyor

Belirti: İlk pozisyon açıldı ama ikincisinde veya ek kademelerde (ortalama düşürme) ERR_NO_MONEY alınıyor.

Neden: Zaten açık olan pozisyonlar teminatı kilitliyor ve Free Margin yeni işlem için yetersiz kalıyor. Aynı hesapta birden fazla parite veya birden fazla EA çalıştırıldığında sık görülür.

Çözüm:

  1. "Trade" sekmesinde kullanılan teminatı (Margin) ve Free Margin'i kontrol edin
  2. Aynı hesapta çalışan EA'lar teminatı birbirinden çalıyor mu bakın (çoklu EA kullanımında)
  3. Aynı anda açık pozisyon sayısını EA parametresiyle sınırlayın
  4. Ortalama düşürme/grid EA'larında kademe derinleştikçe teminat tüketimi hızlanır → kademe üst sınırı, lot çarpanı ve acil kapatma ayarlarını gözden geçirin

⑤ Bonus/kredi teminata dahil ediliyor

Belirti: "Bakiye + bonus" toplamı yeterli görünüyor ama yine de ERR_NO_MONEY alınıyor.

Neden: Bazı brokerlerde kredi (bonus) teminat hesabına dahil edilmez veya kısmen dahil edilir. Ekranda görünen bakiye ile sunucunun kullandığı teminat farklılaşır.

Çözüm: Broker bonus şartlarında "kredinin teminata dahil edilip edilmediğini" kontrol edin. Dahil edilmiyorsa, sadece gerçek yatırılan miktarla karşılanabilecek bir lota düşürün.


⑥ Hesap tipine göre kontrat büyüklüğü farkı (standart vs cent/mikro)

Belirti: Aynı "0,01 lot" olmasına rağmen hesap değiştirildiğinde aniden ERR_NO_MONEY alınıyor. Ya da tam tersi, lot fazla büyük kalıyor.

Neden: Cent (mikro) hesap ile standart hesap arasında kontrat büyüklüğü yaklaşık 100 kat farklıdır. Cent hesapta 0,01 lot, gerçek maruziyet olarak yaklaşık 1/100'e denk gelir. EA hesap tipini ayırt etmeden sabit lot kullanırsa, bir tarafta teminat yetersizliği ortaya çıkar.

Çözüm:

  1. Küçük ve güvenli işlem yapmak istiyorsanız cent/mikro hesap kullanarak minimum lotta bile aşırı risk almaktan kaçının
  2. EA'yı hesap tipini koda sabitlemeden, OrderCalcMargin() ile gerçek gerekli teminatı hesaplayıp lot belirleyecek şekilde tasarlayın (sonraki bölüm)

Broker Bazında Dikkat Edilmesi Gerekenler

BrokerÖzellikERR_NO_MONEY Sıklığı
XMHafta sonu kaldıraç kısıtlaması var, Stop Out %20Orta (hafta sonları daha yüksek)
ExnessKaldıraç sınırsız hesap seçeneği var, Stop Out %0Düşük
HFM / FXGT vb.Yüksek kaldıraçlı hesap seçenekleri varDüşük

Exness'in kaldıraç sınırsız hesapları (Pro/Raw Spread hesapları), serbest teminat neredeyse sıfır olsa bile yeni emrin geçtiği durumlar sık görülür ve bu hata daha az ortaya çıkar. Ortalama düşürme tabanlı EA'larla uyumu iyi olsa da, stop-out mekanizması etkili çalışmadığından zararın büyümesi kolaylaşan ters bir risk taşır, bu noktaya dikkat edin. Broker karşılaştırması için Broker Karşılaştırma Sayfası sayfasına da bakabilirsiniz.


MQL5'te Bu Hatayı Önleyen Kod (EA Geliştiricileri İçin)

Sadece "düzeltmek" değil, ERR_NO_MONEY hatasını emirden önce baştan engellemek doğru EA tasarımıdır. Buradaki mantık: emir göndermeden önce gerekli teminatı hesaplayıp yetersizse pozisyon açmamak veya lotu küçültmek.

Emirden önce gerekli teminatı kontrol etme

// Emir öncesi kapı: gerekli teminat <= serbest teminat kontrolünü yapıp sonra OrderSend çağır
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());
      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;   // Pozisyon açma = ERR_NO_MONEY'i baştan önle
   }
   return true;
}

Lotu minimum/adım değerine normalize etme

Risk% ile hesaplanan değeri olduğu gibi göndermek, minimum lot veya lot adımına uymadığı için reddedilir (normalize edilmemesi, emir reddinin tipik bir nedenidir). Açılamıyorsa vazgeçmek yerine açılabilecek aralığa küçültmek fırsat kaybını azaltır.

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;          // Adıma yuvarla
   lots = MathMax(minLot, MathMin(maxLot, lots)); // Min-max aralığına sıkıştır
   return NormalizeDouble(lots, 2);
}

OrderSend'in retcode değerini mutlaka kontrol edin

OrderSend() fonksiyonunun dönüş değerine (bool) ek olarak result.retcode değerine de bakıp 10019'u (TRADE_RETCODE_NO_MONEY) ayrıca yönetin.

MqlTradeRequest req; MqlTradeResult res;
ZeroMemory(req); ZeroMemory(res);
// ... req oluşturulur ...
if(!OrderSend(req, res) || res.retcode != TRADE_RETCODE_DONE)
{
   if(res.retcode == TRADE_RETCODE_NO_MONEY)   // 10019
      Print("Not enough money. Lotu küçültün veya para yatırın.");
   else
      PrintFormat("OrderSend failed: retcode=%d, lastError=%d", res.retcode, GetLastError());
}

CTrade kullanıyorsanız trade.ResultRetcode() değerinin 10019 olup olmadığını, veya trade.ResultRetcodeDescription() ile açıklamasını kontrol edebilirsiniz.

Teminat seviyesine göre acil durdurma

Teminat seviyesi belirli bir yüzdenin altına düştüğünde yeni emirleri durduran/tüm pozisyonları kapatan bir güvenlik mekanizması eklemek, hem ardı ardına ERR_NO_MONEY almayı hem de hesabın erimesini önler.

double level = AccountInfoDouble(ACCOUNT_MARGIN_LEVEL); // Teminat seviyesi %
if(level > 0 && level < EmergencyMarginLevel)          // Örn: %150
{
   // Yeni giriş yapmayı durdur / gerekirse mevcut pozisyonların bir kısmını kapat
}

FXEA365'in sunduğu EA'lar, bu "risk% otomatik lot", "emir öncesi teminat kontrolü" ve "teminat seviyesine göre acil durdurma" (UseMarginEmergencyClose) özelliklerini standart olarak uyguladığı için minimum sermayeyle bile zorlanmadan çalıştırılabilir.


Öncelik Sıralı Kontrol Listesi

ÖncelikKontrolÇözüm
🚨 ÖnceSerbest teminat < gerekli teminat mıPara yatır / kısmi kapat / lotu düşür
🚨 ÖnceSabit lot bakiyeye göre aşırı büyük mü0,01'e düşür / risk% otomatiğe geç
⚠️ SonraHesap kaldıracı düşük mü, hafta sonu kısıtlaması var mıYüksek kaldıraçlı hesap / hafta sonu kapatma / lotu düşür
⚠️ SonraMevcut pozisyon veya diğer EA'lar teminatı kilitliyor muAynı hesaptaki açık pozisyonları düzenle
✅ KontrolCent/standart kontrat büyüklüğü farkıHesap tipine uygun lota geç
🛠 GeliştirmeEmirden önce OrderCalcMargin ile korumaYukarıdaki kodu uygula

Özet

  • MT5'te yetersiz bakiye 10019 (TRADE_RETCODE_NO_MONEY) kodudur; 134 (ERR_NOT_ENOUGH_MONEY) MT4 numarasıdır ve ERR_NO_MONEY her ikisi için kullanılan bir kısaltmadır. Her iki durumda da neden aynıdır: gerekli teminat > kullanılabilir teminat.
  • Bakiye yeterli olsa bile aşırı lot, düşük kaldıraç (hafta sonu kısıtlaması dahil), mevcut pozisyonların teminatı kilitlemesi ve hesap tipi farkı nedeniyle ortaya çıkabilir.
  • EA kullanıcıları "risk% otomatik lot" ve "uygun hesap tipi" seçimiyle önleyebilir; EA geliştiricileri ise "emir öncesi OrderCalcMargin kapısı", "lot normalizasyonu" ve "retcode 10019 yönetimi" ile kalıcı çözüm uygulayabilir.

Hata kodlarının tamamı için MQL5 / MT5 Hata Kodları Kapsamlı Çözüm Rehberi sayfasına, zorlamasız bir sermaye ile çalışan ücretsiz EA'lar için EA Listesi sayfasına bakabilirsiniz. Sitemizin EA'sını kullanıyorsanız ve ayar değişikliğiyle sorun çözülmüyorsa, destek formundan hesabınızın teminat durumuna ait ekran görüntüsünü ekleyerek bizimle iletişime geçebilirsiniz.


Sıkça Sorulan Sorular

S: Bakiye yeterli olduğu halde ERR_NO_MONEY alıyorum. Neden?

Çünkü değerlendirme bakiyeye (Balance) göre değil, serbest teminata (Free Margin) göre yapılır. Açık zarar veya mevcut pozisyonların teminatı kilitlemesi nedeniyle Free Margin azalmışsa, bakiye yeterli olsa bile yeni pozisyon açılamaz. "Trade" sekmesindeki Free Margin değerini kontrol edin.

S: 134 ile 10019 arasındaki fark nedir?

10019 (TRADE_RETCODE_NO_MONEY), MT5'te OrderSend() sonucunda gelen işlem sunucusu dönüş kodudur; 134 (ERR_NOT_ENOUGH_MONEY) ise MT4'te GetLastError() tarafından döndürülen hatadır. Yalnızca platform farklıdır; neden (yetersiz bakiye) aynıdır.

S: Backtest'te çıkmıyor ama canlıda çıkıyor.

Canlı hesabın kaldıracı, hesap tipi (cent/standart) ve mevcut pozisyonları test ayarlarından farklı olduğu için oluşur. Özellikle kaldıraç farkı ve kontrat büyüklüğü farkı büyük etki yapar.

S: Ortalama düşürme/grid EA'sında kademe derinleştikçe ERR_NO_MONEY alıyorum.

Bu, normal davranışın bir adım öncesidir. Kademe arttıkça teminat tüketimi hızlanır. Kademe üst sınırını ve lot çarpanını düşürün, UseMarginEmergencyClose gibi acil kapatma özelliklerini mutlaka etkinleştirin ve sadece kaybetmeyi göze alabileceğiniz sermaye ile işlem yapın.

S: EA kodunda otomatik olarak önlenebilir mi?

Evet, önlenebilir. Emirden önce OrderCalcMargin() ile gerekli teminatı hesaplayıp AccountInfoDouble(ACCOUNT_MARGIN_FREE) değerini aşıyorsa pozisyon açmayan (veya lotu küçülten) bir kapı ekleyin. Metindeki kod örneğine bakabilirsiniz.

S: En az ne kadar sermaye ile zorlanmadan başlanabilir?

100.000 Yen (≈670 dolar) standart hesapta minimum 0,01 lottan başlamak, zorlamasız bir eşiktir. Bundan daha az sermayeniz varsa veya daha güvenli işlem yapmak istiyorsanız cent (mikro) hesap kullanmak, minimum lotta bile gerçek maruziyeti küçültüp ERR_NO_MONEY hatasından kaçınmayı kolaylaştırır.

📧 Ücretsiz e-posta kursu (8 e-posta) + abonelere özel 13 MT5 göstergesi paketi

* Gizlilik kesinlikle korunur. İstediğiniz zaman abonelikten çıkabilirsiniz.

EA'lar veya Forex hakkında bir sorunuz mu var?

Sorunuzu Nattzy'nin trading forumunda paylaşabilirsiniz (ücretsiz kayıt). Bu yazının dışındaki sorular da olur — EA ayarları, aracı kurum seçimi ve daha fazlası.

Nattzy'de sor ↗

Yorumlar ve sorular