Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 420

 
igrok333:
Existe-t-il une fonction qui renvoie le type de variable ?

Par exemple, vous écrivez.

int a=10 ;

puis vous écrivez :

functia(a) ;

et il est dit : INT !

:)
string functia(int a) { return "INT !"; } // soudainement
string functia(double a) { return "DABLE !"; } // aussi de manière inattendue
 
igrok333:
Existe-t-il une fonction qui renvoie un type de variable ?

Par exemple, vous écrivez.

int a=10 ;

puis vous écrivez :

functia(a) ;

et il est dit : INT !

:)

De l'aide :

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:

C'est beaucoup plus simple. Créez un bouton d'affichage (ou utilisez l'un des boutons existants). Plus loin dans la pression - tous les objets nécessaires sont mis drapeau de visibilité sur toutes les TF. Lorsque le bouton est relâché, tous les objets sont configurés pour afficher la propriété sur toutes les TF (ou nécessaire si nécessaire). Il n'est pas nécessaire de supprimer/réorganiser quoi que ce soit. La seule chose à faire est de redessiner le graphique après cette opération.

Propriété d'objet OBJPROP_TIMEFRAMES.

 

Pouvez-vous me dire comment récupérer les données de l'indicateur dans un tableau ? C'est-à-dire qu'il est clair que je dois déclarer un tableau

double num_array[] ;

Je ne sais pas trop quoi faire ensuite...

num_array[0] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i) ; // le tableau avec l'indice [0] est égal à MA, mais si nous changeons l'indice en [1], alors il s'avère que num_array[1] est égal

les mêmes données de l'indicateur que num_array[0]. Cela ne devrait pas être le cas. Le tableau doit être rempli de manière séquentielle. Tout ce que je peux faire, c'est de diviser la journée en 24.

heures, déclarez un tableau à deux dimensions et attribuez un index à chaque heure avec sa propre chaîne etc.....

Peut-être existe-t-il un moyen plus simple ou moins salissant ?

 
Corvin85:

Pouvez-vous me dire comment récupérer les données de l'indicateur dans un tableau ? C'est-à-dire qu'il est clair que je dois déclarer un tableau

double num_array[] ;

Je ne sais pas trop quoi faire ensuite...

num_array[0] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i) ; // le tableau avec l'index [0] est égal à MA, mais si nous changeons l'index en [1], alors il s'avère que num_array[1] est égal

les mêmes données de l'indicateur que num_array[0]. Cela ne devrait pas être le cas. Le tableau doit être rempli de manière séquentielle. Tout ce à quoi je pense, c'est de diviser la journée en 24.

heures, déclarez un tableau à deux dimensions et attribuez un index à chaque heure avec sa propre chaîne etc.....

Peut-être existe-t-il un moyen plus simple ou moins salissant ?


Je vois ça comme ça :

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:

Je le vois de cette façon :

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);

}
Ah, il s'avère qu'il faut définir le nombre maximum d'index dans le tableau viaArrayResize et les faire passer dans une boucle. Merci beaucoup, mais alors il y a une question, quand tous les index sont remplis avec les données de l'indicateur, doivent-ils être effacés parArrayFree, ou est-ce qu'il va se réécrire lui-même ? ou après 24x tout s'arrêtera du tout ? Désolé pour la question stupide, mais les tableaux sont un peu un cheval noir avec des fonctions inconnues.
 
Corvin85:
Oh, je peux définir le nombre maximum d'index dans le tableau viaArrayResize et les faire passer dans la boucle. Merci beaucoup, mais alors il y a une question, quand tous les index sont remplis avec les données de l'indicateur, dois-je les effacer parArrayFree, ou est-ce qu'il va se réécrire lui-même ? ou après le 24, tout va s'arrêter ? Désolé pour la question directe, mais les tableaux sont une sorte de cheval noir aux fonctions inconnues.
Eh bien, ça dépend du but que vous poursuivez. J'ai écrit le code pour remplir le tableau avec les données mA des 24 dernières barres. Il sera mis à jour en permanence.
 
Corvin85:
Oh, je peux utiliserArrayResize pour définir le nombre maximum d'index dans le tableau et les faire passer dans la boucle. Merci beaucoup, mais alors il y a une question, quand tous les index sont remplis avec les données de l'indicateur, dois-je les effacer parArrayFree, ou est-ce qu'il va se réécrire lui-même ? ou après le 24, tout va s'arrêter ? Désolé pour la question directe, mais les tableaux sont une sorte de cheval noir aux fonctions inconnues.

Tableau = un ensemble de variables simples alignées sur une rangée pour une référence facile à leur index. L'index est une variable entière permettant d'accéder aux éléments du tableau par numéro afin d'organiser une boucle. Index = compteur de numéros. ArrayFree = destruction de tableaux - comme un bulldozer sur des maisons délabrées. Mais il peut être restauré à nouveau avec ArrayResize. Eh bien ,ArrayResize est une clôture autour d'un tableau résidentiel. Le nôtre est ici, mais les étrangers sont derrière la clôture, et il est interdit d'y entrer. Vous pouvez saisir chaque maison plusieurs fois (attribuer une nouvelle valeur à un élément du tableau). Un tableau est très simple et pratique pour de nombreux usages. Et ceux qui ont peur des tableaux - ceux ... Il est donc préférable de s'y attaquer.

 
//+------------------------------------------------------------------+ 
//| Проверка массива                                                 | 
//+------------------------------------------------------------------+ 
#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);
}
Essayez d'exécuter un script comme celui-ci - et entraînez-vous
 
Artyom Trishkin:

De la référence :

cp
Raison: