Заработай до
50000$
на приглашении друзей
получить StartUp Bonus
от ИнстаФорекс
Вложений не требуется!
Начни торговлю
без вложений и риска
С новым STARTUP бонусом 1000$
Получи бонус
55%
от ИнстаФорекс
на каждое пополнение
Ответить в теме

Показаны сообщения: с 1 по 10 из 10

Тема: iMAOnArray странности в работе

 Перейти в классический вид темы
  1. линк#1
    Мощный программист
    Хитер
     
    LionFx хорошая репутация LionFx хорошая репутация LionFx хорошая репутация LionFx хорошая репутация LionFx хорошая репутация LionFx хорошая репутация Аватар для LionFx
    Регистрация:
    14.05.2011
    Пол:
    Мужчина
    Сообщений:
    2,385
    Накопленные выплаты (Подробнее):
    37168 RUB
    Поставил лайков:
    280
    Получено лайков:   605
    в 484 сообщениях
    25%
    Либо я заработался, либо что-то случилось с iMAOnArray.

    Имеем такой простенький код (специально для примера):
    MQL код:

    double Array[3] = {1.0, 2.5, 3.0};
    Print(ArraySize(Array));

    Print выводит размер массива равный 3. Все верно.

    Далее делаем так (добавляем строку после Print):
    MQL код:

    double Array[3] = {1.0, 2.5, 3.0};
    Print(ArraySize(Array));
    double ma = iMAOnArray(Array,0,15,0,MODE_EMA,0);

    Print выводит 0. Довольно странно..


  2. post_thanks Получено лайков: 1

    Незарегистрированный (1 пользователь)

  3. линк#2
    Кандидат форумных наук
    MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация Аватар для MonyaMaker
    Регистрация:
    03.04.2017
    Пол:
    Мужчина
    Сообщений:
    1,653
    Накопленные выплаты (Подробнее):
    56347 RUB
    Поставил лайков:
    277
    Получено лайков:   628
    в 568 сообщениях
    38%
    Цитата Сообщение от LionFx Посмотреть сообщение
    Либо я заработался, либо что-то случилось с iMAOnArray.

    Имеем такой простенький код (специально для примера):
    MQL код:

    double Array[3] = {1.0, 2.5, 3.0};
    Print(ArraySize(Array));

    Print выводит размер массива равный 3. Все верно.

    Далее делаем так (добавляем строку после Print):
    MQL код:

    double Array[3] = {1.0, 2.5, 3.0};
    Print(ArraySize(Array));
    double ma = iMAOnArray(Array,0,15,0,MODE_EMA,0);

    Print выводит 0. Довольно странно..
    Код:
       double  iMAOnArray( 
       double       array[],          // массив 
       int          total,            // количество элементов 
       int          ma_period,        // период 
       int          ma_shift,         // сдвиг средней 
       int          ma_method,        // метод усреднения 
       int          shift             // сдвиг 
       );
    (Array,0,15,0,MODE_EMA,0);
    int total, // количество элементов

    Что написал, то и вывело.

    Последний раз редактировалось MonyaMaker; 14.04.2020 в 13:17.

  4. post_thanks Получено лайков: 1

    Незарегистрированный (1 пользователь)

  5. линк#3
    Специалист
    ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация Аватар для ir0407
    Регистрация:
    02.12.2010
    Сообщений:
    7,158
    Накопленные выплаты (Подробнее):
    164160 RUB
    Поставил(а) лайков:
    920
    Получено лайков:   7,249
    в 3,480 сообщениях
    101%
    Цитата Сообщение от LionFx Посмотреть сообщение
    Либо я заработался, либо что-то случилось с iMAOnArray.
    1. Скорее с ArraySize(). Используй ArrayRange().
    2. Период для iMAOnArray не должен быть больше размера массива. Иначе получишь шопопало.


  6. линк#4
    Мощный программист
    Хитер
     
    LionFx хорошая репутация LionFx хорошая репутация LionFx хорошая репутация LionFx хорошая репутация LionFx хорошая репутация LionFx хорошая репутация Аватар для LionFx
    Регистрация:
    14.05.2011
    Пол:
    Мужчина
    Сообщений:
    2,385
    Накопленные выплаты (Подробнее):
    37168 RUB
    Поставил лайков:
    280
    Получено лайков:   605
    в 484 сообщениях
    25%
    Цитата Сообщение от MonyaMaker Посмотреть сообщение
    (Array,0,15,0,MODE_EMA,0);
    int total, // количество элементов
    Что написал, то и вывело.
    0 - означает все и не имеет отношение к этому. Вывод был до этой строки, Print находится во второй строке, а iMAOnArray в третьей, посмотрите внимательней. В этом странность.
    Цитата Сообщение от ir0407 Посмотреть сообщение
    1. Скорее с ArraySize(). Используй ArrayRange().
    2. Период для iMAOnArray не должен быть больше размера массива. Иначе получишь шопопало.
    Вы не обратили внимание, что Print, который выводит кол-во элементов массива, стоит до iMAOnArray. И получается iMAOnArray влияет на массив раньше, нежели он его получает в обработку. Я говорю именно об этом.


  7. post_thanks Получено лайков: 2

    Незарегистрированный (2 пользователя)

  8. линк#5
    Специалист
    ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация Аватар для ir0407
    Регистрация:
    02.12.2010
    Сообщений:
    7,158
    Накопленные выплаты (Подробнее):
    164160 RUB
    Поставил(а) лайков:
    920
    Получено лайков:   7,249
    в 3,480 сообщениях
    101%
    Цитата Сообщение от LionFx Посмотреть сообщение
    Вы не обратили внимание, что Print, который выводит кол-во элементов массива, стоит до iMAOnArray.
    Обратил. Потому и отписал. Ты все ж попробуй мой совет. И про результат отпиши.


  9. линк#6
    Мощный программист
    Хитер
     
    LionFx хорошая репутация LionFx хорошая репутация LionFx хорошая репутация LionFx хорошая репутация LionFx хорошая репутация LionFx хорошая репутация Аватар для LionFx
    Регистрация:
    14.05.2011
    Пол:
    Мужчина
    Сообщений:
    2,385
    Накопленные выплаты (Подробнее):
    37168 RUB
    Поставил лайков:
    280
    Получено лайков:   605
    в 484 сообщениях
    25%
    Цитата Сообщение от ir0407 Посмотреть сообщение
    Обратил. Потому и отписал. Ты все ж попробуй мой совет. И про результат отпиши.
    Нет, не работает. Я изначально естественно не на этом коде заметил, а на другом, где период меньше массива.
    Сейчас, специально еще проверил, с массивом 10 элементов, и периодом 3, чтобы наверняка убедиться. Не работает.


  10. post_thanks Получено лайков: 1

    Незарегистрированный (1 пользователь)

  11. линк#7
    Специалист
    ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация Аватар для ir0407
    Регистрация:
    02.12.2010
    Сообщений:
    7,158
    Накопленные выплаты (Подробнее):
    164160 RUB
    Поставил(а) лайков:
    920
    Получено лайков:   7,249
    в 3,480 сообщениях
    101%
    Цитата Сообщение от LionFx Посмотреть сообщение
    Нет, не работает.
    Прикольно однако... Тоже проверил скриптом - не работает. Причем даже с динамическим массивом не работает. Потом вынес объявление массива на глобальный уровень скрипта - заработало. И со статическим и с динамическим массивом заработало. Видать что-то там запереоптимизировали при создании переменных на стеке, что в рантайме такие глюки вылазят.


  12. post_thanks Получено лайков: 3

    Gold (20.04.2020), LionFx (14.04.2020), Незарегистрированный (1 пользователь)

  13. линк#8
    Мощный программист
    Хитер
     
    LionFx хорошая репутация LionFx хорошая репутация LionFx хорошая репутация LionFx хорошая репутация LionFx хорошая репутация LionFx хорошая репутация Аватар для LionFx
    Регистрация:
    14.05.2011
    Пол:
    Мужчина
    Сообщений:
    2,385
    Накопленные выплаты (Подробнее):
    37168 RUB
    Поставил лайков:
    280
    Получено лайков:   605
    в 484 сообщениях
    25%
    Цитата Сообщение от ir0407 Посмотреть сообщение
    Видать что-то там запереоптимизировали при создании переменных на стеке, что в рантайме такие глюки вылазят.
    Скорее всего, для одного и того же исходного массива функция iMAOnArray не пересчитывает все данные каждый раз при вызове (при условии одинаковых настроек), а считает только новые данные. Поэтому создается от этого исходного массива, что-то вроде ссылки на такой-же массив, но с уже посчитанными данными (предположение). И iMAOnArray использует его в дальнейшем. При объявлении массива на глобальном уровне, все в порядке. А иначе исходный массив то на каждом тике пересоздается. И тут именно глюк компилятора похоже.

    Последний раз редактировалось LionFx; 14.04.2020 в 15:53.

  14. post_thanks Получено лайков: 1

    Незарегистрированный (1 пользователь)

  15. линк#9
    Кандидат форумных наук
    MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация Аватар для MonyaMaker
    Регистрация:
    03.04.2017
    Пол:
    Мужчина
    Сообщений:
    1,653
    Накопленные выплаты (Подробнее):
    56347 RUB
    Поставил лайков:
    277
    Получено лайков:   628
    в 568 сообщениях
    38%
    Цитата Сообщение от LionFx Посмотреть сообщение
    0 - означает все и не имеет отношение к этому. Вывод был до этой строки, Print находится во второй строке, а iMAOnArray в третьей, посмотрите внимательней. В этом странность.


    Вы не обратили внимание, что Print, который выводит кол-во элементов массива, стоит до iMAOnArray. И получается iMAOnArray влияет на массив раньше, нежели он его получает в обработку. Я говорю именно об этом.
    Ты его так определи, а потом зачистишь.
    Код:
    static double Arr[3] = {1.0, 2.5, 3.0};
    Черкни им в сервисдеск, может ответят чего по этому поводу.

    Последний раз редактировалось MonyaMaker; 14.04.2020 в 16:57.

  16. post_thanks Получено лайков: 1

    Незарегистрированный (1 пользователь)

    <a href="https://www.mt5.com/ru/forex_analysis">Форекс портал</a>
  17. линк#10
    Специалист
    ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация Аватар для ir0407
    Регистрация:
    02.12.2010
    Сообщений:
    7,158
    Накопленные выплаты (Подробнее):
    164160 RUB
    Поставил(а) лайков:
    920
    Получено лайков:   7,249
    в 3,480 сообщениях
    101%
    Цитата Сообщение от LionFx Посмотреть сообщение
    Скорее всего, для одного и того же исходного массива функция iMAOnArray не пересчитывает все данные каждый раз при вызове (при условии одинаковых настроек), а считает только новые данные. Поэтому создается от этого исходного массива, что-то вроде ссылки на такой-же массив, но с уже посчитанными данными (предположение). И iMAOnArray использует его в дальнейшем. При объявлении массива на глобальном уровне, все в порядке. А иначе исходный массив то на каждом тике пересоздается.
    А как же тогда с динамическим массивом? Он создается, но ему ни размер не поменять, ни значения не присвоить. Собсно и статический массив ведет себя так же. Создается, но не инициализируется. Отсюда и глюки.
    И тут именно глюк компилятора похоже.
    Нет. Это не глюк компилятора, а глюк исполняющей подсистемы MQL. Дело в том, что любые локальные переменные(если они не static) создаются и инициализируются исполняющей подсистемой MQL на стеке автоматом, тобишь на лету, в момент вызова функции. И вероятнее всего, что именно в этом механизме у них какая-то собака порылась. Причем есть четкая зависимость от того, как эта переменная используется в коде дальше.



Подписанные на тему (1)

Открыть

Похожие темы

  1. Конфликты на работе
    от Таtyana в разделе Свободное общение
    Replies: 24
    Последнее сообщение: 08.07.2019, 15:57
  2. Странности самых богатых людей мира
    от Volangott в разделе Свободное общение
    Replies: 15
    Последнее сообщение: 27.06.2019, 10:44
  3. Завтрак на работе
    от AdelinaLisa в разделе Свободное общение
    Replies: 41
    Последнее сообщение: 15.02.2019, 08:45
  4. Кумовство на работе
    от Валерий100 в разделе Свободное общение
    Replies: 108
    Последнее сообщение: 27.06.2018, 13:58
  5. Обучение работе на СМЕ
    от gelionoff в разделе Доска объявлений
    Replies: 41
    Последнее сообщение: 16.08.2015, 11:08