Une minute et demie de différence entre l'heure locale et l'heure du tic-tac frais. Ce qu'il faut faire. - page 6

 
prostotrader:

Regardez bien le code !

TimeTradeServer() ne sert qu'à déterminer le jour et c'est tout (cette vérification est faite "au cas où") !

TimeTradeServer() peut être complètement omis !

Je l'ai regardé. Je suis d'accord, je l'ai mal écrit, mais la fonction, à mon avis, ne résout toujours pas le problème. Pour être honnête, je ne sais pas vraiment pourquoi c'est nécessaire. Il semble que vous :

1. Obtenir le nombre de millisecondes d'un tick ;

2. Vous décomposez la tique en ses composants ;

3. Ensuite, vous réassemblez la tique à nouveau ! ? C'est là que je ne comprends pas bien à quoi cela sert ? Vous obtiendrez toujours la même valeur que celle transmise à l'origine à la fonction. Ou peut-être que je rate quelque chose ?

Puis vous comparez l'heure du tic-tac avec celle du tic-tac précédent ;


Nous avons besoin de connaître l'heure du serveur, n'est-ce pas ? Sans l'heure du serveur, nous ne pouvons pas déterminer si le fil de discussion d'un personnage est en retard sur celui des autres personnages.

Autrement dit, votre code ne se lie pas à l'heure du serveur et ne compare pas l'heure du serveur à l'heure du fil, ce que nous devons faire. Comprendre non pas le décalage de la pile par rapport aux ticks d'un seul symbole (comme je le pensais au départ en entrant dans cette discussion), mais le délai de transfert des données sur un ensemble de symboles du serveur au terminal.

 
Alexey Kozitsyn:

La vérification semble devoir se faire via TimeGMTOffset. J'esquisserai un exemple plus tard.

C'est drôle, vous êtes une personne expérimentée (pas un débutant).

Vous n'avez besoin d'aucun temps, sauf celui des tics entrants !

Rappelez-vous l'heure (à l'initialisation) du dernier tick, et ensuite toutes les comparaisons vont avec cette heure !

 
Alexey Kozitsyn:

J'ai jeté un coup d'oeil. Je suis d'accord, je l'ai écrit un peu incorrectement, mais la fonction, à mon avis, ne résout toujours pas la tâche à accomplir. Pour être honnête, je ne sais pas vraiment pourquoi c'est nécessaire. On dirait que tu l'es :

3. Puis réassemblez le tic-tac à nouveau ! ? C'est là que je ne comprends pas bien à quoi ça sert ? Vous obtiendrez toujours la même valeur que celle transmise à l'origine à la fonction. Ou est-ce que je rate quelque chose ?


Ce code est "tiré" de mon conseiller expert, où je vérifie si le tick est actuel et s'il est dans les limites de l' intervalle de temps.

sessions de négociation

Ajouté par

La "décomposition" du tick est nécessaire pour déterminer le temps exact (millisecondes) (pas de date), puisque dans les paramètres de session de mon EA

Je règle seulement l'heure

input string          TimeStMon    = "10:00:00";               //Время начала утренней сессии
input string          TimeStDay    = "14:05:00";               //Время начала дневной сессии
input string          TimeStEvn    = "19:05:00";               //Время начала вечерней сессии
 
prostotrader:

C'est tout simplement ridicule, vous êtes une personne expérimentée (pas une novice).

Vous n'avez besoin d'aucun temps, à l'exception du temps des tics entrants !

Rappelez-vous l'heure (à l'initialisation) du dernier tick, et ensuite toutes les comparaisons vont avec cette heure !

J'écrirai mon exemple plus tard, j'aborderai la question plus en détail. Je n'exclus pas que je puisse me tromper (ainsi que pivomoe) et que vous ayez raison.

 
prostotrader:

Ce code est "tiré" de mon EA où je vérifie la pertinence du tick et le temps dans lequel le tick se trouve.

sessions de négociation

Ajouté

La "décomposition" du tick est nécessaire pour déterminer l'heure exacte (sans la date), puisque dans les paramètres de session de mon EA

Je règle seulement l'heure

Exactement, ma faute, je l'ai raté.

 
Alexey Kozitsyn:

Exactement, ma faute, je ne l'ai pas vu de cette façon.

C'est juste que TC n'était pas clair au départ sur ce qu'il voulait obtenir (ou peut-être que c'était mal compris).

Tiens, lance-le et vérifie :

