Benim yaklaşımım. Çekirdek - Motor. - sayfa 126

 
Nikolai Semko :
MT4 ise, evet.
MT5, anladığım kadarıyla, MT4'ün aksine tamamen çok çekirdekli ve çoklu iş parçacığını destekliyor.

Görünüşe göre yükü kaldırmak için OpenCL kullanmanız gerekiyor. Ama MT4'te öyle değil. Ya da sadece buna katlan.

Başka bir seçenek de, kullanıcının animasyonu yeniden çizme hızını kontrol etmesine izin vermektir. Bu durumda gerektiğinde işlemci üzerindeki yükü azaltabilecek, isterse tekrar artırabilecektir.

 
Реter Konow :

Görünüşe göre yükü kaldırmak için OpenCL kullanmanız gerekiyor. Ama MT4'te öyle değil. Ya da sadece buna katlan.

Başka bir seçenek de, kullanıcının animasyonu yeniden çizme hızını kontrol etmesine izin vermektir. Bu durumda gerektiğinde işlemci üzerindeki yükü azaltabilecek, isterse tekrar artırabilecektir.

Şimdilik MT5'e geçin.
MT5'te farklı pencerelere kurulu olan, ancak yalnızca bir pencerenin kaynaklarıyla çalışan iki Expert Advisor'ın çalışmalarını kontrol etmek ilginçtir. Ne de olsa her Expert Advisor'ın kendi akışı vardır ve bildiğiniz gibi birden fazla Expert Advisor'ı bir pencereye atamazsınız.
 
Nikolai Semko :
MT5'te farklı pencerelere kurulu olan, ancak yalnızca bir pencerenin kaynaklarıyla çalışan iki Expert Advisor'ın çalışmalarını kontrol etmek ilginçtir. Ne de olsa her Expert Advisor'ın kendi akışı vardır ve bildiğiniz gibi birden fazla Expert Advisor'ı bir pencereye atamazsınız.

Öyle görünüyor ki, MT4'te her danışmanın da kendi akışı var. Eğer yanılmıyorsam...

İş parçacığı kendine ait, ancak işlemci herkes için aynı ...

Sanırım bu yüzden bir grafik haritası oluşturdular.

 

Başka bir nüans var.

Animasyon döngüsel ise (gif gibi), piksel dizisini kalıcı olarak yeniden başlatmak gerekli değildir. Bir animasyon çizim döngüsünden geçmek ve her kareyi bir kaynakta saklamak mümkündür. Ardından, sadece görüntüyü değiştirin. Kısmen bunu uyguladım ve bu sayede çoklu bir animasyon ivmesi elde ettim. (Başlangıçta, animasyon hızı korkunçtu, çünkü her seferinde orijinal görüntüyü yeniden çiziyor ve ardından üzerine yeni bir görüntü çiziyor).

 
Реter Konow :

Öyle görünüyor ki, MT4'te her danışmanın da kendi akışı var. Eğer yanılmıyorsam...

İş parçacığı kendine ait, ancak işlemci herkes için aynı ...

Sanırım bu yüzden bir grafik haritası oluşturdular.

Sadece MT4 ve MT5 arasındaki farkı anlamak için, bu kodu her iki platformda da çalıştırın (kod orada ve orada çalışır) ve MT4'te daha yavaş çalıştığını göreceksiniz:

 #define protected public
#include <Canvas\Canvas.mqh>
#undef protected
#property script_show_inputs 
input uint N= 8 ; // количество центов гравитации
void OnStart ()
  {
   ChartSetInteger ( 0 , CHART_FOREGROUND , true );
   CCanvas C;
   int Width=( ushort ) ChartGetInteger ( 0 , CHART_WIDTH_IN_PIXELS );                               // get Window width
   int Height=( ushort ) ChartGetInteger ( 0 , CHART_HEIGHT_IN_PIXELS );                             // get Window height 
   if (!C.CreateBitmapLabel( 0 , 0 , "CanvasExamlple" , 0 , 0 ,Width,Height, COLOR_FORMAT_XRGB_NOALPHA )) // create canvas with the size of the current window
       Print ( "Error creating canvas: " , GetLastError ());
   uint i= 0 ,j= 100000 ;
   int size=Width*Height;
   uchar h[ 25600 ];
   ArrayInitialize (h, 0 );
   uint w;
   for (w= 0 ;w< 25600 ;w++) h[w]= uchar ( 128 + 128 * sin ( double (w)/ 256 )); //create an array to speed up the work
   double SQRT[];
   uint ss=Width*Width+Height*Height;
   Print (ss);
   ArrayResize (SQRT,ss);
   for (w= 0 ;w<ss;w++) SQRT[( int )w]= sqrt (w); //create an array to speed up the work 
   int k[]; ArrayResize (k,N* 2 );
   for (w= 0 ;w<N* 2 ;w++) k[w]= 20 + rand ()% 200 ;
   double XP[],YP[],D[],D1[];
   ArrayResize (XP,N);
   ArrayResize (YP,N);
   ArrayResize (D,N);
   ArrayInitialize (XP, 0 );
   ArrayInitialize (YP, 0 );
   ulong t= 0 ,sum= 0 , f= 0 ;
   C.FontSet( "Verdana" , 50 , FW_MEDIUM );
   while (! IsStopped ())
     {
       int pos= int (i%size);
       if (pos== 0 )
        {
         //Sleep(20); //For those who have a too powerful computer.
         if (i> 0 ) {t= GetMicrosecondCount ()-t; sum+=t; f++; 
         C. TextOut (Width/ 2 ,Height/ 2 , "Время формирования кадра = " + IntegerToString (sum/f)+ " мкс" , clrBlueViolet , TA_CENTER | TA_VCENTER );}
         C.Update();
         t= GetMicrosecondCount ();
         for (w= 0 ;w<N;w++)
           {
            XP[w]= Width/ 2 -( sin (( double )j/k[ 2 *w])*( double )Width/ 2 );
            YP[w]= Height/ 2 -( cos (( double )j/k[ 2 *w+ 1 ])*( double )Height/ 2 );
           }
         j++;
        }
       int X=pos%Width;
       int Y= int (pos/Width);
      
     // for(int w=0;w<N;w++) D1[w]=SQRT[int((XP[w]-X)*(XP[w]-X)+(YP[w]-Y)*(YP[w]-Y))];
       for (w= 0 ;w<N;w++) D[w]=     sqrt ((XP[w]-X)*(XP[w]-X)+(YP[w]-Y)*(YP[w]-Y));
       double S1= 0 ,S2;
       for (w= 0 ;w<N/ 2 ;w++) S1+=D[w];
      S2=S1;
       for (w=N/ 2 ;w<N;w++) S2+=D[w];
       double d=S1/S2;
      
       //double d= (D[0]+D[1]+D[2]+D[3])/(D[0]+D[1]+D[2]+D[3]+D[4]+D[5]+D[6]+D[7]);
       //d= (D[0]+D[1])/(D[0]+D[1]+D[2]+D[3]);
      C.m_pixels[pos]=XRGB(h[ int (d* 11520 )],h[ int (d* 17920 )],h[ int (d* 6400 )]); // works a little faster, but requires transferring the array m_pixels from protected to public in Canvas.mqh
       //C.PixelSet(X,Y,XRGB(h[int(d*11520)],h[int(d*17920)],h[int(d*6400)]));
      i++;
     }
   C.Destroy();
  }
//+------------------------------------------------------------------+
 
Nikolai Semko :

Sadece MT4 ve MT5 arasındaki farkı anlamak için, bu kodu her iki platformda da çalıştırın (kod orada ve orada çalışır) ve MT4'te daha yavaş çalıştığını göreceksiniz:

Evet, oraya buraya koydum. Fark yaklaşık 10 kat. Tam olarak, çünkü MT5'te diziler 10 veya daha fazla kat daha hızlı başlatılır. Kontrol ettim.

Ancak, MT4'te bile her şey çok daha hızlı olmalıdır. Sonuçta, sadece görüntüyü yeniden çiziyorsunuz. Başka bir şey, onu bir dizide tekrar tekrar işlemenizdir.

Sizin için MT4'te neden bu kadar yavaş çalıştığını bilmiyorum.

 

Ancak, grafik boyutlu tuvalin tüm alanındaki HER pikseli yeniden başlatmanız mümkündür.

Animasyonumda sadece belirli alanlar çiziliyor ve görüntünün ana kısmı tamamen kaynaktan alınmış. Ana parçanız yok ve görüntü tamamen oluşturuldu. Bu nedenle yavaşlar.

Resmin boyutuyla ilgili.

 
Реter Konow :

Ancak, grafik boyutlu tuvalin tüm alanındaki HER pikseli yeniden başlatmanız mümkündür.

Animasyonumda sadece belirli alanlar çiziliyor ve görüntünün ana kısmı tamamen kaynaktan alınıyor. Ana parçanız yok ve görüntü tamamen oluşturuldu. Bu nedenle yavaşlar.

Resmin boyutuyla ilgili.

Kimin umrunda. Bu, tuval hızında MT5'in avantajlarını açıkça gösteren, özellikle uç bir örnektir. Ve bu soru, yavrularınız için arşiv niteliğindedir. Bu nedenle uzun zamandır söylüyorum - MQL5'e geçin.
Gerçek kalıntılar. mt5'te görüntü çerçeveleme, mt4'ten 10 kat daha hızlıdır. Ve bu çok güçlü bir argüman.
 
