Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 83

 
fxsaber :

Cevabımı tekrar oku. Kısa bir kaynak açın, anlayın ve ... kar edin!

Tabii ki kaynağı açtım yoksa nasıl olur. Doğru, tüm bunlara MT5 için ihtiyacım olduğunu belirtmedim, ancak bir fikir arıyorum ...

GetBarSize() işlevinde bu görevin hangi satırda çözüldüğünü (fikrin gizlendiğini) söyleyebilir misiniz?

 #property show_inputs

extern int Width = 1280 ;
extern int Height = 800 ;

#import "user32.dll"
   int GetClientRect( int hWnd, int lpRect[] );
#import

#define BORDER_SIZE 44

int GetBarSize()
{
   int Rect[ 4 ], PrevBars, PrevRect, Res = 1 ;
   int hwnd = WindowHandle ( Symbol (), Period ());

  GetClientRect(hwnd, Rect);
  PrevRect = Rect[ 2 ] - BORDER_SIZE;
  PrevBars = WindowBarsPerChart ();

  PrevBars += PrevBars;
    
   while (PrevBars <= PrevRect)
  {
    Res += Res;
    PrevBars += PrevBars;
  }
  
   return (Res);
}

string StrNumToLen( string Num, int Len )
{
  Len -= StringLen (Num);
  
   while (Len > 0 )
  {
    Num = "0" + Num;
    Len--;
  }
  
   return (Num);
}

void start()
{
   int Pos = WindowFirstVisibleBar (), Step, i = 1 ;
   string Directory = Width + "x" + Height + "_" + Symbol () + Period () + " (" +
                     TimeToStr ( Time [Pos], TIME_DATE ) + "-" +
                     TimeToStr ( Time [ 0 ], TIME_DATE ) + ")/" ;

  Pos += 2 ;
  Step = 1 + (Width - BORDER_SIZE) / GetBarSize();
  
   while (Pos >= 0 )
  {
     WindowScreenShot (Directory + StrNumToLen(i, 5 ) + ".gif" , Width, Height, Pos);
    i++;
    Pos -= Step;
  }
  
   return ;
}
 
Alexey Vyazmikin :

Tabii ki kaynağı açtım yoksa nasıl olur. Doğru, tüm bunlara MT5 için ihtiyacım olduğunu belirtmedim, ancak bir fikir arıyorum ...

GetBarSize() işlevinde bu görevin hangi satırda çözüldüğünü (fikrin gizlendiğini) söyleyebilir misiniz?

 int GetBarSize( const ulong Chart = 0 )
{
   return ( 1 << ( int ) ChartGetInteger (Chart, CHART_SCALE ));
}
 
fxsaber :

Kendimi aptal gibi hissediyorum, "<<" ne anlama geliyor? Ve grafiğin ölçeği nedir?

 
Alexey Vyazmikin :

Kendimi aptal gibi hissediyorum, "<<" ne anlama geliyor?

Bu, bit düzeyinde bir sola kaydırmadır . 1 (ikili gösterimde 0000 0001), ChartGetInteger tarafından döndürülen değer kadar sola kaydırılacaktır. Genel olarak, bu 2'nin kuvvetinin üslenmesidir.

Sonuç, 1 çubuk başına piksel sayısı olacaktır.

 
Ihor Herasko :

Bu, bit düzeyinde bir sola kaydırmadır . 1 (ikili gösterimde 0000 0001), ChartGetInteger tarafından döndürülen değer kadar sola kaydırılacaktır. Genel olarak, bu 2'nin kuvvetinin üslenmesidir.

Sonuç, 1 çubuk başına piksel sayısı olacaktır.

Açıklama için teşekkürler, deneyeceğim!

fxsaber :

Teşekkür ederim!

 

Rosh, aramadaki yardımın için çok teşekkür ederim!

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

İlyas , 2016.08.24 11:08

Dizi ("inside"), ayrılan - dizinin kaç öğenin altında ayrıldığını saklar.

Yedekle çalışmanın mantığı (koşullu kod):
 ArrayResize (arr, int size, int reserve)
  {
   if (arr.allocated<size)
       if (!ArrayAllocateMemory(arr,size+reserve))   // -> arr.allocated=size+reserve;
         return (- 1 );
   //---
   CallConstructorsOrDestructors(arr,size);
   //---
   arr.size=size;
   return (size);
  }

Çok kötü tahsis hiç mevcut değil (dizi sarmalayıcılar bir seçenek değildir). Belki bazı işlevler ekleyin?

 int ArrayAllocated( const void &  array[] );

Sonuçta, dizeler için StringBufferLen var.

 
Bu konu ile ilgili olmayan yorumlar " Hatalar, hatalar, sorular " bölümüne taşınmıştır.
 
Bu konu ile ilgili olmayan yorumlar " Hatalar, hatalar, sorular " bölümüne taşınmıştır.
 
string Str = "123.456" ;

double Num1 = StringToDouble (Str);  
double Num2 = ( double )Str; // Быстрее


Bu seçenek çok daha hızlı (Hata Ayıkla değil Yayınla)

 double StringToDouble2( const string Str, const uint StartPos = 0 )
{
   const uint Size = StringLen (Str);
  
   bool Sign = false ;  
   uint i = StartPos;
  
   while (i < Size)
  {
     const int Digit = Str[i];

     if ((Digit != ' ' ) && (Digit != '\t' ) && (Digit != '\n' ) && (Digit != '\r' ))
    {
       if ((Sign = (Digit == '-' )) || (Digit == '+' ))
        i++;
      
       break ;
    }
      
    i++;
  }

   long Res = 0 ;
   int point = 0 ;
  
   while (i < Size)
  {
     const int Digit = Str[i];
    
     if (!point && (Digit == '.' ))
      point = 1 ;
     else if (((Digit >= '0' ) && (Digit <= '9' )))
    {
      Res = Res * 10 + Digit - '0' ;
      
       if (point)
        point *= 10 ;
    }
     else
       break ;
      
    i++;
  }
  
   if (Sign)
    Res = -Res;
  
   return ((point > 1 ) ? Res / ( double )point : Res); // Возможна потеря точности при делении
}

Hacimsel veriler ayrıştırılırken önemli bir ivme elde edilir.

 
fxsaber :


Bu seçenek çok daha hızlı (Hata Ayıkla değil Yayınla)


Hacimsel veriler ayrıştırılırken önemli bir ivme elde edilir .

Bunu göstermek için kıyaslama kodunu sağlayabilir misiniz?