Логотип Парус Инвестора
Парусник
Цена деления цифровой шкалы
Системы и стратегии

Учебник по языку программирования Easy Language
Понятие Массивов

Массивы - это переменные, которые хранят множество значений одновременно. Представляйте себе массив как электронную таблицу, которая имеет предопределенное число ячеек. Например, массив по имени MyArray, который имеет 6 ячеек (которые в массиве называют элементами), похож на электронную таблицу в один столбец.

	0	2
	1	3
	2	5
	3	0
	4	4
	5	3

Массив в примере имеет одно измерение и 6 элементов; Вы можете ссылаться на информацию в массиве, используя одно число. Например, в вышеупомянутом массиве, элемент 1 содержит значение 3, а элемент 2 содержит значение 5.

Однако Вы можете определить массив с множеством измерений. Например, Вы можете определить двумерный массив, который можно представить как строки и столбцы в документе электронной таблицы.


0 1 2 3
0 980301 1400 100.25 1000500
1 980503 1200 105.5 1554000
2 980812 1105 98.75 1238900
3 981209 1015 95.625 2103200
4 990225 1345 101.75 1980300
5 990511 955 103.125 2103700
6 990725 1540 105.375 1600300

В этом случае Вы используете два числа, чтобы сослаться на каждый элемент [строка, столбец]. Например, иллюстрация выше показывает двумерный массив, содержащий 27 элементов. Элемент [1, 0] содержит значение 980503, и элемент [5,2] содержит значение 103.125.

Или, Вы можете определить массив с тремя измерениями, которые мы можем представить похожим на куб, со строками, столбцами, и множеством уровней. Чтобы ссылаться на элемент трехмерного массива, Вы будете использовать три числа (например, элемент [1,0,1]).

Вы можете определить массив с числом измерений до 10. Трудно представить наглядно массив более чем с тремя измерениями, не говоря о 10 измерениях; поэтому просто поймите, что, чтобы сослаться на элемент в 4-мерном массиве, Вы будете должны определить четыре числа (например, элемент [2, 1, 1,3]) а чтобы ссылаться на элемент в 10-мерном массиве, Вы будете должны определить 10 чисел (например, элемент [1, 3, 6, 1, 0, 4, 5, 2, 1, 1]). Числа - это адрес, где сохраняется значение.

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

Массивы используются для многих различных целей, самое обычное их применение - хранить информацию о рыночных условиях в течение анализа ценовых данных, т.е. хранить информацию о том, что случилось в течение предыдущих баров.

Например, Рисунок 2-6 иллюстрирует многомерный массив с четырьмя столбцами и семью строками, который использовался, чтобы хранить информацию о семи различных барах; каждая строка соответствует бару, и каждый столбец соответствует куску информации для того бара (дата, время, цена и объем для каждого бара).

Массивы могут хранить или числовые, истинные/ложные, или текстовые строковые выражения, но они могут только хранить один тип выражения одновременно. Также, значения во всех элементах массива продвигаются от бара к бару.

Обратите внимание: При работе с RadarScreen или OptionStation, где Вы анализируете множество символов одновременно, имейте в виду, что использование массивов увеличивает время обработки и требуемые ресурсы пропорционально количеству анализируемых символов.

При работе с массивами Вы объявляете массив, назначаете значения на элементы массива, и затем ссылаетесь на значения элементов в пределах массива. Как это делается в каждом конкретном случае, обсуждается далее.


Declaring Arrays (Объявление Массивов)

Прежде, чем Вы сможете использовать имя как массив, Вы должны "сказать" EasyLanguage, что это имя должно использоваться как массив - объявить массив(ы). Для объявления массива используется инструкция Array Declaration. Когда Вы объявляете массив, Вы определяете измерение массива (и число элементов в каждом измерении), а также начальные значения для всех элементов.


Синтаксис:

Array: MyArray[M](N);

MyArray - определяемое пользователем имя массива, которое может быть длиной не более 20 символов, , М - число (числа), определяющее размерность массива и количество элементов в каждом измерении, N - начальное значение всех элементов в массиве.

Например, следующая инструкция объявляет одномерный массив с общим количеством элементов - 6:

        Array: MyArray[5](0);

Массив по имени MyArray будет иметь элементы 0,1,2,3,4 и 5. Элементы в этом массиве начнутся со значения ноль (0).

Следующая инструкция Array Declaration объявляет 3-мерный массив с общим количеством 726 элементов:

        Array: MyBigArray[10, 10, 5](0);

Массив MyBigArray будет содержать максимум 726 элементов (11*11*6, и все элементы начнутся со значения ноль (0)).

После объявления размер массива не может быть изменен; безотносительно измерений созданный массив будет постоянным всюду по торговому сигналу EasyLanguage, методике анализа или функции.

Вы не можете использовать константы, переменные или любые другие числовые выражения при определении размера массива в инструкции Array Declaration. Вы должны использовать буквальный числовой ввод (т.е. - число).

Массивы могут содержать все три типа выражений EasyLanguage: числовое, истинное/ложное, и текстовая строка. Чтобы создать массив, который содержит конкретный тип выражения, устанавливают начальное значение элементов, используя желательный тип выражения. Например, чтобы создать массив, который сохраняет ложные значения, Вы может использовать следующую инструкцию Array Declaration:

        Array: MyTFArray[10](False);

Вышеупомянутая инструкция создает отдельный массив с общим количеством 11 элементов, все из которых установлены на начальное значение Ложь. Аналогично, чтобы создать массив, который будет содержать текстовые строковые выражения, Вы может использовать следующую инструкцию:

        Array: MyTextArray[10] ("");


Назначение Значений Элементам в Массиве

Как только Вы объявили ваш массив(ы), Вы можете назначить значения элементам в массиве в любом точке в вашем торговом сигнале, методике анализа или функции.


Синтаксис:

MyArray[M] = EasyLanguage expression;

MyArray - имя массива, М. - числовое выражение, представляющее элемент в массиве, которому Вы назначаете значение выражения EasyLanguage - значение, которое Вы назначаете конкретному (определенному) элементу.

Например, следующая инструкция назначает значение 10 элементу 5 в одномерном массиве по имени MyArray:

        MyArray[5] = 10;

Следующие команды сохраняют цены закрытия и объем для каждого из последних 10 баров в двумерном массиве:

    Array: MyArray[9, 1](0);

     For Value1 = 0 To 9 Begin

MyArray[Value1, 0] = Close[Value1];

MyArray[Value1, 1] = Volume[Value1];

    End;

Циклы часто используются для заполнения массивов. В вышеупомянутых командах объявлен массив по имени MyArray. Это - двумерный числовой массив с общим количеством 20 элементов, все из которых инициализированы с начальным значением 0.

Цикл использует предобъявленную переменную Value1 как переменную управления, и цикл выполняет итерации через команды 10 раз (от 0 до 9). На первой итерации закрытие текущего бара (Close [0]) назначается на MyArray [0,0], а объем текущего бара (Volume[0]) назначается на MyArray [0,1]. Value1 увеличивается на 1 для второй итерации в цикле, и теперь закрытие и объем один бар назад сохраняются в массиве в MyArray [1, 0] и MyArray [1,1] соответственно. Далее эта операция повторяется, цикл выполняет итерации общим количеством 10 раз, и в результате - цены закрытия и объем для текущего и предыдущих 9 баров сохраняются в массиве, для ссылки на них в любое время.


Ссылка на Значения Элементов Массива

Как только Вы объявили массив и назначили значения на элементы в массиве, Вы можете сослаться на значения элементов, используя имя массива и номер элемента вместо числового, истинного/ложного, или текстового строкового выражения.

Например, следующая инструкция назначает значение, содержащееся в элементе 10, числовой переменной Value1:

    Value1 = MyArray[10];

Массивы могут использоваться везде, где может использоваться выражение. Например, Вы можете составить график значений, содержащихся в элементе 0 массива:

    Plot1 (MyArray[0]);

Или, Вы можете использовать истинное/ложное значение элемента в массиве как выражение true/false в инструкции IF-THEN:

    If MyConditionArray[7] Then