//+------------------------------------------------------------------+
//|                                                         Time.mq5 |
//|                                                   Copyright 2019 |
//|                                                                  |
//+------------------------------------------------------------------+
enum FRESH_TICK
{
  UNKNOWN_TICK,
  NEW_TICK,
  CUR_TICK,
  OLD_TICK
};
//
MqlTick stored_ticks[];
bool is_book;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  int result = CopyTicks(Symbol(), stored_ticks, COPY_TICKS_ALL, 0, 1);
  if(result > 0)
  {
    is_book = MarketBookAdd(Symbol());
    if(is_book == false) return(INIT_FAILED);
  } else return(INIT_FAILED);
  return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
  if(is_book == true) MarketBookRelease(Symbol()); 
}
//+------------------------------------------------------------------+
// Expert Book event function                                        |
//+------------------------------------------------------------------+  
void OnBookEvent(const string &symbol)
{
  if(symbol == Symbol())
  {
    MqlTick a_ticks[];
    int result = CopyTicks(symbol, a_ticks, COPY_TICKS_ALL, 0, 1);
    if(result > 0)
    {
      FRESH_TICK tick_state = CheckTickTime(a_ticks[0]);
      switch(tick_state)
      {
       case UNKNOWN_TICK: Print(EnumToString(UNKNOWN_TICK), " - Тик не определен."); //Тик не определен
       break;
       case NEW_TICK: Print(EnumToString(NEW_TICK), " - Новый тик");     //Торговое время, можно отсылать ордера;
       break;
       case CUR_TICK: Print(EnumToString(CUR_TICK), " - Текущий тик");    //По усмотрению разработчика;
       break;
       case OLD_TICK: Print(EnumToString(OLD_TICK), " - Старый тик");     //По усмотрению разработчика;
       break;
      }
    }  
  }
}
//+------------------------------------------------------------------+
//| Expert Check Market Time function                                |
//+------------------------------------------------------------------+
FRESH_TICK CheckTickTime(MqlTick &a_tick)
{
  if(a_tick.time_msc > stored_ticks[0].time_msc)
  {
    stored_ticks[0] = a_tick;
    return(NEW_TICK);
  }
  else
  {
    if(stored_ticks[0].time_msc == a_tick.time_msc)
    {
      if((stored_ticks[0].ask == a_tick.ask) && (stored_ticks[0].bid == a_tick.bid) &&
         (stored_ticks[0].flags == a_tick.flags) && (stored_ticks[0].last == a_tick.last) &&
         (stored_ticks[0].time == a_tick.time) && (stored_ticks[0].volume == a_tick.volume) &&
         (stored_ticks[0].volume_real == a_tick.volume_real))
        {
          return(CUR_TICK);
        }
        else return(OLD_TICK);
        
    }
    else return(OLD_TICK);
  }
  return(UNKNOWN_TICK);
} 
      
 
prostotrader:

C'est juste que le CT n'était pas sûr de ce qu'il voulait obtenir en premier lieu.

Tenez, lancez-la et vérifiez-la :

Michael, il n'y a pas de questions à l'arrivée de la nouvelle tique/du contrôle de l'ancienne tique. Il n'y a pas non plus de questions sur votre code. La question est différente. Vous devez vérifier cette situation :

14:53:10.277    ProverkaAktyalnostiTikov (RTS-3.19,H1)   Получен НОВЫЙ тик по символу                     GAZR-3.19 time_msc= 2019.03.20 14:53:11.638
14:53:10.277    ProverkaAktyalnostiTikov (RTS-3.19,H1)   ХОТЯ до этого был получeн тик                     RTS-3.19 time_msc  2019.03.20 14:53:13.695
 
Alexey Kozitsyn:

Michael, il n'y a pas de questions à l'arrivée de la nouvelle tique/du contrôle de l'ancienne tique. Il n'y a pas non plus de doute sur votre code. La question est différente. Je dois vérifier la situation suivante :

J'ai modifié le code (voir ci-dessus) et le (OLD_TICK) est apparu.

Et sachant que le nouveau paquet peut contenir un "ancien" tic, le développeur doit l'utiliser à sa discrétion.

 
prostotrader:

J'ai modifié le code (voir ci-dessus) et (OLD_TICK) est apparu.

Ça n'a pas d'importance... des flux de personnages DIFFERENTS.

 
Alexey Kozitsyn:

Ça n'a pas d'importance... des flux de personnages DIFFERENTS.

Alors je ne comprends pas du tout ce que j'ai besoin de faire à l'adresse ? ???.

Si l'heure actuelle est celle du SERVEUR - vous devez l'oublier jusqu'à ce qu'elle soit diffusée !
ou utiliser ce qui est TimeTradeServer()