Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 1083

 
Et si vous deviez trouver la valeur la plus élevée dans un nombre donné de barres récentes ?
 

Donc c'est un tableau statique, n'est-ce pas ?

//--- создадим массив 
   double array[]; 
   int size=772; 
   ArrayResize(array,size); 
   //---  заполним его значениями индикатора 
   for(int i=0;i<size;i++) 
     { 
      array[i]=iATR(NULL,0,14,i);
     }
   //--- найдем позицию максимального элемента в массиве 
   int max_position=ArrayMaximum(array,772,0); 
   //--- теперь получим само максимальное значение в массиве 
   double max=array[max_position];
 

Donc, en fait j'écris directement - autodidacte, pas loin dans la compréhension des subtilités de la perception de l'être du programmeur (Et le thème s'appelle : Toute question d'un débutant...). Je donne un exemple, qui ne sera pas reproché que tous veulent obtenir gratuitement, sans effort, et d'autre part en essayant de définir clairement la tâche (ne pas dire que nous ne pouvons pas lire les esprits des autres).

Encore une fois, comment obtenir la valeur maximale de l'indicateur pour la quantité donnée de dernières barres à partir du code donné ou peut-être par la grâce de la compréhension dans la déclaration personnelle de codage ?

Avec tout le respect, la déférence et la compréhension que les programmeurs sont des gens d'un autre monde et une explication aussi délicate n'est pas le fait que tout ce qui précède devra être exposé à nouveau, peut-être plus d'une fois pour obtenir le résultat souhaité.

//--- créer un tableau double array[] ; int size=772 ; ArrayResize(array,size) ; //---le remplir avec des valeurs indicatrices for(int i=0;i<size;i++) { array[i]=iATR(NULL,0,14,i) ;
} //--- trouver la position de l'élément maximal dans le tableau int max_position=ArrayMaximum(array,772,0) ; //--- maintenant, obtenons la valeur maximale dans le tableau lui-même double max=array[max_position] ;
 

J'ai cherché tout ce que je pouvais mais je n'ai pas trouvé de solution, dernier espoir sur vous les gars :)

La tâche générale était de faire un indicateur qui, lorsqu'il est lancé sur un graphique, c'est-à-dire qu'il fonctionne déjà, nous appuyons sur la touche spécifiée et la ligne de tendance (date1=date2, prix1=prix2) apparaît sous la position actuelle du curseur.

Le problème est apparu quand je n'arrive pas à faire en sorte queif(id==CHARTEVENT_MOUSE_MOVE) transmette les coordonnées du pointeur àif(id==CHARTEVENT_KEYDOWN), et le code ci-dessous ne veut pas non plus les transmettre. Je ne sais pas comment faire, mais il y a aussi une autre façon de résoudre ce problème. Peut-être que quelqu'un sait, quand on lance l'indicateur sur le graphique, que le menu initial apparaît.

#property strict
#define  VK_D             0x44 


int OnInit()
  {
//---
   ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true);

   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{    
 
if(id==CHARTEVENT_MOUSE_MOVE)

{     int      x     =(int)lparam;
      int      y     =(int)dparam; 
      datetime dt    =0; 
      double   price =0; 
      int      window=0;
      ChartXYToTimePrice(0,x,y,window,dt,price); 


  if(id==CHARTEVENT_KEYDOWN)
{ 
  switch(int(lparam)) 
{ case VK_D:
   
   ObjectCreate("Trend Line",OBJ_TREND,0,dt,price,dt,price);
   ObjectSetInteger(0,"Trend Line",OBJPROP_SELECTED,true); 
}   
} 
}    
}
 
Craft:

Donc, en fait j'écris directement - autodidacte, pas loin dans la compréhension des subtilités de perception de l'être du programmeur (Et le thème s'appelle : Toute question d'un débutant...). Je donne un exemple, qui ne sera pas reproché que tous veulent obtenir gratuitement, sans effort, et d'autre part en essayant de définir clairement la tâche (ne pas dire que nous ne pouvons pas lire les esprits des autres).

