Erreurs, bugs, questions - page 1442

 

Lisez attentivement le siteCopyRates():

Note

1. Si l'intervalle de données demandé est complètement en dehors des données disponibles sur le serveur, la fonction renvoie -1. Si les données demandées sont en dehors de TERMINAL_MAXBARS (nombre maximal de barres sur le graphique), la fonction renvoie également -1.

2. Lors de la demande de données à partir de l'indicateur, si les séries temporelles demandées n'ont pas encore été construites ou si elles doivent être téléchargées à partir du serveur, la fonction renverra -1 immédiatement, mais le processus de téléchargement/construction lui-même sera lancé.

3. Lors de la demande de données à partir du conseiller expert ou d'un script, le téléchargement à partir du serveur sera initié, si le terminal ne dispose pas de ces données localement, ou la construction des séries temporelles requises commencera, si les données peuvent être construites à partir de l'historique local, mais qu'elles ne sont pas encore prêtes. La fonction renverra la quantité de données qui sera prête à l'expiration du délai, mais l'historique continuera d'être téléchargé, et la prochaine fois qu'une demande similaire sera faite, la fonction renverra plus de données.

1. C'est correct et logique, mais avant de demander des données, vous devez vérifier le nombre de barres autorisé dans la fenêtre.

2) Vous avez également raison, vous devez essayer de recevoir des données jusqu'à ce que le terminal renvoie la quantité requise, sans oublier de vérifier la connexion avec le serveur. Il n'y a aucun doute sur la qualité des données reçues ici - les données sont là ou pas.

