[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 78

 

Bonjour, j'ai commencé à apprendre le mquel4. Je vais utiliser un exemple d'un indicateur simple qui calcule les prix max et min des bougies et trace des lignes aux extrémités des bougies à travers deux tampons sur l'écran :

#property indicator_chart_window // Индик. рисуется в основном окне
#property indicator_buffers 2 // Количество буферов
#property indicator_color1 Blue // Цвет первой линии
#property indicator_color2 Red // Цвет второй линии

double Buf_0[],Buf_1[]; // Объявление массивов (под буферы индикатора)
//--------------------------------------------------------------------
int init() // Специальная функция init()
{
SetIndexBuffer(0,Buf_0); // Назначение массива буферу
SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
SetIndexBuffer(1,Buf_1); // Назначение массива буферу
SetIndexStyle (1,DRAW_LINE,STYLE_DOT,1);// Стиль линии
return; // Выход из спец. ф-ии init()
}
//--------------------------------------------------------------------
int start() // Специальная функция start()
{
int i,// Индекс бара
Counted_bars; // Количество просчитанных баров 
//--------------------------------------------------------------------
Counted_bars=IndicatorCounted(); // Количество просчитанных баров 
i=Bars-Counted_bars-1;
// Индекс первого непосчитанного
while(i>=0) // Цикл по непосчитанным барам
{
Buf_0[i]=High[i]; // Значение 0 буфера на i-ом баре
Buf_1[i]=Low[i]; // Значение 1 буфера на i-ом баре

i--; // Расчёт индекса следующего бара
}
//--------------------------------------------------------------------
return; // Выход из спец. ф-ии start()
}

Alors, comment faire en sorte que la ligne tampon passe par deux (trois, etc.) chandeliers au lieu de chacun d'eux ?

 
wolf05632:

Alors, comment faire pour que la ligne tampon passe par deux (trois, etc.) bougies au lieu de chaque bougie ?

Tout d'abord, apprenez à insérer correctement un message dans le code, en utilisant le bouton "SRC", afin qu'il ait une forme lisible et se présente comme dans MetaEditor.


La deuxième étape sera votre tentative de lier la variable Counted_bars à l'instruction if.

Par exemple :

Nous allons entrer un calcul d'indicateur toutes les deux barres (sauter les impaires, laisser les paires) :

if (MathMod(Counted_bars, 2) == 0)
{
   // расчёт для буферов индикатора
}
else return(0);

Ici, vous pouvez lire sur la fonction MathMod(). Mais vous n'êtes pas obligé de l'utiliser. Vous pouvez insérer n'importe quelle condition dans l'instruction if.

Mais n'oubliez pas que de telles modifications du code entraîneront la perte de certaines valeurs dans le tampon. Que tu en aies besoin ou non, je ne sais pas. Tout dépendra de votre tâche.

 

Je suis un peu confus. J'ai essayé de rendre l'étape du cycle égale à deux (je pense que vous auriez la même signification), mais cela ne fonctionne pas. Je n'ai pas besoin de passer par une bougie en particulier, mais par un nombre arbitraire de bougies. Si je comprends bien, la structure devrait être la suivante :

buffer array[1]= tableau de chandeliers[1]

buffer array[2]= tableau de chandeliers[2]

buffer array[3]= tableau de chandeliers[4]

...

tableau tampon [5]= tableau de chandeliers [x] etc. Mais ça ne marche pas.

 
wolf05632:

Je ne vois pas de schéma entre les indices tampons et les indices chandeliers...

Et ce serait encore mieux si vous joigniez une photo de ce que vous voulez obtenir.

 

C'est comme ça

Et j'en ai besoin comme ça :

Mais ne vous attachez pas spécifiquement aux lignes tracées à travers une bougie, elles peuvent être tracées à travers deux, ou trois, etc.

 
sergeev:

Je pense que j'aurais dû apporter ça aux télépathes plutôt qu'ici.

Il se moque juste de nous.


Regardez le code, vous pouvez voir sans espaces où le résultat de l'envoi de l'ordre, son code d'erreur et les chiffres de l'instrument.
 

Il faut alors utiliser un indicateur en zig-zag (mon point de vue) :

#property indicator_chart_window // Индик. рисуется в основном окне
#property indicator_buffers 2 // Количество буферов
#property indicator_color1 Blue // Цвет первой линии
#property indicator_color2 Red // Цвет второй линии

double Buf_0[], Buf_1[]; // Объявление массивов (под буферы индикатора)
//--------------------------------------------------------------------
int init() // Специальная функция init()
{
   SetIndexBuffer(0, Buf_0); // Назначение массива буферу
   SetIndexStyle (0, DRAW_SECTION);
   SetIndexBuffer(1, Buf_1); // Назначение массива буферу
   SetIndexStyle (1, DRAW_SECTION);
   return; // Выход из спец. ф-ии init()
}
//--------------------------------------------------------------------
int start() // Специальная функция start()
{
   int i,// Индекс бара
   Counted_bars; // Количество просчитанных баров 
   //--------------------------------------------------------------------
   Counted_bars=IndicatorCounted(); // Количество просчитанных баров 
   if (MathMod(Bars, 2) != 0 && Counted_bars == 0)
      return(0);
   i = Bars-Counted_bars-1;
   // Индекс первого непосчитанного
   while(i >= 0) // Цикл по непосчитанным барам
   {
      if (MathMod(i, 2) == 0)
      {
         Buf_0[i] = High[i]; // Значение 0 буфера на i-ом баре
         Buf_1[i] = Low[i]; // Значение 1 буфера на i-ом баре
      }
   
      i--; // Расчёт индекса следующего бара
   }
   //--------------------------------------------------------------------
   return; // Выход из спец. ф-ии start()
}

Je pense que vous pouvez comprendre les changements. La seule chose sur laquelle je me suis trompé, c'est qu'il est préférable d'utiliser le paramètre Bars au lieu d'IndicatorCounted() comme indice de la barre à calculer.

Votre tâche consiste maintenant à faire entrer le diviseur dans un paramètre externe. Il sera égal au nombre de chandeliers passés.

 
grell:

Il suffit de regarder le code, vous pouvez voir sans espaces où le résultat de l'envoi de l'ordre, son code d'erreur et les chiffres de l'instrument.

Exactement. C'est pourquoi nous parlons de télépathes.

Vous nous avez donné le code plus tôt :

Alert("Ordersend_Number",res,err);

Je n'ai pas regardé le code, mais, malheureusement, je n'ai pas trouvé l'erreur... Je n'ai aucune expérience dans l'écriture de conseillers experts multi-devises. Je connais juste quelques principes, c'est tout.

 
Il est évident que -1129 est le code d'erreur, où avez-vous vu le numéro d'erreur 1292 ?
 
grell:
Il est clair que -1129 est un code d'erreur, où avez-vous vu le numéro d'erreur 1292 ?

Tout peut arriver...

Avez-vous testé votre EA sur un seul DC ? L'erreur 129 met-elle beaucoup de temps à apparaître ? Ou la commande s'ouvre après plusieurs demandes ?