[Erreur dans la récupération de l'heure du senior TF dans le chronomètre ! - page 12

 
Taras Slobodyanik:

Je ne vois pas le problème. Une nouvelle bougie apparaît - nous recalculons la dernière bougie dans l'indicateur/conseiller.
Il y a plus d'une nouvelle bougie - nous effectuons un recalcul complet de l'indicateur/conseiller.
C'est la même chose - une nouvelle bougie apparaît.

Autre chose - les périodes requises doivent être constamment "tirées" pour les mettre à jour.
Si personne ne travaille sur la période-symbole (les cotations ne sont pas vérifiées, l'indicateur n'est pas en cours d'exécution), il "dort" car il est considéré comme inutile.

Nous tirons, nous tirons. Nous faisons une demande, obtenons une erreur, sortons. Mais ici, vous voyez, une autre "particularité" apparaît - l'erreur ne se réinitialise pas après la réinitialisation. Si c'était le cas, il n'y aurait pas de problème. Mais le problème est de renvoyer des données incorrectes. Et je peux le voir très clairement.

Tout le système de contrôle des erreurs est mis à mal dans cet exemple.

 

Comment le terminal sait-il que les dernières données sont périmées ?
Parce que l'histoire est là - elle est là.
La demande est envoyée au courtier... dès que possible.

Une nouvelle barre apparaît - les données sont mises à jour.

 
Taras Slobodyanik:

Comment le terminal sait-il que les dernières données sont périmées ?
Après tout, il y a une histoire - il y en a une.
La demande au courtier est envoyée... Dès qu'il en est ainsi.

Une nouvelle barre apparaît - les données sont mises à jour.

La communication avec le serveur est établie. Lors de la demande de données senior TF, si les données ne sont pas prêtes - erreur ou retour 0. Si les données sont prêtes - retourner UNIQUEMENT les données réelles. C'est tout. Si les données ne sont pas prêtes pendant un long moment - laissez-le retourner une erreur ou 0.

 
Taras Slobodyanik:

Vous n'avez pas répondu à votre question sur la version terminale, d'ailleurs.

 
Alexey Kozitsyn:

Au fait, vous n'avez pas répondu à la question concernant la version du terminal.

Qu'est-ce que la version terminale a à voir avec tout ça ? Les nouvelles données, elles sont là ou elles ne le sont pas. Et aucune version ne pourra les sauvegarder si elles ne proviennent pas du serveur.
L'indicateur démarre simplement avant l'arrivée des nouvelles données. Vous pouvez également déplacer les contrôles vers OnCalculate, qui est déclenché lorsqu'un nouveau tick est reçu.

 
Konstantin Nikitin:

Vous pouvez également déplacer les contrôles vers OnCalculate, qui est déclenché lorsqu'un nouveau tick est reçu.

il a été suggéré à plusieurs reprises, et l'administrateur aussi.

dans l'indicateurOnCalculate() sera lancé au début de l'indicateur, mais la deuxième fois OnCalculate() sera lancé à la réception du tick - ici il est nécessaire de lancer le timer et de télécharger les nouvelles données OHLC

 
Igor Makanu:

on le lui a proposé plusieurs fois, ainsi qu'à l'administration

l'indicateur lancera OnCalculate() au démarrage de l'indicateur, mais la deuxième fois OnCalculate() sera lancé à la réception du tick - ici il est nécessaire de démarrer le timer et de télécharger les nouvelles données OHLC

Jetez un coup d'oeil à mon dernier code publié. Il ne s'agit pas de timer, tout a déjà été déplacé vers OnCalculate(). Ne fonctionne toujours pas lorsque le terminal démarre.

 
//--- Проверяем связь с сервером
if(firstrun)
{
 firstrun=false;                // первый запуск индикатора
 return(0);
}   
if(!IsConnected())                              // Если не удалось установить связь с сервером
     {
      //--- Сбрасываем флаг соединения с сервером
      _isConnected=false;
      //--- Выходим
      return( 0 );
     }
Je vérifierais également GetTickCount() pour donner le temps au terminal de se charger, de générer des graphiques et d'établir la communication avec le serveur ; vous devez également tracer le redémarrage du terminal, je ne sais pas comment le tracer, mais vous devez donner du temps...
 
Alexey Kozitsyn:

Jetez un coup d'oeil au dernier code que j'ai publié. Il ne s'agit plus de la minuterie, tout a déjà été déplacé vers OnCalculate(). Ça ne fonctionne toujours pas au démarrage du terminal.

Et bien passez la première passe au démarrage

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   static bool res = false;
   if( !res )
     {
      res = true;
      return( rates_total );
     }
   /* работаем */
   return( rates_total );
  }
 
Konstantin Nikitin:

Passez le premier passage au démarrage

Lire le point 1.

Raison: