MT4 iMAOnArray и iBandsOnArray влияние количества элементов на расчёты - страница 7

 
Alexey Viktorov:

Ты хочешь сказать что после if(rates_total-i >= rates_total-100);, когда осталось только 100 баров для расчёта функция iMAOnArray() сначала пересчитывает ВЕСЬ массив?

Не, только половину.
 
Alexey Viktorov:

Ты хочешь сказать что после if(rates_total-i >= rates_total-100);, когда осталось только 100 баров для расчёта функция iMAOnArray() сначала пересчитывает ВЕСЬ массив?

iMAOnArray

Возвращает значение технического индикатора Moving Average, рассчитанного на данных, хранящихся в массиве.

double  iMAOnArray(
   double       array[],          // массив
   int          total,            // количество элементов
   int          ma_period,        // период
   int          ma_shift,         // сдвиг средней
   int          ma_method,        // метод усреднения
   int          shift             // сдвиг
   );

Параметры

array[]

[in]  Массив с данными.

total

[in]  Количество элементов для вычисления. 0 означает все элементы массива. 

Именно так, первый вызов iMAOnArray с параметрами 0 в значении размера рассчитает безусловно весь массив, далее вроде как происходит расчёт только последнего или максимум 2 последних значений, хотя кто знает, может всё и заново считает... От того-то и тормоза. Поэтому не важно сколько баров вы хотите получить по смещению, считается в этом случае всё равно весь массив.

 
Sergey Efimenko:

iMAOnArray

Возвращает значение технического индикатора Moving Average, рассчитанного на данных, хранящихся в массиве.

double  iMAOnArray(
   double       array[],          // массив
   int          total,            // количество элементов
   int          ma_period,        // период
   int          ma_shift,         // сдвиг средней
   int          ma_method,        // метод усреднения
   int          shift             // сдвиг
   );

Параметры

array[]

[in]  Массив с данными.

total

[in]  Количество элементов для вычисления. 0 означает все элементы массива. 

Именно так, первый вызов iMAOnArray с параметрами 0 в значении размера рассчитает безусловно весь массив, далее вроде как происходит расчёт только последнего или максимум 2 последних значений, хотя кто знает, может всё и заново считает... От того-то и тормоза. Поэтому не важно сколько баров вы хотите получить по смещению, считается в этом случае всё равно весь массив.

Значит я не правильно понял. А почему-же нет тормозов без твоих сложных вычислений?
 
Alexey Viktorov:
Значит я не правильно понял. А почему-же нет тормозов без твоих сложных вычислений?
В том-то и вопрос, почему при вызове из кода тормозит, а при простом наложении на график нет. В общем тут только разработчики знают, где искать ответ. У меня на графиках немало сложных индикаторов и некоторые из них используют даже рекурсивные циклы, и им положено "долго думать", а тут простая задача, а так долго рассчитывается.
 
Sergey Efimenko:
В том-то и вопрос, почему при вызове из кода тормозит, а при простом наложении на график нет. В общем тут только разработчики знают, где искать ответ. У меня на графиках немало сложных индикаторов и некоторые из них используют даже рекурсивные циклы, и им положено "долго думать", а тут простая задача, а так долго рассчитывается.

Я не говорю о простом наложении на график. Я говорю о том тестовом коде. Там ведь вызывается, а не накладывается.

И всё-таки, мне кажется, я победил эту хрень через копирование части массива. И даже MODE_LWMA пересчитывает одинаково как и считая весь массив.


Красный - посчитан по всей истории. Зелёный последние 50 баров.

 
Alexey Viktorov:

...

И всё-таки, мне кажется, я победил эту хрень через копирование части массива. И даже MODE_LWMA пересчитывает одинаково как и считая весь массив.

...

Он тоже победил.

 
Alexey Viktorov:

Я не говорю о простом наложении на график. Я говорю о том тестовом коде. Там ведь вызывается, а не накладывается.

И всё-таки, мне кажется, я победил эту хрень через копирование части массива. И даже MODE_LWMA пересчитывает одинаково как и считая весь массив.


Красный - посчитан по всей истории. Зелёный последние 50 баров.

Создаётся впечатление, что вы читаете мои посты через слово, а то и через предложение. Победили что? Я же писал, что такая идея (подобный код с ограничением расчёта количества баров) у меня возникла сразу же, и я сразу же попробовал и не получил увеличения производительности, т.к. массив всё равно рассчитывается полностью (total=0), то, что вы копируете (заполняете буфер) только последние 100 его элементов, не убирает торможения расчётов, тормозит не получение элементов в буфер, а расчёт массива средней, который или считается полностью (total=0) или выдаёт результаты только первых N элементов (total=N), при том, что нужны последние, смена направления индексации нужного эффекта не даёт.
 
Sergey Efimenko:
Создаётся впечатление, что вы читаете мои посты через слово, а то и через предложение. Победили что? Я же писал, что такая идея (подобный код с ограничением расчёта количества баров) у меня возникла сразу же, и я сразу же попробовал и не получил увеличения производительности, т.к. массив всё равно рассчитывается полностью (total=0), то, что вы копируете (заполняете буфер) только последние 100 его элементов, не убирает торможения расчётов, тормозит не получение элементов в буфер, а расчёт массива средней, который или считается полностью (total=0) или выдаёт результаты только первых N элементов (total=N), при том, что нужны последние, смена направления индексации нужного эффекта не даёт.

Видимо мои сообщения тоже читаются через одно... Предыдущий код не подходит, это я понял где ошибка допущена. На последнем скрине совсем другой подход, хотя и считаются только последние 50 баров.

Сразу код выкладывать не стал именно ожидая такой вот реакции, типа "всё равно ничего не получится" патамушта... Код не секретный, хочешь проверить как будет работать на твоём индикаторе, скажи.

Dmitry Fedoseev:

Он тоже победил.

А ты только срачь можешь разводить. Посчитай с каким количеством форумчан ты общался в таком вот тоне как сейчас со мной. Изыди, сатана.
 
Alexey Viktorov:

...

А ты только срачь можешь разводить. Посчитай с каким количеством форумчан ты общался в таком вот тоне как сейчас со мной. Изыди, сатана.

С такими же как ты так и общался. Вас здесь коалиция, знаю. 

Еще вчера здесь писали про несостоятельность подхода с копированием массива. В в LWMA ткнули носом - подействовало. Проверить с EMA тяма на хватает, а носитель святой силы? А свечку в церкви не забыл поставить?

Что то пыжите, пыжите из себя, и каждый раз - ой я понял у меня ошибка.

Срач. Если у вас чуть чуть тяма было, уже бы давно увидели, что вопрос этой темы решен.

Хотелось очередной раз выпендриться, да рога обламали и сразу причитание к сатане. Мужик! 

 
Alexey Viktorov:

Видимо мои сообщения тоже читаются через одно... Предыдущий код не подходит, это я понял где ошибка допущена. На последнем скрине совсем другой подход, хотя и считаются только последние 50 баров.

Сразу код выкладывать не стал именно ожидая такой вот реакции, типа "всё равно ничего не получится" патамушта... Код не секретный, хочешь проверить как будет работать на твоём индикаторе, скажи.

А я должен был угадать, что тут другой код? Выше скрин тоже, где посчитаны последние 100 баров, а на самом деле посчитаны все бары, но в буфер скопированы только 100. Да и почему бы не выложить код сразу? Не было бы такого ответа. Я бы отвечал предметно, не понимаю, в чём соль? По коду сразу видно, что происходит, что считается и есть ли выше указанные недостатки. А что даёт скрин? Ничего кроме результата, а про результат уже говорил, к нему можно дойти разными путями, но не каждый из них допустим для поставленной задачи - уменьшения времени расчётов.
Причина обращения: