Market Closed (10018 / Hata 132) Sorununun Kesin Çözümü
İçindekiler
- Market Closed Nedir (10018 ve 132 Arasındaki Fark)
- ① TRADE_RETCODE_MARKET_CLOSED = 10018 (MT5 / `OrderSend()` dönüş kodu)
- ② ERR_MARKET_CLOSED = 132 (MT4 / MQL4 `GetLastError()`)
- Önce 30 Saniyede Yapılabilecek Teşhis
- Nedenler ve Çözümler (6 Farklı Durum)
- ① Hafta Sonu/Resmi Tatilde Piyasanın Tamamı Kapalı
- ② Sembole Özel İşlem Seansı Dışı (Günlük Mola)
- ③ Sunucu Saati ile Yerel Saatin Karıştırılması
- ④ Sembol İşleme Kapalı/Sadece Kapatma (SYMBOL_TRADE_MODE)
- ⑤ Pazartesi Açılışı Hemen Sonrası / Seans Yeniden Başladığı An
- ⑥ Haber/Olay Kaynaklı İşlem Durması
- MQL5'te Bu Hatayı Önleyen Kod (EA Geliştiricileri İçin)
- İşlem Seansı İçinde Olup Olmadığını Kontrol Etme
- İşlem Modunu (SYMBOL_TRADE_MODE) Kontrol Etme
- Emir Öncesi Kontrol Kapısı Olarak Birleştirme
- Yine de 10018 Dönerse Yapılacaklar
- Öncelik Kontrol Listesi
- Özet
- SSS
- S: Hafta içi gündüz saatinde Market closed hatası alıyorum. Neden?
- S: 10018 ile 132 arasındaki fark nedir?
- S: EA hafta sonu sürekli hata veriyor. Böyle bırakmak sorun olur mu?
- S: Kripto para (BTCUSD) için de Market closed hatası aldım. 7/24 işlem görmüyor mu?
Market Closed (MT5/MQL5) Sorununun Kesin Çözümü
EA'nızın loglarında Market closed veya market is closed hatası çıktığında, "hafta sonu olduğu için normal" açıklaması sadece yarısını kapsar. Hafta içi gündüz saatlerinde çıkması, ya da diğer sembollerde emirler normal şekilde gerçekleşirken sadece belirli bir sembolde çıkması — pek çok kişinin takıldığı asıl kalıp budur.
Neden sadece "hafta sonu" değildir; sembole özel işlem seansları (altın veya endekslerdeki günlük mola), broker sunucu saati ile sizin yerel saatiniz arasındaki fark, sembolün işlem modu kısıtlaması (close-only vb.) gibi birden fazla etken söz konusudur. Bu yazı, hem MT5'te EA kullananlara hem de MQL5 ile EA yazanlara yönelik olarak Market closed hatasının ne olduğunu, 6 nedenini, 30 saniyede yapılabilecek teşhisi ve kod tarafında kalıcı önlemi ele alan kapsamlı bir rehberdir. Hata kodlarının tamamı için MQL5 / MT5 Hata Kodları Kapsamlı Çözüm Rehberi yazısına bakabilirsiniz.
Bu yazı 2026 Temmuz itibarıyla MT5 (build 4xxx serisi) baz alınarak hazırlanmıştır. Seans saatleri ve ekran isimleri broker ve build'e göre değişebilir.
Market Closed Nedir (10018 ve 132 Arasındaki Fark)
"Piyasa kapalı" anlamına gelen kod, MT5 ile MT4'te (MQL4) farklıdır. Hangi platformu kullandığınıza ve değeri nereden aldığınıza göre okumalısınız.
① TRADE_RETCODE_MARKET_CLOSED = 10018 (MT5 / OrderSend() dönüş kodu)
MQL5'te gönderilen OrderSend() sonucu MqlTradeResult.retcode içinde döner. İşlem sunucusu "bu sembol şu anda işlem saatleri dışında" diye değerlendirip emri reddettiğinde dönen kod 10018'dir. Bu MT5'in kendi iç hatası değil, broker sunucusundan gelen bir red bildirimidir.
Anlamı: Piyasa kapalı (Market is closed)
Sabit : TRADE_RETCODE_MARKET_CLOSED
Değer : 10018
// Logda görülen tipik çıktı örneği
2026.07.06 23:05:11.204 EA_NAME XAUUSD,M5: OrderSend error 10018 [Market closed]
② ERR_MARKET_CLOSED = 132 (MT4 / MQL4 GetLastError())
MT4'te (MQL4) OrderSend() başarısız olduğunda GetLastError() 132 değerini döner. Anlamı 10018 ile aynıdır: "piyasa kapalı". MT4 versiyonunu da paralel kullanıyorsanız, aynı neden MT5'te 10018, MT4'te 132 olarak karşınıza çıkar.
Anlamı: Piyasa kapalı (Market is closed)
Sabit : ERR_MARKET_CLOSED (MQL4)
Değer : 132
Pratik kullanım farkı:
| Platform | Kaynak | Değer |
|---|---|---|
| MT5 (MQL5) | MqlTradeResult.retcode / CTrade.ResultRetcode() | 10018 |
| MT4 (MQL4) | OrderSend() başarısızlığı sonrası GetLastError() | 132 |
Her ikisinin de kök nedeni ortaktır: "Sunucunun işlem seansı dışında emir gönderildi" (veya sembolün işlemi kısıtlanmıştır). Çözümü de ortak olduğundan aşağıda birlikte ele alıyoruz.
Önce 30 Saniyede Yapılabilecek Teşhis
EA'yı gelişigüzel yeniden başlatmadan önce şu 4 noktaya bakarak nedeni büyük ölçüde tespit edebilirsiniz.
- Sembolün işlem seansına bakın — Piyasa gözlem penceresinde (Market Watch) ilgili sembole sağ tıklayın → "Özellikler (Specification)" → "İşlem Seansları". Her gün için (sunucu saatiyle) işlem yapılabilir saatler burada yazılıdır. Şu anki saat bu aralığın dışındaysa, cevap budur.
- Sunucu saatini kontrol edin — Piyasa gözlem penceresinin üst kısmında görünen saat broker'ın sunucu saatidir. Seans kontrolü PC saatinize göre değil bu saate göre yapılır. Türkiye saatinden genellikle birkaç saat farklıdır.
- İşlem modunu kontrol edin — Aynı "Özellikler" ekranındaki "İşlem" alanı
Full accessdışında bir değerde mi (Disabled/Close onlyvb.)? Öyleyse seans içinde olsa bile yeni emirler reddedilir. - Başka bir sembolle deneyin — EURUSD gibi başlıca bir forex paritesinde aynı EA/manuel emir sorunsuz geçiyorsa, sorun hesap veya EA'da değil, o sembole özel seans/kısıtlamadadır.
Nedenler ve Çözümler (6 Farklı Durum)
① Hafta Sonu/Resmi Tatilde Piyasanın Tamamı Kapalı
Belirti: Cumartesi, Pazar veya yılbaşı/Noel gibi günlerde hata çıkar. Tüm sembollerde görülür.
Neden: Forex piyasaları genel olarak sunucu saatiyle Cuma kapanışından Pazartesi açılışına kadar işlem yapılamaz. Resmi tatillerde (Yılbaşı, Noel vb.) hafta içi olsa bile piyasa kapalı ya da kısaltılmış işlem saatleri geçerlidir. EA, bar sonu işlemleri veya zaman dilimi mantığı nedeniyle hafta sonu da emir göndermeye çalışırsa 10018/132 hataları art arda gelir.
Çözüm:
- Hatanın kendisi zararsızdır. Piyasa açılınca kendiliğinden sona erer
- Logları temiz tutmak istiyorsanız, EA tarafında gün/seans kontrolü ekleyerek emri baştan göndermeyin (aşağıdaki koda bakın)
- Tatil takvimi broker'a göre değiştiğinden, broker'ın piyasa kapanış duyurularını takip edin
② Sembole Özel İşlem Seansı Dışı (Günlük Mola)
Belirti: Hafta içi olmasına rağmen belirli bir sembolde (altın, gümüş, endeks CFD'leri, enerji vb.) hata çıkar. Genelde her gün neredeyse aynı saatlerde görülür.
Neden: Forex pariteleri hafta içi neredeyse 24 saat işlem görebilirken, kıymetli madenler ve endeks CFD'lerinde her gün birkaç on dakikadan birkaç saate kadar süren işlem molaları (günlük mola) vardır. Bu, dayanak varlığın borsa bakımı veya rollover işlemleriyle ilgilidir ve saat aralığı broker ve sembole göre değişir. Bu mola aralığında EA emir gönderirse 10018 hatası oluşur.
Çözüm:
- "Özellikler → İşlem Seansları" bölümünden o sembolün kesin mola saatlerini kontrol edin (buradaki saatler tek doğru kaynaktır — başka bir blogda yazan saatleri körü körüne kullanmayın, çünkü broker'a göre değişir)
- EA'nın zaman filtresiyle (
TradeStartHour/TradeEndHourvb.) mola aralığından kaçının - Geliştiriciler kod tarafında
SymbolInfoSessionTrade()fonksiyonunu kontrol etmelidir (aşağıda anlatılıyor)
Ayrıca, kripto paralar (BTCUSD vb.) hafta sonu da işlem görebilen broker'lar çoğunluktadır, ancak bu da broker'a bağlıdır. "Kripto olduğu için 7/24 işlem görür" diye varsaymayın, özellikler ekranından kontrol edin.
③ Sunucu Saati ile Yerel Saatin Karıştırılması
Belirti: "Özelliklerdeki seans saatine göre işlem saatinin içindeyim" düşünülürken hata çıkar. Yurt dışı broker kullanımında sıkça rastlanır.
Neden: Özelliklerde yazan seans saati de, MT5'in gösterdiği saat de tamamen broker'ın sunucu saatidir. Pek çok yurt dışı broker GMT+2/+3 kullanır (NY kapanışının gece yarısına denk geldiği ayar) ve Türkiye saatinden 5-6 saat kadar farklıdır. Türkiye saatiyle "henüz Cuma akşamı" olsa bile, sunucu saatiyle çoktan Cumartesi olabilir — bu tipik bir kaymadır.
Çözüm:
- Piyasa gözlem penceresindeki saati (=sunucu saati) esas alma alışkanlığı edinin
- EA parametreleri (işlem saati filtresi vb.) genellikle sunucu saatine göre ayarlanır. Türkiye saatine göre girmediğinizden emin olun
- Kodda
TimeTradeServer()kullanın (seans kontrolünüTimeLocal()ile yapmayın)
④ Sembol İşleme Kapalı/Sadece Kapatma (SYMBOL_TRADE_MODE)
Belirti: Seans saatleri içinde ve hafta içi olmasına rağmen, sadece belirli bir sembolde yeni emirlerin tümü reddedilir. Bazen sadece pozisyon kapatma işlemi geçer.
Neden: Broker'lar sembol bazında işlem modunu ayarlayabilir.
| SYMBOL_TRADE_MODE | Anlamı |
|---|---|
SYMBOL_TRADE_MODE_FULL | Kısıtlama yok (normal) |
SYMBOL_TRADE_MODE_CLOSEONLY | Sadece kapatma mümkün (yeni emir yok). Listeden çıkarılacak veya vade değişimi öncesi CFD'lerde vb. |
SYMBOL_TRADE_MODE_DISABLED | İşlem tamamen kapalı |
SYMBOL_TRADE_MODE_LONGONLY / SHORTONLY | Sadece alış/sadece satış mümkün |
Demo hesap ile gerçek hesap ayarları farklı olabilir, hesap türüne göre işlem yapılabilen semboller de değişebilir.
Çözüm:
- "Özellikler" ekranındaki "İşlem" alanını kontrol edin
Close onlydurumundaysa yeni emirden vazgeçip pozisyonu düzenleyin. O sembolü kalıcı olarak kullanmak istiyorsanız, aynı isimli farklı vadeli sembol veya farklı ek uzantılı sembol (örn.US500.fvb.) olup olmadığını kontrol edinDisableddurumu devam ediyorsa, o hesap türünde işlem yapılıp yapılamayacağını broker'a sorun
⑤ Pazartesi Açılışı Hemen Sonrası / Seans Yeniden Başladığı An
Belirti: Pazartesi piyasa açılışından sonraki birkaç dakika, ya da günlük mola bittikten hemen sonra hata veya emir reddi görülür.
Neden: Seansın "açılması" ile fiilen istikrarlı şekilde emir gerçekleşmesi arasında bir boşluk vardır. Açılış hemen sonrasında likidite düşük ve spread aşırı genişlemiş olabilir; bazı broker'lar kotasyon akmaya başlayana kadar emir kabul etmeyebilir (=piyasa kapalı muamelesiyle reddeder). Pazartesi sabahı ilk sinyali veren EA'lar, mola sonrasını hedefleyen altın EA'ları tipik olarak bu duruma takılır.
Çözüm:
- Açılıştan sonraki X dakika boyunca yeni emri erteleyen bir filtre ekleyin (
AvoidMondayOpenvb.). Sitemizde dağıtılan EA'ların varsayılan olarak Pazartesi 0-3 saatleri (sunucu saati) arasını atlaması bu yüzdendir - Spread filtresini (
MaxSpread) mutlaka birlikte kullanın. Açılış hemen sonrasındaki anormal spreadle gerçekleşen emir, hatadan çok zarar olarak geri döner - 10018 hatası alındığında hemen yeniden denemeyin, bir sonraki barı bekleyin şeklinde tasarlayın
⑥ Haber/Olay Kaynaklı İşlem Durması
Belirti: Önemli veri açıklamaları öncesi/sonrası veya bir sembolde olağandışı hareket sırasında geçici olarak hata alınır.
Neden: Bazı broker'lar ve semboller, kritik olaylarda işlemi geçici olarak durdurabilir (halt) veya yeni emirleri kısıtlayabilir. Endeks CFD'lerinde dayanak piyasadaki devre kesici (circuit breaker) mekanizmasına bağlı olarak durma yaşanabilir. Bu süre içindeki emirler piyasa kapalı türü red alır.
Çözüm:
- Geçici bir durum olduğundan, zaman geçtikçe kendiliğinden çözülür
- Ekonomik veri filtresiyle (sitemizdeki EA'ların
UseEconomicFilterözelliği) veri öncesi/sonrasında yeni emri durdurmak, hem hatayı önler hem de ani hareket riskinden korur
MQL5'te Bu Hatayı Önleyen Kod (EA Geliştiricileri İçin)
Market closed hatasına "hata çıktıktan sonra tepki vermek" yerine, emir göndermeden önce seans ve işlem modunu kontrol edip, kapalıysa göndermemek doğru tasarımdır. Bu sadece logları temiz tutmakla kalmaz, gereksiz sunucu isteklerini ve kontrolsüz yeniden denemeleri de önler.
İşlem Seansı İçinde Olup Olmadığını Kontrol Etme
SymbolInfoSessionTrade(), belirtilen günün i. seansının başlangıç/bitiş saatlerini (sunucu saatiyle gece yarısından itibaren geçen saniye) döner. Birden fazla seansı olan sembollerde (günlük mola içeren endeksler gibi) tüm seansları döngüyle kontrol ediyoruz.
// Mevcut sunucu saatinin, bu sembolün işlem seansı içinde olup olmadığını belirler
bool IsTradeSessionOpen(const string symbol)
{
MqlDateTime dt;
TimeToStruct(TimeTradeServer(), dt); // Mutlaka sunucu saatine göre kontrol edin
int now = dt.hour*3600 + dt.min*60 + dt.sec; // Gece yarısından itibaren geçen saniye
datetime from, to;
for(uint i = 0; SymbolInfoSessionTrade(symbol, (ENUM_DAY_OF_WEEK)dt.day_of_week, i, from, to); i++)
{
int f = (int)from; // Gece yarısından itibaren geçen saniye
int t = (int)to; // 24:00 bitiş 86400 olarak döner
if(now >= f && now < t)
return true;
}
return false; // Bu güne ait seans yok (hafta sonu vb.) veya tüm seansların dışında
}
İşlem Modunu (SYMBOL_TRADE_MODE) Kontrol Etme
// Yeni emir açmaya izin veren bir işlem modu olup olmadığını belirler
bool IsNewEntryAllowed(const string symbol, ENUM_ORDER_TYPE type)
{
long mode = SymbolInfoInteger(symbol, SYMBOL_TRADE_MODE);
if(mode == SYMBOL_TRADE_MODE_DISABLED) return false; // İşlem kapalı
if(mode == SYMBOL_TRADE_MODE_CLOSEONLY) return false; // Sadece kapatma = yeni emir yok
if(mode == SYMBOL_TRADE_MODE_LONGONLY && type != ORDER_TYPE_BUY) return false;
if(mode == SYMBOL_TRADE_MODE_SHORTONLY && type != ORDER_TYPE_SELL) return false;
return true; // SYMBOL_TRADE_MODE_FULL vb.
}
Emir Öncesi Kontrol Kapısı Olarak Birleştirme
// OnTick içinde: sinyal oluşsa bile, piyasa kapalıysa emir göndermez
if(!IsTradeSessionOpen(_Symbol) || !IsNewEntryAllowed(_Symbol, ORDER_TYPE_BUY))
{
// 10018 hatasını önceden engeller. Tek satır log bırakıp bir sonraki barı bekler
return;
}
Yine de 10018 Dönerse Yapılacaklar
Seans bilgisinin güncellenme zamanlaması veya açılış hemen sonrasındaki redler gibi, bu kontrolden sıyrılan durumları tamamen sıfırlamak mümkün değildir. OrderSend()'in retcode değerine bakarak, 10018 döndüğünde hemen yeniden denememek (bir sonraki barı beklemek) temel kuraldır. Piyasa kapalıyken art arda deneme yapmak sadece logu kirletir, hiçbir şeyi düzeltmez.
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_MARKET_CLOSED) // 10018
Print("Market closed. Skip and wait for the next session.");
else
PrintFormat("OrderSend failed: retcode=%d, lastError=%d", res.retcode, GetLastError());
}
Açıkçası, Pazartesi açılışı hemen sonrasında veya günlük mola öncesi/sonrasında (özellikle altın ve endekslerde) emir gönderen EA'lar bu hatayla sürekli karşılaşır. Zamanlamayı dikkate alan EA'lar — seans kontrolü yapan, açılış hemen sonrasını erteleyen, hafta sonu öncesi kapatma yapan EA'lar — sadece gereksiz hatalardan kaçınmakla kalmaz, likiditesi düşük saatlerdeki kötü emir gerçekleşmelerinden de korunur. FXEA365'in dağıttığı EA'lar, Pazartesi açılışından kaçınma (AvoidMondayOpen), zaman filtresi ve hafta sonu öncesi kapatma (CloseAllBeforeWeekend) özelliklerini standart olarak içerir.
Öncelik Kontrol Listesi
| Öncelik | Kontrol | Çözüm |
|---|---|---|
| 🚨 Önce | Şu an hafta sonu/tatil mi (sunucu saatine göre) | Sadece bekleyin. Hatanın kendisi zararsız |
| 🚨 Önce | Özelliklerdeki "İşlem Seansları" aralığında mı | Sembole özel mola aralığını zaman filtresiyle atlayın |
| ⚠️ Sonra | Sunucu saati ile yerel saat karıştırılıyor mu | Piyasa gözlem penceresindeki saati esas alarak yeniden ayarlayın |
| ⚠️ Sonra | İşlem modu Full access mi | Close only / Disabled ise broker özelliklerini kontrol edin |
| ✅ Kontrol | Açılış hemen sonrası veya mola bitimi hemen sonrası mı | X dakika erteleme + spread filtresi |
| 🛠 Geliştirme | Emir öncesi seans/mod kontrolü yapılıyor mu | SymbolInfoSessionTrade kontrol kapısı uygulayın |
Özet
Market closed, MT5'te 10018 (TRADE_RETCODE_MARKET_CLOSED), MT4'te 132 (ERR_MARKET_CLOSED) olarak görünür. Anlamı aynıdır: "işlem seansı dışında/işlem kısıtlaması altında gönderilen emir".- Sadece hafta sonu değil, sembole özel günlük mola (altın, endeksler), sunucu saati farkı, SYMBOL_TRADE_MODE kısıtlaması ve açılış hemen sonrası red durumlarında da görülür. Hafta içi çıkıyorsa önce "Özellikler → İşlem Seansları"na bakın.
- Seans saatleri broker ve sembole göre değişir. Sadece kendi MT5'inizin özellikler ekranında yazan saat doğrudur.
- EA geliştiricileri,
SymbolInfoSessionTrade()+SYMBOL_TRADE_MODE+TimeTradeServer()ile emir öncesi kontrol kapısı kurarak kalıcı önlem alabilir. 10018 döndüğünde hemen yeniden denemeyip bir sonraki barı bekleyin.
Hata kodlarının tamamı için MQL5 / MT5 Hata Kodları Kapsamlı Çözüm Rehberi yazısına, seans kaçınma ve zaman filtresini standart olarak barındıran ücretsiz EA'lar için EA Listesi sayfasına bakabilirsiniz.
SSS
S: Hafta içi gündüz saatinde Market closed hatası alıyorum. Neden?
Bu sembole özel işlem mola saati (günlük mola) veya sembolün işlem modu kısıtlaması nedeniyle olabilir. Altın, gümüş ve endeks CFD'lerinde hafta içi bile işlem yapılamayan saatler vardır. Piyasa gözlem penceresinde sembole sağ tıklayın → "Özellikler" → "İşlem Seansları" ve "İşlem" alanlarını kontrol edin.
S: 10018 ile 132 arasındaki fark nedir?
Sadece platform farklıdır, anlamı aynıdır. 10018 (TRADE_RETCODE_MARKET_CLOSED) MT5'in OrderSend() dönüş kodudur, 132 (ERR_MARKET_CLOSED) ise MT4'ün (MQL4) GetLastError() değeridir. Çözümü ortaktır.
S: EA hafta sonu sürekli hata veriyor. Böyle bırakmak sorun olur mu?
Gerçek bir zarar yoktur. Piyasa açıldığında kendiliğinden durur. Ancak logların kirlenmesi veya push bildirimlerinin sürekli gelmesi rahatsız ediyorsa, EA tarafına gün/seans kontrolü ekleyerek emir gönderimini baştan atlatmak kalıcı çözümdür (metindeki koda bakın).
S: Kripto para (BTCUSD) için de Market closed hatası aldım. 7/24 işlem görmüyor mu?
Kripto CFD'lerin hafta sonu işlem görüp görmediği broker'a bağlıdır. Bazı broker'lar hafta sonu işlemi durdurur veya kısa bakım molaları uygular. Forex paritelerinde olduğu gibi, "Özellikler → İşlem Seansları" bölümünden kendi broker'ınızdaki gerçek işlem saatlerini kontrol edin.
İlgili
📧 Fiyat artışı öncesi uyarılar + ücretsiz 5 günlük e-posta kursu
Tüm EA'lar lansman fiyatında ve satışlarla birlikte kademeli olarak artıyor. Her artıştan önce bildirim alın; ayrıca algoritmik ticaret, backtest okuma ve broker seçimi üzerine günlük bir e-posta.
* Gizlilik kesinlikle korunur. İstediğiniz zaman abonelikten çıkabilirsiniz.