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

 
Valeriy Yastremskiy #:

Oui, dans mon cas, il faut commencer par le premier, pas par la barre de zéro) est un bon point.

Pourquoi ? La barre zéro est décalée vers la gauche avec toutes les autres barres. Et si nous déplaçons toutes les barres sauf le zéro, nous obtiendrons deux valeurs égales par le premier et le second indice.

P.S. Si nous déplaçons des données, une cellule libre doit toujours être écrasée. Sinon, il y aura deux valeurs identiques dans une rangée.

 
Valeriy Yastremskiy #:

ZZZY en écrasant la valeur du zéro avant le décalage, on perd la valeur de l'indice zéro.

C'est exactement ce que je veux dire !

 
Valeriy Yastremskiy #:

Qu'est-ce qu'un tampon circulaire dans un µl

Quelque chose comme

static int head=0;
for(i=head,count=0;count<ArraySize(A);i++,count++)
  {
   if(i>=ArraySize(A))i=0;
   DoSomething(A[i]);
  }

ou même

static int head=0;
for(i=head,count=0;count<ArraySize(A);count++)
  {
   if(++i>=ArraySize(A))i=0;
   DoSomething(A[i]);
  }
 
JRandomTrader #:

Quelque chose comme.

ou même

déplacement de l'indice dans le tableau en µl. Bien que cela devrait fonctionner. Et d'ailleurs, le poids du cycle de changement d'indice (qui est un cycle) et du cycle d'affectation ne devrait pas différer beaucoup.

 
Vitaly Muzichenko #:

Comment l'utiliser, pouvez-vous me montrer ?

Voici la tâche.

Voici le code fini, mais la boucle est un peu effrayante

---

Encore une fois, il y a une boucle dans ArrayCopy() et probablement plus d'une. Le code ne deviendra donc guère plus simple et rapide grâce à ce remplacement.

Dans ce code, vous devez spécifier un tableau

int  ArrayCopy(
   void&        dst_array[],         // куда копируем
   const void&  src_array[],         // откуда копируем
   int          dst_start=0,         // с какого индекса пишем в приемник
   int          src_start=0,         // с какого индекса копируем из источника
   int          count=WHOLE_ARRAY    // сколько элементов
   );

L'index à partir duquel écrire et copier dépend de la direction du décalage du tableau. Ainsi, si nous voulons que l'index 0 contienne toujours des données fraîches et nouvelles, nous devons copier à partir de 0 et écrire à partir de 1. Ainsi, les valeurs dans les index 0 et 1 seront identiques, et ensuite une nouvelle valeur sera copiée en 0.

Et je doute fort que ArrayCopy() contienne la même boucle que celle de l'utilisateur. Ainsi, ayant un certain tableau avec une certaine taille, il est décalé de 1 à chaque tick et ensuite copié dans le tampon de l'indicateur qui est affiché comme une ligne...

 
Veuillez m'indiquer la fonction de ventilation pour les données factuelles quotidiennes.
//+----------------------------------------------------------------------------+
//|Определение пробоя дневного фрактала вверх                                  |
//+----------------------------------------------------------------------------+
int BreakdownSignalUpD1()
  {
   int sig=-1;
   double resistD1 = GetNearestUpFractal(PERIOD_D1);
   if (resistD1 < Ask)
     sig=0;
   if (resistD1 >= Ask)
     sig=1;  
   return(sig);
  }

Et voici la fonction qui affiche la répartition à l'écran

ObjectCreate("signal100",OBJ_LABEL,0,0,0,0,0);
   ObjectSet("signal100",OBJPROP_XDISTANCE,600);
   ObjectSet("signal00",OBJPROP_YDISTANCE, 40);
   ObjectSetText("signal100",DoubleToString(BreakdownSignalUpD1(),0),18,"Times New Roman", clrRed);

Pouvez-vous me dire comment faire pour que l'écran n'affiche pas 0 ou 1 mais que 0 soit "OUI" et 1 "NON".

Merci.

 
EVGENII SHELIPOV #:
Veuillez m'indiquer la fonction de ventilation pour les données factuelles quotidiennes.

Et voici la fonction qui affiche la répartition à l'écran

Pouvez-vous me dire comment faire pour que l'écran n'affiche pas 0 ou 1 mais que 0 soit "OUI" et 1 "NON".

Merci.

string boolToStr(bool value) { return ((value) ? "true" : "false"); }
 
EVGENII SHELIPOV #:
Veuillez me dire quelle est la fonction de ventilation du factal de jour.

Et voici la fonction qui affiche la répartition à l'écran

Pouvez-vous me dire comment faire pour que l'écran n'affiche pas 0 ou 1 mais que 0 soit "OUI" et 1 "NON".

Merci.

ObjectSetText("signal100",BreakdownSignalUpD1()==0?"Да":"Нет",18,"Times New Roman", clrRed);

Quelque chose comme ça.

 
JRandomTrader #:

Quelque chose comme ça.

Merci.

 
Alexey Viktorov #:

Dans ce code, vous devez spécifier un tableau

L'index à partir duquel écrire et l'index à copier dépendent de la direction du décalage du tableau. Par exemple, si l'index 0 doit toujours contenir des données fraîches et nouvelles, il faut copier à partir de 0 et écrire à partir de 1. Ainsi, les valeurs dans les index 0 et 1 seront identiques, et ensuite une nouvelle valeur sera copiée en 0.

Et je doute fort que ArrayCopy() contienne la même boucle que celle de l'utilisateur. Ainsi, ayant un certain tableau avec une certaine taille, il est décalé de 1 à chaque tick et ensuite copié dans le tampon de l'indicateur qui est affiché comme une ligne...

Je vais essayer.

---

En général, mon code fonctionne avec succès, cela fait plus d'une heure.


Raison: