Так работает правильно:
int start() { double dataArray[10], subDataArray[6]; ArraySetAsSeries(dataArray, TRUE); ArraySetAsSeries(subDataArray, TRUE); // Initialize dataArray for (int i = 0; i < 10; i++) dataArray[i] = i; ArrayCopy(subDataArray, dataArray, 0, 0, 6); // for (i = 0; i < 10; i++) Alert(subDataArray[i]); Alert("Should be equal to 3: ", iMAOnArray(subDataArray, WHOLE_ARRAY, 3, 0, MODE_SMA, 2)); // ArrayInitialize(subDataArray, 0); ArrayCopy(subDataArray, dataArray, 0, 1, 6); for (i = 0; i < 10; i++) Alert(subDataArray[i]); Alert("Should be equal to 4: ", iMAOnArray(subDataArray, WHOLE_ARRAY, 3, 0, MODE_SMA, 2)); }
Это баг. Требуется предварительное обращение к массиву, чтобы работало правильно. Что-то с инициализацией напутали.
Хотя, припоминаю, что и раньше с этим сталкивался. Тогда всё переделал, чтобы на необъяснимые явления не нарываться.
Это баг. Требуется предварительное обращение к массиву, чтобы работало правильно. Что-то с инициализацией напутали.
Хотя, припоминаю, что и раньше с этим сталкивался. Тогда всё переделал, чтобы на необъяснимые явления не нарываться.
Да, я тоже заметил, что предварительное обращение к массиву нейтрализует этот баг MQL-компилятора. Поэтому, я после каждого вызова (в вышеприведенном коде достаточно только после второго вызова) функции ArrayCopy() "профилактически" вставляю строку с таким кодом:
subDataArray[0] = subDataArray[0];
Andrius_S
Здравствуйте,
После долгой паузы опять возобновляю эту тему... До недавнего времени ещё существовал способ (см. предыдущий пост) избежать этого бага, но теперь, с нынешными билдами MQL-компилятора, он уже не работает. Я подозреваю, из-за чего получается этот баг: MetaQuotes чересчур перестаралась оптимизировать подсчёт индикаторов и тем самым не пренебрегли полностью все случаи, когда пересчёт значений буффера является обязательным. Может быть, кто-нибудь из Вас подскажет способ, как заставить функцию iMAOnArray() полностью заново подсчитать МА значение? Неужели придётся самому написать код альтернативной функции iMAOnArray()?
P.S.: Жаль, что никто из представителей или разработчиков MetaQuotes не обратили внимания на этот баг. Может быть, есть какой-нибудь прямой контакт для информирования об ошибках MQL-компилятора?
Здравствуйте,
После долгой паузы опять возобновляю эту тему... До недавнего времени ещё существовал способ (см. предыдущий пост) избежать этого бага, но теперь, с нынешными билдами MQL-компилятора, он уже не работает. Я подозреваю, из-за чего получается этот баг: MetaQuotes чересчур перестаралась оптимизировать подсчёт индикаторов и тем самым не пренебрегли полностью все случаи, когда пересчёт значений буффера является обязательным. Может быть, кто-нибудь из Вас подскажет способ, как заставить функцию iMAOnArray() полностью заново подсчитать МА значение? Неужели придётся самому написать код альтернативной функции iMAOnArray()?
P.S.: Жаль, что никто из представителей или разработчиков MetaQuotes не обратили внимания на этот баг. Может быть, есть какой-нибудь прямой контакт для информирования об ошибках MQL-компилятора?
Конечно есть - Сервисдеск на пятом форуме, доступен в профиле пользователя.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте,
Я обнаружил скрытую ошибку в функции iMAOnArray(). Ниже привожу код, позволяющий проявить эту проблему:
Повторный вызов функции ArrayCopy() копирует передвинутый массив. Поэтому, арифметичкское среднее должно равняться 4.0, но вышеприведенный код выдаёт вот такой результат:
22:09:33 Test EURUSD,M1: Should be equal to 3: 3
22:09:33 Test EURUSD,M1: Should be equal to 4: 3
Надеюсь, что представители MetaQuotes увидят этот мой пост и выправят эту проблему в следующем MT4 билде.
Andrius_S