MQL4'ten MQL5'e Taşınma

MQL5, selefi olan ve sayısız göstergenin, betiğin ve Uzman Danışmanın yazıldığı MQL4 programlama dilinin evrimleşmiş halidir. Bu yeni programlama dilinin eskisiyle büyük oranda uyumluluğu olmasına rağmen, iki dil arasında hala bir takım farklar bulunmaktadır. Programların yeni dile aktarılması sırasında, bu farklara dikkat edilmelidir.

Bu bölüm, MQL4 bilen programcılar için, kodların yeni MQL5 diline aktarılmasını kolaylaştırmak amaçlı bilgiler içermektedir

İlk olarak not edilmesi gerekenler:

  • Yeni dilde start(), init() ve deinit() fonksiyonları bulunmamaktadır.
  • Kullanılacak gösterge tamponlarının sayısı için sınırlama yoktur.
  • DLL dosyaları, Uzman Danışmanın (veya herhangi bir MQL5 programının) başlatılmasının hemen ardından yüklenirler.
  • Mantıksal koşulların kontrol süresi kısaltılmıştır.
  • Bir dizinin limitinin aşılması durumunda, geçerli işlem sonlandırılır (kritik olarak- Bir hata çıktısı ile).
  • Operatörlerin önceliği C++ dilindeki gibidir.
  • Bu dil, gizli dönüşüme olanak tanır (dizgiden sayıya bile olsa).
  • Yerel değişkenler otomatik olarak başlatılmaz (dizgiler hariç).
  • Yaygın yerel diziler otomatik olarak silinir.

Özel Fonksiyonlar init, start ve deinit

MQL4 dili, göstergelerde, uzman danışmanlarda veya scriptlerde kullanılabilecek sadece üç adet ön tanımlı fonksiyon içermekteydi (*.mqh ve kütüphane dosyaları hesaba katılmadan). MQL5 dilinde ise bu fonksiyonlara yer verilmemiştir ama benzerleri mevcuttur. Aşağıdaki tabloda fonksiyonların yaklaşık karşılıkları gösterilmiştir.

MQL4

MQL5

init

OnInit

start

OnStart

deinit

OnDeinit

OnInit ve OnDeinit fonksiyonları, MQL4 dilindeki init ve deinit fonksiyonları ile aynı işlevlere sahiptir - MQL5 programının başlatılması sırasında gerçekleştirilmesi gereken kodların yerleştirilmesi için tasarlanmışlardır. Bu fonksiyonları uygun şekilde yeniden isimlendirebilir veya aynı şekilde bırakabilirsiniz, bunun için fonksiyonları karşılık gelen kısımlara yerleştirmelisiniz.

Örnek:

void OnInit()
  {
//--- Başlatma fonksiyonunun çağrısı
   init();
  }
void OnDeinit(const int reason)
  {
//--- Sonlandırma fonksiyonunun çağrısı
   deinit();
//---
  }

Start fonksiyonunun yerine, sadece scriptlerde OnStart kullanılır. Uzman Danışmanlarda ve göstergelerde, sırasıyla OnTick ve OnCalculate şeklinde yeniden isimlendirilir. Bir MQL5 programı içinde çalıştırılacak kodlar, bu üç fonksiyonun içerisine yerleştirilmelidir:

MQL5 program

ana fonksiyon

betik

OnStart

gösterge

OnCalculate

Uzman Danışman

OnTick

Gösterge veya script kodu ana fonksiyonu içermiyorsa veya fonksiyonun ismi istenenden farklıysa, bu fonksiyonun çağrısı gerçekleştirilmeyecektir. Yani, bir betiğin kaynak kodu OnStart işleyicisini içermiyorsa, Bu kod Uzman Danışman şeklinde derlenecektir.

Bir gösterge, OnCalculate fonksiyonunu içermiyorsa, göstergenin derlenmesi olanaksızdır.

Öntanımlı Değişkenler

MQL5 dilinde Ask, Bid ve Bars gibi ön tanımlı değişkenler yoktur. Point ve Digits değişkenleri ise oldukça farklı bir yazıma sahiptirler:

MQL4

MQL5

Digits

_Digits

Point

_Point

 

_LastError

 

_Period

 

_Symbol

 

_StopFlag

 

_UninitReason

Zaman-Serilerine Erişim

MQL5 dilinde Open[], High[], Low[], Close[], Volume[] ve Time[] gibi ön tanımlı zaman-serileri yer almaz. Bir zaman-serisi için gereken derinlik zaman-serilerine erişim fonksiyonları ile ayarlanabilir.

Uzman Danışmanlar

MQL5 dilinde Uzman Danışmanlar, yeni tik olayları için zorunlu fonksiyonlar gerektirmez - OnTick (MQL4 dilinde yeni tik alındığında start fonksiyonu çalıştırılır). MQL5 dilinde Uzman Danışmanlar, çeşitli tipte olaylar için ön tanımlı işleyici fonksiyonlar içerebilirler :

  • OnChartEvent – klavyeden veya fareden yapılan giriş olayları, grafiksel nesnelerin taşınması olayı, LabelEdit nesnesinde metin düzenlemenin tamamlanması olayı;
  • OnBookEvent – Piyasa Derinliği durumunun değişmesi olayı.

Özel Göstergeler

MQL4 dilinde gösterge tamponlarının sayısı sınırlıdır ve 8 adetten fazla olamaz. MQL5 ise böyle bir sınırlama yoktur, bununla birlikte her gösterge tamponunun, terminalde kaplayacağı yer için belirli bir bellek miktarının tahsisini gerektireceği unutulmamalıdır ve bu yeni imkan istismar edilmemelidir.

MQL4 dilinde 6 farklı tipte özel gösterge çizim stili bulunmaktaydı; buna karşın MQL5 dilinde 18 farklı çizim tipi sunulmaktadır. Çizim stillerinin isimleri değişmemiş, fakat göstergelerin grafiksel temsili belirgin bir şekilde değişmiştir.

Ayrıca, gösterge tamponlarında kullanılan indisleme yönü de farklılık göstermektedir. Varsayılan olarak, MQL5 dilinde gösterge tamponları normal diziler gibi tasarlanmıştır. Yani 0 indisli eleman, geçmişteki en eski olandır ve indis değeri arttıkça, en eski verilerden en yenilerine doğru gelinir.

Özel göstergelerle çalışmak için kullanılan fonksiyonlardan sadece SetIndexBuffer fonksiyonu MQL4 dilindeki şekliyle muhafaza edilmiştir. Ama onun da çağrı şekli değiştirilmiştir; artık gösterge tamponuna bağlanan dizinin içinde depolanacak veri tipini belirtmeniz gerekmektedir.

Özel göstergelerin özellikleri de değiştirilmiş ve genişletilmiştir. Zaman-serilerine erişim için yeni fonksiyonlar eklenmiştir, bu yüzden toplam hesaplama algoritması yeniden gözden geçirilmelidir.

Grafiksel Nesneler

MQL5 içinde, grafiksel nesnelerin sayısı belirgin şekilde artırılmıştır. Artık, grafiksel nesneler herhangi bir zaman aralığındaki çizelge üzerinde, zaman ekseninde saniye çözünürlüğü ile konumlandırılabilmektedir - artık, nesnelerin tutturma noktaları, çizelgenin zaman aralığına göre, çubuk açılış zamanına çekilmemektedir

Bundan böyle Ok, Metin ve Etiket nesneleri için, bağlama yöntemleri belirleyebilir; Etiket, Düğme, Çizelge, Bitmap Etiketi ve Düzenleme nesneleri için nesnenin tutturulacağı çizelge köşesini ayarlayabilirsiniz.