MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 420

 
igrok333 :
Değişkenin türünü döndüren bir işlev var mı?

mesela sen yaz.

int a=10;

sonra şunu yazarsın:

işlev(a);

ve size şunu söylüyor: INT!

:)
string functia(int a) { return "INT!"; } // birden
string functia(double a) { return "ÇİFT!"; } // ayrıca beklenmeyen
 
igrok333 :
Bir değişkenin türünü döndüren bir işlev var mı?

mesela sen yaz.

int a=10;

sonra şunu yazarsın:

işlev(a);

ve size şunu söylüyor: INT!

:)

Yardımdan:

 void OnStart () 
  { 
//---  
   CTrade trade;    
   double d_value= M_PI ; 
   int i_value= INT_MAX ; 
   Print ( "d_value: type=" ,GetTypeName(d_value), ",   value=" , d_value); 
   Print ( "i_value: type=" ,GetTypeName(i_value), ",   value=" , i_value); 
   Print ( "trade: type=" ,GetTypeName(trade)); 
//---  
  } 
//+------------------------------------------------------------------+ 
//| Возвращает в строковом виде тип                                  | 
//+------------------------------------------------------------------+ 
template < typename T> 
string GetTypeName( const T &t) 
  { 
//--- вернем тип в виде строки 
   return ( typename (T)); 
//--- 
  }
 
WinProject :

Her şey çok daha kolay. Bir görüntüleme düğmesi oluşturun (veya mevcut düğmelerden birini kullanın). Ayrıca, tıkladığınızda - tüm gerekli nesneler, tüm TF'ler için görünürlük bayrağını ayarlar. Düğme bırakıldığında, görüntüleme özelliği tüm TF'lerdeki (veya gerekirse gerekli olan) tüm nesneler için ayarlanır. Hiçbir şeyi silmeniz/yeniden oluşturmanız gerekmez. Bu işlemden sonra grafiği yeniden çizmeniz yeterlidir.

OBJPROP_TIMEFRAMES nesne özelliği.

 

Göstergedeki verileri bir diziye nasıl aktaracağımı söyle? Yani, bir dizi tanımlamanız gerektiği açıktır.

çift sayı_dizi[];

Ve işte tam olarak anlamadığım şey...

num_array[0] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i); // [0] dizinli dizi MA'ya eşittir, ancak dizini [1] olarak değiştirirseniz, num_array[1]'in eşit olduğu ortaya çıkar

göstergeden num_array[0] ile aynı veriler. Ve bu gerekli değil. Dizi sırayla doldurulmalıdır. Ve akla gelen tek şey günü 24'e bölmek

saat, iki boyutlu bir dizi bildirin ve her saat için kendi satırıyla bir dizin atayın, vb. ....

Belki daha kolay bir yol veya daha az hemoroid vardır?

 
Corvin85 :

Göstergedeki verileri bir diziye nasıl aktaracağımı söyle? Yani, bir dizi tanımlamanız gerektiği açıktır.

çift sayı_dizi[];

Ve işte tam olarak anlamadığım şey...

num_array[0] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i); // [0] dizinli dizi MA'ya eşittir, ancak dizini [1] olarak değiştirirseniz, num_array[1]'in eşit olduğu ortaya çıkar

göstergeden num_array[0] ile aynı veriler. Ve bu gerekli değil. Dizi sırayla doldurulmalıdır. Ve akla gelen tek şey günü 24'e bölmek

saat, iki boyutlu bir dizi bildirin ve her saat için kendi satırıyla bir dizin atayın, vb. ....

Belki daha kolay bir yolu veya daha az hemoroid vardır?


Ben böyle görüyorum:

 double num_array[];  

ArrayResize (num_array, 24 );

for ( int i= 0 ;i< 24 ;i++)

{

 num_array[i] = iMA ( NULL , 0 , 13 , 8 , MODE_SMMA , PRICE_MEDIAN ,i);

}
 
Vladislav Andruschenko :

Ben böyle görüyorum:

 double num_array[];  

ArrayResize (num_array, 24 );

for ( int i= 0 ;i< 24 ;i++)

{

 num_array[i] = iMA ( NULL , 0 , 13 , 8 , MODE_SMMA , PRICE_MEDIAN ,i);

}
Ve dizideki maksimum dizin sayısını ayarlamak ve bunları döngü boyunca çalıştırmak ArrayResize aracılığıyla ortaya çıkıyor. Çok teşekkürler, ama sonra bir soru var, tüm dizinler türkiye'den gelen verilerle tıkandığında, onları ArrayFree aracılığıyla temizleyin, değil mi? Yoksa kendini yeniden mi yazacak? veya 24x'ten sonra her şey tamamen durur mu? Aptalca sorular için elbette özür dilerim, ama benim için diziler genellikle bilinmeyen işlevlere sahip bir tür karanlık attır.
 
Corvin85 :
Ve dizideki maksimum dizin sayısını ayarlamak ve bunları döngü boyunca çalıştırmak ArrayResize aracılığıyla ortaya çıkıyor. Çok teşekkürler, ama sonra bir soru var, tüm dizinler türkiye'den gelen verilerle tıkandığında, onları ArrayFree aracılığıyla temizleyin, değil mi? Yoksa kendini yeniden mi yazacak? veya 24x'ten sonra her şey tamamen durur mu? Aptalca sorular için elbette özür dilerim, ama benim için diziler genellikle bilinmeyen işlevlere sahip bir tür karanlık attır.
Amacınızın ne olduğuna bağlı olarak. Son 24 bar için diziyi mA verileriyle doldurma kodunu yazdım. Sürekli güncellenecektir.
 
Corvin85 :
Ve dizideki maksimum dizin sayısını ayarlamak ve bunları döngü boyunca çalıştırmak ArrayResize aracılığıyla ortaya çıkıyor. Çok teşekkürler, ama sonra bir soru var, tüm dizinler türkiye'den gelen verilerle tıkandığında, onları ArrayFree aracılığıyla temizleyin, değil mi? Yoksa kendini yeniden mi yazacak? veya 24x'ten sonra her şey tamamen durur mu? Aptalca sorular için elbette özür dilerim, ama benim için diziler genellikle bilinmeyen işlevlere sahip bir tür karanlık attır.

Dizi = dizine göre erişim kolaylığı için bir satırda düzenlenmiş bir dizi basit değişken. Dizin - bir döngüyü düzenlemek için dizi öğelerine sayıya göre erişmek için bir tamsayı değişkeni. İndeks = sayı sayacı. ArrayFree = bir dizinin imhası - harap evlerdeki bir buldozer gibi. Gerçek, ArrayResize kullanılarak tekrar geri yüklenebilir. ArrayResize , bir yerleşim bölgesini çevreleyen bir çittir. İşte bizimkiler çitin arkasındaki yabancılar, oraya tırmanmak yasaktır. Her eve birçok kez girebilir ( dizinin bir öğesine yeni bir değer atayabilirsiniz). Bir dizi, birçok amaç için çok basit ve kullanışlıdır. Ve dizilerden kim korkar - bunlar ... Bu yüzden onları mümkün olan en kısa sürede sıralamak daha iyidir.

 
//+------------------------------------------------------------------+ 
//| Проверка массива                                                 | 
//+------------------------------------------------------------------+ 
#property strict
int m[10];
int n;

void OnStart() 
{ 
  ArrayInitialize(m,7);          Вывод();  // Заполнить семерками
  ArrayResize(m,7);              Вывод();  // Удалить 3 последних элемента
  ArrayResize(m,9);              Вывод();  // Увеличить размер
  m[1]=1;  m[7]=1;               Вывод();  // Изменить 2 элемента
  for(n=0; n<9; n++) m[n]=n*n;   Вывод();  // Заполнить квадратами номеров
  ArrayCopy(m,m,0,2,7);          Вывод();  // Копирование со сдвигом
  ArrayResize(m,ArraySize(m)-2); Вывод();  // Удалить 2 последних элемента
} 

void Вывод()
{
  string s="";
  for(n=0; n<ArraySize(m); n++)
  s+="  " + string(m[n]);
  Alert(ArraySize(m), ":", s);
}
Böyle bir komut dosyası çalıştırmayı deneyin - ve pratik yapın
 
Artyom Trishkin :

Yardımdan:

Teşekkür