"Bir grafikte birden fazla gösterge (Bölüm 04): Uzman Danışmanla çalışma" makalesi için tartışma

 

Yeni makale Bir grafikte birden fazla gösterge (Bölüm 04): Uzman Danışmanla çalışma yayınlandı:

Önceki makalelerimde, özel gösterge kullanarak birden fazla göstergenin nasıl oluşturulacağından bahsetmiştim. Bu sefer ise Uzman Danışmana nasıl birden fazla göstergenin ekleneceğini inceleyeceğiz.

OOP (Nesne Yönelimli Programlama) kullanarak yeni bir şey oluşturmaya karar verdiğimde, bunu yaptım çünkü güvenlik ve kalıtım dahil olmak üzere bu yaklaşımı kullanmanın büyük avantajları olduğunu çoktan biliyordum. Bir diğer avantajı da polimorfizmdir ancak onu daha sonra bir çapraz emir sistemi oluştururken kullanacağız. Şimdi ise OOP’nin şu avantajını kullanacağız - kalıtım. C_TemplateChart halihazırda tamamen işlevsel bir sınıftır. Dolayısıyla, onu yeniden programlamak ya da içerisine kod ekleme riskini almak istemeyiz, ki bu da sınıfın başka yerde kullanılmasını engelleyebilir. Çözüm, orijinal kodu hiçbir şekilde değiştirmeden yeni kod veya fonksiyonlar eklenmesine olanak sağlayan kalıtımı kullanmaktır.

Kalıtımı kullanmanın şunlar dahil birçok avantajı vardır: halihazırda test edilmiş olan kod test edilmiş olarak kalır; karmaşıklık, kod boyutunda eşit şekilde artış olmadan artar; yalnızca yeni özelliklerin gerçekten test edilmesi gerekir; değişmeyenler basitçe kalıtılır, bu da istikrar sağlar. Başka bir deyişle, her şey minimum çabayla, maksimum güvenlikle gelişir. Bunu anlamak için aşağıdaki şemaya bakalım.

Yazar: Daniel Jose

 
Merhaba Daniel, makalelerini takip ediyorum ama 03. bölüm ne olacak?
 
Mateus Lopes #:
Merhaba Daniel, makalelerini takip ediyorum, ama Bölüm 03 ne olacak?

Yayınlanması için talepte bulunduğum sırada küçük bir sorun vardı, ancak Bölüm 03'ün yayınlanmasına zaten izin verdim, yakında o da mevcut olacak, bu sorun daha çok gönderdiğim makalelerin sayısından kaynaklanıyordu ... şu anda analiz etmeleri için 15 makale daha var, hepsi de bu EA'nın geliştirilmesiyle ilgili ve her biriyle işler daha da karmaşıklaşıyor .... ama seriyi takip ettiğiniz için teşekkür ederim ... makale 05'ten itibaren birçok yeni şeyi dört gözle bekliyorum, o andan itibaren gerçekten değerli olacak çünkü büyük bir şey olacak, bu ilk birkaçı sadece sizi gelecek olanlarla tanıştırmak için...😁👍

 

Merhaba Daniel,

Çok renkli göstergelerle ilgili sorunlar yaşıyorum ve keyif aldığım makaleleriniz, çözümünü bilebileceğinizi gösteriyor.

Tüm gösterge niteliklerini #property seçeneklerini kullanmadan ayarlayan bir fonksiyon üretmek istiyorum, örneğin #property indicator_color1 clrCrimson,clrWhite,clrLime

Aşağıdaki test programında bulduğum şey, #property indicator_color1 clrCrimson,clrWhite,clrLime dahil edildiğinde programın düzgün çalıştığı, ancak bunu yorumladığımda programın doğru şekilde çalışmadığıdır.Bu durumda, sanki "daha yüksek?" bir zaman dilimi kullanıyormuş gibi yalnızca bazı veri noktalarını çiziyor veya birkaç veri noktasını atlıyor gibi görünüyor. Özellik rengi yönergesinin, çoklu renkler belirtildiğinde tanımlamadığım daha fazla öznitelik ayarladığından şüpheleniyorum.

İkinci sorun, çok renkli grafikleri kullanmanın ayrıntılarını ve gereksinimlerini açıkça anlamamış olmamdır. Belgeleri araştırdım ve çok renkli göstergelerin nasıl kullanılacağına dair genel bir bakış sağlayan herhangi bir makale bulamadım. İlk grafik doğru renk değiştirirken, düşükleri çizen ikincisi, işlev çağrıma göre renkleri değiştirmiyor. Bu çizim, düzgün çalışması için üç özelliğin tümünü gerektirir: type2, color2 ve width2. Ayrıca, özellik bildirimlerinin neden 3 yerine 2 kullandığına da şaşırdım. Özellik göstergelerinin doğru görüntülenmesi için gösterge numarası 3'ü değil, çizim numarası 2'yi kullandığını belirlemek için Mladen'in Laguerre Adaptive Filter göstergesini kullandım.

Herhangi bir öneri, referans veya yardım çok takdir edilecektir

Saygılarımla, CapeCoddah

Dosyalar:
 
CapeCoddah göstergelerin nasıl kullanılacağına dair genel bir bakış sağlayan herhangi bir makale bulamadım. İlk grafik doğru şekilde renk değiştirirken, düşük noktaları izleyen ikincisi, fonksiyon çağrıma göre renk değiştirmiyor. Bu grafiğin düzgün çalışması için üç özelliğin de (type2, color2 ve width2) olması gerekir. Ayrıca özellik bildirimlerinin neden 3 yerine 2 kullandığına da şaşırdım. Özellik göstergelerinin doğru görüntülenmesi için 3 numaralı göstergeyi değil 2 numaralı grafiği kullandığını belirlemek için Mladen'in Laguerre Adaptive Filter göstergesini kullandım.

Herhangi bir öneri, referans veya yardım çok takdir edilecektir.

Saygılarımızla, CapeCoddah

Kafanız biraz karışık, anlayabiliyorum... ancak tüm karışıklık kodunuzdaki ayrıntılara bakmamanızdan kaynaklanıyor. Yorumda yer alan bazı ayrıntıları açıklamaya çalışacağım, ardından kodunuz hakkında biraz konuşacağım....

İlk nokta, #property indicator_colorN kullanmadan da çok renkli bir gösterge üretebileceğinizdir, ancak kullanıcı ve hatta sizin için kodu anlamak ve değiştirmek daha pratik, daha güvenli ve daha basittir, çünkü tek yapmanız gereken özelliklere gitmektir orada bulunan renkleri değiştirmek ve kullanıcı için daha basittir çünkü yalnızca değiştirilecek rengi seçmesi ve değişikliği yapması gerekecektir, bu MT5'in göstergeler için oluşturduğu standart pencerede. Renk değişikliklerini oluşturmak için PlotIndexSetInteger komutunu kullanırken bir şekilde zaten doğru şeyi yapıyorsunuz ve #property indicator_colorN kullanmadığımız zaman bu şekilde oluyor, ancak özellikleri kullandığımızda diğer renkleri ayarlamak için PlotIndexSetInteger komutunu kullanmak genellikle mantıklı olmuyor, Bunun nedeni, bu şeyin bakımının daha karmaşık ve kullanıcı için daha kafa karıştırıcı olabilmesidir, çünkü renk standardının ne söylemeye çalıştığını gerçekten anlamayabilir, kod size ait olsa ve göstergeyi kullanan tek kişi siz olsanız bile, nadir durumlarda dinamik bir renk deseni oluşturmadığınız sürece pek bir anlam ifade etmez.

Şimdi ikinci nokta hakkında: Bu durumda sorun, göstergenin çizeceği şeylerin sayısını (2 çizgi için 2) nesne özellikleriyle (bu durumda çizgi) karıştırmanızdır ve çizilecek çizgi için aslında en az 3 parça bilgi bildirmeniz gerekir, bunlar TypeN, ColorN, WidthN, burada N nesnenin numarasını gösterir, pratik ve zamanla gösterge özelliği ile kullandığı nesnelerin özellikleri arasındaki bu küçük farkları anlayacaksınız ... Pes etmeyin... Çalışmaya devam edin, yakında her şey daha netleşecek... 😁👍

Şimdi kodunuzun bir kısmını görelim... Size tam olarak nasıl düzelteceğinizi göstermeyeceğim (bunu yaparsam eğlenceli olmayacak... .... 😁👍✌ ) Aşağıdaki gerçeğe dikkat etmenizi istiyorum ve bu önemli:

      Buf=Set_IndexBuffer5(Buf, dataHi, INDICATOR_DATA , DRAW_COLOR_LINE , 4 ,
"High" , clrYellow , clrWhite , clrDodgerBlue );
      Buf=Set_IndexBuffer5(Buf, dataHic, INDICATOR_COLOR_INDEX );
      Buf=Set_IndexBuffer5(Buf, dataLo, INDICATOR_DATA , DRAW_COLOR_LINE , 4 ,
"Low" , clrYellow , clrWhite , clrDodgerBlue );
      Buf=Set_IndexBuffer5(Buf, dataLoc, INDICATOR_COLOR_INDEX );

Kodunuzda iki şeyi işaretlediğime dikkat edin... şimdi grafikte oynatıldığında neler olduğunu görelim....


Etiketlerden sadece birinin kodda beyan ettiğiniz gibi olduğunu görün, sadece YÜKSEK .... ve DÜŞÜK ?!?! o nerede ?!?! düzeltmeniz gereken ilk nokta budur, çünkü DÜŞÜK etiketinin gösterilmemesi, kullanılan renk deseninin #property indicator_color2 'de beyan edilen şey olduğunu gösterir. yani, bu noktada bir başarısızlığınız var, aslında DÜŞÜK çizgiyi oluşturan gösterge 2'nin özelliklerini kaldırmaya çalışırsanız, kodun geri kalanını korusanız bile, YÜKSEK çizgi çizilecek, ancak DÜŞÜK çizgi çizilmeyecektir....neden?!?! çünkü aslında DÜŞÜK çizgisini çizmek için gerekli bilgileri tanımlamıyorsunuz, bu PlotIndexSetInteger çağrısının kullanımı yoluyla dinamik olarak ... garip görünüyor ... ama olan bu ....

Bunu düzeltmeyi başardığınızda, PlotIndexSetInteger kullanarak satır nesnesinin verilerini bildirmenin dinamik yolunu gerçekten kullanmak istiyorsanız, gerekli veriler dinamik olarak ayarlanacağı için #property indicator_color derleme komutlarını sahneden kaldırabileceksiniz, ancak böyle bir çaba sarf etmek istemiyorsanız, sorun değil....

Şimdi yukarıdaki resme bakmanızı ve #property indicator_color'da kullandığınız renklerle karşılaştırmanızı istiyorum... bu renkleri çok dikkatli izleyin .... bunu yaparsanız orada garip bir şey fark edeceksiniz .... yine eğlenceyi kaçırmayın demeyeceğim ama farklı renkler kullanmaya çalışın, hiçbirini tekrarlamadan... tekrarladığınızda hatanın nerede olduğunu anlamak zorlaşır... 😁👍

Şimdi son bir ayrıntı: Sadece bazı noktaları çizdiğini ve diğerlerini atladığını düşünmenizin iki nedeni olabilir: Renk deseni grafiğin arka planıyla kontrast oluşturmuyor, grafiğin arka planıyla kontrast oluşturan renkler kullanmaya çalışın ve ikincisi, ancak bunun gerçekten böyle olduğuna inanmıyorum, OnCalcule olayında bir hata olabilir, -1 veya i değerini döndürüyorsunuz, doğru olan rates_total döndürmektir, bu nedenle gelecekteki sorunları önlemek için kodda bunu değiştirin...

 

Merhaba Daniel,

Kafam karıştı. Çizim özelliklerinin MQ4 gibi tampon özellikleri kullanılarak tanımlandığını sanıyordum, oysa en azından DRAW_COLOR... özellikleri için çizim özellikleri sıralı çizim tanımlayıcısı kullanılarak tanımlanıyor. DRAW_LINE vb. özelliklerin de çizim özellikleri gerektirip gerektirmediğini belirlemedim. Ayrıca, indicator_colorX özelliğinin aslında iki işlevi vardır, önce renk sayısını saymak ve ayarlamak ve ardından belirtilen her rengi uygun dizi konumuna ayarlamak.İki dosya ekliyorum, şimdi doğru çalışan Renk Testi, ancak daha fazla iyileştirme gerektiriyor, ikincisi MLADEN'in MACD Original2_1'i biraz değiştirildi. Mladen'in programı iki grafik tanımladığı için ilginçtir, ancak yalnızca bir renk indeksi arabelleği kullanır.


Yardımlarınız için teşekkürler

Dosyalar: