Tek aralıklı yazı tipinde grafik çıktısı nasıl görüntülenir? - sayfa 3

 
Victor Ziborov :

Parametrelerin test edilmesi ve optimize edilmesi aşamasında, Comment'e çıktı ve Label'a çıktılar devre dışı bırakılabilir, ancak Expert Advisor'ı gerçek hayatta kullanma zamanı geldiğinde, Comment'e çıktı ve Label'a çıktı tekrar etkinleştirilmelidir.


teşekkürler cap )))))) bilmiyorduk

 
Victor Ziborov :

Parametrelerin test edilmesi ve optimize edilmesi aşamasında, Comment'e çıktı ve Label'a çıktılar devre dışı bırakılabilir, ancak Expert Advisor'ı gerçek hayatta kullanma zamanı geldiğinde, Comment'e çıktı ve Label'a çıktı tekrar etkinleştirilmelidir.

Eh, bu genellikle otomatik olarak yapılır:

 bool bIsComment = (! IsTesting () || IsVisualMode ());

Kodun yanı sıra, Yorum'u görüntülemek veya herhangi bir grafik yapı gerçekleştirmek gerekirse, bIsComment'ı kontrol ederiz. Sonuç olarak, hiçbir şeyi manuel olarak değiştirmeniz gerekmez.

 
Ihor Herasko :

Eh, bu genellikle otomatik olarak yapılır:

Kodun yanı sıra, Yorum'u görüntülemek veya herhangi bir grafik yapı gerçekleştirmek gerekirse, bIsComment'ı kontrol ederiz. Sonuç olarak, hiçbir şeyi manuel olarak değiştirmeniz gerekmez.


Ve manuel olarak yapmanız gerektiğini nerede söyledi? Bir şey mi kaçırdım?

 
Yury Kirillov :

Ve manuel olarak yapmanız gerektiğini nerede söyledi? Bir şey mi kaçırdım?


Bu gönderiye yanıt verildi. Orada, prensipte, belirsiz. Ancak bir şekilde daha çok "devre dışı bırak" gibi görünüyor ve "etkinleştir", programın nasıl başlatıldığına bağlı olarak kullanıcı tarafından değiştirilen bir ayar parametresidir. Sadece böyle bir parametrenin gerekli olmadığı açıklandı.

 
Artem Virskiy :

Her karakterin genişliğini piksel cinsinden ölçebilirsiniz (aynı genişliğe sahip birkaç grup olacaktır). Belirtilen genişliğe ulaşılana kadar herhangi bir dizeyi boşluklarla dolduracak bir işlev yazın. Daha sonra bu alt dizelerden yorumu toplamak için.

Böyle bir işlev yaparsanız, kod tabanına koyun, çoğu minnettar olacaktır. Ve ben de. Ve rahatsız edemeyecek kadar tembel.

Bu durumda, \x200A karakteri yararlı olacaktır - tam bir uyum için minimum genişlikte bir boşluk. Ve normal boşlukları /1 - geniş bir boşluk sembolü ile değiştirin (sonuçta yorumun uzunluğu sınırlıdır). Belki başkalarının kullanışlı alanları vardır. ama onları tanımıyorum.


Fikir için teşekkürler!

 
Yury Kirillov :
Yorum, grafik yazı tiplerinden önemli ölçüde daha hızlıdır.

Mantıklı ama değil.
Ve kontrol etmek kolaydır.
İşte MQL5'te bir komut dosyası (MT4'te denemedim):

 #property script_show_inputs
#include <Canvas\Canvas.mqh>

input uint    FontSize= 12 ;                                   // размер шрифта
input ENUM_COLOR_FORMAT format= COLOR_FORMAT_ARGB_NORMALIZE ; //Способ обработки цвета

void OnStart ()
  {
   CCanvas Text;
   ulong ColorScreen= ChartGetInteger ( 0 , CHART_COLOR_BACKGROUND , 0 );

   Text.FontSet( "Arial" ,FontSize);
   string str= "Соотношение времени выполнения Canvas/Comment = 0.00000" ;
   int H=Text.TextHeight(str);
   int W=Text.TextWidth(str);
   if (!Text.CreateBitmapLabel( 0 , 0 , "FONT" , 2 , 130 ,W,H,format)) Print ( "Error creating canvas: " , GetLastError ());

   ulong t1= 1 ,t2= 1 ,t0;
   int i= 0 ;
   color clr=( color )ARGB( 255 , 255 ^GETRGBR(ColorScreen), 255 ^GETRGBG(ColorScreen), 255 ^GETRGBB(ColorScreen));
   while (! IsStopped ())
     {
      t0= GetMicrosecondCount ();
      Text.Erase(( color )ColorScreen);
      Text. TextOut ( 0 , 0 ,str,clr);
      Text.Update();
      t1+= GetMicrosecondCount ()-t0;
      t0= GetMicrosecondCount ();
       Comment (str);
      t2+= GetMicrosecondCount ()-t0;
      str= "Соотношение времени выполнения Canvas/Comment = " + DoubleToString (( double )t1/( double )t2, 5 );
       if (i== 1000 ) { Print ( "Canvas - " ,t1, "   Comment - " ,t2); i= 0 ; t1= 1 ; t2= 1 ; } else i++;
     }
   Text.Destroy();
   Comment ( "" );

}

Test, grafik çıktısının yaklaşık %10 daha hızlı olduğunu gösteriyor. Aynı zamanda, yorumdan farklı olarak grafik çıktı yöntemi yazı tipini yumuşatır. Ancak en ilginç olan şey, yazı tipi boyutu 30'a (12 yerine) ayarlansa bile hızın hala daha yüksek olmasıdır. Şahsen benim için bu bir gizem.

Dosyalar:
 
Alexey Volchanskiy :

Yani 60k/sn çizgi film yapmıyorum, çıkardım ve tamam

Karikatürlü tuval de başa çıkacak.


Dosyalar:
 
Nikolai Semko :


İşte MQL5'te bir komut dosyası (MT4'te denemedim):


MT4'te denedim. Kod da üzerinde çalışıyor.
MT4'te Yorum , grafiksel muadilinden yaklaşık 5 kat daha hızlı olduğu ortaya çıktı. Ayrıca, MT5 Comment()'de MT4'e göre 5-6 kat daha yavaş çalıştığı ortaya çıktı. Ancak bu zaten hoş olmayan bir sürpriz ve tuhaflık. Sonra geliştiricilere bir soru. Nasıl yani? Sonuçta, bu beş için açık bir hata!

 
Nikolai Semko :

Mantıklı ama değil.
Ve kontrol etmek kolaydır.
İşte MQL5'te bir komut dosyası (MT4'te denemedim):

Test, grafik çıktısının yaklaşık %10 daha hızlı olduğunu gösteriyor. Aynı zamanda, yorumdan farklı olarak grafik çıktı yöntemi yazı tipini yumuşatır. Ancak en ilginç olanı, yazı tipi boyutu 30'a (12 yerine) ayarlansa bile hızın hala daha yüksek olmasıdır. Şahsen benim için bu bir gizem.


Bu ölçüler hiçbir şey değildir. Yorum ve Tuval için ayrı ayrı on binlerce geçişten oluşan ayrı döngüler yapmanız gerekir, sonra bir şeyi yargılayabilirsiniz. Ve çıktı metninin değişmesi için örneğin sayaç değerinin görüntülenmesine izin verin.

Bu şekilde yeniden yapabilir misin?

 
Alexey Volchanskiy :

Bu ölçüler hiçbir şey değildir. Yorum ve Tuval için ayrı ayrı on binlerce geçişten oluşan ayrı döngüler yapmanız gerekir, sonra bir şeyi yargılayabilirsiniz. Ve çıktı metninin değişmesi için örneğin sayaç değerinin görüntülenmesine izin verin.

Bu şekilde yeniden yapabilir misin?


Ayrıca döngüleri ayrı ayrı yaptım, sonucun bir şekilde garip olduğunu da düşündüm. Hepsi aynı. Aynı sonuçlar. Genel döngü veya ayrı ayrı fark yoktur. Örneğimde, metin her seferinde değişiyor, bunun neden fark edilmemesi garip. Ben de derleyici optimizasyonunu biliyorum. ))