L'abonnement à OnBookEvent est parfois interrompu - existe-t-il une telle chose ? - page 4

 
Stanislav Korotky:

À propos, tous les autres types d'événements sont des événements de diffusion, sauf qu'ils n'ont pas besoin d'être connectés ou déconnectés - tout est communiqué automatiquement lors de l'initialisation du script.

OnChartEvent possède des événements de diffusion - ainsi que des événements normaux.

Et si vous avez pu faire les normaux là-bas, vous pouvez les faire ici aussi.

 
A100:

Pas du tout - OnChartEvent reçoit des événements de diffusion, ainsi que des événements normaux.

Et si vous pouvez faire des diffusions là-bas, vous pouvez faire des diffusions ici aussi.

Et qu'en est-il des autres événements OnTick ou OnCalculate ? Des objections à leur diffusion ? OnChartEvent est également diffusé, malgré les compléments. Si l'objection porte sur le mot "tous", je le remplacerai par "beaucoup". Le point est que toutes les options jusqu'à présent ont exclu la possibilité que quelqu'un d'autre le désactive.

Nous verrons s'il y a une correction.

 
prostotrader:

Bonne nouvelle.

De quelle erreur s'agit-il ? Je vois exactement le même message concernant la transaction désactivée.

 
prostotrader:

Votre abonnement échoue en raison d'une erreur detransaction de livre invalide

Il échoue à cause d'un appel indirect à MarketBookRelease- il est étrange que vous n'ayez pas encore compris cela.
 
prostotrader:
Je n'appelle pasMarketBookRelease mais quand latransaction de livre invalideapparaît dans le journal

OnBookEvent arrête la numérotation (on pourrait dire que l'abonnement "tombe")

Il s'agit d'une cause d'erreur complètement différente de celle discutée dans ce fil de discussion. Si vous éliminez une cause, l'autre ne disparaîtra pas d'elle-même.

Tout comme ici https://www.mql5.com/ru/forum/1111/page2237#comment_8159123 les erreurs étaient les mêmes dans leur forme mais la manière de les corriger ne correspondait pas à l'autre - les raisons sont donc différentes.

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2018.07.23
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
prostotrader:

Je suis sûr que c'est la raison du bug.

Les développeurs ont corrigé le problème et lorsque la nouvelle version sera disponible, nous vérifierons "votre" erreur.

L'exemple de test est simple : appeler MarketBookAdd( x ) dans le 1er Expert Advisor, puis appeler MarketBookRelease( x ) dans le 2ème Expert Advisor... et ensuite attendre l'événement OnBookEvent( x ) dans le 1er Expert.
 
A100:
L'exemple de contrôle est simple : appeler dans la 1ère EA MarketBookAdd( x ), puis appeler dans la 2ème MarketBookRelease( x )... Et attendez 1 événement

Si vous faites ce que vous écrivez sur le même symbole, naturellement l'abonnement sera détruit par ce symbole dans le même terminal !

Et c'est correct.

Ajouté par

Il suffit d'utiliser l'abonnement correctement.

//+------------------------------------------------------------------+
//|                                                        Books.mq5 |
//|                                      Copyright 2018 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018 prostotrader"
#property link      "https://www.mql5.com"
#property version   "1.00"
bool is_book;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
    is_book = false;
//--- Add books
    if(!MarketBookAdd(Symbol()))
    {
      MessageBox("Не добавлен стакан фьючерса!", "Ошибка", MB_OK | MB_ICONHAND);
      return(INIT_FAILED);
    } 
    else is_book = true;
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
    if(is_book = true) MarketBookRelease(Symbol());
   
  }

//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
  {
   if(symbol == Symbol())
   {
     //Plece you code here
   }
   
  }
//+------------------------------------------------------------------+
 
prostotrader:

Si vous faites ce que vous écrivez sur le même symbole, naturellement l'abonnement sera détruit par ce symbole dans le même terminal !

Et c'est correct.

Faites ensuite ce qui suit : appelez MarketBookAdd( x ) dans le 1er EA, puis appelez MarketBookAdd( x ) et MarketBookRelease( x ) dans le 2ème EA... et ensuite attendre l'événement OnBookEvent( x ) dans le 1er Expert.
 
A100:
Ensuite, faites ce qui suit : appelez MarketBookAdd( x ) dans le 1er Expert, puis appelez MarketBookAdd( x ) et MarketBookRelease( x ) dans le 2ème Expert... et ensuite attendre l'événement OnBookEvent( x ) dans le 1er Expert.

Utilisez mon code et vous n'aurez pas de problèmes d'abonnement.

 
prostotrader:

Utilisez mon code et vous n'aurez aucun problème pour vous abonner.

Demain, je vérifierai le pouvoir magique de votre code... en attendant, j'aimerais avoir votre avis sur... la fonction d'ouverture/fermeture d'un verre peut-elle être combinée avec la fonction d'inscription/désinscription à des événements sur ce verre ou doivent-elles être séparées ?