- Dil Temelleri
- Sabitler, Sayımlar ve Yapılar
- MQL5 programları
- Öntanımlı Değişkenler
- Yaygın Fonksiyonlar
- Dizi Fonksiyonları
- Matris ve Vektör Metotları
- Dönüşüm Fonksiyonları
- Matematik Fonksiyonları
- Dizgi Fonksiyonları
- Tarih ve Zaman
- Hesap Bilgisi
- Durum Kontrolü
- Olay yönetimi
- Piyasa Bilgisi
- Ekonomik Takvim
- Zaman Serilerine ve Göstergelere Erişim
- Kullanıcı-tanımlı semboller
- Çizelge İşlemleri
- Alım-Satım Fonksiyonları
- Alım-Satım Sinyalleri
- Ağ fonksiyonları
- Terminalin Global Değişkenleri
- Dosya Fonksiyonları
- Özel Göstergeler
- Nesne Fonksiyonları
- Teknik Göstergeler
- Optimizasyon Sonuçları ile Çalışma
- Olay İşleyici Fonksiyonları
- OpenCL ile Çalışma
- Veritabanlarıyla çalışma
- DirectX ile çalışma
- Python için MetaTrader
- ONNX Modelleri
- Standart Kütüphane
- MQL4'ten taşınma
- MQL5 Fonksiyonlarının Listesi
- MQL5 Sabitlerinin Listesi
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()
|
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 |
---|---|
OnStart |
|
OnCalculate |
|
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 :
- OnTrade - alım-satım olayı;
- 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.