Erreurs, bugs, questions - page 661

 

Existe-t-il une limite interne à la longueur de la chaîne de caractères(type de chaîne), ou combien de mémoire libre y a-t-il et combien peut-on mettre dans la chaîne ?

// Cette question concerne l'écriture de programmes pour OpenCL.

Veuillez également préciser la réponse correcte dans la documentation, il n'y a aucune indication dans la FAQ.

 
MetaDriver:

Existe-t-il une limite interne à la longueur de la chaîne de caractères(type de chaîne), ou combien de mémoire libre y a-t-il et combien peut-on mettre dans la chaîne ?

// Cette question concerne l'écriture de programmes pour OpenCL.

Veuillez également préciser la réponse correcte dans la documentation, car il n'y a aucune indication dans la FAQ.

Sans le caractère de saut de ligne "\r\n" est un peu moins de 32768, en gros 32000 caractères peuvent y tenir,

Et avec un saut de ligne jusqu'à ce que la mémoire soit suffisante, au moins j'ai mis 2 000 000 dans la ficelle, ma main s'est fatiguée de pelleter plus loin :)

 
Urain:

Sans le saut de ligne, c'est un peu moins de 32768, soit environ 32 000 caractères,

mais avec l'alimentation en ligne, j'ai assez de mémoire pour le moment, au moins j'ai mis 2.000.000 dans la chaîne, mon bras est fatigué de pousser :)

Merci beaucoup ! 2 millions me suffiront dans un premier temps.

// Je suis juste perplexe : qu'est-ce que la traduction des chaînes de caractères a à voir avec ça ? C'est juste un symbole, pas pire/mieux que les autres.

// Non, je vous crois, c'est juste que d'habitude je comprends comment les choses fonctionnent, mais là c'est un peu bizarre et surprenant....

// Avec quoi l'avez-vous mesuré ? Ce n'était pas une fonction de fichier ?

:)

 
MetaDriver:

Merci, j'en suis heureux ! Deux millions me suffiront pour la première fois.

// Je suis juste perplexe : qu'est-ce que la traduction des chaînes de caractères a à voir avec ça ? C'est juste un symbole, pas pire/mieux que les autres.

// Non, je vous crois, c'est juste que d'habitude je comprends comment les choses fonctionnent, mais là c'est un peu bizarre et surprenant....

// Avec quoi l'avez-vous mesuré ? Pas avec la fonction fichier par hasard ?

:)

Il s'agit très probablement d'une représentation interne de la chaîne de caractères ; \r\n est probablement suivi par l'allocation d'un nouveau tableau (supplémentaire) pour le stockage des informations.

Je ne sais pas exactement, demandez à MQ.

SZY bien sûr pour le contrôle déversé dans un fichier, mais d'abord la chaîne est formé, vérifié sa longueur via Len, bien, je ne me souviens pas maintenant, c'était il ya longtemps, mais tout était en ordre.

ZZZI Et j'ai vérifié la lecture de 10 caractères de la chaîne enregistrée, sans la traduction de plus de ~32700 n'écrit pas dans la variable.

 
Urain:

Il s'agit très probablement d'une représentation interne de la chaîne de caractères, avec \r\n probablement suivi d'un nouveau tableau (supplémentaire) pour stocker les informations.

Je ne sais pas exactement, demandez à MQ.

Eh bien, bien sûr, pour contrôler la réinitialisation d'un fichier, mais d'abord la chaîne est formée, vérifié sa longueur par Len, eh bien, je ne me souviens pas maintenant, c'était il ya longtemps, mais tout était en ordre.

ZZZY Et lire à partir de 10 caractères de la chaîne enregistrée, sans traduction plus de ~32700 n'écrit pas dans la variable.

Très bien, merci, Nicholas. Et, au fait, bon anniversaire à toi... !



--

Qu'est-ce que le camarade stringo a à dire ?

 
La longueur maximale des lignes est de 1073741816 caractères, mais il n'y a pas assez de mémoire pour ce nombre de caractères en x86 (32 bits).
 
Valmars:
Il suffit de synchroniser l'ordinateur à temps, sinon on peut aussi perdre des transactions.

C'est bon, je l'ai. Je vous ai mal compris alors. )) Afin de toujours obtenir correctement l'historique complet, la synchronisation peut être effectuée comme suit :

//+------------------------------------------------------------------+
//| МАКСИМАЛЬНОЕ_ВРЕМЯ                                               |
//+------------------------------------------------------------------+
datetime ChoiceTimeFunction()
  {
   datetime synchro=NULL;
//---
   synchro=(datetime)fmax((double)TimeTradeServer(),(double)TimeLocal());
//---
   if(!MQL5InfoInteger(MQL5_TESTING) || !MQL5InfoInteger(MQL5_OPTIMIZATION) || !MQL5InfoInteger(MQL5_VISUAL_MODE))
     {
      Print("synchro_time: ",synchro,"; TimeTradeServer(): ",TimeTradeServer(),"; TimeLocal(): ",TimeLocal()); return(synchro);
     }
//---
   synchro=TimeCurrent()+Milliseconds_Ahead;
//---
   Print("synchro_time tm+ml_ahead: ",synchro,"; TimeCurrent(): ",TimeCurrent(),"; Milliseconds_Ahead: ",Milliseconds_Ahead); return(synchro);
  }
Pour le testeur, il n'existe qu'une béquille et pas pour tous les cas. Nous attendons qu'ils le réparent.
 
tol64:

C'est bon, je l'ai. Je vous ai mal compris alors. )) Afin de toujours obtenir correctement l'historique complet, la synchronisation peut être effectuée comme suit :

Pour le testeur, ce n'est qu'une béquille, et pas pour tous les cas. Nous attendons qu'ils le réparent.

Non, tu as raison. L'heure du serveur ne dépend pas du fuseau horaire de l'ordinateur, elle est la même pour tous et est égale à la dernière heure fixée dans le "Market Watch".

Lorsque le marché se ferme (fin des transactions) sur un serveur donné, aucun stop ne doit être déclenché jusqu'à la réouverture du marché suivant dans une nouvelle semaine. Dans votre cas, cela ne semble pas être le cas. Les cotations ont déjà cessé d'arriver dans le terminal, mais elles sont toujours en cours de traitement sur le serveur et des arrêts sont déclenchés. Dans certaines sociétés de courtage, les stops ne sont pas déclenchés par le marché, mais par le prix fixé dans le stop. Il ne s'agit pas d'un mécanisme de marché mais d'un mécanisme de "cuisine".

Ce que j'ai dit au sujet des transactions manquantes éventuelles, eh bien, si votre horloge a 2 minutes de retard, les transactions effectuées au cours de ces 2 dernières minutes ne figureront pas dans l'historique car l'heure du serveur est calculée en fonction de l'heure locale et sera également en retard de 2 minutes.

Quant au testeur, on ne voit pas bien ce qui le dérange, car tout cela est simulé sur place et l'heure locale est égale à l'heure du serveur.

 
MetaDriver:

OK, merci Nikolaï, et au fait, bon anniversaire à toi... !

Je l'ai déterré,

Skype et au milieu de la nuit, on vous rappellera l'anniversaire d'une connaissance (comme une publicité :)

Merci pour le gâteau, il est très beau, mais les bougies sont un peu dures à digérer :o)

 
Valmars:

Non, tu as raison. L'heure du serveur est indépendante du fuseau horaire de l'ordinateur, elle est la même pour tous et est égale à la dernière heure enregistrée dans le "Market Watch".

Lorsque le marché se ferme (fin des transactions) sur un serveur donné, aucun stop ne doit être déclenché jusqu'à la réouverture du marché suivant dans une nouvelle semaine. Dans votre cas, cela ne semble pas être le cas. Les cotations ont déjà cessé d'arriver dans le terminal, mais elles sont toujours en cours de traitement sur le serveur et les set stops sont déclenchés. Dans certaines sociétés de courtage, les stops ne sont pas déclenchés par le marché, mais par le prix fixé dans le stop. Il ne s'agit pas d'un mécanisme de marché mais d'un mécanisme de "cuisine".

Non, tout a fonctionné correctement sur le serveur ( compte de démonstration MQ). C'est-à-dire que les arrêts se sont déclenchés alors que je n'étais pas connecté. Mais quand je me suis connecté, le marché était déjà fermé. Dans la fenêtre Market Watch, l'heure du dernier tick avant la coupure de ma connexion a été enregistrée. Lorsque j'ai demandé l'historique des transactions en spécifiant TimeCurrent() comme deuxième valeur, je n'ai pas obtenu l'historique complet. Bien que l'aide pour TimeCurrent() dise que :

... La valeur de l'heure est générée sur le serveur commercial et ne dépend pas des paramètres de l'heure sur l'ordinateur de l'utilisateur.

C'est-à-dire que je comprends que cette fonction doit retourner la valeur de la dernière arrivée de cotation d'un des instruments dans la fenêtre Market Watch depuis le serveur même si la connexion a été coupée et que la connexion a été faite alors que le marché était déjà fermé. Dans mon cas, cela ne s'est pas produit et je n'ai pas obtenu toute l'histoire. Je ne sais pas, ce n'est pas mentionné dans l'aide.

Et ce que j'ai dit à propos des transactions manquées, eh bien, si votre horloge a un retard de 2 minutes, les transactions faites dans ces 2 dernières minutes ne seront pas enregistrées dans l'historique, parce que le temps du serveur est calculé avec l'heure locale et sera également en retard de 2 minutes.

Dans ce cas, si vous voulez l'historique complet, il vous suffit d'ajouter un chiffre plus grand pour un jour à venir et vous aurez la garantie que toutes les offres seront sélectionnées. :)

Quant au testeur, on ne sait pas trop ce qui ne vous convient pas, car là tout est simulé et le local est égal au serveur.

Mais dans le testeur, il y a un bug avec la fonction HistoryDealsTotal(), et il apparaît dans le mode de visualisation. Le temps y est modélisé correctement. Une simple béquille peut aider dans certains cas.

Raison: