Что такое Массивы и как они используются

Глава 7.

Что такое Массивы и как они используются.

 

Ранее, когда мы упоминали переменную, мы ассоциировали определенное имя со значением. Значение может изменяться, предыдущие значения будут замещаться новыми, но в любом случае, переменной может быть присвоено только одно значение. Иногда может быть необходимо сохранить значения в тот момент, когда они были получены.

Это позволяет сделать Массив Переменных.

Массив – это особый вид переменной. Есть два основных различия между массивом и переменной:

  1. Массиву необходима своя собственная строка объявления, в то время как числовые и условные переменные могут объявляться в одной и той же строке Variables:
  2. Массив может содержать от 1 до 16.000 элементов одновременно. Числовые и условные переменные могут содержать одновременно только один элемент.

Синтаксис массива:

ARRAY: MyArray[ x ]( i );

Где…

  1. х – соответствует числу элементов в массиве, и i – соответствует числовому значению или true-false значению, с которого эти элементы будут инициализированы.
  2. х и i должны быть записаны, как обычные цифры. Inputs и переменные не могут заменить х и i.
  3. Каждый элемент имеет цифровой индекс от 0 до х.
  4. Вы получите сообщение об ошибке (Out of bounds), если попытаетесь использовать цифровой индекс меньше 0 или больше х.

Пример1.

INPUTS: Price(Close), Length(10);

VARS: x(0), y(0), TgtNum(0), EntDay(),ValHit(FALSE);

ARRAYS: TgtArray[100](0),DayArray[50](),TFArray[75](FALSE);

Массив TgtArray это переменная, которая содержит 101 числовой элемент и эти элементы все инициализируются с 0. Почему 101? Первый элемент массива всегда имеет индекс 0, таким образом, массив TgtArray вмещает от 0 до 100, т.е. 101 элемент.

Массив DayArray (Дневной массив) вмещает 51 строковый элемент и массив TFArray вмещает 75 элементов типа переменной True-False.

Пример2.

x = 1;

y = x;

IF DayOfWeek(Date) = x THEN DayArray[0] = Monday;

IF DayArray[y-1] <> THEN DayArray[y] = DayArray[y-1];

В первых двух строчках Примера2, числовые переменные х и у были установлены равными 1. Третья строчка кода устанавливает, что если функция DayOfWeek (день недели) для даты Date равна х (в этом случае числу 1 – первый день недели), тогда в массиве DayArray, в элементе номер 0, сохраняется значение Monday (понедельник). Четвертая строчка кода устанавливает, что если элемент массива DayArray под номером [y-1] (в этом случае 0) не содержит пустую строку (элемент не пустой), то элементу массива под номером у присваивается значение элемента массива под номером [y-1].

Массивы могут быть также привязаны к рядам данных, например:

Array : MyArray[20] (0,Data2);

В данном случае, массив состоит из 21 элемента, начинающихся с 0 и содержащих информацию ценового ряда Data2.

 

 

Что такое циклы и как они используются.

 

Циклы (Loop statements) автоматически повторяют вычислительные операции, которые необходимо повторять, либо определенное количество раз (For Loop), либо пока не произойдет (или не прекратится) какое-либо событие (While Loop).

For Loop – предсказуем, т.к. пользователь устанавливает количество раз повторения какой-либо операции.

While Loop – непредсказуем, т.к. он будет выполняться, пока верно установленное условие.

Пользователи TradeStation обычно пишут большое количество различных сигналов, от простых до сложных. Системы могут быть длиной от нескольких слов, до нескольких страниц. Следующие команды предназначены для более продвинутых пользователей, т.к. средствами TradeStation могут быть написаны сигналы виртуально неограниченной сложности.

 

For Loop.

Команда For показывает, что набор операций будет выполняться несколько раз, пока ряд значений для переменной не будет получен. Ряд переменной может быть восходящим (To) или нисходящим (DownTo) к последнему значению.

Пример #1:

For Value1 = 0 TO 10 BEGIN

^ ^ ^

1 2 3

END;

Пример #2:

For Value1 = 10 DOWNTO 0 BEGIN

^ ^ ^

1 2 3

END;

Где: 1 = контрольная переменная, 2 = начальное значение, 3 = последнее значение.

 

Если начальное значение больше последнего значения, при использовании То, или если начальное значение меньше, чем конечное значение при использовании DownTo, тогда весь набор инструкций не выполняется совсем.

При завершении команды For, контрольная переменная равна конечному значению.

Команда For является очень важной, т.к. она позволяет повторять набор инструкций определенное количество раз в рамках одного сигнала. Это повторение может иметь большое значение, если, например, сигнал был написан с использованием второго наибольшего High последних 10-ти баров. Рисунок внизу содержит пример, который вычисляет скользящую среднюю цены закрытия 10 баров.

Пример цикла For.

 

 

While Loop

Другой тип циклов – это команда While. Если цикл For выполняется заранее определенное количество раз, то цикл While продолжает выполняться, пока некоторое условие верно. Формат команды While следующий:

WHILE <condition> BEGIN

Any valid statements can go here

Рисунок внизу использует тот же пример вычислений, но записан в виде цикла While: Пример цикла While.