Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
***Not: (Bunu unutmak istemiyorum). Elbette çoğumuz kullandığımız kodların içinde ne olduğunu bilmemekten hoşlanmıyoruz. Ya da bir başkasından gelen kodları anlamaya çalışmakla kendimizi tüketiyoruz, yoksa muhtemelen kullanmazdık. Ancak, mql4'teki Yerel işlevlerin çoğu (örnek OrderSend() ) bizim bakış açımızdan Nesnelerdir. Kodlarını görmüyoruz, ancak kabul ediyoruz. Diğer insanların kitaplıklarının bu kabulünün, büyük projeler üzerinde çalışan bir profesyonel_oop_programcının kabul etmesi ve üzerine inşa etmesi gereken bir şey olduğuna inanıyorum. Aksi takdirde, tekerleği yeniden yaratmakta mahsur kalırsınız.
Bir program akışını tanımladığınıza inanıyorum. OOP'nin arkasındaki big_idea'nın bu olduğunu sanmıyorum. (imo) OOP aşağıdaki sorunları çözmeye çalışır. Ben bir OOP noob'um, ancak dünya görüşümü bunun üzerine oluşturuyorum.
1) Fonksiyonlarınız global_variables'dan bağımsız mı? other_words'de, işlevleriniz tek başına nesneler mi? kapsülleme
2) İşleviniz local_variable_names gibi ayrıntıları gizliyor mu? Ekrandaki kodların hacmini basitleştiriyor mu? Soyutlama
3) Değişiklikler için kendisinin kopyalarını oluşturma yeteneği var mı? Kendi veri türlerinizi oluşturma yeteneği gibi mi? Miras.
4) Anında değişme özelliği var mı? Örnek: İşlev, tamsayı_dizinin yanı sıra çift_dizileri de işleyebilir mi? polimorfizm.
OOP'nin ea oluşturmada yardımcı olabileceği yollar, bir ea_builder'ın programcı olmayan bir uzman_advisor oluşturmasına nasıl yardımcı olduğuna benzer. En sevdiğiniz Order_Accounting_Function -> Data_Function -> Event Tracking Function -> Volume Defining Function -> Trading Criteria Defining Function -> Trade Functions -> Hata İşleme Fonksiyonunuzu alın. Ve patlama, bir Expert_Advisor'ınız var. Yıllar içinde geliştirdiğiniz tüm İşlem Kriterlerini Tanımlayan İşleviniz kolayca içeri veya dışarı değiştirilebilir.
Örnek olarak ben, eğer uzman danışmanımı değiştirmek isterseniz, global değişkenlerimin nerede uygulandığını ve buna başka hangi işlevin bağlı olduğunu (durum veya durum dizilerinizde olduğu gibi) incelemeniz gerekir. OOP onu as_simple_as Accounting(Option_3) yapar; Görüntüle(Seçenek_1); Altyazı(Seçenek_5); TradingSys(Option_7); HacimBoyutu(Seçenek2); OrderType(Option_2) ve tüm uzman bu.
Bu, bir başkasının kitaplık setinizi kullanmasını kolaylaştırır ve genellikle bir başkası için işe yarayan şey, gelecekte bir süre sizin için de işe yarar. Başka bir şey değilse, bir montaj hattındaki bağımsız nesneleri düşünün :)
mql5 ile biraz uğraştım ve yazdığım kodda herhangi bir OOP kullanmama gerek kalmadı
Sınıflar ve OOP, MQL5'te çok fazla isteğe bağlı bir eklentidir. Platform çerçevesi bunları kendisi kullanmaz. Örneğin, platformun Order nesnelerinin bir listesini içeren Orders koleksiyonu gibi bir şeye sahip olmasını ve aşağıdaki gibi bir kod yazmanıza izin vermesini bekleyebilirsiniz:
Ama durum böyle değil. Bunun yerine, bunu yapma şekliniz temelde MQL4 ve MQL5 arasında aynıdır:
(Yazdığınız herhangi bir EA'nın, bildiriminde sanal OnTick ve OnInit işlevleri gibi şeylere sahip bir ExpertAdvisor sınıfından türetilen bir sınıf olmasını da bekleyebilirsiniz. Ancak durum böyle değil. MQL5 çerçevesi temelde OOP dışı kalır, ancak yararlı olduğu herhangi bir görev için OOP'yi kendiniz kullanma seçeneği ile.)
Sonuç olarak, string OrderSymbol() {return OrderGetString(ORDER_SYMBOL);} gibi bir dizi yardımcı işlev aracılığıyla MQL5'te MQL4 kodunu kullanmaya devam edebilirsiniz. Bunun bozulduğu tek alan zaman serisi erişimidir, çünkü bu MQL5'te çok farklı şekilde düzenlenmiştir. https://www.mql5.com/en/articles/81 adresindeki iOpenMQL4() gibi bir işlev çalışır, ancak tekrarlanan kullanım için korkunç derecede yavaş ve verimsizdir.
(Hâlâ umursayan varsa, bu ileti dizisini başlatan hata raporu hala derleme 535'te geçerlidir. https://forum.mql4.com/56885/page20#861740 da geçerlidir, ancak MetaQuotes'un düzeltme girişimi başarısız olmuş gibi görünüyor Şu.)
RaptorUK ile aynı fikirdeyim, mql5.com'daki OOP hakkındaki belgeler en azından kusurlu. Ama ne yazık ki oop hakkında iyi bir referans bilmiyorum. Okuduklarım ya çok soyut ya da çok basit, armut ve elmayı nesnelere ve meyveyi sınıf olarak alıyorum.
OOP programlama yalnızca büyük projeniz varsa kullanışlıdır. Büyük bir proje mutlaka 1 EA değildir, projeniz göstergeli bir dizi EA inşa etmek olabilir, vb... başka bir programda kolayca yeniden kullanılabilir. Ne yazık ki şimdi bununla derinlemesine gitmek için zamanım yok. Ama planımda bununla ilgili bazı makaleler yazmak var.
Büyük bir projenin bir örneği, Metaquotes tarafından oluşturulan MQL5 Sihirbazıdır. Bazı kullanıcı girdileriyle 5 dakikada bir EA oluşturmanıza olanak tanır. Bir EA oluşturmak için gerekli tüm unsurları sağlayan mql5 Standard Libray'e dayanmaktadır. Aynı sihirbaz muhtemelen prosedürel bir şekilde yapılabilir, ancak bence çok daha zor olurdu. Ve sonra bu kodu korumanız gerekir. Ancak bu Standart kitaplık, iyi belgelenmediği ve tanımlanmadığı için anlaşılması zordur. Konuda mevcut olan her şeyi merkezileştirmek için bir konu oluşturdum (mql5 sihirbazı oop değil).
Bir program akışını tanımladığınıza inanıyorum. OOP'nin arkasındaki big_idea'nın bu olduğunu sanmıyorum. (imo) OOP aşağıdaki sorunları çözmeye çalışır. Ben bir OOP noob'um, ancak dünya görüşümü bunun üzerine oluşturuyorum.
1) Fonksiyonlarınız global_variables'dan bağımsız mı? other_words'de, işlevleriniz tek başına nesneler mi? kapsülleme
2) İşleviniz local_variable_names gibi ayrıntıları gizliyor mu? Ekrandaki kodların hacmini basitleştiriyor mu? Soyutlama
3) Değişiklikler için kendisinin kopyalarını oluşturma yeteneğine sahip mi? Kendi veri türlerinizi oluşturma yeteneği gibi mi? Miras.
4) Anında değişme özelliği var mı? Örnek: İşlev, tamsayı_dizinin yanı sıra çift_dizileri de işleyebilir mi? polimorfizm.
OOP'nin ea oluşturmada yardımcı olabileceği yollar, bir ea_builder'ın programcı olmayan bir uzman_advisor oluşturmasına nasıl yardımcı olduğuna benzer. En sevdiğiniz Order_Accounting_Function -> Data_Function -> Event Tracking Function -> Volume Defining Function -> Trading Criteria Defining Function -> Trade Functions -> Hata İşleme Fonksiyonunuzu alın. Ve patlama, bir Expert_Advisor'ınız var. Yıllar içinde geliştirdiğiniz tüm İşlem Kriterlerini Tanımlayan İşleviniz kolayca içeri veya dışarı değiştirilebilir.
Örnek olarak ben, eğer uzman danışmanımı değiştirmek isterseniz, global değişkenlerimin nerede uygulandığını ve buna başka hangi işlevin bağlı olduğunu (durum veya durum dizilerinizde olduğu gibi) incelemeniz gerekir. OOP onu as_simple_as Accounting(Option_3) yapar; Görüntüle(Seçenek_1); Altyazı(Seçenek_5); TradingSys(Option_7); HacimBoyutu(Seçenek2); OrderType(Option_2) ve tüm uzman bu.
Bu, bir başkasının kitaplık setinizi kullanmasını kolaylaştırır ve genellikle bir başkası için işe yarayan şey, gelecekte bir süre sizin için de işe yarar. Başka bir şey değilse, bir montaj hattındaki bağımsız nesneleri düşünün :)
Sınıflar ve OOP, MQL5'te çok fazla isteğe bağlı bir eklentidir. Platform çerçevesi bunları kendisi kullanmaz. Örneğin, platformun Order nesnelerinin bir listesini içeren Orders koleksiyonu gibi bir şeye sahip olmasını ve aşağıdaki gibi bir kod yazmanıza izin vermesini bekleyebilirsiniz:
Ama durum böyle değil. Bunun yerine, bunu yapma şekliniz temelde MQL4 ve MQL5 arasında aynıdır:
(Yazdığınız herhangi bir EA'nın, bildiriminde sanal OnTick ve OnInit işlevleri gibi şeylere sahip bir ExpertAdvisor sınıfından türetilen bir sınıf olmasını da bekleyebilirsiniz. Ancak durum böyle değil. MQL5 çerçevesi temelde OOP dışı kalır, ancak yararlı olduğu herhangi bir görev için OOP'yi kendiniz kullanma seçeneği ile.)
Sonuç olarak, string OrderSymbol() {return OrderGetString(ORDER_SYMBOL);} gibi bir dizi yardımcı işlev aracılığıyla MQL5'te MQL4 kodunu kullanmaya devam edebilirsiniz. Bunun bozulduğu tek alan zaman serisi erişimidir, çünkü bu MQL5'te çok farklı şekilde düzenlenmiştir. https://www.mql5.com/en/articles/81 adresindeki iOpenMQL4() gibi bir işlev çalışır, ancak tekrarlanan kullanım için korkunç derecede yavaş ve verimsizdir.
OOP şu anda oldukça yaygın ve MQL'ye daha fazla gerçek kodlayıcı çekecek. Ama not defteri benzeri editör, çoğunu itecek, eminim.