OnBookEvent에 대한 구독이 때때로 중단됩니다. 그런 일이 있습니까? - 페이지 4

 
Stanislav Korotky :

그건 그렇고, 다른 모든 유형의 이벤트 는 그냥 브로드캐스트되며 연결하거나 연결을 끊을 필요가 없습니다. 스크립트가 초기화될 때 모든 것이 자동으로 연결됩니다.

종류 없음 - 브로드캐스트 이벤트와 일반 이벤트가 모두 OnChartEvent에서 수신됩니다.

그리고 평범한 것들이 그곳에서 만들어질 수 있다면, 여기에서도 할 수 있습니다.

 
A100 :

종류 없음 - 브로드캐스트 이벤트와 일반 이벤트가 모두 OnChartEvent에서 수신됩니다.

그리고 일반적인 것들이 그곳에서 만들어질 수 있다면, 여기에서도 할 수 있습니다.

그러나 다른 OnTick 또는 OnCalculate 이벤트는 어떻습니까? 방송에 대한 이의는 없나요? OnChartEvent 는 추가에도 불구하고 브로드캐스트에도 사용됩니다. "all"이라는 단어에 대한 주장이 있으면 "many"로 대체하겠습니다. 결론은 지금까지 모든 옵션이 다른 사람의 주도로 폐쇄될 가능성을 배제했다는 것입니다.

수정 사항이 있는지 봅시다.

 
prostotrader :

좋은 소식

이것은 어떤 오류에 대한 것입니까? 잘못된 거래에 대해 정확히 같은 게시물을 봅니다.

 
prostotrader :

잘못된 도서 거래 오류로 인해 구독이 "중단"되었습니다.

MarketBookRelease 에 대한 간접 호출로 인해 중단됨 - 여전히 이것을 이해하지 못하는 것이 이상합니다.
 
prostotrader :
나는 MarketBookRelease 를 호출하지 않지만 잘못된 책 거래가 로그에 나타날 때

OnBookEvent가 작동을 멈춥니다(구독이 "떨어진다"고 말할 수 있음)

이것은 이 스레드에서 논의된 것과는 완전히 다른 오류 이유입니다. 한 가지 원인이 제거되면 다른 원인은 저절로 사라지지 않습니다.

여기처럼 https://www.mql5.com/ru/forum/1111/page2237#comment_8159123 오류 형식은 동일하지만 제거 방법이 다른 하나와 맞지 않아 이유가 다릅니다.

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

이 오류가 원인이라고 확신합니다.

개발자가 수정했고 새 빌드가 나오면 "귀하의" 오류를 확인합니다.

테스트 예제는 간단합니다. 첫 번째 EA에서 MarketBookAdd( x )를 호출한 다음 두 번째 EA에서 MarketBookRelease ( x )를 호출한 다음... 첫 번째 EA에서 OnBookEvent( x ) 이벤트를 기다립니다.
 
A100 :
테스트 예제는 간단합니다. 첫 번째 EA에서 MarketBookAdd( x )를 호출한 다음 두 번째 EA에서 MarketBookRelease( x )를 호출하고... 첫 번째 EA에서 이벤트를 기다립니다.

동일한 기호에 작성하는 작업을 수행하면 당연히 동일한 터미널에서 이 기호에 의해 구독이 파괴됩니다!

그리고 맞습니다.

추가됨

올바른 구독을 사용하기만 하면 됩니다.

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

동일한 기호에 작성하는 작업을 수행하면 당연히 동일한 터미널에서 이 기호에 의해 구독이 파괴됩니다!

그리고 맞습니다.

그런 다음 1st Expert Advisor에서 MarketBookAdd( x )를 호출하고 2nd Expert Advisor에서 MarketBookAdd( x ) 및 MarketBookRelease ( x )를 호출한 다음 1st Expert Advisor에서 OnBookEvent( x ) 이벤트를 기다립니다.
 
A100 :
그런 다음 1st Expert Advisor에서 MarketBookAdd( x )를 호출하고 2nd Expert Advisor에서 MarketBookAdd( x ) 및 MarketBookRelease( x )를 호출한 다음 1st Expert Advisor에서 OnBookEvent( x ) 이벤트를 기다립니다.

내 코드를 사용하면 구독에 문제가 없습니다.

 
prostotrader :

내 코드를 사용하면 구독에 문제가 없습니다.

내일 나는 당신의 코드의 마법의 힘을 확인하겠습니다... 하지만 지금은... 주문서 열기/닫기 기능과 구독/구독 취소 기능을 결합할 수 있는지 여부에 대한 귀하의 의견을 듣고 싶습니다. /이 주문서에 대한 이벤트에서 또는 분리되어야 합니다.