Что делать, если среда разработки неадекватит? - страница 2

 
Alexey Kozitsyn:

Явно задаете нулевые значения буферам и обнуляете их при первом запуске?

Буфер только 1 остался. Второй я ещё в версии для 4-ку убрал из-за ненадобности. Нет, не обнуляю. Вот инициализация:

//+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
//|                                                            Custom indicator initialization function                                                           |
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
int OnInit() {
  if (i_TF != PERIOD_CURRENT && Period() > i_TF) {
    Alert("Расчетный ТФ не может быть младше текущего ТФ. Индиктаор отключен.");
    return INIT_FAILED;
  }

  g_prevCalculated = 0;
  SetIndexBuffer(0, g_ZZPriceBuf);
  PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0.0);

  return (INIT_SUCCEEDED);
}

А дальше уже заполняется значениями. Я вообще сейчас ограничил рисование до 25 баров с историю, что бы не выводило на экран сообщений по всей истории.

Файлы:
 
hoz:

Буфер только 1 остался. Второй я ещё в версии для 4-ку убрал из-за ненадобности. Нет, не обнуляю. Вот инициализация:

А дальше уже заполняется значениями. Я вообще сейчас ограничил рисование до 25 баров с историю, что бы не выводило на экран сообщений по всей истории.

Нужно обнулять.

 
Alexey Kozitsyn:

Нужно обнулять.

Я написал глупость в прошлом сообщении. Конечно, обнуляю, я же задаю свойство 0.0

В мкл5 странная ****какая-то. Массивы таймсерий перевёрнутые. Для кого они такое сделали, когда все привыкли пользоваться по-нормальному, когда 0-ой это самый новый бар..

 В общем, инит я чутка поправил:

int OnInit() {
  if (i_TF != PERIOD_CURRENT && Period() > i_TF) {
    Alert("Расчетный ТФ не может быть младше текущего ТФ. Индиктаор отключен.");
    return INIT_FAILED;
  }

  g_prevCalculated = 0;
  SetIndexBuffer(0, g_ZZPriceBuf);
  PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0.0);
  ArraySetAsSeries(g_ZZPriceBuf, true);

  return (INIT_SUCCEEDED);
}

Задал направление индексации буфера как в таймсерии. Теперь у меня рисуется тоже абы что, но уже с другой стороны.

Неужели теперь везде, где встречается буфер нужно ему задавать индексацию? По идее, буфер должен быть по умолчанию индексирован как бары. А тут.. В 4-ке такого не было, вот и всплывают какие-то странные обстоятельства.

 
hoz:

Задав пустое значение, Вы просто указали какое значение считается пустым. После этого, при первом запуске индикатора нужно явно обнулить все значения через ArrayInitialize().

 
Alexey Kozitsyn:

Задав пустое значение, Вы просто указали какое значение считается пустым. После этого, при первом запуске индикатора нужно явно обнулить все значения через ArrayInitialize().

Огромное спасибо за наводку. У вас советы точные довольно-таки, в отличие от некоторых. По сути, я видел ваш зиг-заг. Так там вообще не используется ArrayInitialize(). И, тем не менее, всё работает. У ваш индикатор тоже под 5-ку. На мт4 к тому же, не нужно вообще получается это было?

В общем-то, как я проинициализировал буфер нулевыми значениями так:

  if (g_prevCalculated == 0) {
    ArrayInitialize(g_ZZPriceBuf, 0.0);
  }

С какими-то тормозами, но начало рисоваться.. Хотя, не так как нужно. Но уже проблеск хоть какой.. Вот что, на данный момент, рисуется:

После первого хая, дальше чисто лои заполняются как-будто. Утром попробую подумать. У меня опыт больше в написании сов, а с индикаторами особо не имел дел. Как-то не очень мне это понятно, как тут отладить вообще..

 
hoz:

Огромное спасибо за наводку. У вас советы точные довольно-таки, в отличие от некоторых. По сути, я видел ваш зиг-заг. Так там вообще не используется ArrayInitialize(). И, тем не менее, всё работает. У ваш индикатор тоже под 5-ку. На мт4 к тому же, не нужно вообще получается это было?

