MQL5'te OOP hakkında sorular - sayfa 29

 
Dmitry Fedoseev :

Evet, işte sürekli ortaya çıkan ve net bir cevabı olmayan bir soru daha. Kendi sınıfınızı devralmanız gerektiğinde - ki bunu yapmak daha iyidir, onu devralın veya sınıfınızın yeni bir genişletilmiş sürümünü yazın.

her şey sonunda ne istediğinize dair genel vizyona bağlı, IMHO

sınıfı daha ileri bir yerde kullanmayı planlıyorsam, onu miras almadan tamamlamam gerekir.

benim örneğimde, CError sınıfı GetLastError()'u alabilir, bir açıklama ile yazdırabilir ve hatanın değerini (int) döndürebilir, her yerde kullanmayı planlıyorum, zaten, dili statik olarak tanımlayan bir kurucu var. değişken ve vakaların kendileri hatanın metnini döndürür

ve işte oldukça kullanışlı bir yöntem bool ServerDisable(); - bu, sunucunun kullanılabilirliğini belirler (çok platformlu MT4 / MT5 kodu), çok iyi bir işlev, kodun başka bir bölümünde başka bir yere ihtiyaç duyuluyor gibi görünüyor, ancak yine de ticaret yaparken kullanacağımı düşündüm işlemler - COorder sınıfında sıkıştım

.....

ve eğer onu nerede kullanmak istersem?.... burada fantezi alanı elbette daha fazladır, ama sonunda nesnenin COorder'a nasıl gittiği önemli değil - başka nerede kullanılır?


IMHO, genel olarak, her şey hantal görünüyor, hizmet işlevleri kitaplığını bir içerme ile bağlamak daha kolaydır ve derleyici, yürütülebilir dosyada kullanılmayanları içermeyecektir.

prosedürel bir tarzda, tüm bu sınıf oldukça kompakt olacaktır, burada sipariş hacmi sabitlerini statik olarak depolayabilen sipariş açma işlevi için bir örnek gösterdim https://www.mql5.com/ru/forum/85652/page17#comment_12805083

 
Dmitry Fedoseev :

Ve belirli sınırlar içinde kalmak temelde önemli mi? Sınırlar içinde kalmak önemliyse, işlevler yazabilirsiniz.

Mesajınız bağlamında, sınıfları kullanmazsanız, uygunsuz çağrı imzalarıyla uğraşmanız gerektiğini yanıtladım. Uğraşmaya gerek olmadığını gösterdim.

 
Alexey Navoykov :
Sınıfı esnek ve evrensel yaparak, sembolün adını yapıcıya iletmenizi engelleyen nedir? Portföy ticareti olasılığını temel olarak düşünüyor musunuz?

her şeyi düşünürüm

ama şimdilik araştırmaya takıldım - şimdi MM araştırmasının 1000 ve 1 yolu ve sipariş sistemleriyle her türlü numara neredeyse hazır)))

ama yine de sonunda çok esnek olmadığını düşünüyorum, prosedür stilinin daha uygun olduğunu 2 kez yukarıda yazdım + siparişlerle çalışmanın hata ayıklanmış işlevlerini “seğiren” küçük sınıflar

genel olarak, test fikirlerine geçeceğim, ancak orada kodu sık sık düzenlediğim, dokunmadığım şeylere açık olacak.

 
Igor Makanu :

.....

ve eğer onu nerede kullanmak istersem?.... burada hayal gücü alanı kesinlikle daha büyük, ama sonunda nesnenin COorder'a nasıl gittiği önemli değil - başka nerede kullanmalı?


İzler ayrıdır, çünkü ana mantıkla ilgisi yoktur. Hiç var olabilirler veya olmayabilirler.

***

Sondaki ve diğer benzer bakım işlevlerini bir sınıfın soyundan yapmak ve örneklerini bir dizide oluşturmak güzel olurdu. İşlev etkinleştirilirse, diziye bir örnek eklenir ve yürütülür. Tüm işlevler devre dışı bırakılırsa, dizi boştur ve gereksiz if'ler yürütülmez. Expert Advisor'a en az 100 takip ekleyebilirsiniz ve bu işlem hızını etkilemeyecektir.

 
Alexey Navoykov :
Bu böyle yapılmaz. En azından hem Bid() hem de Ask()'ı aramanız gerekir. Size sadece bir değişken gibi görünüyor ve gerçekte değişmese de değerinin değişmediği izlenimini veriyor.

Ne yazık ki, bu her zaman yapıldı, Teklif Et ve Talep Et MT4'te kaldı ve Yaratıcının bu basit kullanımı ve mevcut fiyatların alınmasını yok etmek için hiçbir kaprisi yok;)

fxsaber :

Sorun yaşamadığım aşağıdaki şemaya sahibim.

  1. TS'yi sadece Tester için yazıyorum. Günlükler, hata işleyiciler ve diğer tortular eksik. Kod, OOP aracılığıyla yapılırsa (ancak temelde değil) düzenleme için çok özlü, anlaşılır ve dövülebilir olduğu ortaya çıkıyor. KB'de bir örnek yayınladım. Bonus - hızlı optimizasyon .
  2. Ana şey, Test Cihazı için bağımsız bloklara yayılmasıdır. Ticaret sinyallerinin oluşumu - bir blok. Sinyal ticareti farklıdır.
  3. Gerçeğe çeviri her zaman aynı hareketlerin birkaçında yapılır. Araç, kodu düzenlemeden sanal bir ortama yerleştirilir. Bir ortamda aynı anda birkaç TS'ye veya her bir TS'ye kendi başına sahip olabilirsiniz, o zaman OOP özellikle uygun hale gelir. Ardından, işlemleri / siparişleri sanal makineden gerçek makineye kopyalayan bir fotokopi makinesi alınır (Market'te birçoğu vardır, bu nedenle insanlar fotokopi mantığına geçerler).
  4. Bu şema ile bir TS yazmak hızlı ve anlaşılır bir iştir. Gerçeğe çeviri (ve aslında bu nadirdir) her zaman eşit, hızlı ve net bir şekilde yapılır.

Bu koddan mı bahsediyorsun? https://www.mql5.com/ru/code/22770

Ben uygulamayı beğendim. gerçekten test ve optimize edici için, muhtemelen bunu temel alacağım, kod kısa ve okunabilir, dürüst olmak gerekirse, kodunuzu alıp okuduğuma şaşırdım, çok daha sofistike bir yazı stiliniz var, ben genellikle aptalca bağlan ve kullan, mantığı anlayamadığımı biliyorum

 
Igor Makanu :

Ne yazık ki, bu her zaman yapıldı, Teklif Et ve Talep Et MT4'te kaldı ve Yaratıcının bu basit kullanımı ve mevcut fiyatların alınmasını yok etmek için hiçbir kaprisi yok;)

Sonuçta, mevcut olay işlemede değerleri değişmez (tabii ki, RefreshRates'i çağrılmaya zorlamazsanız). Onlar. bunlar değişkenler, işlevler değil. Ve fonksiyonlarınız değişkenlere benziyor

 

FP'lere yüzlerce megabayt veya gigabayt veriden oluşan dizileri yönetme ve işleme görevini verin ve onların tüm harika mesaj modelleri (veriler değişmezdir) boşa gidecektir.

Zamanında gerçek sorunlardan kaçıp kendi kurgu evrenlerinde yayın yapan teorisyenler bunlar :) telekomla ilgili hikayeler en aptal veri geçişleridir.

Aslında, karmaşıklıkla başa çıkmanın tek yolu nesnelere paketlemektir.
 
Alexey Navoykov :

Sonuçta, mevcut olay işlemede değerleri değişmez (tabii ki, RefreshRates'i çağrılmaya zorlamazsanız). Onlar. bunlar değişkenler, işlevler değil. Ve fonksiyonlarınız değişkenlere benziyor

Örneğinizde tartıştığımız sorunu nasıl açıklayacağımı bile bilmiyorum, tamamen insani deneyeceğim - ilk PC'ye sahip biri olarak benim için bu bir Pentium-90, sadece görmek acıtıyor uygun kullanımı elde etmek için, değer kayıtlarının yığına yerleştirilmesini ima eden ekstra bir işlev çağrısı eklenecek ve .. uzaklaşıyoruz...

Artık her şeyin işlemci düzeyinde art arda önbelleğe alındığını biliyorum ve derleyici geliştiricilerinin "bir işlev çağrısından bir işlev çağırmayı" daha verimli hale getireceğinden şüpheleniyorum.

o zaman örneğiniz şöyle görünmelidir:

 #define Ask(dummy) SymbolInfoDouble ( _Symbol , SYMBOL_ASK )
#define Bid(dummy) SymbolInfoDouble ( _Symbol , SYMBOL_BID )

void OnStart ()
  {
   Print ( "Ask = " ,Ask());
   Print ( "Bid = " ,Bid());
  }

veya bunun gibi:

 #define Ask(symbol_) SymbolInfoDouble (symbol_, SYMBOL_ASK )
#define Bid(symbol_) SymbolInfoDouble (symbol_, SYMBOL_BID )

void OnStart ()
  {
   Print ( "Ask = " ,Ask( _Symbol ));
   Print ( "Bid = " ,Bid( _Symbol ));
  }
 
Dmitry Fedoseev :

Vasily, bu makale sizin için çok faydalı olacaktır - kendinize işkence etmemek, OOP uğruna kendi OOP'lerini sıkmamak için.

MT için işlevsel bir çerçeve için bir fikrim var. Neredeyse hiç OOP olmayacak. Yalnızca işlevler, "monadlar" ve diğer sözde FP işlevleri. Her şeyi tırnak içinde yazıyorum çünkü Doğal olarak, MQL'de tam teşekküllü bir FP yapılamaz.

 
Dmitry Fedoseev :

Yorumlar gereksiz.

birbirinizi pek sevmiyorsunuz ya da belki tam tersi 2 gey kendi yolunu arıyor)

Bu arada, makalelerinizi beğendim, Uzmanlar Lokhov'un, zayıf, ama onu daha az sevmiyorum,

ve ben eşcinsel değilim.