Erreurs, bugs, questions - page 3035

 
Slava:

Vous ne pouvez pas le vérifier vous-même ?

Vous pouvez le vérifier, mais qu'y a-t-il à vérifier quand il n'y a pas de compréhension ))
Et il n'est pas possible de simuler le moment où les données ne sont pas encore prêtes.

Je veux comprendre la théorie, comment travailler correctement avec OnCalculate dans cet exemple.
Si les données ne sont pas prêtes à l'itération actuelle de la boucle, le compteur limite+1 doit-il être retourné ou quoi ?

 
Roman:

Il est possible de le vérifier, mais qu'y a-t-il à vérifier quand il n'y a pas de compréhension)
Et il n'est pas possible de simuler le moment où les données ne sont pas encore prêtes.

Je veux comprendre la théorie qui permet de gérer correctement OnCalculate dans cet exemple.
Si les données ne sont pas prêtes à l'itération actuelle de la boucle, le compteur limite+1 doit-il être retourné ou quoi ?

Un zéro doit être renvoyé.

 
Slava:

4. Toutes les séries chronologiques sont traitées dans l'ordre, du plus bas au plus haut. D'abord l'application du tick, puis le calcul de tous les indicateurs créés sur cette série temporelle. Si vous demandez des données pour le même symbole H1 à un indicateur, travaillant sur M1, vous n'obtiendrez jamais de données avec un tick appliqué. Les données seront toujours en retard d'un tick, peu importe les astuces que vous appliquerez. Parce qu'un fil par symbole avec un traitement consécutif des délais.

La déclaration est un peu ambiguë. Laissez-moi clarifier les choses, juste au cas où. Oui, lors du traitement d'un tick, toutes les séries chronologiques sont traitées dans l'ordre, de la plus jeune à la plus ancienne. Chaque tick est ajouté aux données de chaque série temporelle, puis les indicateurs sont calculés pour chaque série temporelle, dans l'ordre. En d'autres termes, pour l'indicateur dans OnCalculate(), les données des séries temporelles (toutes) sont certainement mises à jour, mais les données des indicateurs des anciennes périodes n'ont pas encore été recalculées.

 
Slava :

A la première demande, l'indicateur peut ne pas recevoir les données de son symbole mais d'une autre période pour une seule raison : la série temporelle requise n'a pas encore été construite ou a déjà été détruite après un certain temps, lorsqu'il n'y avait pas de demandes.

Après une demande infructueuse, il suffit d'envoyer une commande à votre graphique pour le mettre à jour et de mettre immédiatement fin à OnCalculate. Il est garanti que OnCalculate sera appelé et que les séries chronologiques nécessaires seront préparées à ce moment-là.

C'est comme utiliser un marteau pour attraper une mouche.

Comme vous le savez, cette commande met à jour tous les indicateurs sur tous les graphiques du symbole en question. Si vous avez plusieurs indicateurs sur plusieurs graphiques du même symbole, vous pouvez facilement obtenir une sorte de cycle, car chaque indicateur enverra sa propre commande ChartSetSymbolPeriod ().

Pourriez-vous ajouter une commande permettant de mettre à jour uniquement l'indicateur REMOTE ?

 
Alain Verleyen:

C'est comme utiliser un marteau pour attraper une mouche.

Comme vous le savez, cette commande met à jour tous les indicateurs sur tous les graphiques du symbole en question. Si vous avez plusieurs indicateurs sur plusieurs graphiques du même symbole, vous pouvez facilement obtenir une sorte de boucle, car chaque indicateur enverra sa propre commande ChartSetSymbolPeriod ().

Pourriez-vous ajouter une commande permettant de mettre à jour uniquement l'indicateur REMOTE ?

Vous pouvez obtenir n'importe quoi s'il y a des erreurs logiques dans le code.

 
mktr8591:

En fait, OnTick n'est pas synchronisé avec OnCalculate par le même symbole. Théoriquement, OnTick peut être en retard et à son début toutes les indications sur tous les TFs seront calculées ?

Jusqu'à présent, je vois la situation inverse - les indicateurs ne sont pas calculés avec le nouveau tick qui arrive au moment de l'ouverture de la barre.

 
Anton:

La déclaration est un peu ambiguë. Laissez-moi clarifier les choses, juste au cas où. Oui, lors du traitement d'un tick, toutes les séries chronologiques sont traitées dans l'ordre, de la plus jeune à la plus ancienne. Chaque tick est ajouté aux données de chaque série temporelle, puis les indicateurs sont calculés pour chaque série temporelle, dans l'ordre. Cela signifie que pour l'indicateur dans OnCalculate(), les données de la série temporelle (toutes les séries temporelles) sont certainement mises à jour, mais les données des indicateurs des délais supérieurs n'ont pas encore été recalculées.

Que signifie"calcul des indicateurs sur chaque période, dans l'ordre", c'est-à-dire en fonction de lapériode"ENUM_TIMEFRAMES" ?

intiCustom(
symbole de chaîne de caractères,// nom du symbole
ENUM_TIMEFRAMESpériode,// période
nom de chaîne// dossier/nom d'utilisateur
...// liste des paramètres d'entrée de l'indicateur
) ;

Et s'il y a deux indicateurs avec la mêmepériode ENUM_TIMEFRAMESet que l'un est calculé à partir des données d'un autre, comment assurer l'exactitude du calcul consécutif ?

Ai-je bien compris que si l'indicateur est calculé(périodeENUM_TIMEFRAMES) sur M1, alors lorsqu'il demande l'information OHLC, il recevra l'information actuelle sur le dernier tick pour n'importe quel TF supérieur ?

 
Quel est le résultat de

iSpread ?


Je constate qu'elle est à peu près similaire à la valeur de l'écart si vous recherchez les barres dans Symboles/Bars dans le terminal.

Bien entendu, ces valeurs ne correspondent pas aux valeurs réelles données par SYMBOL_SPREAD.

Pourquoi une telle différence ? Et qu'est-ce qu'un tel écart irréel montré aveciSpread?

 
Aleksey Vyazmikin:

Que voulez-vous dire par"calcul des indicateurs sur chaque timeseries, dans l'ordre" c'est-à-dire en fonction de lapériode"ENUM_TIMEFRAMES" ?

intiCustom(
symbole de chaîne de caractères,// nom du symbole
ENUM_TIMEFRAMESpériode,// période
nom de chaîne// dossier/nom d'utilisateur
...// liste des paramètres d'entrée de l'indicateur
) ;

Et s'il y a deux indicateurs avec la mêmepériode ENUM_TIMEFRAMES, et que l'un d'entre eux est calculé sur les données d'un autre, comment garantir l'exactitude d'un calcul consécutif ?

Ce service est fourni par le terminal.

Ai-je bien compris que si l'indicateur est calculé(périodeENUM_TIMEFRAMES) sur M1, alors lorsqu'il demande l'information OHLC, il recevra l'information réelle sur le dernier tick pour n'importe quel TF supérieur dans tous les cas ?

Oui, exactement.

 
Anton:

Ce service est fourni par le terminal.

Oui, c'est vrai.

Anton, une fonction séparée pour obtenir tous les M1(seulement M1) sans tenir compte du paramètre MAX_BARS sans mettre en cache et sauvegarder les données sur le disque est très manquante. Cela donnerait au programmeur de nouvelles possibilités pour former sa propre structure de données historiques.
Tous les ticks sont accessibles, mais M1 ne l'est pas si MAX_BARS != Illimité. Le problème ne se poserait pas si tous les tics couvraient toute l'histoire de M1, mais ce n'est pas le cas.