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

 
Maxim Kuznetsov #:

про поломанные скользящие средние

есть подозрение, близкое уже к убеждению что с какого-то билда поломали встроенные расчеты оконных функций и они теперь воспринимают EMPTY_VALUE как обычное число. Всегда

Звоночки, раз : https://www.mql5.com/ru/forum/160683/page2579#comment_56302328

Два : https://www.mql5.com/ru/forum/483868#comment_56321597 (у ТС очевидно где-то в данных есть EMPTY_VALUE и две AMA не сходятся друг с другом)

"Встроенные" индикаторы с большой долей вероятности будут показывать фигню

 
Vladislav Boyko #:
PLOT_DRAW_BEGIN

и куда его воткнуть при вызове iCustom или iAMA ? ;-) Или накладывая iMA из поставки на другой индикатор 

ошибка в индикаторах платформы, на прикладе её не исправить. Единственный выход - не использовать встроенные, делать свои

 
Maxim Kuznetsov #:

и куда его воткнуть

В Abs (тот индикатор, в подокно которого вы дропаете встроенный MA).

Прочитайте эту страницу полностью: https://www.mql5.com/ru/docs/customind

Там есть пример:

https://www.mql5.com/ru/docs/customind

Значение параметра begin будет в точности равно количеству начальных баров, для которых значения индикатора Accelerator не рассчитывается в соответствие с логикой этого индикатора. Если мы посмотрим исходный код пользовательского индикатора Accelerator.mq5, то увидим в функции OnInit() такие строчки:

//--- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,37);

Именно функцией PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, empty_first_values) мы сообщаем количество несущественных первых значений в нулевом индикаторном массиве пользовательского индикатора, которые нам не нужно принимать для расчетов (empty_first_values). Таким образом, у нас есть механизмы, чтобы:

  1. сообщить о количестве начальных значений индикатора, которые не стоит использовать для расчетов в другом пользовательском индикаторе;
  2. получить информацию о количестве первых значений, которые необходимо игнорировать при вызове другого пользовательского индикатора, не вдаваясь в логику его расчетов.
 
Vladislav Boyko #:

В Abs (тот индикатор, в подокно которого вы дропаете встроенный MA).

Прочитайте эту страницу полностью: https://www.mql5.com/ru/docs/customind

Там есть пример:

при чём тут это - ошибка в индикаторе который дропают сверху. А он "стандартный"

искусственно ограничивать пользователя в объёме данных не хорошо. и 

в общем случае EMPTY_VALUE бывает не только в самом начале исходных данных, но и где-нибудь в середине. Индикатор должен быть готов к подобному

Общее ощущение - iMA неудачно "ускорили". Теперь он считает неверно, зато очень быстро

 
Maxim Kuznetsov #:

при чём тут это - ошибка в индикаторе который дропают сверху. А он "стандартный"

В индикаторе, который дропают сверху, вызывается вот эта OnCalculate:

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])

В begin будет передано значение, которое указанно в PLOT_DRAW_BEGIN буфера price.

 
Vladislav Boyko #:

В индикаторе, который дропают сверху, вызывается вот эта OnCalculate:

В begin будет передано значение, которое указанно в PLOT_DRAW_BEGIN буфера price.

и что ?

в данных встретится EMPTY_VALUE и "стандартный, встроенный" индикатор превращается в тыкву

вот, приводил уже ссылку на пострадавшего https://www.mql5.com/ru/forum/483868

у него AdMA (встренный iAMA) не сходится с AMA (который в Examples) потому что в данных попался EMPTY_VALUE и экспонентные средние получаются разные

свежая общая ошибка в оконных функциях терминала, по крайней мере в iMA. Не мне её исправлять, у меня даже исходников их нет ;-) 

PS/ для себя любимого и так всё считаю своими методами. просто указываю на наличие БАГА и отсутствие тестирования

Как "вытащить" стандартный индикатор из терминала мт 5
Как "вытащить" стандартный индикатор из терминала мт 5
  • 2025.04.01
  • Anton
  • www.mql5.com
Ребята подскажите, как "вытащить" стандартный индикатор из терминала мт 5 на рабочий стол, для личного пользования ? Напишите путь этого действия...
 
Maxim Kuznetsov #:

и что ?

в данных встретится EMPTY_VALUE и "стандартный, встроенный" индикатор превращается в тыкву

вот, приводил уже ссылку на пострадавшего https://www.mql5.com/ru/forum/483868

у него AdMA (встренный iAMA) не сходится с AMA (который в Examples) потому что в данных попался EMPTY_VALUE и экспонентные средние получаются разные

свежая общая ошибка в оконных функциях терминала, по крайней мере в iMA. Не мне её исправлять, у меня даже исходников их нет ;-) 

PS/ для себя любимого и так всё считаю своими методами. просто указываю на наличие БАГА и отсутствие тестирования

Прикрепите исходник любого индикатора, в подокне которого встроенная MA "неправильно" работает.

 
Vladislav Boyko #:

Прикрепите исходник любого индикатора, в подокне которого встроенная MA "неправильно" работает.

что-же вы такой упрямый :-)

Ошибка там у них, ошибка...

вот индикатор эмулирующий данные с выколами EMPTY_VALUE:

#property copyright "Maxim Kuznetsov"
#property link      "http://luxrade.unaux.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot OVE
#property indicator_label1  "OVE"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- indicator buffers
double         OVE[];

int OnInit()
{
   SetIndexBuffer(0,OVE,INDICATOR_DATA);
   ArraySetAsSeries(OVE,true);
   return(INIT_SUCCEEDED);
}

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[])
{
   ArraySetAsSeries(open,true);
   ArraySetAsSeries(time,true);
   for(int bar=prev_calculated<0?0:prev_calculated; bar<rates_total; bar++) {
      int i=rates_total - bar - 1;
      // эмулируем данные с EMPTY_VALUE
      MqlDateTime dt; TimeToStruct(time[i],dt);
      if ((dt.hour % 2 == 0 ) && dt.min==0 && dt.sec==0) OVE[i]=EMPTY_VALUE;
      else OVE[i]=open[i];
   }
   return(rates_total);
}

Накидываем на него SMA, ожидаем что как минимум получатся мелкие чёрточки - SMA будет рассчитана в тех фрагментах где не попался EMPTY_VALUE.

Но это не так - EMPTY_VALUE посчитается как обычное число и всё переполнится


Файлы:
 
Maxim Kuznetsov #:

что-же вы такой упрямый :-)

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Vladislav Boyko, 2025.04.01 19:33

Прикрепите исходник любого индикатора, в подокне которого встроенная MA "неправильно" работает.

Я сам уже сделал индикатор для воспроизведения (исходник прикрепил). Наглядно:

Файлы:
 
Maxim Kuznetsov #:
Теперь он считает неверно, зато очень быстро

Похоже, метаквоты набирают на работу таких:

;)