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

 
fxsaber :

Saatin nereden geldiğine dair bir varsayım yok (aynısına sahibim). Belki de saat dilimine bağlıdır.


Yani artık ilginç değil.

Tahmin yok. Moskova'm var. GMT ile bir saat değil ... Başka düşünce yok.

 

Andrey Khatimlianskii :

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

Terminalde otomatik hata izleme - çözümler nelerdir?

Renat Fatkhullin , 2021.01.22 16:12

Print(NULL) aracılığıyla günlüklerin diske atılmasını zorlamanın belgelenmemiş bir yolu var.

Güzel!

 
Andrey Khatimlianskii :

fxsaber :

Güzel!

Kontrol etmeden paylaşmak için acele ettim.

 
Andrey Khatimlianskii :

Kontrol etmeden paylaşmak için acele ettim.


Ve dize ilk önce boşsa, o zaman baskıda
 

Grafiği görüntüleme (etkinleştirmeme) seçeneği (yalnızca MT5 için)

 // Показывает (не активирует) данный чарт.
bool ChartShow( const long Chart )
{
   const bool IsDocked = ChartGetInteger (Chart, CHART_IS_DOCKED );
  
   return ( ChartSetInteger (Chart, CHART_IS_DOCKED , !IsDocked) && 
         ChartSetInteger (Chart, CHART_IS_DOCKED , IsDocked) &&
         ChartGetInteger (Chart, CHART_WINDOW_HANDLE ));  
}


Kullanım örneği.

 // Переключает чарты клавишами клавиатуры '<'/'>'.

#define KEY_LEFT2 188    // '<'
#define KEY_RIGHT2 190 // '>'

int GetExpertCharts( long &Charts[], const string ExpertName = NULL )
{
   int Amount = 0 ;
  
   for ( long Chart = ChartFirst (); Chart != - 1 ; Chart = ChartNext (Chart))
     if ((ExpertName == NULL ) || ( ChartGetString (Chart, CHART_EXPERT_NAME ) == ExpertName))
    {
      Amount = ArrayResize (Charts, Amount + 1 , 10 );
      
      Charts[Amount - 1 ] = Chart;
    }
    
   return ( ArrayResize (Charts, Amount));
}

long ChartNextShow( const long Chart, const int Step = 1 )
{
   long ResChart = Chart;
  
   long Charts[];  
   const int Size = GetExpertCharts(Charts);
  
   if ((Size > 1 ) && ( bool )(Step % Size))
     for ( int i = 0 ; i < Size; i++)  
       if (Charts[i] == Chart)
      {
        ResChart = Charts[(i + ((Step > 0 ) ? Step : (Size - ((-Step) % Size)))) % Size];
        
        ChartShow(ResChart); // https://www.mql5.com/ru/forum/170952/page196#comment_20841674
        
         break ;
      }

   return (ResChart);  
}

void OnChartEvent ( const int id, const long &lparam, const double &, const string & ) 
{         
   static long Chart = ChartID ();
  
   if (id == CHARTEVENT_KEYDOWN ) 
     switch (( int )lparam)
    {
     case KEY_LEFT2:
      Chart = ChartNextShow(Chart, - 1 ); // Показали чарт слева
       break ;

     case KEY_RIGHT2:
      Chart = ChartNextShow(Chart); // Показали чарт справа
       break ;
    }
}

Maalesef grafiği etkinleştirme seçeneğini bulamadık. Yalnızca göster.

 
Eski bir sorunu çözme.
 /*
// https://www.mql5.com/ru/forum/1111/page2863#comment_18591240
#define VALUE 10

#define MACROS

#ifdef MACROS
  // Нужно VALUE увеличить в два раза.
#endif
*/

// https://www.mql5.com/ru/forum/1111/page2965#comment_20841725
#define MACRO(  x, y, z )       enum nn ##z { y = x };
#define MACRO2( x, y )          MACRO( x, y, __LINE__ )

// https://www.mql5.com/ru/forum/1111/page2866#comment_18603128
#define VALUE 10

MACRO2(VALUE, VALUE_TMP) // VALUE_TMP - поле enum, поэтому имя не должно повторяться.
#undef VALUE
#define VALUE (VALUE_TMP * 2 )

void OnStart ()
{
   Print (VALUE);
}

Bu seçenek bundan daha iyidir.

 #define MACRO3(x, y)             const int y = x;

MACRO3(VALUE, VALUE_TMP)

Çünkü değişken olmadan yapar. Tüm değerler derleme zamanında ayarlanır. @A100'e teşekkürler!

 
fxsaber :

Maalesef grafiği etkinleştirme seçeneğini bulamadık. Yalnızca göster.

Anlamıyorum……… Bundan mı bahsediyorsun? Bu bir komut dosyası.


not; Bu ne

   const bool IsDocked = ChartGetInteger (Chart, CHART_IS_DOCKED );

Belgelerde hiçbir şey bulamıyorum ...

Dosyalar:
200.mq5  2 kb
 
Alexey Viktorov :

not; Bu ne

Belgelerde hiçbir şey bulamıyorum ...

Bu, grafikte ALT+D'dir.

 
Alexey Viktorov :

Anlamıyorum……… Bundan mı bahsediyorsun? Bu bir komut dosyası.

Teşekkürler, bir şeyi karıştırdım. Tabii ki, daha önce elde edilemeyen daha yüksek grafik yönetimi ortaya çıktı. Ama benim amacım farklıydı.

 // Активирует данный чарт.
bool ChartActivate( const long Chart )
{
   return ( ChartSetInteger (Chart, CHART_BRING_TO_TOP , true ) && ChartGetInteger (Chart, CHART_WINDOW_HANDLE ));
}


Kullanım örneği.

 // Переключает чарты с одним и тем же советником клавишами клавиатуры '<'/'>'.

void ChartNextActivate( const int Step = 1 , const bool Expert = true )
{
   long Charts[];  
   // https://www.mql5.com/ru/forum/170952/page196#comment_20841674
   const int Size = GetExpertCharts(Charts, Expert ? ChartGetString ( 0 , CHART_EXPERT_NAME ) : NULL );
   const long Chart = ChartID ();
  
   if ((Size > 1 ) && ( bool )(Step % Size))
     for ( int i = 0 ; i < Size; i++)  
       if (Charts[i] == Chart)
      {
         // https://www.mql5.com/ru/forum/170952/page197#comment_20845067
        ChartActivate(Charts[(i + ((Step > 0 ) ? Step : (Size - ((-Step) % Size)))) % Size]);
        
         break ;
      }

   return ;  
}

void OnChartEvent ( const int id, const long &lparam, const double &, const string & ) 
{         
   if (id == CHARTEVENT_KEYDOWN ) 
     switch (( int )lparam)
    {
     case KEY_LEFT2:
      ChartNextActivate(- 1 );
       break ;

     case KEY_RIGHT2:
      ChartNextActivate();      
       break ;
    }
}