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

 
Andrey Khatimliansky :

Piyasa İzleme'de kaç enstrüman var?

61.

 
fxsaber :

1907 sürümünde böcekler mucizevi bir şekilde ortadan kayboldu. Onları bulmak için geri dönüp dönmeyeceğimi bile bilmiyorum, yoksa bu yerde bir şeyler düzeltildi ...

 

Bina göstergeleri hakkında soru

#property indicator_chart_window

#property indicator_buffers 12

#property indicator_plots   6

#property indicator_type1   DRAW_COLOR_LINE

#property indicator_type2   DRAW_COLOR_LINE

#property indicator_type3   DRAW_COLOR_LINE

#property indicator_type4   DRAW_COLOR_LINE

#property indicator_type5   DRAW_COLOR_LINE

#property indicator_type6   DRAW_COLOR_LINE 


SetIndexBuffer(0,upper_line,INDICATOR_DATA);

   SetIndexBuffer(1,upper_line_color,INDICATOR_COLOR_INDEX);


   PlotIndexSetString(0,PLOT_LABEL,"Upper Line");

   PlotIndexSetInteger(0,PLOT_LINE_STYLE,UpperStyle);

   PlotIndexSetInteger(0,PLOT_LINE_WIDTH,UpperWidth);

   PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,2);

   PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,UpperTrendUp);

   PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,UpperTrendDw);

// ==========

   SetIndexBuffer(2,awera_line,INDICATOR_DATA);

   SetIndexBuffer(3,awera_line_color,INDICATOR_COLOR_INDEX);


   PlotIndexSetString(1,PLOT_LABEL,"Average Line");

   PlotIndexSetInteger(1,PLOT_LINE_STYLE,AverageStyle);

   PlotIndexSetInteger(1,PLOT_LINE_WIDTH,AverageWidth);

   PlotIndexSetInteger(1,PLOT_COLOR_INDEXES,2);

   PlotIndexSetInteger(1,PLOT_LINE_COLOR,0,AverageTrendUp);

   PlotIndexSetInteger(1,PLOT_LINE_COLOR,1,AverageTrendDw);

// ==========

   SetIndexBuffer(4,lower_line,INDICATOR_DATA);

   SetIndexBuffer(5,lower_line_color,INDICATOR_COLOR_INDEX);


   PlotIndexSetString(2,PLOT_LABEL,"Lower Line");

   PlotIndexSetInteger(2,PLOT_LINE_STYLE,LowerStyle);

   PlotIndexSetInteger(2,PLOT_LINE_WIDTH,LowerWidth);

   PlotIndexSetInteger(2,PLOT_COLOR_INDEXES,2);

   PlotIndexSetInteger(2,PLOT_LINE_COLOR,0,LowerTrendUp);

   PlotIndexSetInteger(2,PLOT_LINE_COLOR,1,LowerTrendDw);

Kaç renk tamponu kullanılabilir?

Tamponlar birbirine nasıl bağlanır?

#property gösterge_buffers 12 // Yalnızca 12 arabellek bildirildi

#property Indicator_plots 6 // Grafik grafikler

1'den 6'ya kadar gösterge_tipi belirterek, göstergenin 6 grafik çizim için renkli bir çizgi çizilmesi gerektiğini anlayacağını doğru anlıyor muyum?

#özellik göstergesi_type1 DRAW_COLOR_LINE

#özellik göstergesi_type2 DRAW_COLOR_LINE

#özellik göstergesi_type3 DRAW_COLOR_LINE

#özellik göstergesi_type4 DRAW_COLOR_LINE

#özellik göstergesi_type5 DRAW_COLOR_LINE

#özellik göstergesi_type6 DRAW_COLOR_LINE


// =====

SetIndexBuffer(0,upper_line,INDICATOR_DATA); // İlk veri arabelleği

SetIndexBuffer(1,upper_line_color,INDICATOR_COLOR_INDEX); // Renk verileri için ikinci arabellek


PlotIndexSetString(0,PLOT_LABEL,"Üst Satır"); // İlk tamponun özelliklerini değiştirin

PlotIndexSetInteger(0,PLOT_LINE_STYLE,UpperStyle);// İlk tamponun özelliklerini değiştirin

PlotIndexSetInteger(0,PLOT_LINE_WIDTH,UpperWidth);// İlk tamponun özelliklerini değiştirin

PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,2);// İlk tamponun özelliklerini değiştir

PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,UpperTrendUp);// İlk tamponun özelliklerini değiştirin

PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,UpperTrendDw);// İlk tamponun özelliklerini değiştirin


SetIndexBuffer(2,awera_line,INDICATOR_DATA); // Üçüncü tampon

SetIndexBuffer(3,awera_line_color,INDICATOR_COLOR_INDEX); // Dördüncü renk arabelleği


PlotIndexSetString(1,PLOT_LABEL,"Ortalama Doğru"); // SetIndexBuffer(2,awera_line,INDICATOR_DATA) için arabellek özelliklerini değiştirin;

PlotIndexSetInteger(1,PLOT_LINE_STYLE,AverageStyle); // SetIndexBuffer(2,awera_line,INDICATOR_DATA) için arabellek özelliklerini değiştirin;

PlotIndexSetInteger(1,PLOT_LINE_WIDTH,AverageWidth); // SetIndexBuffer(2,awera_line,INDICATOR_DATA) için arabellek özelliklerini değiştirin;

PlotIndexSetInteger(1,PLOT_COLOR_INDEXES,2); // SetIndexBuffer(2,awera_line,INDICATOR_DATA) için arabellek özelliklerini değiştirin;

PlotIndexSetInteger(1,PLOT_LINE_COLOR,0,AverageTrendUp); // SetIndexBuffer(2,awera_line,INDICATOR_DATA) için arabellek özelliklerini değiştirin;

PlotIndexSetInteger(1,PLOT_LINE_COLOR,1,AverageTrendDw); // SetIndexBuffer(2,awera_line,INDICATOR_DATA) için arabellek özelliklerini değiştirin;

 
Vladimir Pastuşak :

Bina göstergeleri hakkında soru

#property indicator_chart_window

#property indicator_buffers 12

#property indicator_plots   6

#property indicator_type1   DRAW_COLOR_LINE

#property indicator_type2   DRAW_COLOR_LINE

#property indicator_type3   DRAW_COLOR_LINE

#property indicator_type4   DRAW_COLOR_LINE

#property indicator_type5   DRAW_COLOR_LINE

#property indicator_type6   DRAW_COLOR_LINE 


SetIndexBuffer(0,upper_line,INDICATOR_DATA);

   SetIndexBuffer(1,upper_line_color,INDICATOR_COLOR_INDEX);


   PlotIndexSetString(0,PLOT_LABEL,"Upper Line");

   PlotIndexSetInteger(0,PLOT_LINE_STYLE,UpperStyle);

   PlotIndexSetInteger(0,PLOT_LINE_WIDTH,UpperWidth);

   PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,2);

   PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,UpperTrendUp);

   PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,UpperTrendDw);

// ==========

   SetIndexBuffer(2,awera_line,INDICATOR_DATA);

   SetIndexBuffer(3,awera_line_color,INDICATOR_COLOR_INDEX);


   PlotIndexSetString(1,PLOT_LABEL,"Average Line");

   PlotIndexSetInteger(1,PLOT_LINE_STYLE,AverageStyle);

   PlotIndexSetInteger(1,PLOT_LINE_WIDTH,AverageWidth);

   PlotIndexSetInteger(1,PLOT_COLOR_INDEXES,2);

   PlotIndexSetInteger(1,PLOT_LINE_COLOR,0,AverageTrendUp);

   PlotIndexSetInteger(1,PLOT_LINE_COLOR,1,AverageTrendDw);

// ==========

   SetIndexBuffer(4,lower_line,INDICATOR_DATA);

   SetIndexBuffer(5,lower_line_color,INDICATOR_COLOR_INDEX);


   PlotIndexSetString(2,PLOT_LABEL,"Lower Line");

   PlotIndexSetInteger(2,PLOT_LINE_STYLE,LowerStyle);

   PlotIndexSetInteger(2,PLOT_LINE_WIDTH,LowerWidth);

   PlotIndexSetInteger(2,PLOT_COLOR_INDEXES,2);

   PlotIndexSetInteger(2,PLOT_LINE_COLOR,0,LowerTrendUp);

   PlotIndexSetInteger(2,PLOT_LINE_COLOR,1,LowerTrendDw);

Kaç renk tamponu kullanılabilir?

Tamponlar birbirine nasıl bağlanır?

#property gösterge_buffers 12 // Yalnızca 12 arabellek bildirildi

#property Indicator_plots 6 // Grafik grafikler

1'den 6'ya kadar gösterge_tipi belirterek, göstergenin 6 grafik çizim için renkli bir çizgi çizilmesi gerektiğini anlayacağını doğru anlıyor muyum?

#özellik göstergesi_type1 DRAW_COLOR_LINE

#özellik göstergesi_type2 DRAW_COLOR_LINE

#özellik göstergesi_type3 DRAW_COLOR_LINE

#özellik göstergesi_type4 DRAW_COLOR_LINE

#özellik göstergesi_type5 DRAW_COLOR_LINE

#özellik göstergesi_type6 DRAW_COLOR_LINE


// =====

SetIndexBuffer(0,upper_line,INDICATOR_DATA); // İlk veri arabelleği

SetIndexBuffer(1,upper_line_color,INDICATOR_COLOR_INDEX); // Renk verileri için ikinci arabellek


PlotIndexSetString(0,PLOT_LABEL,"Üst Satır"); // İlk tamponun özelliklerini değiştirin

PlotIndexSetInteger(0,PLOT_LINE_STYLE,UpperStyle);// İlk tamponun özelliklerini değiştirin

PlotIndexSetInteger(0,PLOT_LINE_WIDTH,UpperWidth);// İlk tamponun özelliklerini değiştirin

PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,2);// İlk tamponun özelliklerini değiştir

PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,UpperTrendUp);// İlk tamponun özelliklerini değiştirin

PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,UpperTrendDw);// İlk tamponun özelliklerini değiştirin


SetIndexBuffer(2,awera_line,INDICATOR_DATA); // Üçüncü tampon

SetIndexBuffer(3,awera_line_color,INDICATOR_COLOR_INDEX); // Dördüncü renk arabelleği


PlotIndexSetString(1,PLOT_LABEL,"Ortalama Doğru"); // SetIndexBuffer(2,awera_line,INDICATOR_DATA) için arabellek özelliklerini değiştirin;

PlotIndexSetInteger(1,PLOT_LINE_STYLE,AverageStyle); // SetIndexBuffer(2,awera_line,INDICATOR_DATA) için arabellek özelliklerini değiştirin;

PlotIndexSetInteger(1,PLOT_LINE_WIDTH,AverageWidth); // SetIndexBuffer(2,awera_line,INDICATOR_DATA) için arabellek özelliklerini değiştirin;

PlotIndexSetInteger(1,PLOT_COLOR_INDEXES,2); // SetIndexBuffer(2,awera_line,INDICATOR_DATA) için arabellek özelliklerini değiştirin;

PlotIndexSetInteger(1,PLOT_LINE_COLOR,0,AverageTrendUp); // SetIndexBuffer(2,awera_line,INDICATOR_DATA) için arabellek özelliklerini değiştirin;

PlotIndexSetInteger(1,PLOT_LINE_COLOR,1,AverageTrendDw); // SetIndexBuffer(2,awera_line,INDICATOR_DATA) için arabellek özelliklerini değiştirin;

Sorunuz için ayrı bir konu açsanız iyi olur. Bu konu özelliklerle ilgili, burada tartışma olmamalı.

Yapı ilkesini daha iyi anlamak için işlevselliği aşamalı olarak uygulayın. Bir satır oluşturduk - performansı kontrol ettik, bir sonrakini ekledik.

Her grafik serisi (bu durumda bir renk çizgisi) yalnızca bir renk arabelleğine sahip olabilir. Her arabellek birden fazla renk içerebilir.

 
Andrey Khatimliansky :

1907 sürümünde böcekler mucizevi bir şekilde ortadan kayboldu. Onları bulmak için geri dönüp dönmeyeceğimi bile bilmiyorum, yoksa bu yerde bir şeyler düzeltildi ...

Hatalar ortadan kalktı, ancak olay kuyruğundaki sorunlar ortadan kalkmadı. Birkaç saatlik çalışmadan sonra terminal, CPU'yu %95'te yüklemeye başlar. Ve bir şey bana kenelerin atlandığını söylüyor.

 2018.10 . 11 23 : 56 : 54.069 Terminal        MetaTrader 5 x64 build 1907 started (MetaQuotes Software Corp.)
2018.10 . 11 23 : 56 : 54.139 Terminal        Windows 8.1 (build 9600 ) x64, IE 11 , UAC, Intel Core i5- 3570   @ 3.40 GHz, Memory: 11580 / 16346 Mb, Disk: 401 / 499 Gb, GMT+ 2

@Slava , 19x yapılarında ChartEvents'te bir şey değişti mi? Sorunu yeniden üretiyor musunuz?

 
Andrey Khatimliansky :

Hatalar ortadan kalktı, ancak olay kuyruğundaki sorunlar ortadan kalkmadı. Birkaç saatlik çalışmadan sonra terminal, CPU'yu %95'te yüklemeye başlar. Ve bir şey bana kenelerin atlandığını söylüyor.

@Slava , 19x yapılarında ChartEvents'te bir şey değişti mi? Sorunu yeniden üretiyor musunuz?

