- OnStart
- OnInit
- OnDeinit
- OnTick
- OnCalculate
- OnTimer
- OnTrade
- OnTradeTransaction
- OnBookEvent
- OnChartEvent
- OnTester
- OnTesterInit
- OnTesterDeinit
- OnTesterPass
OnTradeTransaction
Fonksiyon, TradeTransaction olayı meydana geldiğinde uzman danışmanlarda çağrılır. Fonksiyon, alım-satım işlem isteği gerçekleşimi sonuçlarını yönetmek içindir.
void OnTradeTransaction()
|
Parametreler
trans
[in] Bir alım-satım hesabında yapılan bir işlemi tanımlayan MqlTradeTransaction tipi değişken.
request
[in] Bir alım-satım isteğini (bir işlemi meydana getiren) tanımlayan MqlTradeRequest tipi değişken. Sadece TRADE_TRANSACTION_REQUEST tipi işlem için değerler içerir.
result
[in] Bir alım-satım isteğinin (bir işlemi meydana getiren) gerçekleşim sonucunu içeren MqlTradeResult tipi değişken. Sadece TRADE_TRANSACTION_REQUEST tipi işlem için değerler içerir.
Geri dönüş değeri
Geri dönüş değeri yok
Not
OnTradeTransaction(), bir işlem sunucusu tarafından terminale gönderilen TradeTransaction olayını yönetmek için aşağıdaki durumlarda çağrılır:
- OrderSend()/OrderSendAsync() fonksiyonlarını ve devamında gerçekleşimini kullanarak bir MQL5 programından bir işlem isteği gönderimi;
- grafik kullanıcı arayüzü (GUI) ve devamında gerçekleşim ile manuel olarak bir işlem isteği gönderme;
- sunucu üzerindeki bekleyen emirler ve zararı durdur emirlerinin aktifleştirilmesi;
- işlem sunucusu tarafında operasyonlar gerçekleştirme.
İşlem türüne ilişkin veriler, trans değişkeninin type alanında bulunur. Alım-satım işlem türleri, ENUM_TRADE_TRANSACTION_TYPE listesinde tanımlanmaktadır:
- TRADE_TRANSACTION_ORDER_ADD – yeni bir aktif emir ekleme
- TRADE_TRANSACTION_ORDER_UPDATE – varolan bir emri değiştirme
- TRADE_TRANSACTION_ORDER_DELETE – aktif olan emirlerden birini silme
- TRADE_TRANSACTION_DEAL_ADD – geçmişe bir işlem ekleme
- TRADE_TRANSACTION_DEAL_UPDATE – geçmişteki bir işlemi değiştirme
- TRADE_TRANSACTION_DEAL_DELETE – geçmişten bir işlemi silme
- TRADE_TRANSACTION_HISTORY_ADD – gerçekleşim veya iptal etme sonucunda geçmişe bir emri ekleme
- TRADE_TRANSACTION_HISTORY_UPDATE – emir geçmişindeki bir emri değiştirme
- TRADE_TRANSACTION_HISTORY_DELETE – emir geçmişinden bir emri silme
- TRADE_TRANSACTION_POSITION – bir işlem gerçekleşimi ile ilgili olmayan pozisyon değişikliği
- TRADE_TRANSACTION_REQUEST – bir alım-satım isteğinin sunucu tarafından işlendiğini ve de bu işlemin sonucunun elde edildiğine dair bildirim.
TRADE_TRANSACTION_REQUEST tipi işlemleri yönetirken, ek bilgi edinmek için OnTradeTransaction() fonksiyonunun ikinci ve üçüncü parametrelerini – request ve result – analiz etmek gereklidir.
Bir alım-satım hesabında bir işlem isteği göndermek, alım-satım işlemler zincirine yol açar: 1) istek, işlenme için kabul edilir, 2) hesap için uygun bir satınalma emri oluşturulur, 3) emir devamında gerçekleştirilir, 4) gerçekleştirilen emir, aktif olan emirlerin listesinden silinir, 5) emir geçmişine eklenir, 6) bir sonraki işlem geçmişe eklenir ve 7) yeni bir pozisyon oluşturulur. Tüm bu aşamalar alım-satım işlemleri dir. Terminale ulaşan bunun gibi her bir işlem TradeTransaction olayıdır. Terminalde bu işlemlerin geliş önceliği garanti edilemez. Bu nedenle, işlem algoritmanızı geliştirirken bir grup işlemin diğerinden sonra gelmesini beklememelisiniz.
İşlemler uzman danışmanın OnTradeTransaction() yöneticisi tarafından işlenirken, terminal gelen alım-satım işlemlerini yönetmeye devam eder. Bundan dolayı, işlem hesabının durumu OnTradeTransaction() operasyonu sırasında değişebilir. Örneğin, bir MQL5 programı eklenen yeni bir emri yönetirken, emir gerçekleştirilebilir, açık emirler listesinden silinebilir ve geçmişe taşınabilir. Program tüm bu olaylardan haberdar edilir.
İşlemler kuyruk uzunluğu 1024 elemandan oluşur. Eğer OnTradeTransaction() başka bir işlemi çok uzun süre yönetiyorsa, kuyruktaki yeni işlemler önceki işlemlerin yerine geçebilir.
OnTrade() yöneticisi, uygun OnTradeTransaction() çağrılarından sonra çağrılır. Genelde, OnTrade () ve OnTradeTransaction () çağrılarının sayısında tam bir korelasyon yoktur. Bir OnTrade() çağrısı, bir veya birkaç OnTradeTransaction çağrısına karşılık gelir.
Her bir Trade olayı bir veya birkaç işlem isteğinin sonucunda görülebilir. İşlem istekleri, OrderSend() veya OrderSendAsync() kullanılarak sunucuya gönderilir. Her bir istek, birkaç alım-satım olayına neden olabilir. Olayların işlenmesi birkaç aşamada gerçekleştirilebildiğinden ve her operasyon emirlerin, pozisyonların ve işlem geçmişinin durumunu değiştirebileceğinden, "Bir istek - bir Trade olayı" ifadesine güvenemezsiniz.
OnTradeTransaction() yöneticisiyle Örnek Uzman Danışman
//+------------------------------------------------------------------+
|
Ayrıca bakınız
OrderSend, OrderSendAsync, OnTradeTransaction, İşlem isteği yapısı, Alım-satım işlem yapısı, Alım-satım işlem türleri, İşlem operasyon türü, Müşteri terminal olayları