OOP - sayfa 2

 
Interesting :

Aslında, normal bir yaklaşımla, MQL5'te uygulanan OOP (terminalin kaynakları ile birlikte) hızda önemli bir artış sağlayacaktır.

Hangi çalışma hızından bahsediyorsunuz, programın hızından mı yoksa yazma hızından mı?

 
Integer :

OOP performansı artmaz. Bunun faydaları - örneğin, bazı parametrelerle çağrılan bir tür fonksiyon vardır (Diyelim ki EMA'nın hesaplanması), fonksiyon EMA'nın önceki değerini saklamak için statik bir değişken kullanır. İşlev, hangi hesaplamaların gerçekleştirileceği temelinde son değeri sakladığından,işlev bir sonraki çağrıldığında , artık diğer parametrelerle (sembol, zaman çerçevesi, yumuşatma süresi) çağrılamaz, bu nedenle Farklı parametrelerle işlev görürseniz, farklı bir ad kullanarak bir kopyasını oluşturmanız veya statik bir değişken yerine referansla geçirilen global bir değişken kullanmanız gerekir. Bu, bir nesneyi kullanmanın daha uygun olduğu tek durumdur - nesnenin bir örneği yüklenir, parametreleri ayarlanır ve ardından parametresiz yöntem çağrılır. Nesne, yürütülmesi önceki yürütmelere veya nesnenin yüklendiği herhangi bir parametreye bağlı olmayan yöntemler içeriyorsa, bu, kaynakları tüketmekten başka bir şey yapmaz.

Artar, artar, yine de artar. Doğru, hepsi programcının ellerinin deneyimine, hayal gücüne ve eğriliğine bağlıdır (bu sırayla) ... :)

Ve aslında, OOP'nin (en korkunç yaklaşımla) yürütme hızını artırmayacağını veya biraz artırmayacağını varsaysak bile (kişisel olarak 10 katlık bir artışın önemsiz kabul edilebileceğinden şüphe duymama rağmen), olacaktır. ANLAMA geliştiricileri için OOP'nin tüm olası dezavantajlarından daha faydalı olabilir.

Buradaki nokta, MQL5'in, içinde OOP varlığında, MQL4'te gözlemlenmeyen (kütüphaneler hariç) modüler (birim) bir programlama yaklaşımının geliştirilmesine bir şekilde katkıda bulunacağıdır. Bunun nedeni, yapıları, sınıfları veya bunların gruplarını ayrı dosyalara (modüller) yerleştirmenin ve gerekirse bunları kullanmanın uygun olmasıdır.

Ayrıca, soyutlama, kapsülleme, kalıtım ve polimorfizm nedeniyle, sınıfların kullanımı, hazır bloklarda (modüllerde) hata ayıklamanıza ve bunları doldurmayı düşünmeden işinizde kullanmanıza izin verecektir.

Ayrıca, teoride, OOP kullanımı, ticaret sistemlerinde harici DLL'lerin ve diğer yazılım ayarlarının seviyesini ve kullanılabilirliğini artırmalıdır.

Kitaplıkların kullanımıyla birlikte bu, geliştiricilerin hayatını düzinelerce kat kolaylaştıracak ve aynı zamanda oldukça karmaşık Uzman Danışmanların geliştirilmesini büyük ölçüde hızlandıracaktır.

 
Integer :

Hangi çalışma hızından bahsediyorsunuz, programın hızından mı yoksa yazma hızından mı?

İkisi hakkında. Geliştirme hızıyla ilgili ayrıntılar yukarıda yazılmıştır (elbette, sınıf geliştirme ve kullanma konusunda biraz deneyiminiz varsa, bunların hepsi mantıklıdır)...
 
Interesting :

Artar, artar, yine de artar ....

Sana bunu kim söyledi? Doğru değil. Diğer her şey doğru.

 
Integer :

Sana bunu kim söyledi? Doğru değil. Diğer her şey doğru.

Tekrar ediyorum - Artar, artar, hatta artar. Doğru, burada her şey programcının ellerinin deneyimine, hayal gücüne ve eğriliğine bağlıdır (bu sırayla) ...

Bir zamanlar Expert Advisor'ın başlatma hızlarını karşılaştırdım, küçük detaylar dışında program kodu aynıydı (MQL5'te geçiş kitaplığı kullanılıyordu). Sonuç olarak, MQL5'in başlatmayı ortalama 2,5 kat daha hızlı gerçekleştirdiği ortaya çıktı.

Elbette bunun bir gösterge olmadığını biliyorum, ancak yine de doğru yaklaşımla MQL5'in hızının şimdi bile ortalama 10 kat daha yüksek olduğundan eminim.

Yüzünüz kızarana kadar burada tartışabilirsiniz, ancak OnTrade() veya OnChartEvent'i uygulamaya değer ve her şey netleşecektir. Ama bunların yanında daha bir çok "güzellik" var...

not

Tabii ki, strateji test cihazı ve göstergelerle ilişkili hızda söveler var. Ancak zamanla, bu eksiklikler terminal geliştiricileri veya ticaret uzmanlarının yazarları tarafından ortadan kaldırılacaktır.

Ek olarak, MQ defalarca program kodu yürütmenin maksimum hızının henüz mevcut olmadığını belirtti (şimdiye kadar bildiğim kadarıyla) ...

 
Artar ... artar ... elinde bir cübbe giymiş bir zille mantranın melodisine şarkı söylemeye devam eder. MQL5, nesneleri desteklediği için değil, MQL4'ten daha hızlıdır.
 
Integer :
Artar ... artar ... elinde bir cübbe giymiş bir zille mantranın melodisine şarkı söylemeye devam eder.

tamsayı :
MQL5, nesneleri desteklediği için değil, MQL4'ten daha hızlıdır.
Ancak buna rağmen, çoğu durumda daha hızlı. Ve genel olarak, bence, MQL5'i MQL4 ile (ve diğer programlama dilleriyle) nesnelerle çalışma hızı açısından karşılaştırmak doğru değil.
 

GetTickCount() işlevini kullanarak, OOP olan ve olmayan benzer Uzman Danışmanları test ettim:

my_oop_ea testi ( OOP ile )

RJ 0 çekirdek 1 15:12:15 Test süresi = 115203

EO 0 çekirdek 1 15:12:15 EURUSD,H1: 115203 ms içinde oluşturulan 6124935 tik (3052 çubuk) (tarihteki toplam çubuk 9199)

RP 0 çekirdek 1 15:12:15 bağlantı kesildi


My_First_EA testi ( OOP yok )

sağdan 0 çekirdek 1 15:18:54 Test süresi = 90578

CR 0 çekirdek 1 15:18:54 EURUSD,H1: 90578 ms içinde oluşturulan 6124935 tik (3052 çubuk) (tarihteki toplam çubuklar 9199)

VEYA 0 çekirdek 1 15:18:54 bağlantı kesildi


Fark küçük ama OOP lehine değil. Ve optimizasyon durumunda, eğer doğru anladıysam, bu fark çalıştırma sayısı ile çarpılacaktır.

Ben kendi sonuçlarımı çıkardım.

Ayrıca MT5 (OOP ile) ve MT4 için standart MACD Örnek Uzman Danışmanlarını karşılaştırdım:

Macd Örneği MT5

FO 0 çekirdek 1 18:03:21 Test süresi = 126016

FD 0 çekirdek 1 18:03:21 EURUSD,M1: 126016 ms içinde oluşturulan 6124935 kene (181129 çubuk) (tarihteki toplam çubuk sayısı 545615)


Macd Örneği MT4

18:12:52 2010.06.30 23:59 MACD Örneği EURUSD,M1: Test süresi = 64406

Sonuçlar harika - OOP'li MT5 ve MQL sadece bir kaynak domuzu değil, aynı zamanda bir tüccarın zaman domuzu.

 

Farklı MT4 ve MT5 platformlarını test ettiğinizde, spesifik olarak OOP hakkında sonuç çıkaramazsınız. Farklı sistem mimarileri nedeniyle sonuçlardaki farklılıklar %90'dır.

Ayrıca MQL5 kod iyileştirici tamamen devre dışı bırakılırken aklımıza getiriyoruz. Açtığımızda, sonuçlar hemen manifoldu iyileştirecektir.

MQL4 ve MQL5'in hızlarını karşılaştıran bir makale dün yayınlandı - okumanızı tavsiye ederim:

MQL5'te Hareketli Ortalamaların Performansını Araştıran bir makale yayınlandı:

İlk basit hareketli ortalama göstergesinin oluşturulmasından bu yana birçok farklı gösterge ortaya çıktı. Birçoğu tamamen benzer bir prensip üzerine kuruludur veya hesaplamalarında fiyat serilerini işlemek için belirli yöntemler kullanır. Aynı zamanda, bu tür göstergelerin hesaplama hızı ve bunlara gömülü algoritmaların optimalliği sorunu genellikle aşırıya kaçmaktadır. Makale, hareketli ortalamaları kullanmak için tüm olası seçenekleri ele alıyor ve her birinin performansının karşılaştırmalı bir analizini yapıyor.

yazar: Sergey

 


Bir parametresi daha olan bir fonksiyon açıkça daha yavaştır. Sadece parametre yüzünden mi?

Dosyalar:
test.mq5  2 kb