3. ici, ce n'est pas clair du tout. Vous ne pouvez jamais être sûr que les données reçues sont complètes. Et pourquoi l'utilisateur aurait-il besoin de données dont il n'est pas sûr qu'elles soient complètes ? La pratique montre que l'absence d'astuces (tentatives préliminaires pour obtenir des données afin d'initier le téléchargement à partir du serveur) ne donne pas l'assurance que la demande obtiendra des données complètes.

Je pense qu'il est plus pratique de rendre le comportement des fonctions de récupération de données dans les conseillers experts similaire à celui des indicateurs.

 
Joo Zepper:

Lisez attentivement le siteCopyRates():


3) C'est là que ce n'est pas clair du tout. Vous ne pouvez jamais être sûr que les données reçues sont complètes. Et pourquoi l'utilisateur aurait-il besoin de données qui ne sont pas complètes ? La pratique montre qu'aucune astuce (tentatives préliminaires pour obtenir des données afin d'initier le téléchargement à partir du serveur) ne permet d'être sûr que la demande obtiendra des données complètes.

Pourquoi ne pouvez-vous pas être sûr ? Utilisez SeriesInfoInteger(symbol,period,SERIES_SYNCHRONIZED) pour être sûr.

Continuez à lire la documentation. De manière aussi réfléchie que possible.

 
Slawa:

Pourquoi ne pouvez-vous pas être sûr ? Pour être sûr, utilisez SeriesInfoInteger(symbol,period,SERIES_SYNCHRONIZED)

Continuez à lire la documentation. Ne soyez pas moins réfléchi.

Merci pour le conseil, mais j'utilise ce drapeau depuis longtemps. Existe-t-il d'autres moyens plus fiables ?

J'attends également votre prochaine suggestion - ouvrir la fenêtre du graphique de l'instrument demandé. Et c'est ce qui est fait, mais les données complètes ne sont pas garanties.

 
Joo Zepper:
Merci pour le conseil, mais le contrôle de ce drapeau est utilisé par moi depuis longtemps. Existe-t-il d'autres moyens plus fiables ?

Quel est le problème alors ? Si cet indicateur est mis à true, les données actuelles sont entièrement synchronisées. Ils peuvent être incomplets parce que le serveur a plus de données que vous - l'histoire est plus profonde.

Ensuite, interrogez l'historique en profondeur et vérifiez SeriesInfoInteger(symbol,PERIOD_M1,SERIES_SERVER_FIRSTDATE) par rapport à la première date de vos minutes locales.

 
Slawa:

Quel est le problème alors ? Si cet indicateur est mis à true, les données actuelles sont entièrement synchronisées. Ils peuvent être incomplets parce que le serveur a plus de données que vous - l'histoire est plus profonde.

Ensuite, interrogez l'historique en profondeur et vérifiez SeriesInfoInteger(symbol,PERIOD_M1,SERIES_SERVER_FIRSTDATE) par rapport à la première date de vos minutes locales.

Mais c'est un suicide pour le conseiller expert. Vous aurez de terribles décalages. Et vous n'avez pas besoin, en règle générale, d'un historique complet.

Je pense à ça. Dans le rapport de marché, il y a toujours les dernières données et si le terminal ne peut pas fournir la quantité nécessaire de données sur demande dans les limites de l'historique du serveur et du nombre autorisé de barres dans la fenêtre, dans ce cas, il faut retourner -1, comme dans les indicateurs. Soit obtenir des données, soit -1, il n'y a pas de troisième option.

 

Je fais cela avant de demander des données :

for(int attempt = 0; attempt < 10; attempt++) 
  {
    bool flag = true; 
    for(int symb = 0; symb < SymbolCNT; symb++) 
    {
      if(!synched[symb]) 
      {
        // trial copying of price data
        int copied = CopyRates(symbsName[symb], smPeriod, startPosDataGet, barsReq, prices[symb].Data); 
        
        if(copied >= barsReq) 
        {
          if(idChart[symb] != -1) 
          {
            ChartClose(idChart[symb]); 
            idChart[symb] = -1;
          }
          synched[symb] = true;
        }
        else 
        {
          flag = false; 
          if(showAlert) 
            Alert(symbsName[symb] + ": requested/received " + (string)barsReq + "/" + (string)copied); 
          
          if(idChart[symb] == -1) 
          {
            idChart[symb] = ChartOpen(symbsName[symb], smPeriod); 
            ChartSetInteger(ChartFirst(), CHART_BRING_TO_TOP, 0, true);
          }
        }
      }
    }
    if(!flag) 
      if(TerminalInfoInteger(TERMINAL_CONNECTED)) 
        Sleep(1000);
  }
  
  for(int symb = 0; symb < SymbolCNT; symb++) 
    if(idChart[symb] != -1) 
      ChartClose(idChart[symb]); 

Mais déjà lors des requêtes directes, les données sont trouées. Parfois sans trous. C'est ce dont je parle - aucune confiance dans les données reçues.

 
Karputov Vladimir:

La vidéo insérée via l'éditeur de message n'est pas sauvegardée.

Google Chrome Version 46.0.2490.86 m.

Internet Explorer 11.11.10586.0.

L'erreur sera corrigée, merci pour le message.
 

Les indicateurs habituels ne fonctionnent PAS après la mise à jour du système vers Windows10. Il n'est tout simplement pas possible de s'attacher aux graphiques. Dans l'éditeur, une erreur est affichée lorsque l'on compile

erreur

 
Alexandr:
Les indicateurs habituels ne fonctionnent PAS après la mise à jour du système vers Windows10. On ne peut tout simplement pas être attaché aux graphiques. Dans l'éditeur, l'erreur https://i.gyazo.com/5dbea3b25ab9a45cf3a9449335c1f57f.png apparaît lors de la compilation.
Probablement quelque chose avec les droits d'accès, vérifiez si les dossiers du terminal sont accessibles en écriture, essayez de diminuer l'UAC .....
 

Vérifié. Mon UAC -

UAC

Il a été désactivé. Pouvez-vous me dire comment citer un message ? Impossible également de continuer à écrire un message sur une nouvelle ligne car Yentgen ne déplace pas le curseur sur une nouvelle ligne. Vous avez besoin de faire un réglage ? Je n'ai pas utilisé le forum depuis un moment.