Göstergeler: DRAW_FILLING

 

DRAW_FILLING:

DRAW_FILLING çizim stili, iki gösterge arabelleğinin değerleri arasına renkli alan çizer. Aslında, iki çizgi çizer ve bu iki çizginin arasındaki alanı renkle doldurur.

DRAW_FILLING

Yazar: MetaQuotes

 

DRAW_FILLING çizim özelliğini kullanarak yayınlanan kodu kullanarak kendi indikatörümü yazmaya çalıştım.

Ancak, boş değerlerle ayrılmış komşu çizilmiş bölümlerin yapışmasıyla ilgili sorunlarım var.

Bir pencerede iki çizilmiş bölüm görünürse, EMPTY_VALUE değerine sahip bir gösterge bölümü ile ayrılmış olmalarına rağmen, bu boş bölüm hala komşu bölümlerin değerleriyle çizilir.


Bu durumu ele aldım çünkü oturumlar göstergesi için yayınlanan kodlar benim için çalışmıyor, bu yüzden her şeyi yeniden yazmaya karar verdim.

İşte bir taslak.

Dosyalar:
Session.mq5  4 kb
 

Sadece bu seçeneği sunabilirim


Dosyalar:
Session.mq5  4 kb
 
Rosh:

Sadece bu seçeneği sunabilirim


Teşekkür ederim, ama biraz gitmeyeceğim, belki grafik nesneleri üzerinde duracağım.

 
Urain:

Teşekkür ederim ama biraz gitmeyecek, grafik nesneleri üzerinde duracağım.

DRAW_FILLING stilinde çizim poligonlarla yapıldığı için güzel dikdörtgenler elde edemiyorsunuz maalesef.
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования - Документация по MQL5
 
Rosh:
DRAW_FILLING tarzı çizim çokgenlerle yapıldığından, ne yazık ki güzel dikdörtgenler elde edemezsiniz.
Eh, bu yöntem bu amaç için uygun değildir, ancak bu onu başka amaçlar için kötü yapmaz.
 

Aynı sorunla ben de karşılaştım (boş değerlerin olduğu alanlara yapışma). Her ne kadar yukarıda dikdörtgen elde etmenin imkansız olduğu söyleniyor gibi görünse de bu dikdörtgenleri çizen bir örnek olduğu için(trading sessions indicator) konuyu araştırmaya karar verdim.

Açıkçası yukarıdaki göstergede dikdörtgenlerin nasıl elde edileceğini anlayamadım. Bu nedenle, herhangi bir açıklama için minnettar olacağım (platform geliştiricilerinden, yazardan, üçüncü taraf geliştiricilerden).

Öte yandan, deneyler sırasında dikdörtgenler elde etmenin o kadar da zor olmadığı ortaya çıktı - sadece boş değerlerden oluşan bir bölümden sonra dosyalama tamponlarını değiştirmeniz gerekiyor. Başka bir deyişle, bu kod

...
//--- 
   for ( int bar = startBar; bar < rates_total && !IsStopped(); bar++ ) {
      if ( prev_calculated != rates_total && bar == rates_total - 1 ) {
         _up = up;
      }
      if ( bar % 4 == 0 ) {
         if ( up ) {
            draw(bar, high[bar], low[bar]);
            up = false;
         } else {
            draw(bar, low[bar], high[bar]);
            up = true;
         }
      }
   }
//--- sonraki çağrı için prev_calculated değerini döndürür
   return(rates_total);
}
//+------------------------------------------------------------------+
void draw(int bar, double price1, double price2) {
//---
   int start = bar-2;
   
   for ( int i = start; i <= bar; i++ ) {
      FillingBuffer1[i] = price1;
      FillingBuffer2[i] = price2;
   }
//---
}

bu sonucu verir:

Dolum Örneği


Sorun çözülmüş gibi görünüyor. Kullanıcı tarafından belirlenen zaman aralıklarını günlük olarak ayıran bir gösterge yazdım ve yeni bir sürprizle karşılaştım:

TimeZone

Ne kadar çevirirsem çevireyim, "yan etkileri" kaldıramıyorum. İlk durumda (yukarıdaki kod ve resim) böyle bir şey gözlemlenmediğini unutmayın.

Dolayısıyla, sorular:

  • ticaret seansları göstergesinin (yazının başındaki bağlantı) neden boş değer alanlarına yapışma sorunu yok?
  • neden bazı durumlarda dikdörtgenler normal çizilirken diğer durumlarda yan etkiler alıyoruz? Kodlar yazının sonuna eklenmiştir. (Evet, bu tür olaylar her zaman meydana gelseydi, çokgenler hakkındaki ifadeye katılırdım).

Tekrar ediyorum: Tüm açıklamalar için minnettar olacağım.

Not:1 Bana öyle geliyor ki, dikdörtgenler sorununun çözümü, nesnelere (bir şekilde gerçekten kullanmak istemediğim) iyi bir alternatif. Sonuçta, aynı zaman aralıkları seçimi ve doğrusal tersine çevirme ve Darvas alanları ve çeşitli desenlerin seçimi, vb.

Not:2 TimeZone göstergesini kod tabanına koymayı düşündüm, ancak buna değer mi ("sol" çubuklarla)?

Dosyalar:
 
"Sol" çubukları oluşturma hatası düzeltildi.
 

aralığı doldurmamak için PlotIndexSetDouble (1,PLOT_EMPTY_VALUE,EMPTY_VALUE); kullanın.

Neden bazen etki ediyor ama bazen etki etmiyor?


ref https://www.mql5.com/zh/forum/417956/page4

问题,错误的讨论
问题,错误的讨论
  • 2022.05.05
  • www.mql5.com
那么,让我们开始吧...