Encore une fois, comment obtenir la valeur maximale de l'indicateur pour la quantité donnée de dernières barres à partir du code donné ou peut-être par la grâce de la compréhension dans la déclaration personnelle de codage ?

Avec tout le respect, la révérence et la compréhension que les programmeurs sont des gens d'un autre monde et une explication aussi délicate n'est pas le fait que tout ce qui précède devra être exposé à nouveau, peut-être plus d'une fois pour obtenir le résultat souhaité.


Alors inversez la boucle et c'est tout.

Du taux_total-1 au taux_total moins le nombre_de_balles_souhaité. Si dans EA, de Bars()-1 à Bars() moins...

 
K_i_r_i_t_o:

J'ai cherché partout mais je n'ai pas trouvé de solution. Je n'ai aucun espoir pour vous :)

La tâche générale était de faire un indicateur qui, lorsqu'il est lancé sur un graphique, c'est-à-dire qu'il fonctionne déjà, nous appuyons sur la touche spécifiée et la ligne de tendance (date1=date2, prix1=prix2) apparaît sous la position actuelle du curseur.

Le problème est apparu lorsque je n'ai pas pu faire en sorte queif(id==CHARTEVENT_MOUSE_MOVE) transmette les coordonnées du pointeur àif(id==CHARTEVENT_KEYDOWN), et le code ci-dessous ne veut pas non plus les transmettre, je ne sais pas comment l'implémenter, il y a une autre option, mais c'est aussi un problème, si quelqu'un le sait, lorsque vous lancez l'indicateur sur le graphique le menu initial apparaît, alors puis-je le verrouiller d'une manière ou d'une autre, pour montrer immédiatement l'indicateur sur le graphique ?

Faites attention à la visibilité variable.

Je n'ai pas approfondi le sujet, mais j'ai remarqué que les variables sont déclarées à l'intérieur de la condition. Cela ne devrait pas être le cas.

 
AlexeyVik:

Faites attention à la visibilité des variables.

Je n'ai pas trop approfondi, mais j'ai remarqué que les variables sont déclarées à l'intérieur de la condition. Cela ne devrait pas être le cas.

Voilà donc le problème, comment faire passer des variables d'un if à l'autre, j'ai essayé de nombreuses variantes, mais ça ne veut pas marcher...
 
K_i_r_i_t_o:
Voilà donc le problème, comment faire passer des variables d'un if à l'autre, j'ai essayé de nombreuses variantes, mais ça ne veut pas marcher...

Vous pouvez le lire ici.

Combien de variations ? Les variables de niveau global sont visibles dans n'importe quelle partie du programme, c'est un cas extrême.

 
AlexeyVik:

Lisez-le ici.

Quelles sont les nombreuses variations ? Les variables de niveau global sont visibles dans n'importe quelle partie du programme, c'est un cas extrême.

J'ai tout lu, c'est le problème, je ne peux pas déplacer les valeurs des variables vers une autre fonction, et il n'y a aucun moyen de les rassembler dans une seule fonction, je suis perplexe, mais qu'en est-il du menu indicateur ?
 
Craft:

Bon après-midi, messieurs.

Question sur les tableaux. Comment trouver la plus grande valeur de l'indicateur sur le nombre requis de dernières barres du graphique, et non sur la première ?

Ce sujet a été abordé à de nombreuses reprises (je ne le trouve pas), mais j'ai rarement utilisé des tableaux.

Pourriez-vous m'indiquer comment résoudre le problème de l'indexation, peut-être en utilisant ArrayMaximum(array) d'une manière plus élégante ?

S'il y a une erreur élémentaire quelque part, je suis désolé, je suis autodidacte.

Le flux de corrections de bogues dans les constructions MQL4 ne faiblit jamais, doncplus le code est simple, plus il est fiable .

Amax=-10000 ;

iAmax=-1 ;

for(int i=0;i<size;i++) {

if (array[i]>Amax) {iAmax=i ; Amax=array[i];}

}

si (iAmax<0) ...quelque chose ne va pas