{EasyLanguage instruction};

Вы можете также сослаться на предыдущее значение массива. Например, следующая инструкция ссылается на значение, которое элемент 5 массива по имени MyArray содержал 10 баров назад:

    Value1 = MyArray[5][10];

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

Например, индикатор ниже использует цикл, чтобы сослаться на элемент 11 в массиве, который имеет элементы от 0 до 8. Приложение, к которому Вы применяете индикатор, генерирует ошибку во время выполнения программы и выключает индикатор:

    Array: MyArray[8](0);

    For Value1 = 1 To 11 Begin

MyArray[Value1] = Value1;

    End;

Совет: "Работая с Серийными Массивами"

Для оптимизации использования памяти EasyLanguage автоматически определяет, обращаются ли к предшествующему значению любого элемента массива в любом точке в торговом сигнале, методике анализа или функции, и затем, если требуется, хранит исторические значения для массива. EasyLanguage хранит ровно столько хронологии, сколько этого требует установка MaxBarsBack. Например:

Value1 = MyArray[5][10] * 1.05;

Value2 = MyOtherArray[6] - Value1;

Plot1 (Value2);

Индикатор хранит все предшествующие значения MyArray при условии, что на историческое значение массива ссылаются в первой строке. Переменная Value2 и MyOtherArray оба являются простыми, и таким образом исторические значения для этой переменной и массива не сохраняются.

Другими словами, массивы могут быть или серийными или простыми структурами. Это важно, когда Вы хотите обратиться к значениям элементов массива от сторонних языков через DLLs, потому что в зависимости от структуры массива будет сохраняться больше или меньше исторических данных. В этом сценарии, Вы можете вынудить массив быть серийным массивом, ссылаясь на предыдущее значение элемента в массиве в вашем торговом сигнале, методике анализа, или функции (т.е., используя 'фиктивную' инструкцию). Или, если рассматривать работу с функциями - Вы можете вынудить функцию быть серийной функцией. Обратитесь к следующему разделу в этой главе "Понятие Функций Пользователя" на странице 50 для получения дополнительной информации.




Содержание (Contents)
ГЛАВА 1: Введение
Что такое EasyLanguage?
Что Вы можете Создать?
Дополнительные Ресурсы
ГЛАВА 2: Основные Элементы EasyLanguage
Как работает EasyLanguage
О Языке
Ссылка на Ценовые Данные
Выражения и Операторы
Ссылка на Предыдущие Значения
Управление Датами и Временем
Использование Переменных
Использование Констант
Управляющие структуры EasyLanguage
Запись Предупреждений
Понятие Массивов
Понятие Функций Пользователя
Методы Вывода
Текстовый Объект на Ценовых Диаграммах
Trendlines на Ценовых Диаграммах
Понятие Полей Данных
Мультимедиа и EasyLanguage
ГЛАВА 3: EasyLanguage для TradeStation
Запись Торговых Сигналов
Механизм Тестирования Торговой Стратегии
Торговые Приказы
Понятие Встроенных Стопов
Запись Индикаторов и Изучений
Запись ShowMe и PaintBar
Запись ProbabilityMap
Запись ActivityBar
ГЛАВА 4: EasyLanguage для RadarScreen
Запись Индикаторов RadarScreen
Запись Индикаторов для Супердиаграмм SE
Определение Доступности Индикаторов
ГЛАВА 5: EasyLanguage для OptionStation
Анализ данных OptionStation
Чтение Данных OptionStation
Запись Индикаторов OptionStation
Запись Индикаторов для Супердиаграмм SE
Запись Поиска Стратегий
Запись Моделей OptionStation
Глобальные переменные OptionStation
ГЛАВА 6: EasyLanguage и Другие Языки
Определение Функции DLL
Использование Функций DLLs
Дополнительно О EasyLanguage DLL Extension Kit
ПРИЛОЖЕНИЕ 1. Синтаксические ошибки EasyLanguage
61 - 223
224 - 307
308 - 569
ПРИЛОЖЕНИЕ 2. Цвета, Размеры и Коды EasyLanguage




На правах рекламы:
арматура заказать с доставкой