В общем-то, как я проинициализировал буфер нулевыми значениями так:

С какими-то тормозами, но начало рисоваться.. Хотя, не так как нужно. Но уже проблеск хоть какой.. Вот что, на данный момент, рисуется:

После первого хая, дальше чисто лои заполняются как-будто. Утром попробую подумать. У меня опыт больше в написании сов, а с индикаторами особо не имел дел. Как-то не очень мне это понятно, как тут отладить вообще..

Какой мой ЗЗ Вы видели? 

Дальше нужно смотреть логику индикатора. Может быть, сделать распринтовку.

 
Alexey Kozitsyn:

Какой мой ЗЗ Вы видели?

ZigZag_NK и ZigZag_NK_MTF.

Kozitsyn:

Дальше нужно смотреть логику индикатора. Может быть, сделать распринтовку.

Я этим и занимаюсь периодически. Но вот в чём загвоздка. На мт4 всё работало чётко. Пернёс на мт5, и ,кроме как изменить функции для получения данных таймсерий ничего не менял, т.к. логику не менял. Как может не работать ума не приложу..

 
hoz:

ZigZag_NK и ZigZag_NK_MTF.

Я этим и занимаюсь периодически. Но вот в чём загвоздка. На мт4 всё работало чётко. Пернёс на мт5, и ,кроме как изменить функции для получения данных таймсерий ничего не менял, т.к. логику не менял. Как может не работать ума не приложу..

Эти индикаторы написаны не мной, смотрите внимательнее кто автор.

У mql4 другая внутренняя архитектура, свои особенности. Если что-то работало там, не факт, что будет работать на mql5 без изменений.

 
Alexey Kozitsyn:

Эти индикаторы написаны не мной, смотрите внимательнее кто автор.

У mql4 другая внутренняя архитектура, свои особенности. Если что-то работало там, не факт, что будет работать на mql5 без изменений.

Хотя да, там автор Nikolay Kositsin. Фамилия такая же..))

Странно, что даже не мтф индикатор не рисует уже ничего. Хотя он, в принципе, простой вообще. Я видимо чего-то ещё не понимаю, но есть какая-то разница при переходе. Вот бы понять что именно. Я уже даже без своей библиотеки написал, передать таймсерии из OnCalculate(). Но до того рисовались прямые вертикальные линии вниз ( с моими библиотечными функциями). А как заметил на массивы из OnCalculate() перестало вообще рисовать.

Услышать бы хот бы наводку... Интересно, что является причиной. На одной платформе работает, а на другой вообще не подаёт признаков жизни. Абсурд какой-то.

Такое ощущение, что на 5-ке особо никто не пишет объектно-ориентированно. Сколько вижу кодов, всё напичкано в OnCalculate().

Файлы:
ZZ.mq5  26 kb
 
hoz:

Хотя да, там автор Nikolay Kositsin. Фамилия такая же..))

Странно, что даже не мтф индикатор не рисует уже ничего. Хотя он, в принципе, простой вообще. Я видимо чего-то ещё не понимаю, но есть какая-то разница при переходе. Вот бы понять что именно. Я уже даже без своей библиотеки написал, передать таймсерии из OnCalculate(). Но до того рисовались прямые вертикальные линии вниз ( с моими библиотечными функциями). А как заметил на массивы из OnCalculate() перестало вообще рисовать.

Услышать бы хот бы наводку... Интересно, что является причиной. На одной платформе работает, а на другой вообще не подаёт признаков жизни. Абсурд какой-то.

Такое ощущение, что на 5-ке особо никто не пишет объектно-ориентированно. Сколько вижу кодов, всё напичкано в OnCalculate().

Не напичкано, а написано!

У вас здесь и не пахнет объектно-ориентированно, просто тяжело-читаемый код на десятке функциях, которые можно объединить

Достаточно один раз в DeInit развернуть индексацию

  ArraySetAsSeries(ZZBuf, true);
  ArraySetAsSeries(UpDnBuf, true);