Nikolai Semko :
Kimin umrunda. Bu, tuval hızında MT5'in avantajlarını açıkça gösteren, özellikle uç bir örnektir. Ve bu soru, yavrularınız için arşiv niteliğindedir. Bu nedenle uzun zamandır söylüyorum - MQL5'e geçin.
Gerçek kalıntılar. mt5'te görüntü çerçeveleme, mt4'ten 10 kat daha hızlıdır. Ve bu çok güçlü bir argüman.

Eksileri MT4 - geliştirmede ihtiyacınız olan şey. Onlardan kaçmak zorunda değilsin. Sizi düşündürür ve çözümler geliştirir.

MT5'te çok fazla çabalamanıza gerek yok. Her şey çok hızlı çalışıyor. Bu nedenle finalde MT5'e geçiş planlanıyor.

 
Реter Konow :

Son olarak dinamik tablo yapılır. Kolay olmadığını söylemeliyim. Birçok nüans olduğu ortaya çıktı.

Ayrıca, bu tablo "koşullu" dinamiktir. Yani, maksimum satır sayısı önceden belirlenir. Henüz "mutlak" dinamik hale getirmek mümkün olmamıştır.

Bu tabloda, 20 olası satır vardır. Bu, 20 açık pozisyon gösterebileceği anlamına gelir. Daha fazlası yapılabilir, ancak şimdilik bu sadece bir gösteri.

Görüntülemek için tıklayın.

Bağlantı dosyaları (dahil edilen), motor (göstergeler klasöründeki) ve test.advisor (uzmanlar klasöründeki):

Peter, üzgünüm ama çalışman kabul edilmiyor çünkü. gönderdiğin şey nadir bir hack. Kusura bakmayın ama görünüşe göre gönderdiğiniz şeyi başlatan tek kişi benim ve benden başka kimse incelemeyi yapmayacak.

Yani, sırayla, görev şuydu:

fiyat , yön, kâr. Gerisi size kalmış. Ana şey, bir siparişi kapattığınızda, tablonuzdaki görüntüsünün de kaybolmasıdır. Ve tam tersi, yeni bir sipariş açarken bu tabloda görünecektir.

Bunun yerine ne görüyorum:

Öncelikle panelinizden alım/satım butonuna tıklayarak işlemler açılabilir. Standart bir pencereden bir pozisyon açılırsa, anlaşma görünmez.

İkincisi, bazı siparişler boş değerlerle görüntülenir. Tabloda bulunurlar, ancak satırlar boştur.

Üçüncüsü, (bu genellikle korkudur), sipariş standart diyalog yoluyla kapatılırsa, o zaman tabloda kaybolmaz. Ama en üzücü olan şey, panel yeniden yüklendiğinde, kapalı emirlerin tekrar sözde açık olarak görüntülenmesi! Bu ne? Neden alakasız bilgileri bir yerde saklıyorsunuz ve sonra onu yüklemeye çalışıyorsunuz!?

Dördüncüsü, 20 emir de ne? Benim ödevimde bu kısıtlamayla ilgili tek kelime yok! Bu, motorunuzu dinamik ve önceden bilinmeyen bir ortamda çalışmak üzere test etmek amacıyla bilerek yapıldı. Görev tesadüfen seçilmedi, gereksinimlerimi motorunuzun tüm "keskin köşelerini" gizleyecek şekilde değiştirdiniz. Ama bu keskin köşeleri göstermek için görev verildi.

Beşincisi, zararı durdur ve kar al ayarında amatör performans - bunu yapmayın. Bu alanları boş bırakın.

Ve evet, panelinizdeki kapat düğmesi (çarpı) da çalışmıyor.

Kısacası, Peter Tekrar söylüyorum: Üzgünüm ama gönderdikleriniz tamamen çöp. Lütfen spesifikasyona göre düzeltin.

Soru olmaması için görevi tekrar açıklayacağım:

  1. Tablo dinamiktir ve Ticaret sekmesindeki ile aynı emirleri gösterir. Sekmede sipariş yoksa, masada da yoktur.
  2. Tablonuzda görüntülenen sipariş sayısı herhangi biri olmalıdır. Üst limit yoktur.
  3. Standart iletişim kutusu aracılığıyla bir sipariş açmak, siparişin tablonuzda görünmesiyle sonuçlanmalıdır. Standart yollarla bir siparişi kapatmak, masanızdaki siparişin kaybolmasına neden olmalıdır.
  4. Tutarsız duruma izin verilmez ! Tablonuz bir şey gösteriyorsa ve Ticaret sekmesi başka bir şey gösteriyorsa, bu bir hatadır.

Yağ başarısız olana kadar . Geliştirmelerinizi bekliyorum. Ve siz anlayana kadar 3D render yok!