Questions d'un "mannequin - page 162

 
Karlson:
DBL_MAX sera là.
:-)
 

Pourquoi le nandl handicapé ne revient-il pas, alors que le handicap a été supprimé ?

   int       indicator_handle=iCustom(
   NULL,
   PERIOD_CURRENT,
   "Examples\\ZigzagColor"
   );
   Print(indicator_handle);
   bool  a=IndicatorRelease(
   indicator_handle//,
   );
   Print(a);
   Print(indicator_handle);

La première impression est 10, la deuxième impression est vraie, la troisième impression est encore 10. Mettez un slip une minute - toujours 10.

Je pense qu'il devrait être -1(INVALID_HANDLE). Est-ce que je pense mal ?

Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы - Документация по MQL5
 
Silent:

Pourquoi le nandl handicapé ne revient-il pas, alors que le handicap a été supprimé ?

La première impression est 10, la deuxième impression est vraie, la troisième impression est encore 10. Mettez un slip une minute - toujours 10.

Je pense qu'il devrait être -1(INVALID_HANDLE). Est-ce que je pense de manière incorrecte ?

Les indicateurs supprimés ne sont pas immédiatement supprimés physiquement, mais après une pause (peut-être quelques minutes), au cas où le même programme ou un autre les rouvre (option de cache).

Le problème ne se posera que si le cycle lit les tampons d'un grand ensemble d'indicateurs (si grands qu'ils ne peuvent pas tous tenir dans la mémoire en même temps).

// Ce n'est que dans ce cas qu'il est judicieux de libérer les indicateurs dans le programme.

// Toutes les autres variantes d'utilisation de la fonction IndicatorRelease() sont "racialement incorrectes", car les indicateurs sont libérés à la fin du travail.

D'où le paradoxe : la fonction est inutile car la mise en cache tue complètement tous les cas d'utilisation kasher.

Dans ce cas, Renat a promis une fois de faire une variante de la "libération instantanée", mais apparemment il est toujours très occupé. ;)

--

C'est en quelque sorte la première partie de la réponse (sans laquelle la seconde serait incompréhensible).

Maintenant, à propos de INVALID_HANDLE. D'après ce que je vois, les fonctions de libération des objets dynamiques, ainsi que l'opérateur de suppression, n'attribuent pas la valeur INVALID_HANDLE au pointeur en tant que tel ; ils ne suppriment que les objets vers lesquels pointe le handle. Seules les fonctions d'allocation de mémoire (ainsi que l'opérateur new) attribuent de force la valeur INVALID_HANDLE aux pointeurs en cas d'échec. La façon correcte de vérifier la validité du pointeur est donc la fonction CheckPointer() qui parcourt littéralement la table des handles du système à la recherche d'un objet et renvoie le type de handle si l'objet est trouvé ou 0 s'il ne l'est pas.

Nous espérons que la logique du travail avec les pointeurs (handles) est maintenant un peu plus claire. Ainsi que les résultats de votre exemple. Tout est correct ici : l'indicateur est un objet à accès groupé, il n'est pas physiquement supprimé au premier coup de sifflet (donc même CheckPointer() retournera une valeur non nulle), sans parler du problème d'espérer récupérer la valeur INVALID_HANDLE dans la variable pointeur après l'avoir passée à IndicatorRelease() par valeur.

 

L'article Ordres, positions et transactions dans MetaTrader 5 donne l'exemple suivant :"Chaque transaction est basée sur un ordre particulier, maisun ordre peut générer plusieurs transactions. Par exemple, un ordre d'achat de 10 lots peut être exécuté par plusieurs transactions successives en exécution partielle". Si je comprends bien, si je veux ouvrir une position pour 10 lots par exemple, plusieurs transactions peuvent apparaître dans l'historique. Selon ma stratégie, 1 et 2 position dans la même direction, mon Expert Advisor (MT4) ouvre avec 1.0 lot, et ensuite le troisième et puis 2.0 lot. Dans MT5, il peut arriver que l'ouverture de la première position dans l'historique apparaisse, par exemple, 2 ou plusieurs transactions. 2 ou plusieurs transactions peuvent apparaître dans l'historique. Lorsqu'il souhaite ouvrir une 2ème position, le Conseiller Expert fera défiler l'historique et trouvera qu'il s'agit de la 3ème position. Et ça va ouvrir le mauvais lot. C'est un peu ennuyeux.

Peut-être que quelqu'un sait comment résoudre ce problème ou me donne un lien.

 
MetaDriver:

Merci, juste ce qu'il faut.

// nelp par nelp for dummies - c'est ce qu'il faut dans les articles.

 

J'essaie de créer un indicateur qui utilise deux horizons temporels différents, par exemple M5 (celui qui est affiché à l'écran) et H1. Comment synchroniser les prix entre ces différentes échéances ? Par exemple, lorsque je calcule la dernière valeur de l'indicateur sur M5, j'aimerais pomper automatiquement les prix de H1 de la même heure (c'est-à-dire que la barre zéro dans les deux horizons temporels après ArraySetAsSeries correspond à la dernière heure actuelle, comme dans OnTick, mais pas à la dernière barre à l'écran). Si cette possibilité n'existe pas et que nous devons vérifier les heures des barres manuellement, nous devrions ajouter une fonction de synchronisation, comme onTick, pour les indicateurs.

