Erreurs, bugs, questions - page 454

 
Interesting:
Il me semble que vous devriez traduire chaque élément du tableau individuellement.

J'aimerais de l'aide, pas une diatribe. Permettez-moi de préciser que j'ai essayé de traduire en utilisant CharArrayToString avec CP_UTF16, mais cela ne semble pas être pris en charge. Peut-être ai-je besoin d'une autre page de code ?

Question aux développeurs - il est écrit dans l'aide, que les pages qui ne sont pas dans les constantes standard, peuvent être ajoutées manuellement. Sont-ils tous pris en charge ou non ?

 
TheXpert:

J'aimerais de l'aide, pas une diatribe. Si je comprends bien, j'ai essayé d'utiliser CharArrayToString de CP_UTF16, mais j'ai l'impression qu'il n'est pas pris en charge. Peut-être ai-je besoin d'une autre page de code ?

Question aux développeurs -- dans l'aide il est écrit que les pages qui ne sont pas dans les constantes standards, peuvent être ajoutées manuellement. Sont-ils tous pris en charge ou non ?

J'ai mal compris la question. Si j'ai bien compris la documentation, pour CP_UTF16, vous devez spécifier le code numérique requis (il reste à savoir lequel).

C'est probablement une question pour les développeurs.

 
En plus de la question - https://www.mql5.com/ru/forum/1111/page455#comment_80246 - à laquelle j'aimerais toujours avoir une réponse, je vais préciser la situation. J'ai un indicateur multidevises, je le teste sur MetaQuotes et Alpari. Je l'utilise pour Alpari mais avec MetaQuotes il retourne souvent BarsCalculated pour différents symboles et en particulier l'erreur 4806 ou juste 0 barres comptées. Veuillez m'indiquer où je peux en savoir plus sur les causes possibles du 4806 et sur la manière de les résoudre. J'utilise le code des métacitations pour la synchronisation des données - fonction CheckLoadHistory de la page https://www.mql5.com/ru/docs/series/timeseries_access. Les erreurs de BarsCalculated surviennent après la mise à zéro de cette fonction (c'est-à-dire que les données pour le calcul doivent sembler être en place). Peut-on lui faire confiance ou faut-il autre chose ? Par sécurité, j'aimerais préciser que l'indicateur utilise des barres standard pour le calcul et que c'est leur disponibilité qui est vérifiée en appelant BarsCalculated.
 
marketeer:
En plus de la question - https://www.mql5.com/ru/forum/1111/page455#comment_80246 - à laquelle j'aimerais toujours avoir une réponse, je vais préciser la situation. J'ai un indicateur multidevises, je le teste sur MetaQuotes et Alpari. Je l'utilise pour Alpari mais avec MetaQuotes il retourne souvent BarsCalculated pour différents symboles et en particulier l'erreur 4806 ou juste 0 barres comptées. Veuillez m'indiquer où je peux trouver plus d'informations sur les causes possibles du 4806 et sur la manière de le résoudre. J'utilise le code des métacitations pour la synchronisation des données - fonction CheckLoadHistory de la page https://www.mql5.com/ru/docs/series/timeseries_access. Les erreurs de BarsCalculated surviennent après la mise à zéro de cette fonction (c'est-à-dire que les données pour le calcul doivent sembler être en place). Peut-on lui faire confiance ou faut-il autre chose ? Par sécurité, j'aimerais préciser que l'indicateur utilise les masques standards pour le calcul et que c'est leur disponibilité qui est vérifiée en appelant BarsCalculated.

Si la réponse ne provient pas de BarsCalculated, les données sont synchronisées après un intervalle d'une fraction de seconde. Attrapé au moment de la synchronisation, BarsCalculate=0.
 
Swan:
Si le rafraîchissement ne vient pas de Sami, alors les données se synchronisent après un délai très court. Pris dans la synchronisation, BarsCalculate=0.

Merci pour cette information, bien que je puisse dire à "eux-mêmes" que je ne suis pas très heureux d'un tel comportement - il impose une incertitude significative dans la fonctionnalité du logiciel. Par exemple, il y a déjà plus d'une heure, j'ai accroché un indicateur, dans lequel j'ai indiqué quelques nouveaux tickers - dans la revue du marché, ils sont - si la référence aux fonctions ci-dessus aurait dû initier le téléchargement et le comptage, alors tout devrait être terminé depuis longtemps, mais ce n'est pas le cas. Il serait au moins souhaitable de voir dans le journal du système chaque éternuement du terminal à propos du téléchargement et d'autres actions "souterraines", sinon on ne sait pas pour quelle raison il s'est "éteint" - la dernière entrée dans l'"Expert" avec l'erreur 4806, mais dans le système - dit que le terminal est désynchronisé. Étant donné qu'il n'y a pas de ticks pendant le week-end, j'ai modifié les paramètres plusieurs fois, mais toujours pas de données.

Par exemple, j'ai pris RTS-9.11, mais la fonction de rafraîchissement de MetaQuotes, mentionnée ci-dessus, renvoie régulièrement Load failed.

 
Une autre question. En quatrième, vous pourriez écrire tableau multidimensionnel func(int array[][]) comme argument de fonction. Dans le cinquième, le compilateur génère une erreur de valeur d'index invalide - il exige que la dimensionnalité soit spécifiée. J'ai écrit func(int &array[][3]) - pas d'erreur, mais ce n'est pas une solution. Comment écrire des fonctions alors ? Par définition, leur sens est d'allouer un fragment de code abstrait applicable à différentes données, différents tableaux.
 
marketeer:
Une autre question. En quatrième, vous pourriez écrire un tableau multidimensionnel func(int array[][]) comme argument de fonction. Dans la cinquième, le compilateur génère une erreur de valeur d'index invalide - il exige que la dimension soit spécifiée. J'ai écrit func(int &array[][3]) - pas d'erreur, mais ce n'est pas une solution. Comment écrire des fonctions alors ? Leur sens est, par définition, d'allouer un fragment de code abstrait applicable à différentes données, différents tableaux.

C'est ce que je fais :

class cArray2
  {
   double            _Data[];
   int               _ColumnsCount;
   int               _RowsCount;
   ...
   ...
  }

Je passe des objets de cette classe comme arguments.

En d'autres termes, j'utilise un tableau unidimensionnel comme un magasin de données de n'importe quelle dimension, tout en recalculant moi-même les indices "multidimensionnels" en indices "unidimensionnels" (et inversement).

Il fonctionne à une vitesse tout à fait acceptable.

Vous pouvez comprendre les métacitations. Si vous n'introduisez pas la contrainte "une seule dimension est indéfinie", vous ne pouvez pas générer de code rapide pour accéder à un élément de tableau au moment de la compilation.

 
marketeer:

Merci pour cette information, bien que je puisse dire à "eux-mêmes" que je ne suis pas très heureux d'un tel comportement - il impose une incertitude significative dans la fonctionnalité du logiciel. Par exemple, il y a déjà plus d'une heure, j'ai accroché un indicateur, dans lequel j'ai indiqué quelques nouveaux tickers - dans la revue du marché, ils sont - si la référence aux fonctions ci-dessus aurait dû initier le téléchargement et le comptage, alors tout devrait être terminé depuis longtemps, mais ce n'est pas le cas. Il serait au moins souhaitable de voir dans le journal du système chaque éternuement du terminal à propos du téléchargement et d'autres actions "souterraines", sinon on ne sait pas pour quelle raison il s'est "éteint" - la dernière entrée dans l'"Expert" avec l'erreur 4806, mais dans le système - dit que le terminal est désynchronisé. Étant donné qu'il n'y a pas de ticks pendant le week-end, j'ai modifié les paramètres plusieurs fois, mais toujours pas de données.

Par exemple, j'ai pris RTS-9.11, mais la fonction de rafraîchissement de MetaQuotes, mentionnée sur le lien, renvoie régulièrement Load failed.

Référence :

L'accès aux données des indicateurs et des séries chronologiques se fait indépendamment du fait que les données demandées soient prêtes ( accès dit asynchrone) . Ces données sont essentielles pour le calcul des indicateurs personnalisés. En l'absence des données demandées, les fonctions telles queCopy...() renvoient immédiatement une erreur.

Il n'y a pas de ticks le week-end, l'indicateur est lancé, et une erreur est renvoyée...

imho, il n'y a qu'une seule solution, c'est de lancer un conseiller expert supplémentaire, qui charge l'historique demandé...

C'est-à-dire que si les données sont disponibles pour le conseiller expert, elles seront disponibles pour l'indicateur. Je ne l'ai pas vérifié, la solution semble tordue.


Je vais répéter ma question :

Aide :

La fonction Sleep() ne peut pas être appelée depuis desindicateurs personnalisés car les indicateurs sont exécutés dans le thread de l'interface et ne doivent pas le ralentir.

Vous ne pouvez absolument pas, ou si vous le voulez vraiment, vous pouvez, mais attention ? :)


Il y a un problème pour accéder aux données d'un autre symbole à partir de l'indicateur.

s'il n'y a pas de tics)
c'est-à-dire qu'il n'y a aucun moyen pour l'indicateur de récupérer des données sur le week-end, ni son TF, ni son symbole...
 
Swan:
c'est-à-dire qu'il n'y a aucun moyen pour que l'indicateur puisse obtenir ses données le week-end, ni sa TF, ni son symbole...
A mon avis, ce sont tous des bugs. Les ticks sont des ticks, mais rien n'empêche (le terminal) de charger des données et de calculer des indices en l'absence de ticks. Le plus intéressant est que le même code fonctionne différemment sur les différents serveurs de démonstration. Par exemple, sur Alpari, l'or et l'argent sont tirés vers le haut, et l'indice est recalculé. Le problème semble donc être plus large que cela.
 
MetaDriver:

Les métacottages sont compréhensibles. À moins que la contrainte "une seule dimension est indéfinie" ne soit imposée, vous ne pouvez pas générer de code rapide pour accéder à un élément de tableau au moment de la compilation.

Eh bien, je ne peux pas le comprendre ;-). Bien sûr, de nouvelles fonctionnalités, comme la génération rapide de code, pourraient être ajoutées, mais de nouvelles constructions syntaxiques (contraintes) pourraient également être désactivées, par exemple, avec ces tableaux de paramètres : qui veut une optimisation de la vitesse, spécifie la dimensionnalité, et qui veut un code rapide sans problèmes de portage de l'ancien code, le laisse tel quel, et la même chose si le code était plus lent. Il y aurait un compromis entre la vitesse et la commodité, ou vous pourriez proposer l'assembleur comme mql5. ;-).