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

 

В журнале

2016.09.12 22:20:37.728 Books   invalid book item[RTS-9.16,buy,99040.00000,-4]
BCS-MetaTrader5, реал, 1415. Произошло при переключении с демо-счета на реал. Никаких советников и индикаторов запущено не было. Окно Стакана было открыто.
 
fxsaber:

В журнале

BCS-MetaTrader5, реал, 1415. Произошло при переключении с демо-счета на реал. Никаких советников и индикаторов запущено не было. Окно Стакана было открыто.

Я писал об этой баге

https://www.mql5.com/ru/forum/95131 

invalid book transaction
invalid book transaction
  • отзывов: 2
  • www.mql5.com
Раньше не было, появилось сегодня (реал). Что это...
 
prostotrader:
А что это за звездочки под названием темы? И количество отзывов еще.
 
fxsaber:
А что это за звездочки под названием темы? И количество отзывов еще.
Вот кстати давно интересно где эти самые звезды к темам смотреть и ставить
 

Как в режиме дебага узнать, откуда была вызвана функция, в которой сейчас нахожусь?

 

Грубо говоря, хотелось бы иметь доступ ко вложенному дереву вызовов функций/методов. Это возможно?

 
fxsaber:
Как в режиме дебага узнать, откуда была вызвана функция, в которой сейчас нахожусь?

В режиме "Шаг с заходом" поочерёдно просматривая вкладку "Отладка":

ступени 

 
Karputov Vladimir:

В режиме "Шаг с заходом" поочерёдно просматривая вкладку "Отладка":

Спасибо. Никак не могу понять, почему в начале индикатор вызывает дважды OnCalculate. Хотелось бы выяснить, на какое событие такая реакция. По отладке, к сожалению, событий не видно.
 
fxsaber:
Спасибо. Никак не могу понять, почему в начале индикатор вызывает дважды OnCalculate. Хотелось бы выяснить, на какое событие такая реакция. По отладке, к сожалению, событий не видно.

Бывает дважды, бывает один, а может и три раза дёрнуть: Вы в Oncalculate() поставьте такой код -

//+------------------------------------------------------------------+
//|  Accelerator/Decelerator Oscillator                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   Print(__FUNCTION__,", rates_total ",rates_total,", prev_calculated ",prev_calculated);

будет понятно, когда происходит подкачка истории (при подкачке истории prev_calculated==0).

 
Karputov Vladimir:

Бывает дважды, бывает один, а может и три раза дёрнуть: Вы в Oncalculate() поставьте такой код -

будет понятно, когда происходит подкачка истории (при подкачке истории prev_calculated==0).

Не, я на RTS сейчас запускаю, когда котиры стоят. Выяснил, что вызывается один раз, а отладчик врет, показывая, будто два. Код для воспроизведения (запускать на символе, где не идут тики)

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1

int Func(){ return(0); }

int OnCalculate( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[] )
{
//  return(0); // если расскоментировать и здесь поставить точку останова, то отладчик отработает, как надо
  return(Func()); // здесь поставить точку останова (F9)
}

После нажатия на F5 будет попадание на точку останова. И после второго нажатия на F5 - аналогично. Хотя этого не должно бы было быть - как подтверждение, можно раскоментировать строчку, что в коде и попробовать с ней.

 
fxsaber:

Не, я на RTS сейчас запускаю, когда котиры стоят. Выяснил, что вызывается один раз, а отладчик врет, показываю, будто два. Код для воспроизведения (запускать на символе, где не идут тики)

После нажатия на F5 будет попадание на точку останова. И после второго нажатия на F5 - аналогично. Хотя этого не должно бы было быть - как подтверждение, можно раскоментировать строчку, что в коде и попробовать с ней.

Без разницы идут котировки или стоят. В индикаторе нужно контролировать условие prev_calculate==0 - это подкачка истории и второй момент - щадящий режим пересчёта изменённых баров, то есть по сути rates_total -prev_calculate+1.
Причина обращения: