A assinatura do OnBookEvent às vezes cai - existe algo assim? - página 4

 
Stanislav Korotky:

A propósito, todos os outros tipos de eventos são eventos transmitidos, só que não precisam ser conectados ou desconectados - tudo é comunicado automaticamente durante a inicialização do roteiro.

A OnChartEvent tem eventos de transmissão - assim como eventos normais.

E se você pudesse fazer as normais lá - você pode fazê-las aqui também

 
A100:

Nada disso - OnChartEvent recebe eventos de transmissão - assim como eventos normais

E se você pode fazer transmissões lá, você pode fazer transmissões aqui também.

E sobre outros eventos OnTick ou OnCalculate? Alguma objeção a sua transmissão? OnChartEvent também é transmitido, apesar dos anexos. Se a objeção for à palavra "todos", eu a substituirei por "muitos". A questão é que todas as opções até agora descartaram a possibilidade de que outra pessoa a incapacitasse.

Veremos se há uma correção.

 
prostotrader:

Boas notícias.

De que erro se trata? Vejo exatamente o mesmo post sobre a transação de desativação.

 
prostotrader:

Sua assinatura está falhando por causa de um errona transação do livro inválido

Falha devido a uma chamada indireta do MarketBookRelease- estranho que você ainda não tenha descoberto isso até agora
 
prostotrader:
Eu não chamoMarketBookRelease, mas quandoa transação do livro inválidoaparece no diário de bordo

OnBookEvent pára de discar (você poderia dizer que a assinatura "cai")

Esta é uma causa do erro completamente diferente daquela discutida neste tópico. Se você eliminar uma causa, a outra não desaparecerá por si só

Assim como aqui https://www.mql5.com/ru/forum/1111/page2237#comment_8159123 os erros são os mesmos, mas a maneira de consertar um não se encaixa no outro - então as razões são diferentes

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

Tenho certeza de que esta é a razão do erro.

Os desenvolvedores corrigiram-no e quando a nova construção sair, verificaremos então o "seu" erro.

O exemplo de teste é simples: ligue para MarketBookAdd( x ) no 1º Expert Advisor, depois ligue para MarketBookRelease( x ) no 2º Expert Advisor... e depois esperar pelo evento OnBookEvent( x ) no 1º Expert
 
A100:
Verificar o exemplo é simples: ligue na 1ª EA MarketBookAdd( x ), depois ligue na 2ª MarketBookRelease( x )... E esperar no 1º evento

Se você fizer o que escreve no mesmo símbolo, naturalmente a assinatura será destruída por esse símbolo no mesmo terminal!

E isto é correto.

Adicionado por

Você só precisa usar a assinatura corretamente.

//+------------------------------------------------------------------+
//|                                                        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:

Se você fizer o que escreve no mesmo símbolo, naturalmente a assinatura será destruída por esse símbolo no mesmo terminal!

E isto é correto.

Depois faça o seguinte: ligue para MarketBookAdd( x ) na 1ª EA, depois ligue para MarketBookAdd( x ) e MarketBookRelease( x ) na 2ª EA... e depois esperar pelo evento OnBookEvent( x ) no 1º Expert
 
A100:
Depois faça o seguinte: ligue para MarketBookAdd( x ) no 1º Expert, depois ligue para MarketBookAdd( x ) e MarketBookRelease( x ) no 2º Expert... e depois esperar pelo evento OnBookEvent( x ) no 1º Expert

Use meu código e você não terá problemas com a assinatura.

 
prostotrader:

Use meu código e você não terá problemas para subscrever.

Amanhã vou verificar o poder mágico de seu código... enquanto isso, gostaria de sua opinião sobre a função de abrir/fechar um copo pode ser combinada com a função de assinatura/desinscrição para/de eventos neste copo ou devem ser separados