Есть ещё вопрос, допустим я хочу, чтобы массив заполнился взятыми с индикатора (к примеру ATR) данными с каждого бара, начиная с первого сформировавшегося (№1)? То есть массив объявлен и в функции старт уже производится инициализация. Как правильно это сделать?
Есть ещё вопрос, допустим я хочу, чтобы массив заполнился взятыми с индикатора (к примеру ATR) данными с каждого бара, начиная с первого сформировавшегося (№1)? То есть массив объявлен и в функции старт уже производится инициализация. Как правильно это сделать?
как то так?:
for(int i=0; i<N; i=i++)
{
Mas[i]=iATR(NULL,0,1,i+1);
}
Первый вариант достаточен. Только вот если нужны значения начиная с первого бара, разумнее было бы и цикл с 1 считать.
Это не решает проблему, сейчас вообще как-то странно, видать что-то не верно в OnTick() - когда загружаю в окно терминала советник ничего не происходит, а когда пытаюсь удалить, то очень долго тупит терминал и только потом через некоторое время удаляется. Попробовал вручную присвоить значения нескольким элементам, все нормально. Что-то с циклом инициализации массива судя по всему.
lufer: Это не решает проблему, сейчас вообще как-то странно, видать что-то не верно в OnTick() - когда загружаю в окно терминала советник ничего не происходит, а когда пытаюсь удалить, то очень долго тупит терминал и только потом через некоторое время удаляется. Попробовал вручную присвоить значения нескольким элементам, все нормально. Что-то с циклом инициализации массива судя по всему.
Что значит "не решает"??? Вы в массив инт пихаете данные дабл меньше 1, естественно на выходе нули будут. Ну и цикл корявый был.
Вот такой код должен работать:
#property strictexternint N=100; // Количество баровdouble Mas[]; // Объявление массива//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
ArrayResize(Mas,N);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
for(int i=0; i<N; i++) // Цикл записи данных
{
Mas[i]=iATR(NULL,0,5,i+1); // Вычисление значений
}
Print(DoubleToStr(Mas[0],_Digits),"," ,DoubleToStr(Mas[50],_Digits),"," ,DoubleToStr(Mas[99],_Digits)); // Вывод значений
}
Что значит "не решает"??? Вы в массив инт пихаете данные дабл меньше 1, естественно на выходе нули будут. Ну и цикл корявый был.
Вот такой код должен работать:
Нет, на счёт double Mas[] вы конечно же абсолютно верно мне подсказали (я почему-то посчитал, что в АТР количество пунктов в целых значениях исчисляется), суть была в том, что значения не выводились даже после изменения типа массива, но уже понял где косяк. Спасибо большое за помощь!
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Ну извини, я вчера был не очень трезв. Или не трезв очень.
Есть ещё вопрос, допустим я хочу, чтобы массив заполнился взятыми с индикатора (к примеру ATR) данными с каждого бара, начиная с первого сформировавшегося (№1)? То есть массив объявлен и в функции старт уже производится инициализация. Как правильно это сделать?
как то так?:
for(int i=0; i<N; i=i++)
Mas[i]=iATR(NULL,0,1,i+1);
}
или же нужно делать через:
for(int i=0; i<N; i=i++)
{
ArrayFill(Mas,i,1,iATR(NULL,0,1,i+1));}
или совсем по другому?, пока у меня не получилось никак(, в чём то косячу, подскажите, заранее благодарен.
Есть ещё вопрос, допустим я хочу, чтобы массив заполнился взятыми с индикатора (к примеру ATR) данными с каждого бара, начиная с первого сформировавшегося (№1)? То есть массив объявлен и в функции старт уже производится инициализация. Как правильно это сделать?
как то так?:
for(int i=0; i<N; i=i++)
Mas[i]=iATR(NULL,0,1,i+1);
}
Первый вариант достаточен. Только вот если нужны значения начиная с первого бара, разумнее было бы и цикл с 1 считать.
Да я пробовал и с 1 и с 0, всё равно что то не так, не записываются значения, когда прошу вывести некоторые - выдаёт только ноли
Код прошения вывода покажите.
на всякий случай покажу весь код:
Для вставки кода используйте SRC
на всякий случай покажу весь код:
сделайте массив типа double
Это не решает проблему, сейчас вообще как-то странно, видать что-то не верно в OnTick() - когда загружаю в окно терминала советник ничего не происходит, а когда пытаюсь удалить, то очень долго тупит терминал и только потом через некоторое время удаляется. Попробовал вручную присвоить значения нескольким элементам, все нормально. Что-то с циклом инициализации массива судя по всему.
Что значит "не решает"??? Вы в массив инт пихаете данные дабл меньше 1, естественно на выходе нули будут. Ну и цикл корявый был.
Вот такой код должен работать:
Что значит "не решает"??? Вы в массив инт пихаете данные дабл меньше 1, естественно на выходе нули будут. Ну и цикл корявый был.
Вот такой код должен работать: