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

 
Pouvez-vous me dire comment résumer toutes les valeurs dans le texte ?
void Hmin(){datetime   h = iBars(NULL,PERIOD_H1); 
       ObjectCreate(0,"Hmin"+h,OBJ_TEXT,1,TimeCurrent(),0);     
       double Hmin=ObjectDescription("Hmin"+h);     
       ObjectSetText("Hmin"+h,MathMin(Hmin,AccountEquity()-AccountBalance()),15,"Arial",clrWhite);
       ObjectSetInteger(0,"Hmin"+h,OBJPROP_ANCHOR,ANCHOR_RIGHT);  
           }
Ce code ne fait que les créer
 
Дмитрий:

Bonjour, s'il vous plaît, aidez-moi à comprendre...

MathMax renvoie le maximum de deux valeurs numériques, c'est-à-dire qu'il renvoie la valeur numérique maximale de deux tableaux identiques high[rates_total] avec une différence de -1 et -2 barres ?

En termes simples : Dans le premier tableau 12345 et dans le second 1234, cette fonction renverra-t-elle 5 ?

Non. La fonction renverra 12345.

 
Дмитрий:

Bonjour, s'il vous plaît, aidez-moi à comprendre...

MathMax renvoie le maximum de deux valeurs numériques, c'est-à-dire qu'il renvoie la valeur numérique maximale de deux tableaux identiques high[rates_total] avec une différence de -1 et -2 barres ?

En d'autres termes, si le premier tableau contient 12345 et le second 1234, cette fonction renverra-t-elle 5 ?

Elle renverra la valeur maximale des deux, qui sont high[rates_total-1] et high[rates_total-2].

Si l'adresse high [rates_total-1] contient la valeur 12345, et l'adresse high [rates_total-2] contient la valeur 1234, laquelle de ces deux valeurs est la plus grande ?

12345 est clairement supérieur à 1234 d'un ordre de grandeur. La valeur 12345 de high [rates_total-1] sera retournée.

 
Artyom Trishkin:

La valeur maximale des deux à high[rates_total-1] et high[rates_total-2] sera retournée.

Si high[rates_total-1] contient la valeur 12345, et high[rates_total-2] contient la valeur 1234, laquelle de ces deux valeurs est la plus grande ?

12345 est clairement supérieur à 1234 d'un ordre de grandeur. La valeur 12345 de high [rates_total-1] sera retournée.

Merci... Mais il y a une question sur la rationalité de la chaîne si high[rates_total-1] est déjà une barre plus grande que high[rates_total-2].

Ou y a-t-il un sens différent ici ?

Merci.

 
Дмитрий:

Merci... mais cela soulève une question sur la rationalité de la chaîne si high[rates_total-1] est déjà une barre de plus que high[rates_total-2].

Ou y a-t-il quelque chose d'autre qui ait du sens ici ?

Merci.

Qu'est-ce que les barres ont à voir avec ça ?

Vous comparez des valeurs élevées sur deux barres du même tableau. Les taux_total-1 et taux_total-2 indiquent les valeurs des deux barres que vous comparez.

Vous comparez les valeurs hautes des barres situées sur rates_total-1 et rates_total-2, et non les valeurs des indices.

Ce à quoi vous pensez ressemblerait à ceci : MathMax(taux_total-1, taux_total-2) - c'est là que le taux_total-1 sera toujours renvoyé.

 
Rustam Bikbulatov:
Pouvez-vous me dire comment faire la somme de toutes les valeurs du texte ? Ce code crée seulement

voulez-vous obtenir le solde moins les valeurs d'équité ?

 
Artyom Trishkin:

Qu'est-ce que les barres ont à voir avec ça ?

Vous comparez les valeurs de High, qui sont sur...

Merci... Pour la clarification)
 

Bonne journée à tous !

Dans MT4, sur le modèle ALL TIKES, sur des chandeliers minute, je teste l'Expert Advisor. Ma tâche consiste à faire en sorte que le programme passe le moins de temps possible à exécuter du code. Mais ce qui m'a surpris !!!!

Dans ce code, le programme vérifie chaque tick et consacre 6 secondes à l'exécution du code. 375 millisecondes.

void OnTick()
{
Tick++;
if (Tick!=x3)
{
Print("---------------------КАЖДЫЙ ТИК ----------Tick-----=",Tick);
x3=Tick;
}
}

Il m'a semblé que le programme devrait vérifier non pas chaque tick, mais seulement le premier tick de chaque bougie minute et passer beaucoup moins de temps à l'exécution du code.

 
void OnTick()
{
Tick++;

if (Minute()!=x3)//&&Seconds()==0

{
Print("---------------------КАЖДЫЙ ТИК ----------Tick-----=",Tick, "  Bid  ",   Bid, "  LoY  ",   LoY);
x3=Minute();
}
}



Mais le programme a passé 6 secondes. 219 msec. J'en ai conclu que, même si le code indique au programme de ne vérifier l'expression entre parenthèses qu'une fois toutes les 60 secondes, il vérifie toujours cette expression à chaque tic et passe presque autant de temps pour l'exécution que dans le code précédent.
J'ai ensuite changé le modèle en VALEURS VALABLES et j'ai exécuté la deuxième variante. Mais le programme a pris les mêmes6 secondes pour l' exécuter.219 millisecondes.


QUESTION . Est-il possible de faire le programme dans MT4 sur le modèle ALL TICK, vérifier pas chaque tick, et seulement le premier tick d'une nouvelle bougie minute, qui passerait beaucoup moins de temps pour l'exécution du code. Si cela est possible, quelle fonction ou construction linguistique peut être utilisée ?
Merci.

 
datetime current, last;

void OnTick()
   {
   current=iTime(symbol,frame,0);
   if(last==current) return;
   last=current;

   } 
 
Aleksei Stepanenko:

J'ai modifié mon code pour qu'il corresponde au vôtre

datetime current, last;
void OnTick()
{
Tick++;
current=iTime( NULL,0,0);
if(last==current) return;
last=current;
{
Print("---------------------КАЖДЫЙ ТИК ----------Tick-----=",Tick);
}
}


Temps pris par le programme pour exécuter le code.... 6 , 235, c'est-à-dire moins qu'avec mon code (6.375), mais pas plusieurs fois moins
. Il me semble que cela devrait être plusieurs fois moins, car le programme ne doit vérifier la valeur du tick qu'une seule fois à l'ouverture de chaque bougie minute.

Lequel d'entre nous a tort..... il me semble.


Raison: