Ошибки, баги, вопросы - страница 2409

 
Уважаемые разработчики! Вы собираетесь чинить сайт? Как не зайду - оповещение об обновлении продукта. Посмотрю это оповещение, а оно снова возникает. Такого не должно быть!
 
Alexey Kozitsyn:
Уважаемые разработчики! Вы собираетесь чинить сайт? Как не зайду - оповещение об обновлении продукта. Посмотрю это оповещение, а оно снова возникает. Такого не должно быть!


Такой ошибки у меня нет по продуктам. 

Есть общая ошибка не прочтения сообщений.

Ошибка возникает, когда открыто несколько вкладок, пока не закроешь - они не прочитаются. 

Есть еще один момент - надо два раза зайти в этой сообщение - тогда оно отметиться прочитанным.

Может это поможет разработчикам.  

 

Пропадает график индикатора (индикатор для фьючерсных контрактов, если не BR-4.19, то нужно input int NextFutMonth = 3;    //След фьючерс (мес.))

//+------------------------------------------------------------------+
//|                                                   BR_Scalper.mq5 |
//|                                      Copyright 2019 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019 prostotrader"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1

//--- plot Label1
#property indicator_label1  "Spread"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrYellow
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

//#property indicator_maximum 30
//#property indicator_minimum -30

#define on_call -111
//
input int NextFutMonth = 1;    //След фьючерс (мес.)
input int aBars = 30;          //Бары  
//
double Buff[];
double pr_last, sec_last;
string sec_symbol;
bool pr_book, sec_book;
int event_cnt;

//+------------------------------------------------------------------+
//| Indicator Set second Symbols function                            |
//+------------------------------------------------------------------+
string SetSecSymbol(const string aSymbol)
{
  int str_tire = StringFind(aSymbol, "-");
  int str_tochka = StringFind(aSymbol, ".", str_tire);
  int str_size = StringLen(aSymbol);
  if((str_tire > 0) && (str_tochka > 0) && (str_size > 0))
  {
    string str_month = StringSubstr(aSymbol, str_tire + 1, str_tochka - str_tire - 1);
    string str_year = StringSubstr(aSymbol, str_tochka + 1, str_size - str_tochka - 1);
    long aMonth = StringToInteger(str_month);
    long aYear = StringToInteger(str_year);
    if((aMonth > 0) && (aYear > 0))
    {
      long n_month = aMonth + long(NextFutMonth);
      long add_year = (n_month - 1) / 12;
      aYear += add_year;
      str_year = IntegerToString(aYear); 
      aMonth = n_month - add_year * 12;
      str_month = IntegerToString(aMonth);
      return(StringSubstr(aSymbol, 0, str_tire + 1) + str_month + "." + str_year);
    } 
  }
  return("");
}
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
  int a_bars = Bars(Symbol(), PERIOD_CURRENT);
  if(a_bars < aBars + 1)
  {
    Alert("На графике не хватает баров!");
    return(INIT_FAILED);
  } 
  event_cnt = 0;
  sec_symbol = SetSecSymbol(Symbol());
  if(SymbolSelect(sec_symbol, true) == false) return(INIT_FAILED);
  pr_book = MarketBookAdd(Symbol());
  sec_book = MarketBookAdd(sec_symbol);
  IndicatorSetInteger(INDICATOR_DIGITS, 0);
  IndicatorSetString(INDICATOR_SHORTNAME, "BR_Scalper");
//---  
  SetIndexBuffer(0, Buff, INDICATOR_DATA);
  PlotIndexSetDouble( 0, PLOT_EMPTY_VALUE, EMPTY_VALUE);
  ArraySetAsSeries(Buff, true );
  return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
// Custom indicator DeInit function                                  |
//+------------------------------------------------------------------+
void OnDeinit( const int reason )
{
  if(pr_book == true) MarketBookRelease(Symbol());
  if(sec_book == true) MarketBookRelease(sec_symbol);
  if(reason == REASON_INITFAILED)
  {
    Print("Индикатор удалён! Причина - ошибка инициализации.");
    string short_name = ChartIndicatorName(ChartID(), 1, 0);
    ChartIndicatorDelete(ChartID(), 1, short_name); 
  }
}
//+------------------------------------------------------------------+
// Custom indicator On book event function                           |
//+------------------------------------------------------------------+
void OnBookEvent( const string& symbol )
{
  if((symbol == Symbol()) || (symbol == sec_symbol))
  {
    sec_last = SymbolInfoDouble(sec_symbol, SYMBOL_LAST);
    pr_last = SymbolInfoDouble(Symbol(), SYMBOL_LAST);
    double price[]; 
    OnCalculate( event_cnt, event_cnt, on_call, price ); 
  }
}
//+------------------------------------------------------------------+
//| 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);
  }
  else
  {
    if(begin == on_call)
    {
      for(int i = aBars - 1; i > 0; i--)
      {
        Buff[i] = Buff[i - 1];
      }
    }
    else
    {
     sec_last = SymbolInfoDouble(sec_symbol, SYMBOL_LAST);
     pr_last = SymbolInfoDouble(Symbol(), SYMBOL_LAST); 
     Buff[aBars] = EMPTY_VALUE;
    } 
    Buff[0] = (sec_last - pr_last) /Point();
  } 
//---    
  event_cnt = rates_total;  
//--- return value of prev_calculated for next call
  return(rates_total);
}
//+------------------------------------------------------------------+

Но когда ставишь

#property indicator_maximum 30
#property indicator_minimum -30

то работает нормально

 

Тестер закрывает сделки по котировкам другого инструмента.


1. Открытие eurusd цена 1.30935.

2. Закрытие 1.60704. Такой цены не было, но по другому инструменту gbpusd в это время такая была.





Тестирование выполняется на двух инструментах eurusd, gbpusd. Если gbpusd исключить, то ошибка исчезает.


 
Aleksey Sergan:

Тестер закрывает сделки по котировкам другого инструмента.


1. Открытие eurusd цена 1.30935.

2. Закрытие 1.60704. Такой цены не было, но по другому инструменту gbpusd в это время такая была.





Тестирование выполняется на двух инструментах eurusd, gbpusd. Если gbpusd исключить, то ошибка исчезает.


Где код этого чудо-советника? 99% даю на то, что работаете с классами и где-то используете статическую переменную.

 
Vladimir Karputov:

Где код этого чудо-советника? 99% даю на то, что работаете с классами и где-то используете статическую переменную.

Владимир, Вы так шутите?

 
Andrey Barinov:

Владимир, Вы так шутите?

Я всё ещё жду ответа от Aleksey Sergan . В зависимости от ответа будет вторая наводящая часть вопроса.

 
Vladimir Karputov:

Я всё ещё жду ответа от Aleksey Sergan . В зависимости от ответа будет вторая наводящая часть вопроса.

понял. Значит, все таки не шутите...

Иногда баг терминала, это просто баг терминала.
 
Vladimir Karputov:

Где код этого чудо-советника? 99% даю на то, что работаете с классами и где-то используете статическую переменную.

Код несколько тысяч строк. Нет смысла прикладывать. статических переменных нет. Классы есть. В любом случае это ошибка тестера.

 
Andrey Barinov:

понял. Значит, все таки не шутите...

Иногда баг терминала, это просто баг терминала.

Ню-ню :)

Причина обращения: