[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 753

 
Morzh09:

Veuillez me dire quel est le problème :

1) Je remplis un tableau bidimensionnel avec l'heure de formation de l'extremum ZigZag et la valeur de l'extremum lui-même.

2) Remplir le deuxième tableau de uns ou de deux selon que l'extremum correspondant à un élément donné est un maximum ou un minimum local.

3) J'envoie les résultats par Alert.

mais à un endroit où 1 ou 2 devrait être imprimé, des zéros sont toujours imprimés.

Quel est le piège ?!?

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+


string TimeSave1[100][2], TimeSave2[100][2];

double A[], B[];

double Number_of_extremum[];

extern string Currency = "EURUSD";


+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start()

{

int counted_bars=IndicatorCounted();

//----

int k;

k=0;

double date;

int status;

for(int shift = 0; shift <= Bars-1; shift++)

{

date = iCustom(NULL, 0, "ZigZag", 12, 5, 3, 0, shift);

//----------------------------------------------------

if(date > 0)

{

TimeSave1[k][0]=TimeToStr(Time[shift]);

TimeSave1[k][1]=date;

k++;

}

}

//====================================================

for (int u=1;u<=k;u++)

{

if (StrToDouble(TimeSave1[u][1])<=StrToDouble(TimeSave1[u-1][1]))

{

Number_of_extremum[u]=1;// значит под номером u - нашли min

}

else

if (StrToDouble(TimeSave1[u][1])>=StrToDouble(TimeSave1[u-1][1]))

{

Number_of_extremum[u]=2;// значит под номером u - нашли max

}

}

//====================================================

for (int j=1;j<10;j++)

{

Alert("время== ",TimeSave1[j][0], " значение== ", TimeSave1[j][1], " max/min== ", Number_of_extremum[j]);

}

//----

return(0);

}

//+------------------------------------------------------------------+

Et encore une précision :

comment comparer des dates et des heures dans mql (par exemple, je dois déterminer quel sommet de ZZ s'est formé le plus tôt - pour ce faire, je dois comparer l'heure de leur formation...)

Datetime est essentiellement int, il contient le nombre de secondes de 1970 à l'heure de la barre. Je vérifie pour plus/moins - ça marche...
Je n'ai pas regardé le reste - je viens d'arriver...
 

Mes amis, une question :


Confronté à ce problème :

l'indicateur émet des informations via Alert.

Mais, progressivement, le champ de sortie de l'alerte accumule trop de "merde"...

Lorsque je relancerai l'indicateur, sera-t-il possible d'effacer tous les anciens enregistrements dans Alert ?


Merci d'avance.

P.S.

Veuillez commenter mon message précédent (pourquoi les valeurs nulles sont affichées au lieu de 1 et 2).

 

Je ne l'ai pas trouvé sur le forum...

Question - est-il possible de changer le commentaire de l'ordre ? Eh bien, lors de l'opération OrderSend(), je mets dans le commentaire la valeur "OrderNotModify", et en faisant d'autres actions avec cet ordre, par exemple une fermeture partielle, je change OrderComment en "OrderIsModify"... ou pas ?

 
Morzh09:

Pouvez-vous me dire quel est le piège :

Le tableau est rempli à partir de 0, mais ici le 0ème indice est sauté, et nous remplissons à partir du 1er, et

for (int u=1;u<=k;u++) // k при старте =0, u <= k не будет, считать счетчику незачем

{

if (StrToDouble(TimeSave1[u][1])<=StrToDouble(TimeSave1[u-1][1])) // выражение при старте всегда [1][1]<=[0][1]

{

Number_of_extremum[u]=1;// значит под номером u - нашли min

}

else

if (StrToDouble(TimeSave1[u][1])>=StrToDouble(TimeSave1[u-1][1])) // значит, всегда срабатывает [1][1]>=[0][1]

{

Number_of_extremum[u]=2;// значит под номером u - нашли max

}

}
 
Abzasc:

Le tableau est rempli à partir de 0, mais ici le 0ème indice est sauté et rempli à partir du 1er, et

Je ne comprends pas bien votre commentaire.

1) k - au départ - n'est pas nul ! k = le nombre de sommets ZigZag que nous avons détectés à une certaine profondeur de l'histoire !

2) "donc, ça marche toujours [1][1]>=[0][1]" - pourquoi ça marche toujours ? si l'élément précédent du tableau TimeSave1 > l'élément suivant, ça ne marchera pas.

répétez, s'il vous plaît, ce que vous vouliez dire.

 
Morzh09:

Je n'ai pas bien compris votre commentaire.

1) k - au départ - n'est pas égal à zéro ! k = le nombre de sommets ZigZag que nous avons détectés à une certaine profondeur de l'histoire !

2) "donc, ça marche toujours [1][1]>=[0][1]" - pourquoi ça marche toujours ? si l'élément précédent du tableau TimeSave1 > l'élément suivant, ça ne marchera pas.

S'il vous plaît, dites-moi à nouveau ce que vous voulez dire.

Je comprends K. C'est ce que je ne comprends pas.

for (int u=1;u<=k;u++) // на первом шаге счетчик присваивает u = 1

{

if (StrToDouble(TimeSave1[u][1])<=StrToDouble(TimeSave1[u-1][1])) // здесь, значит[u=1][1]<=[(u=1)-1][1]
// т. е. 1<=0, вы же от 1 еще 1 отнимаете

{

dans la partie droite

 
Michelangelo:

est-il possible de modifier le commentaire de la commande ?

Dans OrderModify uniquement billet prix stoploss takeprofit expiration couleur de la flèche

On dirait que non.

 

donc... on dirait que c'est la chaleur... Et cela affecte aussi mon compilateur :)

Voyez-vous, j'ai besoin de parcourir un tableau qui enregistre la date de formation du max/min de la ZigZ et la valeur de ce max/min.

J'ai besoin de comprendre, en fait, quel sommet de ZZ est un minimum et lequel est un maximum.

Pour ce faire, je compare le prochain point le plus élevé de ZZ au précédent.

Si le sommet consécutif est plus grand, alors il s'agit d'un sommet.

si elle est plus petite, c'est un creux.

Selon qu'il s'agit d'un sommet ou d'un creux, on ajoute respectivement 1 ou 2 à un élément d'un autre tableau.

Je suis curieux à ce sujet, OÙ l'erreur pourrait être !!!!

Dossiers :
 
J'irai ici avec des arcs - j'ai tout de même cassé ma calculatrice... :)
Je veux pouvoir calculer les niveaux de fiba sur la base de deux valeurs connues :
Le niveau du Fib zéro correspond à 1.2807, le niveau 23.6 correspond à 1.2838.

Nous devons trouver les autres niveaux 38.2, 50.0, 61.5, 100.0 et à quels prix ils correspondent.

Je n'ai même pas pu trouver de lien entre 1.2807 et 1.2838 pour comprendre les principes de la
de trouver toutes les autres valeurs.

S'il vous plaît, dites-moi, quelqu'un... :)

 
IgorM:
Quelqu'un a-t-il rencontré l'indicateur qui permet de voir le temps d'ouverture de la barre dans une TF basse, pas le temps qui est intéressant, et de dessiner les marques sur le graphique où la barre a commencé et où elle s'est terminée.
#property indicator_chart_window
#property link      "IgorM"

extern int num    = 10;
extern color line = White;
int init()
{return(0);
}
  
void clear(){
   for(int i=ObjectsTotal()-1; i>=0;i--) {
      string name = ObjectName(i);
      if (StringFind(name,"timeH1_") !=-1) ObjectDelete(name);
    }
}

int deinit(){
clear();
return(0);
}

int start()
{   
   int counted_bars = IndicatorCounted();
   if(counted_bars < 0)   return(-1);
   clear();
   for (int i=0;i<=num;i++){ 
      string name = "timeH1_"+TimeToStr(Time[i],TIME_DATE|TIME_MINUTES);
      ObjectCreate(name,OBJ_VLINE,0,iTime(NULL,PERIOD_H1,i),0);
      ObjectSet(name,OBJPROP_COLOR,line);
      ObjectSet(name,OBJPROP_STYLE,STYLE_DOT);
    }
return(0);
}

Je pense que oui. Le code n'est pas optimisé, mais il dessine ce que je voudrais voir.
Raison: