Die Anmeldung bei OnBookEvent fällt manchmal aus - gibt es so etwas? - Seite 11

 
Stanislav Korotky:

Ja, und als Antwort darauf behaupten Sie erst, es gäbe kein Problem, dann bieten Sie verschiedene Lösungen an, die aber im allgemeinen Fall nicht funktionieren. Sie erweisen den Menschen einen Bärendienst, wenn Sie behaupten, eine Lösung gefunden zu haben. Eine Entschuldigung ist nicht erforderlich. Es wäre besser, der Sache von jetzt an auf den Grund zu gehen.

Aber Sie müssen sich entschuldigen, denn Sie haben nichts gelesen, was ich geschrieben habe:

"Ich habe diese Indikatoren in verschiedenen Fenstern desselben Symbols ausgeführt, und es hat gut funktioniert,

aber als ich beide Indikatoren in einem Symbolfenster laufen ließ, wares wirklich

DasAbonnement "fiel ab", als ein Indikator entfernt wurde.

Schreiben Sie an den SD (vielleicht haben sie Zeit, in der neuen Version eine Korrektur vorzunehmen)"

Hinzugefügt

Bitte, Stanislav, setzen Sie diese Polemik nicht fort, wollen Sie sich nicht entschuldigen - lassen Sie es.

 
Slava:

Das Abonnement erhöht den Zähler um 1.

Die Abmeldung verringert den Zähler um 1.

Wenn Ihr EA Tumblr-Events benötigt, sollte er nicht von anderen EAs abhängig sein, die ihm ein Abonnement ermöglichen. Er sollte sich bei OnInit anmelden. Und in OnDeinit - Abmeldung

Was Sie geschrieben haben, tut jeder.

Das Problem ist jedoch, dass, wenn 2 Abonnements in einem Fenster aufgerufen wurden, beim Löschen eines Abonnements auch das andere (zweite) Abonnement gelöscht wird.

 
prostotrader:

Was Sie geschrieben haben, tut jeder.

Das Problem ist jedoch, dass, wenn ein Abonnement 2 Mal in einem Fenster aufgerufen wurde, das Löschen eines Abonnements das andere (das zweite) löscht.

Nein. So sollte es nicht sein. 2 Abonnements - 2 AddRef. 1 Abmeldung - 1 Freigabe. Der Zähler steht also auf 1.

Das Abonnement wird erst zerstört, wenn der Zähler 0 wird.

 
prostotrader:
Das Problem ist jedoch, dass, wenn 2 Abonnements in einem Fenster aufgerufen wurden, beim Löschen eines Abonnements auch das andere (zweite) Abonnement gelöscht wird.

Mit anderen Worten, es gibt einen Experten/Experten-Zähler (aber nur ein Experte kann auf EINEM Diagramm sein), aber es gibt keinen Experten/Indikator-Zähler oder Indikator/Indikator-Zähler

 
A100:
Mit anderen Worten: Es gibt einen Experten/Experten-Zähler, aber keinen Experten/Indikator-Zähler.

Es kann nur ein Experte in einem Fenster sein.

 
prostotrader:

In einem Fenster kann sich nur ein Assessor befinden.

Genau richtig... zwischen Fenstern/Diagrammen zählt... aber innerhalb - NEIN

 
Slava:

Nein, so sollte es nicht sein. 2 Abonnements - 2 AddRef. 1 Abmeldung - 1 Freigabe. Der Zähler steht also auf 1.

Das Abonnement wird erst zerstört, wenn der Zähler 0 wird.

In diesem Thread finden Sie den Code für die Indikatoren. Führen Sie sie im gleichen Fenster auf dem gleichen Symbol (Forts) aus und Sie werden es selbst sehen

Hinzugefügt

Die Prüfung dauert 2 Minuten

1 Indikator

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

//+------------------------------------------------------------------+
//|                                                   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);
   }
   
  }  
//+------------------------------------------------------------------+
 

Ich verstehe das Problem.

Noch nicht bereit zu antworten

 
Slava:

Ich verstehe das Problem.

Noch nicht bereit zu antworten

Danke, ich freue mich sehr auf die Lösung des Problems!

 
prostotrader:

Sie hingegen müssen sich entschuldigen, denn Sie sind es, der nichts gelesen hat, und ich habe geschrieben:

"Ich habe diese Indikatoren in verschiedenen Fenstern desselben Symbols ausgeführt und sie funktionieren einwandfrei,

aber als ich beide Indikatoren in einem Symbolfenster laufen ließ, wares wirklich

DasAbonnement "fiel ab", als ein Indikator entfernt wurde.

Schreiben Sie an den SD (vielleicht haben sie Zeit, in der neuen Version eine Korrektur vorzunehmen)"

Hinzugefügt

Bitte, Stanislav, setzen Sie diesen Streit nicht fort, wollen Sie sich nicht entschuldigen - tun Sie es nicht.

Sie haben es begonnen, Sie sollten es zu Ende bringen. Ich habe nichts, wofür ich mich entschuldigen müsste. Ich habe alles auf den Punkt gebracht, im Gegensatz zu Ihnen.

Ich habe alle Ihre Beiträge gesehen. Sie haben nur das zitiert, was für Sie relevant war, und das, was davor stand, einfach ignoriert, als ob Sie es nicht geschrieben hätten. Es ist Ihnen tatsächlich gelungen, das Problem zu reproduzieren. Und im Allgemeinen sind Sie mit Ihrem Problem in diesen Thread gekommen, das nichts mit dem Thema zu tun hat.