Turnstile Order Gateway
- Kütüphaneler
- Sürüm: 1.0
- Etkinleştirmeler: 5
Uzman Danışmanınız ile OrderSend arasında duran bir MQL5 kütüphanesi. Her istek gönderilmeden önce 9 kapıdan geçer (bağlantı, Algo Trading, sembol modu, seans, emir tipi bayrakları, hacim, stoplar, teminat, OrderCheck). Dondurma seviyesi, kapalı seans veya kopan bağlantı nedeniyle engellenen kapatma ve değişiklikler kuyruğa alınır ve sonra gönderilir. Kendi başına asla işlem yapmaz. Derlenmiş Turnstile_Order_Gateway.ex5 dosyasını alırsınız; bu sayfa tam API başvurusudur.
Hızlı başlangıç
- Turnstile_Order_Gateway.ex5 dosyasını MQL5/Libraries klasörüne kopyalayın (Dosya > Veri klasörünü aç).
- Aşağıdaki #import bloğunu EA veya betiğinize yapıştırın.
- İsteğe bağlı: OnInit içinde TOG_Configure (varsayılan 20, 3, 300, true, false).
- OnTick veya OnTimer içinde TOG_ProcessQueue çağırın.
- TOG_Open, TOG_Modify, TOG_Close ile işlem yapın. 0 veya false dönerse TOG_ReasonText(TOG_LastReason()) yazdırın.
- Doğrulama: aşağıdaki örneği Strateji Test Cihazında çalıştırın; günlükte bilet ve neden görünür. Canlıda Algo Trading açık olmalı, yoksa kontroller -3 döner.
İçe aktarma bildirimi (kopyalamaya hazır)
#import "Turnstile_Order_Gateway.ex5" void TOG_Configure(int deviation, int retries, int delay_ms, bool adjust_stops, bool verbose); double TOG_NormalizeVolume(string symbol, double volume); double TOG_NormalizePrice(string symbol, double price); double TOG_RiskVolume(string symbol, ENUM_ORDER_TYPE type, double entry, double sl, double risk_money); double TOG_MaxVolume(string symbol, ENUM_ORDER_TYPE type, double share); ENUM_ORDER_TYPE_FILLING TOG_FillingMode(string symbol); int TOG_CheckMarket(string symbol, ENUM_ORDER_TYPE type); int TOG_CheckStops(string symbol, ENUM_ORDER_TYPE type, double price, double sl, double tp); int TOG_CheckFreeze(ulong ticket); int TOG_Preflight(string symbol, ENUM_ORDER_TYPE type, double volume, double price, double sl, double tp); ulong TOG_Open(string symbol, ENUM_ORDER_TYPE type, double volume, double price, double sl, double tp, ulong magic, string comment); bool TOG_Modify(ulong ticket, double price, double sl, double tp); bool TOG_Close(ulong ticket, double volume); int TOG_CloseAll(string symbol, long magic, bool pending); int TOG_ProcessQueue(); int TOG_QueueCount(); void TOG_ClearQueue(); int TOG_LastReason(); uint TOG_LastRetcode(); string TOG_ReasonText(int reason); int TOG_RetcodeClass(uint retcode); int TOG_GetStats(long &stats[]); #import
Neden kodları
TOG_LastReason kodu, TOG_ReasonText büyük harfli metni verir.
- 0 OK; 1 NO CHANGE (aynı değerler, hiçbir şey gönderilmedi); 2 DEFERRED (kuyrukta).
- -1 BAD PARAMETERS: bilinmeyen sembol veya tip, bekleyen emir fiyatı 0, hacim 0.
- -2 NO CONNECTION: bağlantı yok veya kotasyon yok.
- -3 TRADING DISABLED: Algo Trading veya hesap işlemleri kapalı.
- -4 SYMBOL MODE: devre dışı, yalnız kapatma, yalnız alış veya yalnız satış.
- -5 MARKET CLOSED: işlem seanslarının dışında.
- -6 INVALID VOLUME: min/max dışında, adıma uymuyor veya hacim limitinin üstünde.
- -7 INVALID STOPS: SL, TP veya bekleyen fiyat yanlış tarafta ya da stop seviyesinin içinde.
- -8 FREEZE ZONE: fiyat dondurma seviyesinin içinde.
- -9 NO MARGIN: piyasa emrinin teminatı serbest teminattan fazla.
- -10 ORDER TYPE BLOCKED: tip veya SL/TP izinli değil ya da bekleyen emir limiti doldu.
- -11 ORDERCHECK FAILED ve -12 SERVER REJECTED: TOG_LastRetcode bakın.
- -13 TICKET NOT FOUND; -14 QUEUE FULL (256 bekliyor).
API başvurusu
type: ORDER_TYPE_BUY, ORDER_TYPE_SELL, ORDER_TYPE_BUY_LIMIT, ORDER_TYPE_SELL_LIMIT, ORDER_TYPE_BUY_STOP veya ORDER_TYPE_SELL_STOP (stop-limit -1 döner). Fiyatlar mutlaktır; sl veya tp 0 yok demektir.
TOG_Configure
deviation: puan cinsinden kayma, 0 veya fazlası (geçersiz: 20). retries: 0-10 (geçersiz: 3). delay_ms: denemeler arası 0-5000 ms (geçersiz: 300). adjust_stops: true, doğru tarafta ama stop seviyesinin içindeki bir SL/TP'yi en yakın geçerli fiyata artı bir tik taşır (sunucu yine reddederse spread kadar daha); false -7 döner. verbose: engelleri, yeniden denemeleri ve ertelemeleri [TOG] önekiyle günlüğe yazar.
TOG_NormalizeVolume
Hacim adımına aşağı yuvarlar ve maksimumla sınırlar. Minimumun altında, hacim 0 veya bilinmeyen sembolde 0.0.
TOG_NormalizePrice
Tik büyüklüğüne ve basamaklara yuvarlar. Fiyat 0 için 0.0, böylece boş SL 0 kalır.
TOG_RiskVolume
sl seviyesinde risk_money (hesap para birimi) kaybettiren hacim, OrderCalcProfit ile (çapraz kurlar, metaller, endeksler, hisseler için doğru), aşağı yuvarlanmış. entry 0 = alışta Ask, satışta Bid. Minimum hacim bile fazla risk ediyorsa 0.0 ve -6, sl yanlış taraftaysa -7, geçersiz girişte -1.
double lots = TOG_RiskVolume(_Symbol, ORDER_TYPE_BUY, 0, sl, AccountInfoDouble(ACCOUNT_BALANCE) * 0.01);
TOG_MaxVolume
Teminatı serbest teminat x share (0-1, aksi halde 1) içine sığan en büyük geçerli hacim; maksimum ve kalan hacim limiti dahilinde. Minimum bile sığmazsa 0.0 ve -9.
TOG_FillingMode
Piyasa doldurma tipi: izinliyse FOK, değilse IOC, değilse RETURN. Sunucu reddederse TOG_Open otomatik değiştirir.
TOG_CheckMarket
Açılış için kapı 1-4: bağlantı ve kotasyonlar, Algo Trading, bu yön için sembol modu, seans (sunucu saati seans tablosuyla karşılaştırılır; tablo yoksa açık sayılır). 0 veya -1 ile -5 arası döner.
TOG_CheckStops
Piyasa: sl ve tp, Bid (alış) veya Ask (satış) için doğru tarafta ve en az SYMBOL_TRADE_STOPS_LEVEL uzakta olmalı. Bekleyen: fiyat piyasaya göre aynı şekilde, sl ve tp fiyattan ölçülür. 0, -7, -1 veya -2 döner.
TOG_CheckFreeze
Bid (alış) veya Ask (satış) pozisyonun SL veya TP seviyesine SYMBOL_TRADE_FREEZE_LEVEL kadar yakınsa ya da piyasa bekleyen emrin fiyatına o kadar yakınsa -8. Seviye 0 ise 0, bilinmeyen bilette -13.
TOG_Preflight
9 kapının tamamı sırayla, hiçbir şey göndermeden: piyasa kapıları, emir tipi bayrakları ve bekleyen limiti, hacim, stoplar, teminat (piyasa), OrderCheck. İlk hatayı veya 0 döner.
if(TOG_Preflight(_Symbol, ORDER_TYPE_SELL, 0.10, 0, sl, tp) != 0) Print(TOG_ReasonText(TOG_LastReason()));
TOG_Open
Hacim ve fiyatları normalleştirir, açıksa stopları ayarlar, TOG_Preflight çalıştırır ve gönderir. Piyasa emirleri (price 0) requote, fiyat değişimi, zaman aşımı ve bağlantı hatalarında taze fiyatla yeniden dener. Bekleyen emirler GTC, GTC izinli değilse DAY kullanır. Pozisyon biletini (piyasa), emir biletini (bekleyen) veya 0 döner. Asla kuyruğa alınmaz.
TOG_Modify
Pozisyonun SL/TP'si ya da bekleyen emrin fiyat/SL/TP'si (price 0 fiyatı korur). Aynı değerler: true, neden 1. Dondurma bölgesi, kapalı seans veya bağlantı yokluğu engellerse: false, neden 2, kuyrukta; aynı bilet için daha yeni bir çağrı onun yerini alır.
TOG_Close
Pozisyonu kapatır veya bekleyen emri siler. volume 0 veya tam hacim hepsini kapatır; daha azı kısmi kapatır (aşağı yuvarlanır); minimumun altında kalan kısım her şeyi kapatır. Engel yukarıdaki gibi: false, neden 2, kuyrukta (kuyruktaki değişikliğin yerini alır).
TOG_CloseAll
symbol ("" = hepsi) ve magic (-1 = herhangi) ile eşleşen her pozisyon (pending true ise bekleyen emirler de) için TOG_Close. Şimdi kapatılan sayıyı döner.
TOG_ProcessQueue
Engeli kalkan kuyruk işlemlerini gönderir; OnTick veya OnTimer içinde çağırın. İşlem başarıda, bileti kaybolunca veya başka bir hatada kuyruktan çıkar; sunucu reddinden sonra bir saniye bekler. Tamamlanan sayıyı döner.
TOG_QueueCount ve TOG_ClearQueue
Bekleyen işlem sayısı (en fazla 256); hepsini göndermeden silme.
TOG_LastReason, TOG_LastRetcode ve TOG_ReasonText
Son çağrının nedeni; sunucunun son dönüş kodu (hiçbir şey gönderilmediyse 0); bir neden kodunun metni (aksi halde "UNKNOWN").
TOG_RetcodeClass
0 DONE (verildi, gerçekleşti, kısmi, değişiklik yok, pozisyon kapalı), 1 RETRY (requote, ret, hata, zaman aşımı, fiyat değişti veya geçersiz, kotasyon yok, çok fazla istek, kilitli, bağlantı), 2 FIX (geçersiz istek, hacim, stoplar, vade, doldurma, emir), 3 WAIT (piyasa kapalı, dondurulmuş), 4 FATAL (diğerleri, ör. para yok).
TOG_GetStats
stats[] dizisini 10 sayaçla doldurur, 10 döner: 0 istek, 1 gönderilen, 2 tamamlanan, 3 engellenen, 4 yeniden deneme, 5 ertelenen, 6 kuyruktan tamamlanan, 7 reddedilen, 8 ayarlanan stop, 9 atılan.
Çalışan entegrasyon örneği
#import "Turnstile_Order_Gateway.ex5"
double TOG_RiskVolume(string symbol, ENUM_ORDER_TYPE type, double entry, double sl, double risk_money);
ulong TOG_Open(string symbol, ENUM_ORDER_TYPE type, double volume, double price, double sl, double tp, ulong magic, string comment);
bool TOG_Close(ulong ticket, double volume);
int TOG_ProcessQueue();
int TOG_LastReason();
string TOG_ReasonText(int reason);
#import
ulong ticket = 0;
bool tried = false;
void OnTick()
{
TOG_ProcessQueue();
if(!tried)
{
tried = true;
double sl = SymbolInfoDouble(_Symbol, SYMBOL_BID) - 300 * _Point;
double lots = TOG_RiskVolume(_Symbol, ORDER_TYPE_BUY, 0, sl, 10.0);
ticket = TOG_Open(_Symbol, ORDER_TYPE_BUY, lots, 0, sl, 0, 7001, "turnstile");
Print("open ", ticket, ": ", TOG_ReasonText(TOG_LastReason()));
}
if(ticket > 0 && PositionSelectByTicket(ticket) && PositionGetDouble(POSITION_PROFIT) > 5.0)
Print("close: ", TOG_Close(ticket, 0), " ", TOG_ReasonText(TOG_LastReason()));
} Mimari ve notlar
- Kütüphaneyi içe aktaran her programın kendi ayarları, istatistikleri ve bellekteki kuyruğu vardır (EA kaldırılınca veya terminal yeniden başlayınca kaybolur).
- Kontroller yalnızca terminal verilerini okur; yalnızca TOG_Open, TOG_Modify, TOG_Close, TOG_CloseAll ve TOG_ProcessQueue senkron olarak gönderir.
- Kurulumlar: doğrulayıcı güvenliği = varsayılanlar artı OnTick içinde TOG_ProcessQueue; katı stoplar = adjust_stops false; geliştirme = verbose true ve panelinizde TOG_GetStats.
- MetaTrader 5, netting ve hedging, her sembol; yalnızca EA ve betikler. Strateji Test Cihazı, optimizasyon ve MQL5 Cloud Network için güvenli (DLL, dosya, web isteği yok; test cihazında deneme beklemesi yok).
- Grafik nesnesi, zamanlayıcı, dosya veya global değişken oluşturmaz; kotasyon okumak için bir sembolü Piyasa Gözlemi penceresine ekleyebilir.
- Seans tablosunda olmayan bir tatil, sunucu yanıtından -5 olarak yakalanır.
- Desteklenmeyen: stop-limit emirler, close-by, OrderSendAsync.
Risk uyarısı
Kütüphane kodunuzun yaptığı istekleri kontrol eder ve gönderir. Giriş seçmez; gerçekleşme, fiyat veya kâr garanti etmez. Önce demo hesapta test edin.
