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

 

Bonjour.

Disons que j'ai 2 indicateurs, le premier a 4 tampons, le second en a 2. Je les mets sur un graphique et ouvre la fenêtre de données (CTRL+D). La liste contient 6 tampons de 0 à 5. Comment puis-je lire la valeur du tampon 5, disons, à partir de cette liste dans MQL ? Il n'est pas pratique d'utiliser iCustom par l'indicateur requis. Il est plus pratique d'utiliser cette liste. Je sais qu'ils le font, mais comment ?

 

En étudiant les exemples dans l'aide, la création d'objets se fait toujours avec un contrôle :

//--- сбросим значение ошибки 
   ResetLastError(); 
//--- создадим кнопку 
   if(!ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0)) 
     { 
      Print(__FUNCTION__, 
            ": не удалось создать кнопку! Код ошибки = ",GetLastError()); 
      return(false); 
     } 


Pourquoi cela se fait-il pour les objets ? Quelle est la probabilité qu'un objet ne soit pas créé ?


En général, je suis intéressé par l'endroit où je peux lire sur les règles de bonnes manières dans la programmation mql, pour savoir dans quels buissons se trouve le râteau, conseiller.

 
psyman:

En étudiant les exemples dans l'aide, la création d'objets se fait toujours avec un contrôle :


Pourquoi cela se fait-il pour les objets ? Quelle est la probabilité qu'un objet ne soit pas créé ?


En général, je suis intéressé de savoir où je peux lire sur les bonnes manières dans la programmation mql, pour savoir où se trouvent les pièges, me conseiller.

Par exemple, un objet portant ce nom existe déjà.
Les règles de la bonne forme - elles sont les mêmes pour toutes les langues. Recevoir des données - vérifier ce que vous avez, créer un objet, vérifier ce que vous avez créé, et si vous l'avez créé... Et ainsi de suite.
 
Comment remplir un tableau à 4 dimensions avec des valeurs du format int Mas[1][2][2][2], comment attribuer une valeur à chaque cellule du tableau, nous avons en tête une telle notation ; par exemple un tableau à 2 dimensions int Arr[1][2]={3,4} ;, comment remplir un tableau à 4 dimensions ?
 
Artyom Trishkin:
Par exemple, un objet portant ce nom existe déjà.
Et les règles de l'étiquette - elles sont les mêmes pour toutes les langues. Vous recevez des données - vérifiez ce que vous avez reçu, vous créez un objet, vérifiez ce que vous avez créé et si vous l'avez créé... Et ainsi de suite.


Quand je crée un bouton à l'intérieur d'une fonction, j'ai droit à des jurons.

 return(false);


La fonction 'return' - 'void' renvoie une valeur 112 16


Que dois-je faire dans ce cas ?

 
Seric29:
Comment remplir un tableau à 4 dimensions avec des valeurs du format int Mas[1][2][2][2], comment attribuer une valeur à chaque cellule du tableau, dans ce cas, il y a un tableau à 2 dimensions int Arr[1][2]={3,4} ; comment remplir un tableau à 4 dimensions ?

Les tableaux multidimensionnels sont généralement remplis dans les boucles avec les bonnes valeurs - cela rend plus difficile de faire une erreur. Pour un tableau à quatre dimensions, cela devrait être quelque chose comme ceci, mais je peux me tromper :

int A[2,2,4,3] = {
                     {/*----------- 3-e измерение = 4 ---------------------------*/ 
/*2-e измерение=2 */ {  {0,1,2/*4-e измерение = 3 */}, {0,1,2}, {0,1,2}, {0,1,2} },
                        { {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2} }   
               
                     },
 // 1-е измерение = 2           
                     {  { {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2} },
                     {   {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2} }}
                  }; 

psyman:

Quand je crée un bouton à l'intérieur d'une fonction, j'ai droit à des jurons.

La fonction 'return' - 'void' renvoie une valeur 112 16

Que dois-je faire dans ce cas ?

commencez à lire l'aidesur https://www.mql5.com/ru/docs/basis/function

Si vous avez besoin de plus d'aide, vous devriez lire n'importe quel livre sur le C++. Le premier chapitre devrait expliquer les fonctions

 
psyman:


Lorsque je crée un bouton à l'intérieur d'une fonction, j'obtiens une injonction à


La fonction 'return' - 'void' renvoie une valeur breakeven_fish.mq5 112 16


Que faire dans ce cas ?

Si vous renvoyez une valeur bool à partir d'une fonction, vous n'avez pas besoin de rendre le type de la fonction void, mais devinez ce qu'il en est.
 

Camarades - regardez l'indicateur pour l'exactitude. Il existe une formule Valeur = (Open[0]-SMA(P,n))/SMA(P,n))*100%.

Je l'ai mis sur le graphique - il calcule et trace tout. Je commence à vérifier une barre sur la calculatrice - sa valeur ne coïncide pas avec celle dessinée...

Voici un exemple - je calcule 1,0178 pour l'Open et 1,0182 pour la MA(13) en utilisant la formule ((1,0178-1,0182)/1,0182) * 100% - le résultat sur la calculatrice est -0.0393. Et le graphique MT4 montre -0.0929. Est-ce une erreur dans le code ou la calculatrice ne calcule pas correctement certaines valeurs à cet endroit ? Aidez-moi, s'il vous plaît. Je joins l'indicateur.

#property indicator_separate_window 
#property indicator_buffers 1       // Количество буферов
#property indicator_color1  Blue    // Цвет линии 0 буфера

#property  indicator_level1  1
#property  indicator_level2  -1
//--------------------------------------------------------------- 2 --
//---- indicator parameters 

extern int History    =5000;      // Колич.баров в расчётной истории
extern int Period_SMA =13; 
 

double
   Line_0[];                        // Инд. массив  ravi 
    
//--------------------------------------------------------------- 4 --

int init()                          // Специальная функция init()
  {
   SetIndexBuffer(0,Line_0);        // Назначение массива буферу
   SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
   
   IndicatorShortName("KRI");
//--------------------------------------------------------------- 5 --
   
   return(0);                          // Выход из спец. функции init()
  }

//--------------------------------------------------------------- 8 --
int start()                         // Специальная функция start()
  {
//--------------------------------------------------------------- 9 --
  
   double
   SMA;                   //  МА для расчета значений индикатора 
                                 // формyла (PRICE-SMA/SMA)*100); 
                             
   int
   i,                            // Индекс бара
   n,                            // Формальн. параметр(индекс бара)
   Counted_bars;                 // Количество просчитанных баров 

//-------------------------------------------------------------- 10 --
   Counted_bars=IndicatorCounted(); // Количество просчитанных баров 
   i=Bars-Counted_bars-1;           // Индекс первого непосчитанного
   if (i>History-1)                 // Если много баров то ..
      i=History-1;                  // ..рассчитывать заданное колич.
//-------------------------------------------------------------- 11 --
   while(i>=0)                      // Цикл по непосчитанным барам
     {
      //-------------------------------------------------------- 12 --
        
      SMA=iMA(NULL,0,Period_SMA,0,MODE_SMA,PRICE_CLOSE,i); // Значение  SМА
     
      
      Line_0[i] =0; 
      if (SMA>0) Line_0[i] = ((Open[0]-SMA)/SMA)*100;    //  Индик. массив линии KPI
     
      //-------------------------------------------------------- 13 --
      i--;                          // Расчёт индекса следующего бара
      //-------------------------------------------------------- 14 --
     }
   return(0);                          // Выход из спец. ф-ии start()
  }
//-------------------------------------------------------------- 15 --
Dossiers :
KRI.mq4  7 kb
 
Artyom Trishkin:
Si vous renvoyez une valeur de type bool à partir d'une fonction, alors le type de fonction ne doit pas être void, mais devinez lequel c'est.

Que faire si vous voulez renvoyer des données à partir d'une fonction ?


Est-il possible de parcourir en boucle les positions uniquement pour un symbole donné sans utiliser PositionsTotal à chaque fois ?


Jusqu'à présent, la seule chose que j'ai trouvée est d'écrire les billets dans un tableau et de les traiter séparément, mais il existe peut-être une solution plus simple ?

 
psyman:

Que faire si vous voulez renvoyer des données à partir d'une fonction ?


Est-il possible de parcourir en boucle les positions uniquement pour un symbole donné sans utiliser PositionsTotal à chaque fois ?


Jusqu'à présent, la seule chose que j'ai trouvée est d'écrire les billets dans un tableau et de les traiter séparément, mais il existe peut-être une solution plus simple ?

Ce n'est pas clair ce qui est nécessaire à la fin - quelques pensées décousues.