- Program Çalıştırma
- Trade Permission
- Müşteri Terminali Olayları
- Kaynaklar
- İçe Aktarılmış Fonksiyonların Çağrılması
- Çalışma Zamanı Hataları
- Alım-Satım Stratejilerinin Sınanması
Program Çalıştırma
Her bir komut dosyası, servis ve Uzman Danışman ayrı bir iş parçacığında çalışır. Bir sembolde hesaplanan tüm göstergeler, farklı grafiklere eklense bile, aynı iş parçacığında çalışır. Böylece, bir semboldeki tüm göstergeler bir iş parçacığının kaynaklarını paylaşır.
Tiklerin işlenmesi ve geçmiş senkronizasyonu gibi, bir sembolle ilişkili tüm diğer eylemler de tutarlı bir şekilde, göstergeler ile aynı iş parçacığında gerçekleştirilir. Yani gösterge içinde sonsuz bir eylemin gerçekleştirilmesi durumunda, sembolle ilişkili diğer olayların hiçbiri gerçekleştirilmez.
Bir Uzman Danışmanı çalıştırırken, gerçek bir alım-satım ortamına sahip olduğundan, istenen sembol ve periyodun geçmişine erişim gerçekleştirebildiğinden ve terminal ile sunucu arasındaki veriyi senkronize edebildiğinden emin olun. Uzman Danışmanın mevcut veri ile başlatılmasının ardından tüm bu prosedürler için, terminal 5 saniyeden uzun olmayan bir gecikme oluşturur. Bu yüzden, sunucu bağlantısının olmaması durumunda, Uzman Danışmanın başlangıcında gecikmeler yaşanabilir.
Aşağıdaki tablo MQL5 programlarının kısa bir açıklamasını içerir:
MQL5 program |
Çalışma |
Not |
---|---|---|
Hizmet |
Ayrı bir iş parçacığı, hizmetler için iş parçacığı sayısı hizmet sayısına eşittir |
Döngüsel bir servis diğer programların çalışmasını bozamaz |
Script |
Ayrı iş parçacığı; gereken iş parçacıklarının sayısı, script sayısına eşittir |
Döngülü bir script, diğer programların çalışmasını etkilemez |
Uzman Danışman |
Ayrı iş parçacığı; gereken iş parçacıklarının sayısı, Uzman Danışman sayısına eşittir |
Döngülü bir Uzman Danışman, diğer programların çalışmasını etkilemez |
Gösterge |
Bir sembol üzerindeki tüm göstergeler için tek bir iş parçacığı. Gereken iş parçacıklarının sayısı, göstergeli sembollerin sayısına eşittir |
Gösterge içindeki sonsuz bir döngü, sembol üzerindeki tüm diğer göstergeleri durdurur |
Bir program, çizelgeye eklenmesinin hemen ardından, global değişkenlerin başlatılmasıyla birlikte, müşteri terminalinin belleğine yüklenir. Sınıf tipli bir global değişkenin bir yapıcısı varsa, bu yapıcı global değişkenlerin başlatılmasıyla birlikte çağrılacaktır.
Bunun ardından program, müşteri terminalinden gelecek bir olayı beklemeye başlar. Her MQL5 programı en az bir olay işleyicisine sahip olmalıdır, aksi durumda yüklenen program çalıştırılmayacaktır. Olay işleyicileri ön-tanımlı isimlere, parametrelere ve dönüş tiplerine sahiptir.
Tip |
Fonksiyon ismi |
Parametreler |
Uygulama |
Yorum |
---|---|---|---|---|
int |
yok |
Uzman Danışmanlar ve göstergeler |
Init olay işleyicisi. void dönüş tipinin kullanımını destekler. |
|
void |
const int reason |
Uzman Danışmanlar ve göstergeler |
Deinit olay işleyicisi. |
|
void |
yok |
komut dosyaları ve hizmetler |
Start olay yöneticisi. |
|
int |
const int rates_total, const int prev_calculated, const datetime &Time[], const double &Open[], const double &High[], const double &Low[], const double &Close[], const long &TickVolume[], const long &Volume[], const int &Spread[] |
göstergeler |
tüm fiyatlar için Calculate olay işleyicisi. |
|
int |
const int rates_total, const int prev_calculated, const int begin, const double &price[] |
göstergeler |
Calculate olay işleyicisi - tek bir veri dizisi için. Göstergeler aynı anda iki olay işleyicisine sahip olamazlar. BU durumda, veri dizisi üzerinde sadece bir olay işleyicisi çalışacaktır. |
|
void |
yok |
Uzman Danışmanlar |
NewTick olay işleyicisi. Yeni tik olayı işlendiği sırada bu türden başka bir olay kabul edilmez. |
|
void |
yok |
Uzman Danışmanlar ve göstergeler |
Timer olay işleyicisi. |
|
void |
yok |
Uzman Danışmanlar |
Trade olay işleyicisi. |
|
double |
yok |
Uzman Danışmanlar |
Tester olay işleyicisi. |
|
void |
const int id, const long &lparam, const double &dparam, const string &sparam |
Uzman Danışmanlar ve göstergeler |
ChartEvent olay işleyicisi. |
|
void |
const string &symbol_name |
Uzman Danışmanlar ve göstergeler |
BookEvent olay işleyici. |
Müşteri terminali karşılık gelen açık durumdaki çizelgeye yeni olaylar gönderir. Olaylar, çizelgeler tarafından (çizelge olayları) veya MQL5 programları tarafından (özel olaylar) da gönderilebilir. Bir çizelge üzerindeki grafiksel nesnelerin oluşturulması ve silinmesi olayları, CHART_EVENT_OBJECT_CREATE ve CHART_EVENT_OBJECT_DELETE çizelge özelliklerinin ayarlanmasıyla devreye sokulabilir veya devre dışı bırakılabilir. Her MQL5 programı ve her çizelge kendilerine ait (yeni gelen olayların eklendiği) olay kuyruklarına sahiptir.
Bir program, sadece üzerinde çalıştığı çizelgedeki olayları alır. Tüm olaylar, alım sıralarına göre, birbiri ardına işlenirler. Eğer bir kuyrukta NewTick olayı zaten bulunuyorsa veya bu olay işlenmekteyse, yeni NewTick olayı MQL5 programının olay kuyruğuna eklenmeyecektir. Aynı şekilde, eğer ChartEvent olayı zaten kuyrukta ise, veya bu olay işlenmekteyse, bu türde yeni bir olay kuyruğa eklenmeyecektir. Zamanlayıcı olayları da aynı şekilde işlenir – eğer kuyrukta bir Timer olayı varsa veya bu olay işlenmekteyse, yeni zamanlayıcı olayı kuyruğa eklenmez.
Olay kuyrukları sınırlı ama yeterli büyüklüğe sahiptir, bu yüzden kuyruk aşımı durumu nadiren gerçekleşir. Kuyruk aşımı durumunda, yeni olaylar gözardı edilir.
Olayları yönetmek için sonsuz döngüler kullanmamanız şiddetle önerilir. Muhtemel istisnalar, tek bir Start olayını yöneten komut dosyaları ve hizmetlerdir.
Kütüphaneler olayları işlemezler.
Göstergelerde ve Uzman Danışmanlarda İzin verilmeyen Fonksiyonlar
Göstergeler, scriptler ve Uzman Danışmanlar, MQL5 dilinde yazılan çalıştırılabilir programlardır. Farklı görev tipleri için tasarlanmışlardır. Bu yüzden, program tipine bağlı olarak, bazı fonksiyonların kullanımında sınırlamalar vardır. Aşağıdaki fonksiyonların göstergelerde kullanılmasına izin verilmez:
- OrderCalcMargin();
- OrderCalcProfit();
- OrderCheck();
- OrderSend();
- SendFTP();
- Sleep();
- ExpertRemove();
- MessageBox().
Göstergeler için tasarlanmış olan ve Uzman Danışman ve scriptlerde kullanımına izin verilmeyen fonksiyonlar:
- SetIndexBuffer();
- IndicatorSetDouble();
- IndicatorSetInteger();
- IndicatorSetString();
- PlotIndexSetDouble();
- PlotIndexSetInteger();
- PlotIndexSetString();
- PlotIndexGetInteger.
Kütüphaneler bağımsız programlar değildir ve onları çağıran başka bir MQL5 programı (scriptler, Uzman Danışmanlar, vaya göstergeler) içinde çalıştırılırlar. Bu nedenle, yukarıdaki kısıtlamalar çağrılan kütüphaneye de uygulanır.
Hizmetlerde yasaklanan fonksiyonlar
Hizmetler, bir grafiğe bağlı olmadıkları için hiçbir olayı kabul etmemektedir. Hizmetlerde aşağıdaki fonksiyonlar yasaktır:
Göstergelerin Yüklenmesi ve Kaldırılması
Göstergeler şu durumlarda yüklenirler:
- bir göstergenin çizelgeye eklenmesi;
- terminal başlangıcı (gösterge terminal kapanmadan önce çizelgeye eklenmişse);
- bir şablonun yüklenmesi (göstergenin eklendiği çizelge, şablonda belirtilmişse);
- profilin değişimi (gösterge profil çizelgelerinden birine eklenmişse);
- göstergenin eklendiği çizelgenin sembolünün veya zaman aralığının değiştirilmesi;
- terminalin bağlı olduğu hesabın değiştirilmesi;
- göstergenin başarılı bir şekilde yeniden derlenmesi sonucunda, eğer gösterge çizelgeye eklenmiş durumdaysa;
- göstergenin giriş parametrelerinin değiştirilmesi.
Göstergeler şu durumlarda çizelgeden kaldırılırlar:
- göstegenin çizelgeden açık yolla kaldırılması;
- terminalin kapatılması (gösterge çizelgeye ekli durumdaysa);
- bir şablonun yüklenmesi durumunda, gösterge çizelgeye ekli durumdaysa;
- göstergenin eklendiği çizelgenin kapatılması;
- profil değişimi, gösterge değiştirilen profildeki çizelgeye ekli durumdaysa;
- göstergenin eklendiği çizelgenin sembolünün veya zaman aralığının değiştirilmesi;
- terminalin bağlı olduğu hesabın değiştirilmesi;
- göstergenin giriş parametrelerinin değiştirilmesi.
Uzman Danışmanların Yüklenmesi ve Kaldırılması
Uzman danışmanlar şu durumlarda yüklenirler:
- çizelgeye bir Uzman Danışman eklendiğinde;
- terminalin başlatılması (Uzman Danışman terminal kapanmadan önce çizelgeye eklenmişse);
- bir şablonun yüklenmesi (Uzman Danışmanın eklendiği çizelge, şablonda belirtilmişse);
- profil değişimi (Uzman Danışman profil çizelgelerinden birine eklenmişse);
- bir hesaba bağlanılması, hesap numarası aynı olsa bile (Uzman Danışman, terminal sunucu üzerinde yetkilendirilmeden öce çizelgeye eklenmişse).
Uzman Danışmanlar şu durumlarda kaldırılırlar:
- Uzman Danışmanın açık şekilde çizelgeden kaldırılması;
- eğer çizelge üzerinde zaten bir Uzman Danışman mevcutsa, yeni bir Uzman Danışmanın çizelgeye eklenmesiyle eskisi kaldırılacaktır.
- terminalin kapatılması (eğer Uzman Danışman çizelgeye ekli durumdaysa);
- bir şablonun yüklenmesi (eğer Uzman Danışman çizelgeye ekli durumdaysa);
- Uzman Danışmanın eklendiği çizelgenin kapatılması.
- profil değişimi; Uzman Danışman değiştirilen profildeki çizelgeye ekli durumdaysa; profile;
- terminalin bağlı olduğu hesabın değiştirilmesi (Uzman Danışman, terminal sunucu üzerinde yetkilendirilmeden öce çizelgeye eklenmişse);
- calling the ExpertRemove() function.
Uzman Danışmanın eklendiği çizelgenin zaman aralığı veya sembolünün değişmesi durumunda Uzman Danışman yüklenmez veya kaldırılmaz. bu durumda müşteri terminali sırayla eski sembol/zaman aralığı için OnDeinit() işleyicisini ve sembol/zaman aralığı için (eğer varsa) OnInit() işleyicisini çağırır; global değişkenlerin ve statik değişkenlerin değerleri sıfırlanmaz. Uzman Danışmanın başlatılmasından önceki tüm olaylar (OnInit() fonksiyonu) atlanır.
Scriptlerin Yüklenmesi ve Kaldırılması
Scriptler bir çizelgeye eklenmelerinin hemen ardından yüklenirler ve işlemlerinin bitmesiyle kaldırılırlar. OnInit() ve OnDeinit() fonksiyonları scriptlerde çağrılmaz.
Bir program kaldırıldığında (çizelge üzerinden silindiğinde), müşteri terminali global değişkenleri sonlandırır ve olay kuyruğunu siler. Bu durumda, sonlandırma, string tipli değişkenlerin sıfırlanması, dinamik dizi nesnelerinin bellek alanlarının boşaltılması ve değişken iseler yıkıcılarının çağrılması anlamına gelir.
Hizmetleri Yükleme ve Kaldırma
Eğer hizmetler terminal kapatılırken başlatıldılarsa, bu hizmetler terminal başlatıldıktan hemen sonra yüklenir. Hizmetler işlerini tamamladıktan hemen sonra kaldırılır.
Hizmetlerin, örneğin ağ fonksiyonlarını kullanarak kullanıcı tanımlı semboller oluşturma ve güncelleme gibi, sonsuz bir veri alma ve işleme döngüsü uygulayabileceğiniz tek bir OnStart() işleyicisi vardır.
Uzman Danışmanlar, göstergeler ve komut dosyalarından farklı olarak, hizmetler belirli bir grafiğe bağlı değildir, bu nedenle hizmetleri başlatmak için ayrı bir mekanizma sağlanmaktadır. Kılavuz'da "Hizmet Ekle" komutu kullanılarak yeni bir hizmet örneği oluşturulur. Bir hizmet örneği, uygun örnek menüsü kullanılarak başlatılabilir, durdurulabilir ve kaldırılabilir. Tüm örnekleri yönetmek için hizmet menüsünü kullanın.
Uzman Danışman İşleminin daha iyi anlaşılması için aşağıdaki kodun derlenmesi ve yükleme/kaldırma, şablon değişimi, sembol değişimi, zaman aralığının değişimi vb. işlemlerinin gerçekleştirilmesi tavsiye edilir
Örnek:
//+------------------------------------------------------------------+
|
Ayrıca Bakınız