La suscripción a OnBookEvent a veces se cae - ¿existe? - página 4

 
Stanislav Korotky:

Por cierto, todos los demás tipos de eventos son eventos de difusión, sólo que no necesitan ser conectados o desconectados - todo se comunica automáticamente durante la inicialización del script.

OnChartEvent tiene eventos de transmisión - así como eventos normales.

Y si puedes hacer las normales allí - puedes hacerlas aquí también

 
A100:

En absoluto - OnChartEvent recibe eventos de difusión - así como eventos normales

Y si puedes hacer transmisiones allí, también puedes hacerlas aquí.

¿Y qué pasa con otros eventos OnTick o OnCalculate? ¿Alguna objeción a su difusión? OnChartEvent también se difunde, a pesar de los archivos adjuntos. Si la objeción es a la palabra "todos", la sustituiré por "muchos". La cuestión es que todas las opciones hasta ahora han descartado la posibilidad de que alguien lo desactive.

Veremos si hay una corrección.

 
prostotrader:

Buenas noticias.

¿De qué error se trata? Veo exactamente el mismo post sobre la transacción inhabilitada.

 
prostotrader:

Su suscripción está fallando debido a un error detransacción de libro no válido

Falla debido a una llamada indirecta a MarketBookRelease- es extraño que no se haya dado cuenta de eso a estas alturas
 
prostotrader:
No llamo aMarketBookRelease pero cuando apareceuna transacción de libro no válidaen el registro

OnBookEvent deja de marcar (se podría decir que la suscripción "se cae")

Esta es una causa de error completamente diferente a la que se discute en este hilo. Si se elimina una causa, la otra no desaparecerá por sí sola

Al igual que aquí https://www.mql5.com/ru/forum/1111/page2237#comment_8159123 los errores eran los mismos pero la forma de arreglar uno no se ajusta al otro - por lo que las causas son diferentes

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

Estoy seguro de que esta es la razón del error.

Los desarrolladores lo han arreglado y cuando salga la nueva compilación, comprobaremos entonces "tu" error.

El ejemplo de prueba es simple: llame a MarketBookAdd( x ) en el 1er Asesor Experto, luego llame a MarketBookRelease( x ) en el 2do Asesor Experto... y luego esperar el evento OnBookEvent( x ) en el 1er Experto
 
A100:
El ejemplo de comprobación es sencillo: llamar en el 1er EA MarketBookAdd( x ), luego llamar en el 2º MarketBookRelease( x )... Y esperar en el 1er evento

Si haces lo que escribes en el mismo símbolo, ¡naturalmente la suscripción será destruida por ese símbolo en la misma terminal!

Y esto es correcto.

Añadido por

Sólo hay que utilizar la suscripción correctamente.

//+------------------------------------------------------------------+
//|                                                        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 haces lo que escribes en el mismo símbolo, ¡naturalmente la suscripción será destruida por ese símbolo en la misma terminal!

Y esto es correcto.

Entonces haga lo siguiente: llame a MarketBookAdd( x ) en el 1er EA, luego llame a MarketBookAdd( x ) y MarketBookRelease( x ) en el 2º EA... y luego esperar el evento OnBookEvent( x ) en el 1er Experto
 
A100:
Entonces haga lo siguiente: llame a MarketBookAdd( x ) en el 1er Experto, luego llame a MarketBookAdd( x ) y MarketBookRelease( x ) en el 2do Experto... y luego esperar el evento OnBookEvent( x ) en el 1er Experto

Usa mi código y no tendrás problemas con la suscripción.

 
prostotrader:

Usa mi código y no tendrás problemas para suscribirte.

Mañana comprobaré el poder mágico de su código... mientras tanto, me gustaría conocer su opinión sobre ¿se puede combinar la función de apertura/cierre de un vaso con la función de suscripción/desinscripción a/de eventos en este vaso o deben estar separadas?