Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 935

 
Доброго всем времечка! Такой вопрос: можно ли как-то сдвинуть индексацию элементов массива на 1 единицу без того, чтобы создавать еще один такой же массив и поэлементно копировать в него информацию из первого массива (а потом и обратно)? Ведь в МТ4 в массивах таймсерий это как-то делается (когда образуется новый бар, ему присваивается индекс 0, а индексы всех предыдущих элементов массива сдвигаются на 1 единицу).
 
FxRoller:
Доброго всем времечка! Такой вопрос: можно ли как-то сдвинуть индексацию элементов массива на 1 единицу без того, чтобы создавать еще один такой же массив и поэлементно копировать в него информацию из первого массива (а потом и обратно)? Ведь в МТ4 в массивах таймсерий это как-то делается (когда образуется новый бар, ему присваивается индекс 0, а индексы всех предыдущих элементов массива сдвигаются на 1 единицу).

Присоединяюсь к вопросу: было бы удобно использовать встроенную функцию сдвига N-ного измерения массива на M элементов вправо или лево.

На сколько знаю, пока нужно сдвигать циклом, определив размер массива. Сложнее использование динамического(+данные не теряются). 

 
kosmos0975:

Присоединяюсь к вопросу: было бы удобно использовать встроенную функцию сдвига N-ного измерения массива на M элементов вправо или лево.

На сколько знаю, пока нужно сдвигать циклом, определив размер массива. Сложнее использование динамического(+данные не теряются). 

А SetIndexShift() не поможет?

Устанавливает смещение линии индикатора относительно начала графика.

void  SetIndexShift(
   int     index,       // номер линии
   int     shift        // смещение
   );

Параметры

index

[in]  Порядковый номер линии. Должен быть от 0 до 7.

shift

[in]  Величина смещения в барах.

Возвращаемое значение

Нет.

Примечание

При положительном значении изображение линии смещается вправо, при отрицательном - влево. Значение, рассчитанное на текущем баре, рисуется с указанным смещением относительно текущего бара.

Пример:

 

Можно ещё копировать массив сам в себя со сдвигом.

int  ArrayCopy(
   void&        dst_array[],         // куда копируем                           // сюда, понятно имя массива
   const void&  src_array[],         // откуда копируем                         // сюда тоже его
   int          dst_start=0,         // с какого индекса пишем в приемник       // сюда 0
   int          src_start=0,         // с какого индекса копируем из источника  // сюда, например с первого, значит 1
   int          count=WHOLE_ARRAY    // сколько элементов                       // сюда размерность массива минус 1
   );

Таким образом массив будет скопирован сам в себя со сдвигом на 1 элемент. Нулевой будет выброшен, а последний пустой. Наоборот, выбрасывать последний элемент, я не пробовал но думаю что можно правильно расставить последние три параметра функции.

 
AlexeyVik:

Можно ещё копировать массив сам в себя со сдвигом.

Таким образом массив будет скопирован сам в себя со сдвигом на 1 элемент. Нулевой будет выброшен, а последний пустой. Наоборот, выбрасывать последний элемент, я не пробовал но думаю что можно правильно расставить последние три параметра функции.


Не пробовал, но может пригодиться смена направления индексации.

P.S. Есть вопросы по тестеру стратегий. Поможешь? 

 
kosmos0975:

Не пробовал, но может пригодиться смена направления индексации.

P.S. Есть вопросы по тестеру стратегий. Поможешь? 

Ты имеешь ввиду после копирования массива самого в себя поменять направление индексации? А надо-ли это? Я думаю что никаких проблем не будет копировать с нулевого индекса без последнего и вставлять с первого а нулевой останется или пустым или старым значением, не важно, ведь эта процедура нужна не просто ради копирования, а конкретно для замены одного из значений массива (нулевого или последнего) новым значением. А соответственно после такого копирования "освободившийся" элемент заполняется новым значением. И не важно что в нём оставалось...

По тестеру, если смогу - помогу. Но тут есть и более достойные которые могут подсказать.

 

Управляющие сигналы и контроль открытых позиций производит индикатор. Через глобальные переменные терминала в советник передаются команды об открытии и закрытии позиций. 

Использование индикаторов удобно тем, что их запускается много и паралельно можно видеть работу нескольких логических блоков.

Вопрос. В тестере стратегий индикатор может работать с функцией OrderSelect()OrdersTotal() и т.д.

  
 
AlexeyVik:

Ты имеешь ввиду после копирования массива самого в себя поменять направление индексации? А надо-ли это? Я думаю что никаких проблем не будет копировать с нулевого индекса без последнего и вставлять с первого а нулевой останется или пустым или старым значением, не важно, ведь эта процедура нужна не просто ради копирования, а конкретно для замены одного из значений массива (нулевого или последнего) новым значением. А соответственно после такого копирования "освободившийся" элемент заполняется новым значением. И не важно что в нём оставалось...

По тестеру, если смогу - помогу. Но тут есть и более достойные которые могут подсказать.

Перед копированием и после.
 
Не проверял, но что мешает тебе самому проверить? Просто надо сохранить шаблон со всеми индикаторами под именем советника и тогда при запуске советника в тестере все индикаторы подгрузятся и возможно будут корректно работать. Но не исключено, что будут брать значения из вкладки "Торговля" и "История счёта".
 
kosmos0975:
Перед копированием и после.
Да зачем чесать правое ухо пальцем левой руки? Или ноги... Я сказал только о том, что второй вариант, за ненадобностью, не проверял. А по логике будет работать без проблем.
Причина обращения: