Новая версия MetaTrader 4 Client Terminal 387 и MetaTrader 4 Data Center build 387 - страница 3

 
AlexSTAL:

Что именно за проблема у Вас? У меня всё как было, так и осталось... никаких перерасчетов на каждом тике....


У меня как и у Жунко - во всех индикаторах есть оптимизация. И весь буфер на каждом тике не пересчитывается. Если будет принудительная переинициализация на каждом тике, то придется переписывать все индикаторы. Это разве не проблема? Неоднократно озвученная, кстати.

И не за себя волнуюсь. Так получилось, что огромное количество людей использует эти индикаторы. А вот у них будут реальные проблемы.

Здесь, например, http://ruforum.mt5.com/showthread.php?t=374

Ссылок можно привести множество.

 
AlexSTAL:

Я читал его объяснение....

Вы сами проверили это на практике?

Что именно за проблема у Вас? У меня всё как было, так и осталось... никаких перерасчетов на каждом тике....

У меня заполнение буфера индикатора было по условию изменений. Есть изменения - заполняем, нет - не заполняем. Это на 387 не работает.

Убрал условие - заработало. Когда не работало, видел, что буфер заполнен умолчательными значениями (инициализирован).

Может не так смотрели? Не заметили или это не критично для вашего индикатора?

Надо бы разъяснений от Метаквотов дождаться.

 

Это часть индикатора:

// Если произошёл первый пуск индикатора или предыдущим блоком разрешена развёртка или изменились параметры окна.
if (gl_nCounterTeak == 1 || st_bRecalculation == true || st_nWBarsPerChart != tmp_nBarsPerChart || st_nWFirstVisiblBar != tmp_nFirstVisiblBar)
 {// Закрепляем значок вызова свойств индикатора.
  st_nWBeginSearch = st_nWFirstVisiblBar - st_nWBarsPerChart;
  if (st_nWBeginSearch < -1) // Если справа есть свободное пространство, закрепляем значок вызова свойств индикатора.
   {
    GetClientRect(gl_hWindow, st_aiRect); // Расчёт размеров окна.
    gl_adBufIndicator2[0] = 0.35 * (gl_dMaxPositionMark - gl_dMinPositionMark) + gl_dMinPositionMark;
    SetIndexShift(1, - st_nWBeginSearch - 0.5 * ((36 * st_nWBarsPerChart) / st_aiRect[2] - 1));
    SetIndexDrawBegin(1, 0);
   }
  // Устанавливаем развёртку.
  if (st_nWBeginSearch <= 0) st_nWBeginSearch = 0;
  for (i = st_nWFirstVisiblBar; i >= st_nWBeginSearch; i--)
   {// Очищаем буфер от лишних значков для вызова окна свойств индикатора.
    if (i > 0) gl_adBufIndicator2[i] = EMPTY_VALUE;
    // Закрепление вертикальной развёртки графика с помощью индикаторного буфера.
    if (i % 2 == 0) gl_adBufIndicator1[i] = gl_dMaxPositionMark; // Для фиксации верхней координаты дополнительного окна.
    else gl_adBufIndicator1[i] = gl_dMinPositionMark;            // Для фиксации нижней координаты дополнительного окна.
   }
  // Расчёт и создание горизонтальных линий разметки. Создаём один раз и отслеживаем через заданный уровень при увеличениях максимальных уровней.
  // Установка вертикальной развёртки, расчёт и создание горизонтальных линий разметки.
  if ((gl_dMaxPositionMark - gl_dMinPositionMark) != tmp_dDifferPosMark)
   {
    MakingHorizontalSectoring(AutoStep, Color_LNH, Color_LN0, gl_dMaxPositionMark, gl_dMinPositionMark, Step_LNH, 15, Style_LNH, Width_LNH, st_nWindow, gl_sFullNameObject);
   }
 }
 
nen:

Если не удалил переписку из лички, то посмотри, там я приводил примеры оптимизации. Ты тогда написал, что это тебе понятно.

Переписку удалил, но я и без неё прекрасно понимаю, что такое оптимизация...

Чётко с помощью минимального кода сформулируйте то, чего Вы боитесь, но что не воспроизвели в реалии...

Разговор получается совершенно бестолковый... У меня ни один из индикаторов не требует переинициализировать буферы на каждом тике...

Вот я и пытаюсь понять о чём речь идёт....


to Zhunko: позже попытаюсь вкурить написанное

 

Вот изменил пару строк в тестовом индикаторе (который выкладывал для поиска ошибки)...

Никакие буферы ни на каких тиках не пересчитываются вообще!

Ничего ровным счетом не изменилось

Файлы:
 
AlexSTAL:

Вот изменил пару строк в тестовом индикаторе (который выкладывал для поиска ошибки)...

Никакие буферы ни на каких тиках не пересчитываются вообще!

Ничего ровным счетом не изменилось

Посмотрел код. Тиков нет. Вот и не меняется. Тики нужны от обновления графика.
 
Zhunko:
Посмотрел код. Тиков нет. Вот и не меняется. Тики нужны от обновления графика.
Что есть "тик от обновления графиков"? Искусственно вызванный что ли? с помощью API?
 

Вот с сообщением о последнем тике:

Никакие буферы не обновляются

число 2147483647 - это значение буфера на новом баре.

Файлы:
 
AlexSTAL:
Что есть "тик от обновления графиков"? Искусственно вызванный что ли? с помощью API?

Да. Только этим отличаются наши условия.

Обновлять лучше не в индикаторе, а в скрипте зацикленном.

 
Zhunko:

Да. Только этим отличаются наши условия.

Разобрались на 6-ой странице...

Теперь очень интересно, где у nen'а вызывается искусственный тик?

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