Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
A patom smotrite.
Попробовал. Дает 2.5. Это очень странно. Вот одна из причин, почему я подобные вещи предпочитаю делать сам, например, манипуляции с массивами.
Размерность у массива будет 5. И в iMaOnArray() для расчета всего массива надо задавать 0. Любое другое значение может быть, максимум, "размерность"-1. Видимо это связано со способом адресации в С-подобных языках, т.е. номер первого элемента массива это 0, а не единица. В принципе, такую маленькую особенность работы iMaOnArray() можно и запомнить (как мы вообще запоминаем "свойства" всех функций, какими пользуемся при программировании). Хотя согласен - в данном случае это несколько нелогично.
Такой код:
выдает
2006.01.21 00:52:45 iMaOnBuffer EURUSD,M15: Array2 1.5
2006.01.21 00:52:45 iMaOnBuffer EURUSD,M15: Array1 revers 2.5
2006.01.21 00:52:45 iMaOnBuffer EURUSD,M15: Array1 2.5
2006.01.21 00:52:45 iMaOnBuffer EURUSD,M15: loaded successfully
а такой (вставлен переворот массива Array2)
дает
2006.01.21 00:57:46 iMaOnBuffer EURUSD,M15: Array2 2.5
2006.01.21 00:57:46 iMaOnBuffer EURUSD,M15: Array1 revers 2.5
2006.01.21 00:57:46 iMaOnBuffer EURUSD,M15: Array1 2.5
2006.01.21 00:57:46 iMaOnBuffer EURUSD,M15: loaded successfully
То есть, в первом случае для массива Array2 имеем (3+2+1+0)/4=1.5
а во втором для ценовой серии (1+2+3+4)/4=2.5
Отсюда я делаю вывод, что функция iMAOnArray(массив, колво_элементов,период,...смещние) работает следующем образом -
вычисляется среднее за период предыдущих до смещения элементов.
Осталось дождаться опроврежения или пожтверждения. Это же объясняет, почему нельзя взять среднее от всех значений массива - происходит обращение за пределы массива.
То есть, заполнил в цикле массив значениями от 0 до 29 и взял среднее от нулевого смещения до 25-го.
Вот что получил:
01:27:52 iMaOnArray2 EURUSD,M15: loaded successfully
01:27:52 iMaOnArray2 EURUSD,M15: iMa[0]=27.5
01:27:52 iMaOnArray2 EURUSD,M15: iMa[1]=26.5
01:27:52 iMaOnArray2 EURUSD,M15: iMa[2]=25.5
01:27:52 iMaOnArray2 EURUSD,M15: iMa[3]=24.5
01:27:52 iMaOnArray2 EURUSD,M15: iMa[4]=23.5
01:27:52 iMaOnArray2 EURUSD,M15: iMa[5]=22.5
01:27:52 iMaOnArray2 EURUSD,M15: iMa[6]=21.5
01:27:52 iMaOnArray2 EURUSD,M15: iMa[7]=20.5
01:27:52 iMaOnArray2 EURUSD,M15: iMa[8]=19.5
01:27:52 iMaOnArray2 EURUSD,M15: iMa[9]=18.5
01:27:52 iMaOnArray2 EURUSD,M15: iMa[10]=17.5
01:27:52 iMaOnArray2 EURUSD,M15: iMa[11]=16.5
01:27:52 iMaOnArray2 EURUSD,M15: iMa[12]=15.5
01:27:52 iMaOnArray2 EURUSD,M15: iMa[13]=14.5
01:27:52 iMaOnArray2 EURUSD,M15: iMa[14]=13.5
01:27:52 iMaOnArray2 EURUSD,M15: iMa[15]=12.5
01:27:52 iMaOnArray2 EURUSD,M15: iMa[16]=11.5
01:27:52 iMaOnArray2 EURUSD,M15: iMa[17]=10.5
01:27:52 iMaOnArray2 EURUSD,M15: iMa[18]=9.5
01:27:52 iMaOnArray2 EURUSD,M15: iMa[19]=8.5
01:27:52 iMaOnArray2 EURUSD,M15: iMa[20]=7.5
01:27:52 iMaOnArray2 EURUSD,M15: iMa[21]=6.5
01:27:52 iMaOnArray2 EURUSD,M15: iMa[22]=5.5
01:27:52 iMaOnArray2 EURUSD,M15: iMa[23]=4.5
01:27:52 iMaOnArray2 EURUSD,M15: iMa[24]=3.5
01:27:52 iMaOnArray2 EURUSD,M15: iMa[25]=2.5
01:27:52 iMaOnArray2 EURUSD,M15: removed
Скопировал все это в Эксель и попробовал понять как это получается, получилось, что для нулевого значения среднее вычисляется с конца. Вот такая таблица получилась:
01:27:52 iMaOnArray2 EURUSD,M15: iMa[0]=27.5 27.5 29 0
01:27:52 iMaOnArray2 EURUSD,M15: iMa[1]=26.5 26.5 28 1
01:27:52 iMaOnArray2 EURUSD,M15: iMa[2]=25.5 25.5 27 2
01:27:52 iMaOnArray2 EURUSD,M15: iMa[3]=24.5 24.5 26 3
01:27:52 iMaOnArray2 EURUSD,M15: iMa[4]=23.5 23.5 25 4
01:27:52 iMaOnArray2 EURUSD,M15: iMa[5]=22.5 22.5 24 5
01:27:52 iMaOnArray2 EURUSD,M15: iMa[6]=21.5 21.5 23 6
01:27:52 iMaOnArray2 EURUSD,M15: iMa[7]=20.5 20.5 22 7
01:27:52 iMaOnArray2 EURUSD,M15: iMa[8]=19.5 19.5 21 8
01:27:52 iMaOnArray2 EURUSD,M15: iMa[9]=18.5 18.5 20 9
01:27:52 iMaOnArray2 EURUSD,M15: iMa[10]=17.5 17.5 19 10
01:27:52 iMaOnArray2 EURUSD,M15: iMa[11]=16.5 16.5 18 11
01:27:52 iMaOnArray2 EURUSD,M15: iMa[12]=15.5 15.5 17 12
01:27:52 iMaOnArray2 EURUSD,M15: iMa[13]=14.5 14.5 16 13
01:27:52 iMaOnArray2 EURUSD,M15: iMa[14]=13.5 13.5 15 14
01:27:52 iMaOnArray2 EURUSD,M15: iMa[15]=12.5 12.5 14 15
01:27:52 iMaOnArray2 EURUSD,M15: iMa[16]=11.5 11.5 13 16
01:27:52 iMaOnArray2 EURUSD,M15: iMa[17]=10.5 10.5 12 17
01:27:52 iMaOnArray2 EURUSD,M15: iMa[18]=9.5 9.5 11 18
01:27:52 iMaOnArray2 EURUSD,M15: iMa[19]=8.5 8.5 10 19
01:27:52 iMaOnArray2 EURUSD,M15: iMa[20]=7.5 7.5 9 20
01:27:52 iMaOnArray2 EURUSD,M15: iMa[21]=6.5 6.5 8 21
01:27:52 iMaOnArray2 EURUSD,M15: iMa[22]=5.5 5.5 7 22
01:27:52 iMaOnArray2 EURUSD,M15: iMa[23]=4.5 4.5 6 23
01:27:52 iMaOnArray2 EURUSD,M15: iMa[24]=3.5 3.5 5 24
01:27:52 iMaOnArray2 EURUSD,M15: iMa[25]=2.5 2.5 4 25
01:27:52 iMaOnArray2 EURUSD,M15: removed 3 26
2 27
1 28
0 29
Теперь я тоже ничего не понимаю :)
А если ArraySetAsSeries() попробовать?
А если ArraySetAsSeries() попробовать?
Тогда все правильно, идет от нулевого индекса, считате от смещения включительно.
Код:
Результат:
2006.01.22 12:02:23 iMaOnArray3 EURUSD,M15: iMa[25]=26.5
2006.01.22 12:02:23 iMaOnArray3 EURUSD,M15: iMa[24]=25.5
2006.01.22 12:02:23 iMaOnArray3 EURUSD,M15: iMa[23]=24.5
2006.01.22 12:02:23 iMaOnArray3 EURUSD,M15: iMa[22]=23.5
2006.01.22 12:02:23 iMaOnArray3 EURUSD,M15: iMa[21]=22.5
2006.01.22 12:02:23 iMaOnArray3 EURUSD,M15: iMa[20]=21.5
2006.01.22 12:02:23 iMaOnArray3 EURUSD,M15: iMa[19]=20.5
2006.01.22 12:02:23 iMaOnArray3 EURUSD,M15: iMa[18]=19.5
2006.01.22 12:02:23 iMaOnArray3 EURUSD,M15: iMa[17]=18.5
2006.01.22 12:02:23 iMaOnArray3 EURUSD,M15: iMa[16]=17.5
2006.01.22 12:02:23 iMaOnArray3 EURUSD,M15: iMa[15]=16.5
2006.01.22 12:02:23 iMaOnArray3 EURUSD,M15: iMa[14]=15.5
2006.01.22 12:02:23 iMaOnArray3 EURUSD,M15: iMa[13]=14.5
2006.01.22 12:02:23 iMaOnArray3 EURUSD,M15: iMa[12]=13.5
2006.01.22 12:02:23 iMaOnArray3 EURUSD,M15: iMa[11]=12.5
2006.01.22 12:02:23 iMaOnArray3 EURUSD,M15: iMa[10]=11.5
2006.01.22 12:02:23 iMaOnArray3 EURUSD,M15: iMa[9]=10.5
2006.01.22 12:02:23 iMaOnArray3 EURUSD,M15: iMa[8]=9.5
2006.01.22 12:02:23 iMaOnArray3 EURUSD,M15: iMa[7]=8.5
2006.01.22 12:02:23 iMaOnArray3 EURUSD,M15: iMa[6]=7.5
2006.01.22 12:02:23 iMaOnArray3 EURUSD,M15: iMa[5]=6.5
2006.01.22 12:02:23 iMaOnArray3 EURUSD,M15: iMa[4]=5.5
2006.01.22 12:02:23 iMaOnArray3 EURUSD,M15: iMa[3]=4.5
2006.01.22 12:02:23 iMaOnArray3 EURUSD,M15: iMa[2]=3.5
2006.01.22 12:02:23 iMaOnArray3 EURUSD,M15: iMa[1]=2.5
2006.01.22 12:02:23 iMaOnArray3 EURUSD,M15: iMa[0]=1.5
2006.01.22 12:02:23 iMaOnArray3 EURUSD,M15: loaded successfully
2006.01.22 12:01:53 Compiling 'iMaOnArray3'
если массив объявлен не ценовой серией (без ArraySetAsSeries), то функция iMAOnArray() возвращает значения задом наперед, для смещения ноль получаем значение для последнего индекса, соответственно и усреднение идет от нулевого индекса к последнемe - это нужно помнить для случаев, когда мы используем экспоненциальное, взвешенное или сглаженное усреднение.
Чтобы получать значения в привычном виде надо обязательно объявить массив ценовой серией с помощью ArraySetAsSeries(имя_массива, TRUE).
Чтобы получить усреднение по всему массиву (включая все элементы массива) необходимо объявить размерность массива на единицу больше, чем имеем элементов. ТО есть, чтобы усреднить 30 элементов в массиве, необходимо объявить его размерность равной 31.
Как быть с индексными буферами, которые такого выверта не позволяют - я не знаю. С другой стороны, сам вопрос тоже выверт - в каких случаях может потребоваться усреднение по всему индескному буферу - я не представляю. В принципе, считаю вопрос закрытым.