OnBookEvent aboneliği bazen düşüyor - böyle bir şey var mı? - sayfa 11

 
Stanislav Korotky :

Evet ve buna cevaben, önce uzun süre sorun olmadığını iddia ettiniz, sonra sözde çözümler için farklı seçenekler sunmaya başladınız, ancak genel durumda işe yaramıyorlar. Çözüm sunduğunu iddia ederek insanlara kötülük yapıyorsun. Özür dilemene gerek yok. Özü araştırmaya devam etmeniz önerilir.

Ama özür dilemelisin çünkü hiçbir şey okumuyorsun ama ben şunu yazdım:

" Bu göstergeleri aynı sembolün farklı pencerelerinde çalıştırdım ve iyi çalışıyorlar,

ama her iki göstergeyi de aynı sembol penceresinde çalıştırdığımda,o zaman gerçekten

bir gösterge kaldırıldığında abonelik "düştü" .

SD'ye yazın (belki yeni yapıda bir düzeltme yapmak için zamanları olur) "

Katma

Lütfen Stanislav, bu tartışmaya devam etme, özür dilemek istemiyorsan yapma.

 
Slava :

Abonelik sayacı 1 artırır.

Abonelikten çıkmak, sayacı 1 azaltır.

Uzman Danışmanınızın Pazar Derinliği etkinliklerine ihtiyacı varsa, birinin bunun için bir aboneliği etkinleştirmesi diğer Uzman Danışmanlara bağlı olmamalıdır. OnInit'e kendisi abone olmalıdır. Ve OnDeinit'te - abonelikten çıkın

Ne yazdın - herkes yapar.

Ancak sorun şu ki, bir pencerede abonelik 2 kez çağrıldıysa, bir abonelik silindiğinde diğeri (ikinci) silinir.

 
prostotrader :

Ne yazdın - herkes yapar.

Ancak sorun şu ki, bir pencerede abonelik 2 kez çağrıldıysa, bir abonelik silindiğinde diğeri (ikinci) silinir.

Numara. Bu olmamalı. 2 abonelik - 2 AddRef. 1 abonelikten çık - 1 Yayın. Sonuç olarak, sayaç 1'e eşittir.

Abonelik yalnızca sayaç 0'a ulaştığında yok edilir

 
prostotrader :
Ancak sorun şu ki, bir pencerede abonelik 2 kez çağrıldıysa, bir abonelik silindiğinde diğeri (ikinci) silinir.

Yani bir uzman\uzman sayacı vardır (ancak BİR çizelgede yalnızca bir uzman olabilir), ancak uzman\gösterge sayacı veya gösterge\göstergesi YOKTUR.

 
A100 :
Yani uzman/uzman sayacı var ama uzman/gösterge sayacı yok.

Bir pencerede sadece bir uzman olabilir.

 
prostotrader :

Bir pencerede sadece bir uzman olabilir.

Oldukça doğru... pencereler\tablolar arasında sayılır... ama içeride - HAYIR

 
Slava :

Numara. Bu olmamalı. 2 abonelik - 2 AddRef. 1 abonelikten çık - 1 Yayın. Sonuç olarak, sayaç 1'e eşittir.

Abonelik yalnızca sayaç 0'a ulaştığında yok edilir

Bu konuda bir gösterge kodu var, bunları bir pencerede tek bir sembolde (kaleler) çalıştırın ve her şeyi kendiniz göreceksiniz.

Katma

Doğrulama 2 dakika sürecek

1 gösterge

 //+------------------------------------------------------------------+
//|                                                   Test_ind_1.mq5 |
//|                                      Copyright 2018 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018 prostotrader"
#property link        "https://www.mql5.com"
#property version    "1.00"
#define on_call - 111
#property indicator_separate_window
bool is_book = false ;
double Buff[];
int event_cnt = 0 ;
#property indicator_buffers 1
#property indicator_plots    1
//--- plot Label1
#property indicator_label1    "Test_1"
#property indicator_type1    DRAW_LINE
#property indicator_color1    clrAqua
#property indicator_style1    STYLE_SOLID
#property indicator_width1    1
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
   //--- Set buffers 
   IndicatorSetInteger ( INDICATOR_DIGITS , 0 );
   IndicatorSetString ( INDICATOR_SHORTNAME , "Test_ind_1" );
