OOP vs prosedürel programlama - sayfa 5

 
Petros Shatakhtsyan :

Diyelim ki bu kadar basit bir görev (detaylı anlatmak için çok yazmanız gerekiyor).

Her şey OnTick()'te olur. Bir durumu kontrol edelim ve bir sipariş açalım. Koşul önemli değil, diyelim ki biraz maks. veya min.

Doğal olarak, robot bir tür çizelge üzerinde durur ve bu sembol için alıntılar alır. Sadece bir OnTick işlevinin olmadığı, diğerleri olduğu açıktır: OnTrade, OnTimer, kendi işlevleri vb.

Bu nedenle, bu fonksiyonların dışında ortak olan tüm değişkenleri kodun başında bildirmek gerekir. Örneğin, sembol adı, talep, teklif, yayılma, alıntı karakter sayısı vb. Onlarca olacak.

Bu robot yalnızca bir sembol üzerinde işlem yapacak, yani. nerede duruyor. Diyelim ki böyle 20 çizelge var ve aynı robotu aynı anda 20 çiftin tümü için işlem yapması için hepsine yüklüyoruz.

Ancak bu, bazılarının Market'te belirttiği gibi çok para birimine sahip bir robot değil.


Burada onu çoklu para birimine dönüştürmek gerekiyor. Onlar. herhangi bir çizelgeye koyarız (sadece 1 çizelgede) ve 20 çift için fırsatlar açar. Yani, test cihazında tekli modda çalıştırıyoruz ve Piyasa İzleme'deki çiftlerle işlem görüyor.

OOP olmadan nasıl yapacağınız aşağıda açıklanmıştır. Tüm ortak değişkenleri 20 elemanlı dizilere dönüştürecek misiniz?

Peki ya tüm çiftler için aynı anda çağrılacak fonksiyonlar?

Burada ve OOP olmadan yapmak imkansız. :)


Not: Rusça eğitimi almadığımı ve bu nedenle uzun süre yazdığımı ve birkaç sayfa okumaya zamanım olmadığını belirtmek isterim.

Çoklu para birimi oluşturmak için, başlangıçta bir çoklu para birimi yazmanız ve bir çift için uyarlanmış robotu yeniden oluşturmamanız gerekir.

Çoklu para birimi oluşturma yöntemi, OOP'nin zorunlu kullanımını gerektirmez. Tüm döviz çiftlerinden onay alan ve aynı analiz ve sıralama işlevlerini her yerde uygulayan bir kod bloğu yazabilirsiniz. Sıra fonksiyonlarının kendileri, değerleri çifte bağlı olarak değişecek değişkenler içerecektir. Kene kabul eden blok bu değerleri değiştirecektir.

 
Реter Konow :
Belirli bir göreve öncülük etmek arzu edilir. Bu açıklama çok net değil. Uygulamamda, algoritma değişen harici parametrelerden değişmez. Bu parametrelerin herhangi bir değeri için önceden evrenseldir. Yani ne demek istediğin çok açık değil. Belirli bir örnekle açıklayın.

Örneğin, bir Expert Advisor'da 100 takip eden durdurma seçeneği bulunmalıdır. Prosedürel programlama ile bu ayak örtüsünü elde edersiniz:

 if (Trailing_01_ON){
    Trailing1();
}

if(Trailing_02_ON){ Trailing2(); } ...

...

...

if(Trailing_99_ON){ Trailing99(); }

100 özdeş kod bölümü. Program çalışırken, genellikle sondakilerden yalnızca biri etkinleştirilir, kalan 99 if'ler kaynakları tüketir.

Şimdi OOP ile bir varyant. Expert Advisor'ı başlatırken, diziyi işaretçiler ile fiilen etkinleştirilmiş sonların sayısına göre ölçeklendirir ve yalnızca etkinleştirilmiş sonlar için nesneler yaratırız. Sonuç olarak, aşağıdaki kod sürekli çalışacaktır:

 for ( int i= 0 ;i<cnt;i++){
   p[i].Main();
} 

Bir izleme etkinleştirilirse, cnt=1 olur, yani gereksiz bir şey yoktur.

 
Dmitry Fedoseev :

Burada soru "nasıl" değil, "neden"? Terminalde zaten uygulanmış bir şeyi neden kodlayın - sadece gerekli sayıda grafiği açmanız ve bunları uzmana göre asmanız gerekir. Ek olarak, farklı semboller ve zaman dilimlerinde, büyük olasılıkla parametreler farklı olmalıdır.


Terminalde hiçbir şey uygulanmaz. İlk olarak, 20 yerine sadece bir grafik açılır ve ikincisi, test cihazında, tüm açık pozisyonları dikkate alarak aynı anda birçok çift ile test yapamayacaksınız.

Sadece "MarketWatch'ta seçilen tüm semboller" modu olduğunu söylemeyin.

 

"Nesne" kavramının nasıl tanımlandığını anlamayan bu programcının amatör bir programcı olduğunu ve modern programlama sanatını bilmediğini varsayabiliriz.

 
Dmitry Fedoseev :

Örneğin, bir Expert Advisor'da 100 takip eden durdurma seçeneği bulunmalıdır. Prosedürel programlama ile bu ayak örtüsünü elde edersiniz:

100 özdeş kod bölümü. Program çalışırken, genellikle sondakilerden yalnızca biri etkinleştirilir, kalan 99 if'ler kaynakları tüketir.

Şimdi OOP ile bir varyant. Expert Advisor'ı başlatırken, diziyi işaretçiler ile fiilen etkinleştirilmiş sonların sayısına göre ölçeklendirir ve yalnızca etkinleştirilmiş sonlar için nesneler yaratırız. Sonuç olarak, aşağıdaki kod sürekli çalışacaktır:

Bir izleme etkinleştirilirse, cnt=1 olur, yani gereksiz bir şey yoktur.

Genel olarak takip sorununu çözmek için çok, çok garip bir yaklaşım. Sorunun böyle bir ifadesi olmamalıdır - 100 farklı tipte takip eden durak ve her birinin kendi işlevi vardır.

Bu türleri bir veya daha fazla formülde sıkıştırmak, ortak bir izleme işlevi yapmak gerekir. Bu kadar. Tabii ki gri madde ile çalışmanız gerekecek, ancak OOP'nin bununla hiçbir ilgisi yok ...

 
Реter Konow :

Genel olarak takip sorununu çözmek için çok, çok garip bir yaklaşım. Sorunun böyle bir ifadesi olmamalıdır - 100 farklı tipte takip eden durak ve her birinin kendi işlevi vardır.

Bu türleri bir veya daha fazla formülde sıkıştırmak, ortak bir izleme işlevi yapmak gerekir. Bu kadar. Tabii ki gri madde ile çalışmanız gerekecek, ancak OOP'nin bununla hiçbir ilgisi yok ...


Diyelim ki MA tarafından takip ediliyor ve bunlardan birkaç düzine var.

Ve kolayca yaşayabiliyorsan neden bir şeyi sıkıştırasın?
 
Dmitry Fedoseev :

Diyelim ki MA tarafından takip ediliyor ve bunlardan birkaç düzine var.

Ve kolayca yaşayabiliyorsan neden bir şeyi sıkıştırasın?


OOP lehine argümanınızın özünün, başlangıçta saçma bir kararı kolaylaştırmaya dayandığı ortaya çıktı. Şüpheli argüman...


Neden birkaç düzine farklı izleme işlevi? OOP'ye sahip ciddi bir programcının evrensel bir tane yazması zor mu?

 
Реter Konow :


OOP lehine argümanınızın özünün, başlangıçta saçma bir kararı kolaylaştırmaya dayandığı ortaya çıktı. Şüpheli argüman...

Neden birdenbire bu kadar komik oldu?

100 ifs kullanmak çok saçma olurdu.

 
Dmitry Fedoseev :

Neden birdenbire bu kadar komik oldu?

100 ifs kullanmak çok saçma olurdu.

100 ifof kullanmaya gerek yok. Problemi daha verimli bir şekilde çözmemiz ve farklı parametrelere uyum sağlayan bir takip ile tek bir fonksiyon yapmamız gerekiyor.
 
Реter Konow :
100 ifof kullanmaya gerek yok. Problemi daha verimli bir şekilde çözmemiz ve farklı parametrelere uyum sağlayan bir takip ile tek bir fonksiyon yapmamız gerekiyor.

Ve takip etmenin farklı parametrelere uyum sağlaması için bunu nasıl yapacaksınız? Yine de, algoritmanın bazı dalları kalacaktır, bu da bazı parametre kombinasyonlarıyla asla yürütülmeyecektir.

Neden: