Сначала надо сделать ArraySetAsSeries(BASE,true);, потом заполнить массив, потом MAonArray(). Обратите внимание: Основной массив: -2 -1 0 1 2, вычисленный массив: 1.5 0.5 -0.5 -1.5 - получается наоброт, а должно быть -1.5, -0.5, 0.5, 1.5
Сначала надо сделать ArraySetAsSeries(BASE,true);, потом заполнить массив, потом MAonArray(). Обратите внимание: Основной массив: -2 -1 0 1 2, вычисленный массив: 1.5 0.5 -0.5 -1.5 - получается наоброт, а должно быть -1.5, -0.5, 0.5, 1.5
Так все работает, спасибо Integer.
На самом деле немного не так. Для индикаторов, которые строятся на массиве, не имеет значения как вы его объявите - как таймсерияю или как обычный массив. Считаться он будет всегда одинаково - слева направо, независимо от объявления функции ArraySetAsSeries().
Об этом и написано в документации для iMaOnArray():
Расчет скользящего среднего на данных, хранящихся в массиве. В отличие от iMA(...) функция iMAOnArray не выбирает данные на основе названия инструмента, таймфрейма и используемой цены - ценовые данные должны быть подготовлены заранее. Расчет производится слева направо. Для организации доступа к элементам массива, как к таймсерии (то есть справа налево), необходимо использовать функцию ArraySetAsSeries.
Вот результат работы приложенного скрипта CheckiMAOnArray.mq4:
11:52:40 CheckiMAOnArray EURUSD,H1: loaded successfully
11:52:40 CheckiMAOnArray EURUSD,H1: -------------------------------------------
11:52:40 CheckiMAOnArray EURUSD,H1: Основной массив: 2 1 0 -1 -2
11:52:40 CheckiMAOnArray EURUSD,H1: вычисленный массив FS: 1.5 0.5 -0.5 -1.5
11:52:40 CheckiMAOnArray EURUSD,H1: Обратный массив: 2 1 0 -1 -2
11:52:40 CheckiMAOnArray EURUSD,H1: вычисленный массив reversFS: -1.5 -0.5 0.5 1.5
11:52:40 CheckiMAOnArray EURUSD,H1: uninit reason 0
11:52:40 CheckiMAOnArray EURUSD,H1: removed
На самом деле немного не так. Для индикаторов, которые строятся на массиве, не имеет значения как вы его объявите - как таймсерияю или как обычный массив. Считаться он будет всегда одинаково - слева направо, независимо от объявления функции ArraySetAsSeries().
Хороший пример, спасибо Rosh. Но Integer имел ввиду наверно (у меня это во всяком случае работает) следующее:
double BASE[5]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void init() { ArraySetAsSeries(BASE,true); return; } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ void start() { double FS[4]; for(int i=0;i<5;i++) { BASE[i]=i-2; } Print("-------------------------------------------"); Print("Основной массив: ",BASE[0]," ",BASE[1]," ",BASE[2]," ",BASE[3]," ",BASE[4]); for(i=0;i<4;i++) { FS[i]=iMAOnArray(BASE,0,2,0,0,i); } Print("Вычисленный массив: ",FS[0]," ",FS[1]," ",FS[2]," ",FS[3]); return; }
Лог при закоментированном //ArraySetAsSeries(BASE,true); :
11:18:45 _Test GBPUSD,Daily: initialized
11:18:45 _Test GBPUSD,Daily: -------------------------------------------
11:18:45 _Test GBPUSD,Daily: Основной массив: -2 -1 0 1 2
11:18:45 _Test GBPUSD,Daily: Вычисленный массив: 1.5 0.5 -0.5 -1.5
11:18:46 _Test GBPUSD,Daily: -------------------------------------------
Лог :
11:19:32 _Test GBPUSD,Daily: -------------------------------------------
11:19:32 _Test GBPUSD,Daily: Основной массив: -2 -1 0 1 2
11:19:32 _Test GBPUSD,Daily: Вычисленный массив: -1.5 -0.5 0.5 1.5
11:19:33 _Test GBPUSD,Daily: -------------------------------------------
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
В примере при изменени организации доступа к элементам массива с помощью ArraySetAsSeries НИЧЕГО НЕ МЕНЯЕТСЯ в результатах вычисления !!!
Может я чего не понимаю, объясните.
Лог:
07:36:09 _Test EURJPY,H1: loaded successfully
07:36:12 _Test EURJPY,H1: initialized
07:36:12 _Test EURJPY,H1: -------------------------------------------
07:36:12 _Test EURJPY,H1: Основной массив: -2 -1 0 1 2
07:36:12 _Test EURJPY,H1: 1-й раз вычисленный массив: 1.5 0.5 -0.5 -1.5
07:36:12 _Test EURJPY,H1: Направление индексирования в массиве поменяли с прямого на обратное
07:36:12 _Test EURJPY,H1: Основной массив: 2 1 0 -1 -2
07:36:12 _Test EURJPY,H1: 2-й раз вычисленный массив: 1.5 0.5 -0.5 -1.5
07:36:12 _Test EURJPY,H1: Направление индексирования в массиве поменяли с обратного на прямое
07:36:12 _Test EURJPY,H1: Основной массив: -2 -1 0 1 2
07:36:12 _Test EURJPY,H1: 3-й раз вычисленный массив: 1.5 0.5 -0.5 -1.5
07:36:14 _Test EURJPY,H1: -------------------------------------------
07:36:14 _Test EURJPY,H1: Основной массив: -2 -1 0 1 2
07:36:14 _Test EURJPY,H1: 1-й раз вычисленный массив: 1.5 0.5 -0.5 -1.5
07:36:14 _Test EURJPY,H1: Направление индексирования в массиве поменяли с прямого на обратное
07:36:14 _Test EURJPY,H1: Основной массив: 2 1 0 -1 -2
07:36:14 _Test EURJPY,H1: 2-й раз вычисленный массив: 1.5 0.5 -0.5 -1.5
07:36:14 _Test EURJPY,H1: Направление индексирования в массиве поменяли с обратного на прямое
07:36:14 _Test EURJPY,H1: Основной массив: -2 -1 0 1 2
07:36:14 _Test EURJPY,H1: 3-й раз вычисленный массив: 1.5 0.5 -0.5 -1.5
07:36:16 _Test EURJPY,H1: deinitialized
07:36:16 _Test EURJPY,H1: uninit reason 1
P.S. Проверял на 216 и 217 билдах.