J'ai essayé de le tester dans le testeur - c'est une bonne chose. Pourquoi la dernière valeur calculée n'est-elle pas enregistrée à l'écran ?

 
gpwr:

J'essaie de créer un indicateur qui utilise deux horizons temporels différents, par exemple M5 (celui qui est affiché à l'écran) et H1. Comment synchroniser les prix entre ces différentes échéances ? Par exemple, lorsque je calcule la dernière valeur de l'indicateur sur M5, j'aimerais pomper automatiquement les prix de H1 de la même heure (c'est-à-dire que la barre zéro dans les deux horizons temporels après ArraySetAsSeries correspond à la dernière heure actuelle, comme dans OnTick, mais pas à la dernière barre à l'écran). Si cette possibilité n'existe pas et que nous devons vérifier les heures des barres manuellement, nous devrions ajouter une fonction de synchronisation, comme onTick, pour les indicateurs.

J'ai essayé de le tester dans le testeur - c'est une bonne chose. Pourquoi les valeurs calculées précédemment ne sont-elles pas sauvegardées dans l'indicateur ?

Utiliser l'une des surcharges de la fonction CopyXXXX()

Lors du débogage, vérifiez dans quel sens les données sont copiées (si plus d'une donnée est copiée).

Обращение по начальной дате и количеству требуемых элементов

int  CopyRates(
   string           symbol_name,       // имя символа
   ENUM_TIMEFRAMES  timeframe,         // период
   datetime         start_time,        // с какой даты
   int              count,             // сколько копируем
   MqlRates         rates_array[]      // массив, куда будут скопированы данные
   );
 
 
Urain:

Utiliser l'une des surcharges de CopyXXXX()

Lors du débogage, vérifiez dans quel sens les données sont copiées (si plus d'une donnée est copiée).

Je l'ai. Merci.
 

Bonjour !

Pourriez-vous m'indiquer le code de l'indicateur qui dessine les max et min sur les graphiques de la minute courante du jour précédent ?

SPS !

 

Cela fait longtemps qu'on ne s'est pas vu =).

Disons. Il y a un moment dans le temps. Par exemple D'03.07.2005 13:48:12'.

Comment puis-je connaître l'heure de la barre (d'une certaine période) qui inclut cette période ?

Ce serait bien s'il y avait une fonction comme :

datetime УзнатьВремяБараПоВремениПользователя (datetime времяПользователя, ENUM_TIMEFRAMES периодБаров) 

... Et qu'il renverrait une valeur négative s'il n'y avait pas d'échange à ce moment-là.

Eh bien, crachez le morceau, cette fonction existe-t-elle ?

Raison: