Unsupported Filling Mode (MT5 Hata 10030)
İçindekiler
- 10030 (TRADE_RETCODE_INVALID_FILL) Nedir
- Doldurma Yöntemlerinin (type_filling) 4 Türü
- Neden "Geçersiz" Oluyor — SYMBOL_FILLING_MODE
- Neden "Broker Değiştirdiğiniz Gün" Ortaya Çıkıyor
- Yürütme Modu (SYMBOL_TRADE_EXEMODE) ile İlişkisi
- Önce 30 Saniyede Yapılabilecek Ayrım
- ① Sembolün İzin Verdiği Yöntemi Görme (MT5 Ekranı)
- ② EA'nın Giriş Parametrelerine Bakma
- ③ Kodla Kontrol Etme (Geliştiriciler İçin)
- Kalıcı Çözüm — İzin Bayraklarını Okuyup Otomatik Seçim Yapan MQL5 Kodu
- Otomatik Tespit Fonksiyonu
- OrderSend ile Kullanımı
- CTrade Kullanıyorsanız
- Limit Emirlerde (BOC) Kullanım Uyarısı
- Broker ile İlgili Dikkat Edilecekler (Geçiş Sırasında Yeniden Kontrol)
- Öncelik Kontrol Listesi
- Özet
- Sık Sorulan Sorular
- S: Dün çalışan EA'm, brokeri değiştirdikten sonra 10030 hatasıyla hiç emir gönderemiyor. EA mı bozuldu?
- S: FOK ile IOC'den hangisini kullanmalıyım?
- S: Backtest'te hiç çıkmıyor ama gerçek hesapta 10030 alıyorum.
- S: Aynı brokerde bazı sembollerde 10030 alıyorum, bazılarında almıyorum.
- S: EA kodunu düzenleyemiyorum (yalnızca .ex5 dosyası var). Ne yapmalıyım?
Unsupported Filling Mode (MT5 Hata Kodu 10030) İçin Kesin Çözüm
Dün başka bir brokerde sorunsuz çalışan bir EA'yı yeni hesaba taşıdığınız anda Expert sekmesinde Unsupported filling mode veya OrderSend error 10030 mesajlarının art arda görünmesi ve tek bir emrin bile gönderilememesi — bu, MT5'te EA kullanırken karşılaşılan en klasik broker geçiş sorunlarından biridir. EA bozulmamıştır, hesapta da bir sorun yoktur. Sorun sadece şudur: emrin "doldurma yöntemi" (filling mode) ayarı, yeni brokerin ilgili sembolünde izin verilen bir yöntem değildir.
Bu makale, hem MT5'te EA kullananlar hem de MQL5 ile EA yazanlar için TRADE_RETCODE_INVALID_FILL (10030) hatasının ne olduğunu, FOK/IOC/RETURN'ün anlamını, 30 saniyede yapılabilecek kontrolü ve kod tarafında kalıcı çözümü tek bir yazıda toplayan kapsamlı bir rehberdir. Hata kodlarının tamamı için MQL5 / MT5 Hata Kodları Çözüm Rehberi yazısına bakabilirsiniz.
Bu makale, 2026 yılı Temmuz ayı itibarıyla MT5 (build 4xxx serisi) baz alınarak hazırlanmıştır. Ekran isimleri ve ifadeler brokere ve build sürümüne göre az da olsa farklılık gösterebilir.
10030 (TRADE_RETCODE_INVALID_FILL) Nedir
OrderSend() fonksiyonunun sonucu MqlTradeResult.retcode alanına yazılır. Buraya dönen 10030 = TRADE_RETCODE_INVALID_FILL, "istekte belirtilen type_filling (doldurma yöntemi) bu sembol için desteklenmiyor" anlamına gelen sunucu tarafından gelen bir ret bildirimidir.
Anlam : Belirtilen doldurma yöntemi (filling type) desteklenmiyor
Sabit : TRADE_RETCODE_INVALID_FILL
Değer : 10030
Görünüm: Unsupported filling mode / Invalid order filling type
// Logda görülebilecek tipik çıktı örneği
2026.07.07 09:15:32.441 EA_NAME EURUSD,M15: OrderSend error 10030
2026.07.07 09:15:32.441 EA_NAME EURUSD,M15: failed market buy 0.10 EURUSD [Unsupported filling mode]
Önemli olan nokta şu: bakiye, lot veya fiyatla hiçbir ilgisi yoktur. 10030, isteğin içindeki yalnızca MqlTradeRequest.type_filling alanıyla ilgili bir sorundur; bu alan düzeltildiğinde aynı emir sorunsuz geçer.
Doldurma Yöntemlerinin (type_filling) 4 Türü
MQL5'teki ENUM_ORDER_TYPE_FILLING numaralandırmasında 4 değer bulunur.
| Sabit | Yaygın Adı | Anlamı |
|---|---|---|
ORDER_FILLING_FOK | Fill or Kill | Yalnızca emrin tamamı karşılanabiliyorsa uygulanır. 1 lotluk emir için sadece 0,7 lotluk likidite varsa emrin tamamı iptal edilir |
ORDER_FILLING_IOC | Immediate or Cancel | Karşılanabilen kısım anında uygulanır, kalan kısım iptal edilir. 0,7 lot dolar, 0,3 lot iptal olur |
ORDER_FILLING_RETURN | Return | Karşılanabilen kısım uygulanır, kalan miktar emir olarak defterde bekler (sonra ek doldurma beklenir). Borsa tipi (Exchange) uygulamalarda kullanılır |
ORDER_FILLING_BOC | Book or Cancel | Yalnızca emir defterine pasif olarak eklenebiliyorsa kabul edilir; anında karşılanacak bir fiyat verilirse reddedilir. Yalnızca limit/stop-limit emirleri içindir (daha yeni build'lerde eklendi) |
Genel bir forex EA'sında pratikte kullanılan yöntemler neredeyse tamamen FOK veya IOC'dur. RETURN, hisse senedi ve vadeli işlemler gibi borsa tipi (Exchange execution) uygulamalarda anlam kazanır; BOC ise pasif (maker) emir zorlamak için özel bir kullanım alanıdır.
Neden "Geçersiz" Oluyor — SYMBOL_FILLING_MODE
Hangi doldurma yönteminin kabul edileceği, brokerin her sembol için ayrı belirlediği bir bayrakla (SYMBOL_FILLING_MODE) belirlenir. MQL5'ten şu şekilde okunabilir.
long flags = SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE);
// SYMBOL_FILLING_FOK bayrağı varsa FOK kullanılabilir
// SYMBOL_FILLING_IOC bayrağı varsa IOC kullanılabilir
SYMBOL_FILLING_MODE bir bit bayrağıdır ve FOK ile IOC'nin izin durumunu içerir (ikisi de izinliyse iki bayrak da açık olur). RETURN bu bayrağa dahil değildir; kullanılıp kullanılamayacağı sembolün yürütme moduna (aşağıda anlatılıyor) bağlıdır.
Yani 10030'un yapısı çok basittir:
EA'nın gönderdiği type_filling ∉ o sembol için izin verilen doldurma yöntemleri → 10030
Hepsi bu kadar.
Neden "Broker Değiştirdiğiniz Gün" Ortaya Çıkıyor
10030'un "klasik broker geçiş hatası" olarak anılmasının nedeni şudur:
- İzin verilen doldurma yöntemleri brokerden brokere, sembolden sembole değişir. Bir broker forex sembollerinde yalnızca FOK'a izin verirken, başka bir broker yalnızca IOC'ye, bir başkası ise her ikisine de izin verebilir. Aynı brokerde bile forex ile CFD/hisse senedi arasında ayar farkı olması yaygındır.
- Birçok EA, type_filling değerini kodun içine sabit olarak yazar. Örneğin
request.type_filling = ORDER_FILLING_FOK;şeklinde yazılmış bir EA, FOK'a izin veren A brokerinde yıllarca sorunsuz çalışır. Geliştiricinin ortamında çalıştığı için bu durum bir hata olarak fark edilmeden dağıtılır. - Geçilen B brokeri FOK'a izin vermiyorsa, ilk emirden itibaren tüm işlemler başarısız olur. Bu durum genellikle backtest'te ortaya çıkmaz (test motorunun davranışı gerçek sunucudan daha toleranslıdır) ve sorun ancak "gerçek hesaba geçilen gün" fark edilir.
Yani 10030 aslında EA'nın bir hatasından çok, "ortam varsayımının sabit kodlanmış olmasının" ortaya çıkmasıdır. Tersinden bakıldığında, sembolün izin bayrağını okuyup dinamik olarak seçim yapacak şekilde düzeltilen bir EA, hangi brokerde olursa olsun çalışır hale gelir (kod aşağıda).
Yürütme Modu (SYMBOL_TRADE_EXEMODE) ile İlişkisi
Sembollerde doldurma yönteminden ayrı olarak bir de yürütme modu vardır ve bu, hangi doldurma yönteminin anlam taşıdığını etkiler.
| Yürütme Modu | Sabit | Tipik Kullanım | Doldurma Yöntemi Eğilimi |
|---|---|---|---|
| Instant | SYMBOL_TRADE_EXECUTION_INSTANT | Bazı forex brokerleri (çoğunlukla DD tipi) | Belirtilen fiyattan yürütme. FOK/IOC + requote dünyası |
| Market | SYMBOL_TRADE_EXECUTION_MARKET | Çoğu forex/CFD (NDD tipi) | Piyasa emri yürütme. FOK veya IOC (broker ayarına bağlı) |
| Exchange | SYMBOL_TRADE_EXECUTION_EXCHANGE | Hisse senedi, vadeli işlemler | Emir defterine iletilen yürütme. Temelde RETURN |
| Request | SYMBOL_TRADE_EXECUTION_REQUEST | Eski (legacy) | İstek tabanlı yürütme (günümüzde nadir) |
Kesin izin kombinasyonları brokerin sunucu ayarına bağlı olsa da, pratikte "forex/CFD'de Market yürütme varsa FOK veya IOC, borsa tipi enstrümanlarda ise RETURN" bilgisi yeterlidir. Yürütme modu da SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE) ile kontrol edilebilir.
Önce 30 Saniyede Yapılabilecek Ayrım
① Sembolün İzin Verdiği Yöntemi Görme (MT5 Ekranı)
Piyasa İzleme → Sembole sağ tıklayın → Özellikler (Specification) penceresini açın ve "Doldurma" (Filling) satırına bakın. Fill or Kill / Immediate or Cancel / ikisi birden, şeklinde gösterilir. Burada yazılı olmayan bir yöntemi EA gönderiyorsa 10030 kesinleşir.
② EA'nın Giriş Parametrelerine Bakma
İyi tasarlanmış EA'larda genellikle FillingType / Filling Mode gibi bir giriş parametresi bulunur. Varsa, ①'de tespit edilen izin verilen yönteme göre bu parametreyi değiştirmek yeterlidir (kod düzenlemesi gerekmez).
③ Kodla Kontrol Etme (Geliştiriciler İçin)
long flags = SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE);
PrintFormat("%s filling: FOK=%s IOC=%s exemode=%d",
_Symbol,
((flags & SYMBOL_FILLING_FOK) != 0) ? "yes" : "no",
((flags & SYMBOL_FILLING_IOC) != 0) ? "yes" : "no",
(int)SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE));
Bunu bir script olarak çalıştırdığınızda, ilgili broker ve sembolün gerçek izin durumu tek satırda görüntülenir.
Kalıcı Çözüm — İzin Bayraklarını Okuyup Otomatik Seçim Yapan MQL5 Kodu
10030'un doğru çözümü "her geçişte elle ayarlamak" değil, EA'nın kendisinin sembolün izin bayrağını okuyup otomatik seçim yapmasını sağlamaktır. Aşağıda doğrudan kullanılabilecek standart bir uygulama verilmiştir.
Otomatik Tespit Fonksiyonu
// O sembol için gerçekten izin verilen doldurma yöntemini döndürür
// Öncelik sırası: FOK → IOC → RETURN (borsa tipi için yedek seçenek)
ENUM_ORDER_TYPE_FILLING GetFillingMode(const string symbol)
{
long flags = SymbolInfoInteger(symbol, SYMBOL_FILLING_MODE);
if((flags & SYMBOL_FILLING_FOK) != 0)
return ORDER_FILLING_FOK; // Yalnızca tamamı karşılanabildiğinde uygula (kısmi doldurma yok)
if((flags & SYMBOL_FILLING_IOC) != 0)
return ORDER_FILLING_IOC; // Karşılanabilen kısmı uygula, kalanını iptal et
return ORDER_FILLING_RETURN; // Bayrak yoksa borsa tipi vb. RETURN ile gönder
}
OrderSend ile Kullanımı
MqlTradeRequest req; MqlTradeResult res;
ZeroMemory(req); ZeroMemory(res);
req.action = TRADE_ACTION_DEAL;
req.symbol = _Symbol;
req.volume = lots;
req.type = ORDER_TYPE_BUY;
req.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
req.deviation = 20;
req.magic = MagicNumber;
req.type_filling = GetFillingMode(_Symbol); // ← sabit kodlama yok
if(!OrderSend(req, res) || res.retcode != TRADE_RETCODE_DONE)
{
if(res.retcode == TRADE_RETCODE_INVALID_FILL) // 10030
PrintFormat("Unsupported filling mode: sent=%d, allowed flags=%d",
(int)req.type_filling,
(int)SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE));
else
PrintFormat("OrderSend failed: retcode=%d", res.retcode);
}
Bu sayede hem yalnızca FOK'a izin veren hem de yalnızca IOC'ye izin veren brokerlerde aynı binary dosya sorunsuz çalışır. Her geçişte elle müdahale gerekmez.
CTrade Kullanıyorsanız
Standart kütüphanedeki CTrade sınıfında, sembolün izin bayraklarına göre doldurma yöntemini otomatik ayarlayan SetTypeFillingBySymbol() fonksiyonu bulunur.
#include <Trade/Trade.mqh>
CTrade trade;
int OnInit()
{
trade.SetExpertMagicNumber(MagicNumber);
trade.SetTypeFillingBySymbol(_Symbol); // İzin bayraklarını okuyup otomatik ayarlar
return INIT_SUCCEEDED;
}
Eski yazım şekli olan trade.SetTypeFilling(ORDER_FILLING_FOK); (sabit kodlama) nedeniyle 10030 alan EA'larda, bu satırı yukarıdaki gibi değiştirmek sorunu çözer. Manuel olarak belirtmek isterseniz, yukarıdaki GetFillingMode() fonksiyonunun sonucunu SetTypeFilling() içine vermek de aynı etkiyi sağlar.
Limit Emirlerde (BOC) Kullanım Uyarısı
ORDER_FILLING_BOC (Book or Cancel) yalnızca limit ve stop-limit emirleri içindir; anında karşılanacak bir fiyat belirtildiğinde reddedilir. Piyasa emirlerinde kullanmak hatalıdır, bu yüzden piyasa emri kullanan EA'larda BOC'yi seçenekler arasına dahil etmeye gerek yoktur.
Broker ile İlgili Dikkat Edilecekler (Geçiş Sırasında Yeniden Kontrol)
- Doldurma yöntemi izin ayarları yalnızca brokerden brokere değil, aynı brokerin içinde bile sembol (enstrüman grubu) bazında farklılık gösterir. Forex'te IOC'ye izin verilse bile hisse senedi CFD'lerinde yalnızca RETURN'e izin verilmesi olağandır.
- Hesap tipi veya sunucu değişikliğinde de ayarlar değişebilir. Yalnızca broker değişiminde değil, aynı brokerde sunucu taşınması, hesap tipi değişikliği veya sembol özelliklerinde yapılan güncellemeler sonrasında da aniden 10030 hatası ortaya çıkabilir.
- Bu nedenle işletim kuralı olarak, "hesap, sunucu veya sembolden herhangi biri değiştiğinde, özellikler ekranından (veya script ile) doldurma yöntemini yeniden kontrol et" alışkanlığını edinmek en güvenli yoldur. Otomatik tespit kodu eklenmiş bir EA'da bu kontrolün kendisine gerek kalmaz.
Belirli bir brokerin "bu sembol yalnızca FOK'a izin verir" gibi bilgileri sunucu ayarı değişiklikleriyle güncelliğini yitirdiği için bu makalede bu tür bilgiler sıralanmamıştır. Mutlaka kendi hesabınızın sembol özelliklerinden kontrol edin.
Öncelik Kontrol Listesi
| Öncelik | Kontrol | Çözüm |
|---|---|---|
| 🚨 Önce | Sembol özelliklerindeki "Doldurma" alanı ile EA'nın gönderdiği değer uyuşuyor mu | İzin verilen yönteme göre ayarlayın |
| 🚨 Önce | EA'da FillingType girişi var mı | Yalnızca giriş değişikliğiyle çözülür (kod gerekmez) |
| ⚠️ Sonra | EA kodunda type_filling sabit kodlanmış mı | GetFillingMode() / SetTypeFillingBySymbol() ile değiştirin |
| ⚠️ Sonra | Broker geçişi, sunucu değişikliği veya hesap tipi değişikliği yapıldı mı | Değişiklik sonrası özellikleri mutlaka yeniden kontrol edin |
| ✅ Kontrol | Yürütme modu (Instant/Market/Exchange) farkı | Borsa tipi enstrümanlarda RETURN esastır |
| 🛠 Geliştirme | 10030 retcode'u ayrı olarak ele alınıyor mu | Gönderilen yöntem ve izin bayraklarını loglayın |
Özet
Unsupported filling mode(10030 / TRADE_RETCODE_INVALID_FILL), emrintype_fillingdeğerinin (FOK / IOC / RETURN / BOC) o sembol için izin verilmemesi durumunda sunucu tarafından yapılan bir reddir. Bakiye ve lotla ilgisi yoktur.- İzin verilen yöntemler brokerden brokere, sembolden sembole değiştiği için, type_filling'i sabit kodlayan EA'lar broker geçişi yapılan gün topluca 10030 hatası verir. Bu, bu hatanın tipik senaryosudur.
- Kullanıcılar için "sembol özelliklerindeki doldurma alanı → EA'nın giriş parametresini değiştirme" yoluyla anında çözülür. Geliştiriciler için ise
SymbolInfoInteger(SYMBOL_FILLING_MODE)bayraklarını okuyup otomatik seçim yapmak (veyaCTrade::SetTypeFillingBySymbol()kullanmak) kalıcı çözüm sağlar.
Hata kodlarının tamamı için MQL5 / MT5 Hata Kodları Çözüm Rehberi yazısına bakabilirsiniz. FXEA365'in dağıttığı EA'lar doldurma yöntemini otomatik tespit edecek şekilde tasarlanmıştır ve brokerden bağımsız olarak çalışır (EA Listesi).
Sık Sorulan Sorular
S: Dün çalışan EA'm, brokeri değiştirdikten sonra 10030 hatasıyla hiç emir gönderemiyor. EA mı bozuldu?
Hayır, EA bozulmamıştır. EA'nın belirttiği doldurma yöntemi (örneğin FOK), yeni brokerin ilgili sembolünde desteklenmiyor demektir. Sembol özelliklerindeki "Doldurma" alanını kontrol edin ve EA'nın giriş parametresini (FillingType vb.) buna göre ayarlayın veya kod tarafını otomatik tespit yapacak şekilde düzenleyin; EA eskisi gibi çalışmaya devam eder.
S: FOK ile IOC'den hangisini kullanmalıyım?
Sembol her ikisine de izin veriyorsa, davranış farkı "yeterli likidite olmadığında" ortaya çıkar. FOK, emrin tamamı karşılanamıyorsa emri tamamen iptal eder (yarım kalan pozisyon oluşmaz); IOC ise karşılanabilen kısmı pozisyon olarak açık bırakır (kısmi doldurma yaşanabilir). Bireysel forex işlemlerindeki lot büyüklüklerinde likidite yetersizliği zaten nadir olduğundan, pratikte ikisi arasında büyük bir fark yoktur. Otomatik tespit kodundaki gibi FOK'u öncelikli tutmak yeterlidir.
S: Backtest'te hiç çıkmıyor ama gerçek hesapta 10030 alıyorum.
Strateji test motorunun doldurma işlemi, gerçek sunucu ayarlarını birebir yansıtmadığından, type_filling uyuşmazlığı testte ortaya çıkmayabilir. Gerçek veya demo hesapta ilk çalıştırmada, öncelikle sembol özelliklerindeki doldurma alanını kontrol edin.
S: Aynı brokerde bazı sembollerde 10030 alıyorum, bazılarında almıyorum.
Bu normal (beklenen) bir davranıştır. Doldurma yöntemi izinleri sembol bazında ayarlandığı için, forex paritelerinde IOC'ye izin verilirken hisse senedi CFD'lerinde yalnızca RETURN'e izin verilmesi gibi enstrüman grubuna göre farklılıklar olabilir. Çoklu sembol kullanan EA'lar her sembol için mutlaka ayrı ayrı SYMBOL_FILLING_MODE okumalıdır.
S: EA kodunu düzenleyemiyorum (yalnızca .ex5 dosyası var). Ne yapmalıyım?
Öncelikle EA'nın giriş parametrelerinde FillingType benzeri bir alan olup olmadığını kontrol edin. Yoksa, o EA mevcut brokerin ilgili sembolünde kullanılamaz demektir. Geliştiriciden düzeltme talep edin veya EA'nın varsaydığı doldurma yöntemine izin veren bir broker/hesap tipiyle çalışmanız gerekir.
İ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.