15 saatlik terminal çalışmasından sonra kaynak izleme şu şekilde görünür (bir casus tarafından minimum olay gönderme sıklığı 500 ms'dir):

Lansmandan birkaç saat sonra olmasına rağmen CPU kullanımı 0'a yakın.

 
Andrey Khatimliansky :

15 saatlik terminal çalışmasından sonra kaynak izleme şu şekilde görünür (bir casus tarafından minimum olay gönderme sıklığı 500 ms'dir):

Lansmandan birkaç saat sonra olmasına rağmen CPU kullanımı 0'a yakın.

1908'i oluşturun - değişiklik yok.

 

Temel tip yapı operatörlerini değiştirme yeteneği, bazı durumlarda esneklik sağlar.

Örnek olarak, aşağıda bir dizi yapıyı özel olarak sıralamanın püf noktalarından biri verilmiştir.

 // Основная структура
struct A
{
   int a;
   int b;
  
   // Правило сортировки
   bool operator > ( const A& Value ) const 
  {
     return ( this .a > Value.a);
  }
};

// Вспомогательная структура для изменения правила сортировки
struct B : A
{
   // Перегрузка правила сортировки
   bool operator > ( const A& Value ) const 
  {
     return ( this .b > Value.b);
  }
};

// Простая сортировка
template < typename T1, typename T2> // T2 - по какому правилу сортируем
void Sort( T1 &Array[] )
{
   const int Size = ArraySize (Array);
  
   for ( int i = 0 ; i < Size - 1 ; i++)
  {
    T2 Min = Array[i];
     int Pos = i;
    
     for ( int j = i + 1 ; j < Size; j++)
       if (Min > Array[j])
      {
        Min = Array[j];
        Pos = j;        
      }
      
     if (Pos != i)
    {
      Array[Pos] = Array[i];
      Array[i] = Min;
    }
  }
}

void OnStart ()
{
  A Array[ 3 ] = {{ 2 , 2 }, { 3 , 1 }, { 1 , 3 }};
  
   ArrayPrint (Array);
  
   // Сортировка по правилу A
  Sort<A, A>(Array); 
   ArrayPrint (Array);
  
   // Сортировка по правилу B
  Sort<A, B>(Array);  
   ArrayPrint (Array);
}


Sonuç

    [a] [b]
[ 0 ]   2    2
[ 1 ]   3    1
[ 2 ]   1    3
    [a] [b]
[ 0 ]   1    3
[ 1 ]   2    2
[ 2 ]   3    1
    [a] [b]
[ 0 ]   3    1
[ 1 ]   2    2
[ 2 ]   1    3


Muhtemelen eski bir bisiklet.

 
fxsaber :

Temel tip yapı operatörlerini değiştirme yeteneği, bazı durumlarda esneklik sağlar.

birkaç nokta var. mql'de < operatörü bir sınıf\yapı yöntemi olmalıdır.

bu, yerleşik yapılar için ayarlanamayacağı anlamına gelir. iyi, ya da değişmez için.

bu yöntem, varsayılan olarak < operatörünü çağıracak bir karşılaştırma şablonu işlevi eklenerek biraz geliştirilebilir.

UPD: < operatörünü her yere yazarım çünkü genellikle aşırı yüklerler ve > değil, bu katı değildir, ancak genel olarak kabul edilir
 
TheXpert :

birkaç nokta var. mql'de < operatörü bir sınıf\yapı yöntemi olmalıdır.

bu , yerleşik yapılar için ayarlanamayacağı anlamına gelir. iyi, ya da değişmez için.

 // Вспомогательная структура для изменения правила сортировки
struct MQLTICK_BID : MqlTick
{
   // Сортировка по времени
   bool operator <( const MqlTick & Value ) const 
  {
     return ( this .bid < Value.bid);
  }
};

// Простая сортировка
template < typename T1, typename T2> // T2 - по какому правилу сортируем
void Sort( T1 &Array[] )
{
   const int Size = ArraySize (Array);
  
   for ( int i = 0 ; i < Size - 1 ; i++)
  {
    T2 Min = Array[i];
     int Pos = i;
    
     for ( int j = i + 1 ; j < Size; j++)
       if (Min < Array[j])
      {
        Min = Array[j];
        Pos = j;        
      }
      
     if (Pos != i)
    {
      Array[Pos] = Array[i];
      Array[i] = Min;
    }
  }
}

void OnStart ()
{
   MqlTick Ticks[];
  
   CopyTicks ( _Symbol , Ticks, COPY_TICKS_ALL , 0 , 5 );
  
   ArrayPrint (Ticks);
  
   // Сортировка по правилу MQLTICK_BID
  Sort< MqlTick , MQLTICK_BID>(Ticks); 
   ArrayPrint (Ticks);
}


Sonuç

                 [time]   [bid]   [ask]  [last] [volume]    [time_msc] [flags] [volume_real]
[ 0 ] 2018.10 . 11 23 : 59 : 55 1.09115 1.09354 0.00000          0 1539302395303        6        0.00000
[ 1 ] 2018.10 . 11 23 : 59 : 56 1.09132 1.09348 0.00000          0 1539302396037        6        0.00000
[ 2 ] 2018.10 . 11 23 : 59 : 56 1.09131 1.09353 0.00000          0 1539302396302        6        0.00000
[ 3 ] 2018.10 . 11 23 : 59 : 59 1.09135 1.09354 0.00000          0 1539302399458        6        0.00000
[ 4 ] 2018.10 . 11 23 : 59 : 59 1.09139 1.09378 1.09260          0 1539302399989        14        0.00000
                 [time]   [bid]   [ask]  [last] [volume]    [time_msc] [flags] [volume_real]
[ 0 ] 2018.10 . 11 23 : 59 : 59 1.09139 1.09378 1.09260          0 1539302399989        14        0.00000
[ 1 ] 2018.10 . 11 23 : 59 : 59 1.09135 1.09354 0.00000          0 1539302399458        6        0.00000
[ 2 ] 2018.10 . 11 23 : 59 : 56 1.09132 1.09348 0.00000          0 1539302396037        6        0.00000
[ 3 ] 2018.10 . 11 23 : 59 : 56 1.09131 1.09353 0.00000          0 1539302396302        6        0.00000
[ 4 ] 2018.10 . 11 23 : 59 : 55 1.09115 1.09354 0.00000          0 1539302395303        6        0.00000


bu yöntem, varsayılan olarak < operatörünü çağıracak bir karşılaştırma şablonu işlevi eklenerek biraz geliştirilebilir.

Bir typedef kullanıyorsanız, yalnızca yapılar için değil, aynı zamanda standart sayısal türler için de bir sıralama işlevi tanımlamanız gerekir. Ya da belki neden bahsettiğini anlamıyorum.