//---Set buffers
   SetIndexBuffer ( 0 ,Buff, INDICATOR_DATA );
   PlotIndexSetDouble ( 0 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
   ArraySetAsSeries (Buff, true ); 
   is_book = MarketBookAdd ( Symbol ());
   if (is_book == true )
    { 
       Print ( __FUNCTION__ , ": Подписка на стакан добавлена. Символ " , Symbol ());
    }
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
     if (is_book == true )
    { 
       MarketBookRelease ( Symbol ());
       Print ( __FUNCTION__ , ": Подписка на стакан удалена. Символ " , Symbol ());
    }  
  }  
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double &price[])
  {
     if (prev_calculated == 0 )
    {
       ArrayInitialize (Buff, EMPTY_VALUE );
    }
   Buff[ 0 ] = 2 ;
//--- return value of prev_calculated for next call
   event_cnt = rates_total;
   return (rates_total);
  }
//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent ( const string &symbol)
  {
   if (symbol == Symbol ())
   {
     Print ( __FUNCTION__ , ": Подписка работает. Символ " , symbol);
       double price[];
       OnCalculate (event_cnt,event_cnt,on_call,price);
   }
   
  }  
//+------------------------------------------------------------------+

2 gösterge

 //+------------------------------------------------------------------+
//|                                                   Test_ind_1.mq5 |
//|                                      Copyright 2018 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018 prostotrader"
#property link        "https://www.mql5.com"
#property version    "1.00"
#define on_call - 111
#property indicator_separate_window
bool is_book = false ;
double Buff[];
int event_cnt = 0 ;
#property indicator_buffers 1
#property indicator_plots    1
//--- plot Label1
#property indicator_label1    "Test_2"
#property indicator_type1    DRAW_LINE
#property indicator_color1    clrLime
#property indicator_style1    STYLE_SOLID
#property indicator_width1    1
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
   //--- Set buffers 
   IndicatorSetInteger ( INDICATOR_DIGITS , 0 );
   IndicatorSetString ( INDICATOR_SHORTNAME , "Test_ind_2" );
//---Set buffers
   SetIndexBuffer ( 0 ,Buff, INDICATOR_DATA );
   PlotIndexSetDouble ( 0 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
   ArraySetAsSeries (Buff, true ); 
   is_book = MarketBookAdd ( Symbol ());
   if (is_book == true )
    { 
       Print ( __FUNCTION__ , ": Подписка 2 на стакан добавлена. Символ " , Symbol ());
    }
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
     if (is_book == true )
    { 
       MarketBookRelease ( Symbol ());
       Print ( __FUNCTION__ , ": Подписка 2 на стакан удалена. Символ " , Symbol ());
    }  
  }  
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double &price[])
  {
     if (prev_calculated == 0 )
    {
       ArrayInitialize (Buff, EMPTY_VALUE );
    }
   Buff[ 0 ] = 2 ;
//--- return value of prev_calculated for next call
   event_cnt = rates_total;
   return (rates_total);
  }
//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent ( const string &symbol)
  {
   if (symbol == Symbol ())
   {
     Print ( __FUNCTION__ , ": Подписка 2 работает. Символ " , symbol);
       double price[];
       OnCalculate (event_cnt,event_cnt,on_call,price);
   }
   
  }  
//+------------------------------------------------------------------+
 

Sorunu anladım.

Henüz cevap vermeye hazır değil

 
Slava :

Sorunu anladım.

Henüz cevap vermeye hazır değil

Teşekkürler, sizden haber bekliyoruz!

 
prostotrader :

Ama özür dilemelisin çünkü hiçbir şey okumuyorsun ama ben şunu yazdım:

" Bu göstergeleri aynı sembolün farklı pencerelerinde çalıştırdım ve iyi çalışıyorlar,

ama her iki göstergeyi de aynı sembol penceresinde çalıştırdığımda,o zaman gerçekten

bir gösterge kaldırıldığında abonelik "düştü" .

SD'ye yazın (belki yeni yapıda bir düzeltme yapmak için zamanları olur) "

Katma

Lütfen Stanislav, bu tartışmaya devam etme, özür dilemek istemiyorsan yapma.

Tartışmayı sen başlattın, sen bitirdin. Özür dileyecek bir şeyim yok. Senin aksine davayla ilgili her şeyi yazdım.

Tüm yazılarınızı gördüm. Sadece size uygun olanı alıntıladılar, ama daha önce olanı ve sonra sanki siz yazmamışsınız gibi görmezden gelin. Gerçekten de, sorunu onuncu kez yeniden oluşturmayı başardınız. Ve genel olarak, bu konuya, konuyla ilgisi olmayan kendi sorunlarıyla geldiler.