Omega Research ProSuite - Учебник по языку программирования EasyLanguage

Учебник по языку программирования EasyLanguage для Omega Research Prosuite

Эта книга - полный справочник для EasyLanguage. В ней подробно объясняются возможности языка и его структура с использованием примеров для иллюстрации концепций и синтаксиса.

Эта книга охватывает главные базисные элементы EasyLanguage для приложений Omega Research Prosuite - TradeStation, RadarScreen, и OptionStation.

Эта книга раскрывает концепции EasyLanguage в контексте приложений, но не обеспечивает процедурную информацию относительно использования EasyLanguage PowerEditor или приложений TradeStation. Все процедурные команды описаны в Интерактивном Пользовательском Руководстве.

Приложения в конце книги содержат два полезных справочника: справочник зарезервированных слов и синтаксические ошибки EasyLanguage. Справочник зарезервированных слов представляет собой полный список зарезервированных слов EasyLanguage, перечисленных в алфавитном порядке. Список синтаксических ошибок - полный список синтаксических ошибок, генерируемых PowerEditor, перечисленных в соответствии с номером ошибки. Этот справочник будет полезен Вам при улаживании конфликтов EasyLanguage.

Содержание:

Введение в EasyLanguage

Что такое EasyLanguage?

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

Проще говоря, TradeStation, RadarScreen, или OptionStation читают ваши инструкции EasyLanguage, оценивают их на основании ценовых данных, которые были собраны, и исполняют указанные (назначенные) действия.

Что Вы можете Создать?

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

Типы инструментов торговых и технических средств анализа, которые Вы можете создать для каждого из приложений TradeStation:

TradeStation

Индикаторы (на основе диаграммы)

ShowMe Изучения

PaintBar Изучения

ActivityBar Изучения

ProbabilityMap Изучения

Торговые Сигналы (для формирования Торговой Стратегии)

Функции

RadarScreen

Индикаторы (на основе таблицы)

Функции

OptionStation

Индикаторы (на основе таблицы)

Стратегии Поиска

Ценовые Модели

Модели Волатильности

Модели Предложения/Спроса

Функции

SuperCharts SE (супердиаграммы) (включены в RadarScreen и OptionStation)

Индикаторы (на основе диаграммы)

TradeStation может хранить 1 000 изучений ActivityBar, 1 000 функций, 1 000 торговых сигналов и торговых стратегий и 1 000 индикаторов, ShowMe изучений, PaintBar изучений, ProbabilityMap изучений, стратегий поиска и моделей (комбинированных). Помните это ограничение при создании ваших торговых сигналов торговли, методов анализа и функций.

Дополнительные Ресурсы

Для уменьшения ваших трудозатрат при работе с EasyLanguage, TradeStation предлагает следующие образовательные ресурсы поддержки:

Изучение Учебника EasyLanguage

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

EasyLanguage Центр Поддержки

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

EasyLanguage - О языке

Есть некоторые основные элементы в EasyLanguage, которые применяются независимо от того, какой тип торговли или технический инструмент анализа Вы описываете; Вы будете использовать эти элементы всякий раз, когда Вы работаете с EasyLanguage. Как только мы освоим эти основы, мы перейдем к специальным записям EasyLanguage - торговые сигналы, индикаторы, изучения, поиск стратегий, модели и функции. Инструкции Инструкция EasyLanguage представляет собой законченную команду. Инструкции могут содержать зарезервированные слова, операторы и знаки препинания, и всегда заканчиваются точкой с запятой. Например:

Buy 100 Shares on the Next Bar at 100 Stop;

Зарезервированные слова Основной словарь EasyLanguage состоит из набора предопределенных слов, которые мы называем зарезервированными словами. Каждое из зарезервированных слов имеет определенное значение или цель; например, отобразить значения или создать объекты в окне, исполнить торговое действие или оценить и управлять данными. При прохождении каждой темы мы будем вводить и описывать зарезервированные слова, необходимые для практического использования EasyLanguage. Операторы Операторы - символы, которые представляют операцию. Например, знак "плюс" - оператор, представляющий суммирование двух значений. Есть много различных видов операторов, доступных для использования в EasyLanguage: математических, относительных, строковых и логических. Они описаны подробно в, "Выражения и Операторы, " на странице 12. Знаки препинания Есть множество знаков препинания, которые Вы будете часто использовать в записях EasyLanguage для обработки инструкции, определения параметров, разграничения слов и установления структурного порядка. Например, EasyLanguage использует точку с запятой (;) для того, чтобы отмечать окончание каждой инструкции. Знаки препинания считаются зарезервированными словами, потому что они - часть структуры языка. Следующие знаки препинания применяются в EasyLanguage:
Вы найдете примеры использования знаков препинания повсюду в этой книге. Ссылка на Ценовые Данные Основная цель любой торговли или технического инструмента анализа состоит в том, чтобы оценить ценовые данные. Поэтому, EasyLanguage обеспечивает набор зарезервированных слов, чтобы обратиться к ценовым данным, доступным для каждого бара. Эти зарезервированные слова соответствуют обычным формулировкам, используемым в каждодневной торговле (например, Open, High, Low, Close, Volume). Следующая таблица перечисляет зарезервированные слова, которые обыкновенно относятся к ценам и другим данным бара, наряду с сокращениями, которые Вы можете использовать вместо слов:
Число операций с ценой ниже, чем цена предыдущей операции, или неизменной после падения Вы можете использовать любые из этих зарезервированных слов в ваших торговых сигналах, методах анализа и функциях, чтобы обратиться к информации относительно текущего оцениваемого бара. Помните, что торговые сигналы, методы анализа и функции вычисляются для каждого бара, от наиболее старого до текущего, и результаты получаются для каждого бара. Однако, принимая во внимание, что торговые решениями редко принимаются на основании ценовой информации одного бара , EasyLanguage облегчит получение ценовых данных от любого бара, предшествующего текущему бару, путем добавления модификатора после соответствующего зарезервированного слова. Для получения детального описания этого модификатора обратитесь к разделу "Ссылки на Предыдущие Значения" на странице 17. Опускаемые (Пропускаемые) Слова Есть подмножество зарезервированных слов, называемых опускаемыми словами. Опускаемые слова - дополнительные слова, которые могут быть включены в любую инструкцию для создания более легкой для чтения инструкции. Опускаемые слова не имеют никакого значения и фактически "пропускаются" EasyLanguage при вычислении торгового сигнала, методики анализа или функции. Далее - список опускаемых слов EasyLanguage.
Для изучения примеров использования опускаемых слов, обратитесь к Приложению C, "Справочник Зарезервированных слов".

EasyLanguage - Ценовые диаграммы и таблицы

EasyLanguage - язык промышленного стандарта, используемый для описания торговых идей, и также это - один из самых мощных и универсальных инструментов, используемый торговцами по всему миру. Как же он работает? Эта глава отвечает на этот вопрос, и знакомит Вас с синтаксисом, грамматикой, управляющими структурами и общими понятиями (концепциями), которые являются основой EasyLanguage. В этой главе обсуждается, как EasyLanguage исполняет вычисления, и дает Вам фундамент для начала работы в приложениях TradeStation - TradeStation, OptionStation или RadarScreen. Независимо от стиля торговли или технического инструмента анализа, которые Вы пишете - индикатор, торговый сигнал, поиск стратегии, и т.д. - на первом этапе необходимо понять, как EasyLanguage производит вычисления. EasyLanguage и Ценовые Диаграммы Ценовая диаграмма обычно состоит из множества баров, сформированных из ценовых данных, связанных с указанным торговым инструментом. Каждый бар суммирует цены за интервал торговли - обычно период времени типа пяти минут или один день - и включает значения типа open (цена открытия), high (максимум), low (минимум) and closing (цена закрытия) в течение этого периода. Другие данные бара, такие как дата и время закрытия бара, объем и открытый интерес также доступны для каждого бара. Одним из основных предназначений EasyLanguage является оценка ценовых данных одного бара и сравнение с данными других баров; поэтому важно понять, как EasyLanguage, обрабатывая торговый сигнал, методику анализа (т.е., индикатор, поиск стратегии или модели) или функцию, оценивает ценовые данные на ценовой диаграмме и выполняет их анализ. Давайте рассмотрим простой торговый сигнал:

If the Close > High of 1 Bar Ago Then Buy at Market;

Эта простая инструкция дает команду EasyLanguage сравнивать цену закрытия одного бара с максимальной ценой предыдущего, и генерировать ордер на покупку на открытии следующего бара, когда закрытие больше предшествующий максимум. Это сравнение производится по цене закрытия каждого текущего бара на диаграмме каждый раз по отношению к максимальной цене предыдущего бара. Предположим, что Вы включили вышеупомянутый торговый сигнал в торговую стратегию, которую Вы применили к диаграмме. Даже притом, что ваша торговая стратегия применена к диаграмме, заполненной многими различными барами, информация, которая оценивается для каждого бара - всегда одна и та же (то есть, цена закрытия, объем, максимальная цена, и т.д.). Помните, диаграмма - визуальное представление некоторого периода торговли в хронологическом порядке, где индивидуальные бары представляют дискретные интервалы торговли. Чтобы оценить диаграмму, EasyLanguage просчитывает ценовые данные в направлении от самого первого бара в диаграмме к самому последнему бару на диаграмме. В терминах вашего торгового сигнала, методики анализа, или функции, оцениваемый бар рассматривается (считается) текущим баром (таким образом, в некоторый момент, каждый бар на диаграмме является текущим баром). Инструкции EasyLanguage в вашей процедуре всегда рассчитываются относительно текущего бара. Допустим, что на диаграмме один бар и нет никаких предыдущих баров, так что вычисление в примере выше не может быть выполнено. Таким образом, торговая стратегия должна была бы ждать до второго бара диаграммы, чтобы корректно исполнить вычисление. Это называют "максимальным количеством баров, необходимых для вычислений" или MaxBarsBack. Это понятие подробно обсуждено на странице 18. Когда все вычисления по вашей инструкции сделаны для текущего бара, EasyLanguage выполняет один шаг вперед к следующему бару на диаграмме, делая это бар текущим, и снова выполняет на нем все вычисления по вашей инструкции. Как правило, торговый сигнал, методика анализа или функция включают множество команд, каждая из которых может привести к активному действию; например, индикатор отобразит некоторое значение, и торговый сигнал сгенерирует ордер на покупку или продажу. Как только все команды EasyLanguage обработаны для текущего бара, читаются ценовые данные следующего бара, и все команды выполняются на основании новых цен. Это происходит вдоль диаграммы слева направо, пока все бары диаграммы не просчитаны и проанализированы.
Рисунок 2-1. Оценка баров от первого к последнему слева направо

Даже притом, что команды EasyLanguage пока что вам не понятны, важно отчетливо понять и помнить, что каждая команда выполняется, от первой строчки до последней, для каждого бара диаграммы в отдельности по одному. EasyLanguage и Таблицы Вы можете также применить индикаторы к табличным окнам, таким как RadarScreen и Окнам Анализа Позиции OptionStation. При размышлении о методах анализа на ценовых диаграммах, мы думаем в терминах анализа прошлых данных, чтобы отобразить информацию о текущем рынке; применение индикаторов к таблицам не имеет никаких отличий. Таблица позволяет нам анализировать и рассматривать результаты множества торговых инструментов одновременно. Как и с ценовыми диаграммами, прошлые значения доступны для анализа. Например, 10-барное скользящее среднее будет готово к закрытию последних 10 баров в любом окне таблицы. Поскольку цель табличных приложений состоит в том, чтобы анализировать одновременно множество торговых инструментов, они оптимизированы так, чтобы по необходимости использовать небольшие объемы данных (для экономии памяти и увеличения скорости вычислений). Остановимся на этом сложном понятии. Когда индикатор применяется к таблице, EasyLanguage определяет максимальное количество баров, ссылаясь на которые должен вычисляться индикатор, и передает это количество в приложение (то есть, RadarScreen или OptionStation). Приложение тогда получает по мере необходимости такое количество данных, чтобы корректно исполнить вычисления индикатора EasyLanguage. Но опять же, важно помнить, что приложение только получит данные в количестве, достаточном, чтобы вычислить результат индикатора, для самого последнего бара торгового инструмента. Так, если индикатор 10-барного скользящего среднего применен к RadarScreen, RadarScreen загрузит ценовые данные 10 баров для каждого символа на странице, и вычислит 10-барное среднее для каждого символа только для последнего бара. Этот метод работает очень хорошо для большинства индикаторов, но подразумевается, что, если Вы вычисляете совокупный или рекурсивный индикатор (т.е. тот, который использует для вычисления текущего значения предыдущие значения индикатора), Вы не будете получать те же самые результаты в таблице, которые были бы на ценовой диаграмме. Простой пример, который иллюстрирует этот пункт - индикатор, который выводит общее количество объема. Если Вы применяете этот индикатор к ценовой диаграмме c годовыми барами, Вы закончите ежегодным объемом торговли, тогда как, если Вы применяете этот индикатор к таблице с дневными данными, Вы закончите ежедневным объемом торговли. В связи с этим есть установка в диалоговом окне Format для всех индикаторов, применяемых к таблицам, которая позволяет Вам определять, сколько дополнительных баров необходимо использовать при вычислении каждого специфического индикатора. Эта установка находится на вкладке General в окне форматирования индикатора, и называется Загрузкой дополнительных данных для кумулятивных вычислений (Load additional data for accumulative calculations) (Рисунок 2-2).
Рисунок 2-2. Загрузка дополнительных данных для накапливаемых вычислений

Когда определенное для этой установки количество отлично от нуля, в таблицу при необходимости загрузится такое количество баров, чтобы вычислить индикатор, плюс количество баров, указанное этой установкой. Тогда индикатор будет вычислен для каждого из этих баров, начиная с самого старого бара и двигаясь к текущему бару, и отобразит самое последнее значение индикатора. Другой, более сложный, пример того, где эта установка необходима - Индикатор Распределения Накопления (Accumulation Distribution Indicator). Инструкции EasyLanguage для этого индикатора читаются следующим образом: Если закрытие текущего бара больше чем закрытие предыдущего бара, то добавить объем к имеющемуся общему объему. В противном случае вычесть объем из имеющегося общего объема. Отобразить результат на каждом баре. Для этого индикатора, чтобы вычислить и вернуть значение, требуются данные текущего бара и данные один бар назад (чтобы выяснить положение текущего бара относительно предыдущего); то есть, требуются данные двух баров. Когда этот индикатор применен к таблице без загрузки дополнительных данных, то загружается два бара данных и сравнивается текущее закрытие с закрытием один бар назад, и отображается объем текущего бара как положительное или отрицательное число. Для того чтобы вычислить значение индикатора, как это было бы с теми же самыми данными на ценовой диаграмме, желательное количество баров для расчетов должно быть определено в установке Загрузка дополнительных данных для накапливаемых вычислений (Load additional data for accumulative calculations), иллюстрированной на Рисунке 2-2.

EasyLanguage - Выражения и Операторы

Выражение - любая комбинация зарезервированных слов и операторов, которые возвращают значение. Значение может быть трех типов: Поскольку Вы работаете с EasyLanguage, Вы будете использовать все три типа выражений для создания ваших процедур. Числовые выражения могут быть буквальными; другими словами - числами. Или, они могут быть зарезервированным словом, которое возвращает числовое значение; например, Close. Далее - примеры числовых выражений.

15

Volume

(High + Low) / 2

Выражения типа True/false могут принимать значения True или False. Выражения True/false неизменно включаются в сравнения. Следующее выражение - выражение типа true/false; его значение вычисляется как True или False:

Close > Open

Выражение Текстовая строка - любые символы, заключенные в кавычки. Далее - пример Текстовой строки:

"This is some text"

Операторы EasyLanguage обеспечивает разнообразие операторов, которые дают возможность Вам управлять зарезервированными словами и значениями для создания более сложных числовых, true/false и/или текстовых выражений. Четыре различных типа операторов, доступных в EasyLanguage являются строковыми, математическими, относительными и логическими. Каждый из них описан ниже. Строковый Оператор Есть только один доступный оператор, чтобы управлять текстовыми строковыми выражениями, и его цель состоит в том, чтобы связать два текстовых строковых выражения. Используемый символ - знак "плюс" (+) и используется он следующим образом:

"This is expression 1" + "and this is expression 2"

Результатом будет одно текстовое строковое выражение со значением, "This is expression 1 and this is expression 2". Математические Операторы Эти операторы используются для выполнения математических операций. Пять математических операторов:
Эти операторы всегда выполняются в определенном порядке. Сначала выполняется деление и умножение, затем сложение и вычитание. Если есть более чем один оператор деления и/или умножения (или сложения и/или вычитание), то они выполняются слева направо. Например, числовое выражение:

High + 2 * Range / 2

... во-первых, умножит ранг (диапазон) бара на два, затем будет делить полученное значение на два. Далее прибавит результат к максимуму. Чтобы найти середину бара, Вы могли бы записать следующее числовое выражение:

High + Low / 2

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

(High + Low) / 2

Это выражение вычислит сумму максимума и минимума, и полученное значение затем разделит на два. Совет: "Деление на ноль" Всякий раз, когда EasyLanguage находит признак операции деления, производится внутренняя проверка, чтобы гарантировать, что торговый сигнал, методика анализа, или функция не делают попытку деления на ноль. Чтобы увеличить скорость обработки вашего торгового сигнала, метода анализа или функции, при делении на число, - используйте умножение вместо деления. Это позволяет EasyLanguage пропускать проверку деления на нуль. Например, при вычислении середины бара, Вы можете записать:

(High + Low) / 2

Учитывая, что при операции деления производится проверка деления на ноль, мы можем использовать следующее выражение, чтобы увеличить скорость того же самого вычисления:

(High + Low) * 0.5

Операторы отношения Операторы отношения допускают следующие стандартные сравнения: больше чем, меньше чем, равняются, больше чем или равняются, меньше чем или равняются, не равняются. EasyLanguage также предлагает два специфических оператора, пересекает снизу (crosses over) и пересекается сверху (crosses under), которые дают возможность Вам идентифицировать бар, на котором два числовых выражения пересекаются. Операторы отношения, доступные в EasyLanguage:
Используя эти операторы отношения, Вы можете сравнить два числовых или текстовых строковых выражения. Например, следующее выражение находит бар, который закрылся выше, чем максимум один бар назад:

Close > High of 1 bar ago

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

"abcd" < "zyxw"

Первый символ первого текстового строкового выражения сравнивается с первым символом второго выражения. Символ "a" имеет меньшее значение ASCII, чем "z", и т.д., так что это выражение возвращает значение "ИСТИННО". Логические операторы Логические операторы используются, чтобы объединить два выражения типа true/false в одно. Есть два логических оператора:
AND используется, когда оба выражения true/false должны быть истинны; OR используется, когда или один или оба из этих двух выражений должны быть истинны. Ниже - таблица, которая показывает возможные результаты применения AND и OR:
Как видно из таблиц, использование OR увеличивает вероятность истинности конечного выражения, поскольку только одно из двух выражений должно быть истинным для того, чтобы было истинным конечное выражение. Могут быть написаны и более сложные выражения true/false с использованием логических операторов. Например, чтобы найти ключевой бар разворота тренда, Вы можете использовать следующее выражение:

Low < Low of 1 bar ago AND Close > High of 1 bar ago

Учитывая, что мы используем AND, это выражение истинно только тогда, когда оба условных выражения истинны, т.е. минимум текущего бара ниже, чем минимум предыдущего бара, И закрытие текущего бара больше чем максимум один бар назад. Вот другой пример - Вы можете использовать следующее выражения, чтобы искать акции с ценой равной или большей чем 50$ ИЛИ имеют торговый объем более чем два миллиона акций:

Close >= 50 OR Volume > 2000000

Учитывая, что мы использовали ИЛИ, вышеупомянутое выражение будет истинно, когда или цена закрытия больше чем 50, ИЛИ объем больше чем два миллиона. Оно будет ложным, если цена закрытия менее 50, И объем менее двух миллионов. Когда Вы используете OR и AND в выражении, EasyLanguage вычисляет их в порядке, в котором они появляются, слева направо. В случае необходимости, используя круглые скобки к группам выражений, Вы можете изменить порядок, в котором EasyLanguage вычисляет выражения. Например, предположим, что Вы пишите индикатор и хотите найти: ИЛИ ключевой бар разворота с объемом больше чем объем предыдущего бара, ИЛИ бар с рангом больше предыдущего. Вы можете записать все это одним выражением, используя AND, OR и круглые скобки. Часть, подсвеченная в полутоне, находит ключевой разворот с объемом больше чем на предыдущем баре, а вторая часть выражения находит внешний бар. Обратите внимание на размещение круглых скобок:

(Low < Low[1] AND Close > High[1] AND Volume > Volume[1]) OR (High > High[1] AND Low < Low[1])

Обратите внимание, что вместо того, чтобы выписывать "один бар назад ", мы использовали стенографию [1]. См. следующий раздел, "Ссылка на Предыдущие Значения" для получения дополнительной информации. Совет: "Запись Условных Выражений" EasyLanguage оптимизирован для скорости, и одна оптимизация касается вычисления выражений типа true/false, которые включают в себя логические операторы. Когда выражение вычисляется, и по результатам вычисления первой части (в независимости от результата вычисления второй части) определено ясно, что полное выражение является ложным (или истинным), остаток от выражения не вычисляется. Например, в следующем выражении:

5 < 4 AND Close > Open

Поскольку выражение 5<4 является ложным, и мы используем оператор AND, EasyLanguage не будет вычислять вторую половину выражения, потому что независимо от результата этой второй части, результат полного выражения FALSE. Точно так же, если мы имеем выражение:

5 > 4 OR Close > Open

Вторая половина выражения не будет вычислена, потому что выражение 5>4 всегда истинно, и мы используем оператор OR. Поэтому, независимо от результата второй половины операции, результат полного выражения TRUE. Поэтому, чтобы записать торговый сигнал, метод анализа или функцию максимально эффективно, размещают в выражении вначале критерий, накладывающий наибольшие ограничения на выражение.

EasyLanguage - Ссылка на предыдущие значения

Вы можете ссылаться на значение выражения для любого предыдущего бара, добавляя любой из двух спецификаторов указанных ниже, употребляя их после выражения: of N bars ago [N] N - количество баров назад. Например, рассмотрим следующее выражение EasyLanguage:

Low of 1 bar ago

Это выражение ссылается на минимальную цену предыдущего бара. Ссылка делается относительно текущего бара (бар, вычисляемый в текущий момент времени). Например, если ваш торговый сигнал, методика анализа или функция вычисляются для 12-ого бара диаграммы, следующее выражение обращается к торговому объему 9-ого бара, или 3 бара назад от текущего бара:

Volume of 3 bars ago

Дополнительный способ для обращения к данным предыдущего бара состоит в том, чтобы включить номер N между квадратными фигурными скобками после зарезервированного слова, константы или переменной, где N - количество баров назад. Например, следующее выражение ссылается на цену открытия 2 бара назад:

Open[2]

Имейте в виду, что при разговоре о торговых сигналах, методах анализа или функциях мы всегда обращаемся к барам; все торговые сигналы, методы анализа и функции основаны на барах, а не на днях, минутах и тиках. Это позволяет производить дневной, минутный или даже тиковый анализ без модификации диаграммы. Например, индикатор 10-барного среднего вычислит 10-дневное среднее при применении к ежедневной диаграмме, или 10-минутное среднее, если применить индикатор к 1-минутной диаграмме, или 10-тиковое среднее на 1-тиковой диаграмме. Ссылка на Максимальное Количество Баров для Изучения, или MaxBarsBack Все торговые сигналы, методы анализа и функции, которые обращаются к прошлым данным, должны будут ожидать некоторое количество баров, прежде чем смогут начать выполнять вычисления. Этот период ожидания может быть откорректирован для любой методики анализа, и это называют Ссылкой на Максимальное количество баров для изучения, или MaxBarsBack. Это понятие лучше всего объясняется через пример. Давайте используем Индикатор Темпа (Движущей силы), который представляет собой график разности между любой ценой текущего бара и той же самой цены N баров назад. Используя 10, как количество баров назад и продвигаясь вперед от начала диаграммы, мы увидим, что не можем вычислить этот индикатор, пока не имеем 10 баров данных на диаграмме. Индикатор начнет показывать результаты на 10-ом баре. Почему, потому что не может обратиться к ценам предыдущих 10 баров, как показано на Рисунке 2-3.
Рисунок 2-3. Индикатор импульса, ожидающий 10 баров перед возвращением значения
Для табличных приложений, установка MaxBarsBack - количество баров, указываемое для каждого символа, необходимых для выполнения вычисления индикатора и отображения его текущего значения. Например, предположим, что Вы вставляете Индикатор Импульса (Движущей силы) в окно RadarScreen. Этот индикатор сравнивает текущий бар с баром 10 баров назад. Поэтому, установка MaxBarsBack для индикатора - 10, и 10 баров данных будут загружены для каждого символа в окне RadarScreen. Обратитесь к разделу этой главы "Как вычисляет EasyLanguage" на странице 6 для информации относительно того, как EasyLanguage выполняет вычисления. Совет: "Понимание Циклического Автоматического детектирования" Когда Вы применяете стратегию торговли или методику анализа к ценовой диаграмме и используете установку Автоматическое Детектирование (Auto-Detect) MaxBarsBack, приложение ищет наибольшее смещение данных (временное), используемое в соответствии с торговой стратегией или методикой анализа, и использует это число для установки MaxBarsBack. Однако если торговая стратегия или методика анализа используют смещение переменной (например, Close [Value1]), то возможно, что значения, первоначально выбранного приложением, не будет достаточно, чтобы применить торговую стратегию или методику анализа ко всем данным на диаграмме. Например, индикатор применен к диаграмме, и приложение первоначально решает, что максимальное смещение - 5. Затем приложение вычисляет индикатор на диаграмме и решает, что методика анализа фактически требует, чтобы 25 баров учитывались при ее вычислении, так что приложение удаляет методику анализа из диаграммы, и применяет ее во второй раз с установкой -25. Этот процесс повторяется, пока индикатор не будет удален с диаграммы. Неправильное определение MaxBarsBack может заставить инструкции Print и другие средства отладки, такие как запросы DLL, быть выполненными неоднократно (циклично) для первых баров диаграммы после применения к диаграмме торговой стратегии или методики анализа. Чтобы избежать такого явления, Вы будете должны изменить MaxBarsBack в установках, Определяемых пользователем (User-defined). Для информации о параметрах настройки Auto-Detect и User-defined, см. Интерактивное Руководство Пользователя .

EasyLanguage - Управление датами и временем

Вы будете часто использовать даты и время при написании ваших торговых сигналов, методов анализа и функций. В этом разделе рассматривается, как работать с датами и временем. Работа с Датами Даты в EasyLanguage представлены как числовое выражение в форме YYYMMDD, где YYY - годы с 1900, ММ - месяц из 2 цифр, а DD соответствует дню месяца. Например, дата EasyLanguage представляющая 17 декабря 1999 - 991217, тогда как 13 января 2000 записывается как 1000113. Одно из преимуществ представления дат как числовых выражений - то, что это позволяет сравнивать даты. Например, 1000113 больше (то есть, это - более поздняя дата) чем 991217, и следующее сравнение вычисляется как Истина: 1000113 > 991217. Второй способ представлять даты в EasyLanguage - Юлианские Даты. Юлианская система Дат назначает дату с номером n, и следующий календарный день имеет Юлианскую дату n+1 (все календарные дни, а не только торговые дни). Юлианская система Дат начинается на 1 января 1900, которому назначен номер 2. 2 января 1900 соответствует номер 3, 31 декабря 1999 - 36 525, и 1 января 2000 - 36 526, и т.д. Это позволяет нам выполнять математические вычисления с датами - типа прибавления и вычитания, не имея причин волноваться о 'переворачивании' месяцев и лет. Например, если мы имеем в EasyLanguage дату 991013 (13 октября 1999), и мы хотим найти дату 20-ю днями ранее, мы может (неправильно) попробовать вычесть 20 из даты: 991013 - 20 Однако мы получили бы 990993, что - недопустимая дата EasyLanguage. Вместо этого, мы можем вычесть 20 из Юлианского эквивалента даты: 36,446 - 20 В результате получается 36 426, что является правильным, потому что это - Юлианская Дата, которая соответствует 23 сентября 1999. Мы строго рекомендуем Вам использовать зарезервированные слова Date или ELDate при обращении к дате. Это будет гарантировать совместимость независимо от любых будущих изменений в формате даты. Зарезервированные слова, которые позволят Вам ссылаться на даты, перечислены ниже. Date Это зарезервированное слово возвращает числовое выражение, представляющее дату EasyLanguage цены закрытия анализируемого бара. Дата - это дата EasyLanguage, то есть - это числовое выражение формы YYYMMDD, где YYY - годы с 1900, ММ - месяц, DD - день месяца. Синтаксис: Date Параметры: Нет. Пример: См. пример для зарезервированного слова ELDate. ELDate(YYYY, MM, DD) Это зарезервированное слово возвращает числовое выражение, представляющее дату EasyLanguage (YYYMMDD) как эквивалент стандартной форме представления даты (YYYY, ММ, DD). Синтаксис: ELDate(YYYY, MM, DD) Параметры: YYYY - числовое выражение с 4 цифрами, представляющее год, ММ - выражение с 2 цифрами, представляющее месяц, и DD - числовое выражение с 2 цифрами, представляющее день месяца. Примечания: Мы строго рекомендуем, чтобы Вы использовали зарезервированные слова Date или ELDate при обращении к дате. Это будет гарантировать совместимость независимо от любых будущих изменений в формате даты. Пример: Чтобы проверить, что дата текущего бара является 17 декабря 1999, Вы можете использовать следующую инструкцию IF-THEN:

If Date = ELDate(1999, 12, 17) Then {EasyLanguage instruction};

DateToJulian(eDate) Это зарезервированное слово возвращает числовое выражение, представляющее Юлианскую дату, как эквивалент указанной дате EasyLanguage. Синтаксис: DateToJulian(eDate) Параметры: eDate - дата EasyLanguage (формат YYYMMDD), которая конвертируется в Юлианскую дату. Пример: Вы можете использовать следующую инструкцию, чтобы получить эквивалент Юлианской даты дате EasyLanguage для текущего бара и представить ее как переменную (в нашем случае Value1): Value1 = DateToJulian(Date); JulianToDate(jDate) Это зарезервированное слово возвращает числовое выражение, представляющее EasyLanguage дату, как эквивалент указанной Юлианской дате. Синтаксис: JulianToDate(jDate) Параметры: jDate - числовое выражение, представляющее Юлианскую дату, которая конвертируется в дату EasyLanguage (формат YYYMMDD). Пример: Следующая инструкция получает Юлианскую дату дня за 20 календарных дней перед датой текущего бара, и конвертирует результат в дату EasyLanguage:

Value1 = JulianToDate(DateToJulian(Date) + 20);

Сначала вычисляется выражение в круглых скобках (зарезервированное слово DateToJulian). То есть, сначала преобразовывается дата текущего бара в Юлианскую дату. Затем, число 20 добавляется к полученной Юлианской Дате. Эта Юлианская дата - параметр для зарезервированного слова JulianToDate, которое конвертирует Юлианскую дату в дату EasyLanguage, в формате YYYMMDD. Эта дата EasyLanguage сохраняется в переменной Value1. CurrentDate Это зарезервированное слово возвращает числовое значение, представляющее дату EasyLanguage (формат YYYMMDD) равную дате и времени вашего компьютера (или времени передачи данных (datafeed), если Вы связаны с datafeed). Синтаксис: CurrentDate Параметры: Нет. Пример: Чтобы торговый сигнал, методика анализа, или функция выполняли вычисления только до 1 января 2000 (или любой другой даты), Вы можете записать:

If CurrentDate < ELDate(2000,01,01) Then Begin {EasyLanguage instruction(s)} End;

Работа со Временем В EasyLanguage, временя представлено как числовое выражение в форме HHMM, где HH - час, и MM - минуты. Часы представляются в так называемом 24-часовом или военном форматом, так что 1:30pm представляется как 1330, а 10:05am - как 1005. Кроме того, когда Вы работаете со временем, упростить математические операции типа сложения и вычитания, Вы можете отсчитывать время как минуты, начиная с полуночи. Например, 1:00am - 60 (60 минут после полночи), и 10:30am - 630 (630 минут после полуночи). Однако, если текущее время - 10:30am (или 1030), и Вы хотите добавить 60 минут к текущему времени, не думайте, что Вы просто добавляете 60 к 1030: 1030 + 60 Делая так и получая в итоге 1090, Вы получите недопустимое значение время. Поэтому, чтобы добавить 60 минут ко времени, используйте минуты после полуночи. Тогда Вы запишете так: 630 + 60 В итоге получится 690. Когда Вы конвертируете это число в 24-часовой формат, результат - 1130, является правильным значением. Зарезервированные слова нужны Вам, чтобы конвертировать время в различные форматы автоматически. Зарезервированные слова, использующие и управляющие временем, перечислены ниже. Time Это зарезервированное слово возвращает числовое выражение, представляющее EasyLanguage время (формат HHMM) цены закрытия текущего бара. Синтаксис: Time Параметры: Нет. Пример: Например, Вы можете записать ваш торговый сигнал, методику анализа или функцию таким образом, чтобы они вычислялись только тогда, когда торговое время меньше чем 11:00am:

If Time < 1100 Then {EasyLanguage instruction};

TimeToMinutes(eTime) Это зарезервированное слово возвращает числовое значение, представляющее количество минут, прошедших с полуночи в течение указанного EasyLanguage времени (формат HHMM) . Синтаксис: TimeToMinutes(eTime) Параметры: eTime - числовое выражение, представляющее EasyLanguage время, которое будет конвертировано в количество минут после полуночи. Пример: Следующая инструкция конвертирует время текущего бара в количество минут после полуночи, и представляет полученное числовое значение как переменную (в нашем случае Value1):

Value1 = TimeToMinutes(Time) ;

MinutesToTime(mTime) Это зарезервированное слово возвращает числовое выражение, представляющее EasyLanguage время (формат HHMM) как эквивалент определенному количеству минут с полуночи. Синтаксис: MinutesToTime(mTime) Параметры: mTime - числовое выражение, представляющее количество минут после полуночи, которое будет конвертировано в эквивалент EasyLanguage время. Пример: Следующая инструкция конвертирует текущее время в минуты, прошедшие после полуночи, добавляет 20 к полученному значению, и затем конвертирует конечную величину в EasyLanguage время:

Value1 = MinutesToTime(TimeToMinutes(Time) + 20);

Сначала вычисляется выражение в пределах круглых скобок (зарезервированное слово TimeToMinutes), т.е. конвертируется время текущего бара в минуты после полночи. Затем 20 добавляется к минутам, прошедшим после полуночи, и полученное значение используется как параметр для зарезервированного слова MinutesToTime, которое конвертирует число в EasyLanguage время (формат HHMM). CurrentTime Это зарезервированное слово возвращает числовое значение, представляющее EasyLanguage время (формат HHMM), соответствующее времени вашего компьютера (или времени получения данных (datafeed), если Вы связаны с datafeed). Синтаксис: CurrentTime Параметры: Нет. Пример: Чтобы торговый сигнал, методика анализа или функция исполнялись только до 2:00pm, Вы должны записать:

If CurrentTime < 1400 Then Begin {EasyLanguage instruction(s)} End;

EasyLanguage - Использование переменных

Переменные - это особые метки, которые хранят значение; как только Вы присваиваете значение переменной, Вы можете ссылаться на это значение всюду по торговому сигналу, методике анализа или функции, используя название (имя) переменной. Вы можете также повторно вычислить значение переменной в пределах процедуры. Определение переменной Вебстером - символ, который может иметь бесконечное количество значений, который является подчиненным, изменяется. Значение, хранимое переменной, может изменяться любое количество раз в процедуре, даже от бара до бара. Основное использование переменной - хранение результата вычисления или сравнения, для того, чтобы можно было обратиться к результату этой операции позже, не повторяя заново вычисление формулы или выражения. Например, в переменной X Вы может хранить значение максимальной цены бара плюс 33 % среднего истинного диапазона. Как только это значение рассчитано и назначено на переменную, нет необходимости писать формулу снова; Вы можете использовать X для того, чтобы обратиться к этому значению. Переменные увеличивают скорость и эффективность выполнения процедуры. Это происходит вследствие того, что приложение не обращается неоднократно к значениям, которые составляют инструкцию (например, цены и другие значения), а выполняет математические операции и сравнения, которые требуются выражением. Поэтому, использование переменных вместо часто используемых выражений, ускоряет процедуру и уменьшает использование памяти. Другой очень важный факт о переменных - то, что значение переменной в конце бара используется как начальное значение переменной для следующего бара. Другими словами, значения всех переменных переносятся от бара к бару, таким образом позволяя более просто манипулировать (управлять) потоком информации. Например, Вы можете использовать переменную, чтобы хранить счетчик количества баров, которые прошли, начиная с некоторого рыночного условия, или количества баров, в продолжение которых Вы были в некоторой рыночной позиции. Например, следующие команды сохраняют счетчик количества баров, начиная с последнего ключевого разворота тренда:

Variable: Counter(-1); If Counter <> -1 Then Counter = Counter + 1; If Low < Low[1] AND Close > High[1] Then Counter = 0;

Переменная Counter (Счетчик) начинается со значения -1 (которое назначается в инструкции Variable Declaration (Объявление Переменной)), и увеличивается на единицу на каждом баре, начиная со значения -1. Этот индикатор изменяет переменную (Counter) от -1 до 0 в первый раз, когда обнаружен ключевой разворот, и впоследствии сбрасывает счетчик к 0 каждый раз, когда находит новый ключевой разворот. Обратите внимание, как команда Counter=Counter+1 назначенная на переменную, заменяет ее текущее значение, и прибавляет единицу. Это не было бы возможно, если переменные не переносили свои значения от бара к бару. Ссылка на переменные позволяет избежать ошибок печати и делает вашу процедуру более четкой. Например, рассмотрим следующую инструкцию:

If Close > High[1] + Average(Range,10) * 0.5 Then Buy Next Bar at High[1] + Average(Range,10) * 0.5 Stop;

Используя переменную (в нашем примере переменная - Value1), мы можем упростить инструкцию:

Value1 = High[1] + Average(Range, 10) * 0.5; If Close > Value1 Then Buy Next Bar at Value1 Stop;

Вторая часть примера намного более удобна для чтения из-за использования переменной. Если Вы собираетесь часто использовать выражение в процедуре, Вы должны объявить его как переменную. Обратите внимание: Если Вы используете выражение очень часто и более чем в одном торговом сигнале или методике анализа, Вы можете создать функцию. Переменные могут использоваться только в процедуре, где они объявлены и не доступны (не передаются) между торговыми сигналами и методами анализа, тогда как на функции можно сослаться в других торговых сигналах и методах анализа, и даже других функциях. Функции подробно рассматриваются далее в этой главе, в Разделе "Понимание Пользовательских Функций" на странице 50. При работе с переменными, Вы объявляете их, назначаете им значения, и далее ссылаетесь на их значения. Как это делается, подробно обсуждается далее. Объявление Переменных Прежде, чем Вы сможете использовать какое-либо имя (название) как переменную, Вы должны "сказать" EasyLanguage, что данное имя должно использоваться как переменная; это известно как объявление переменной(ых). Чтобы объявить переменную, Вы используете инструкцию Variable Declaration. Когда Вы объявляете переменную, Вы также определяете ее тип и начальное значение. Синтаксис: Variable: Name(Value); Имя - это наименование переменной. Имя должно начинаться с символа, и может содержать максимум 20 символов. Имя может содержать символы, числа, черточки, или периоды. Значение - любое числовое, истинное/ложное (true/false), или текстовое строковое значение; это - начальное значение переменной. Вы можете объявить одну или более переменных, используя ту же самую инструкцию, отделяя переменные запятыми. Например, следующая инструкция объявляет три переменные различных типов:

Variables: Number(0), Condition(False), TextSt("Text");

Нет никакого ограничения для количества переменных, которые Вы можете объявить в одной инструкции, хотя, если Вам так удобно, то Вы можете использовать несколько инструкций для объявления переменных. Также нет ограничений для количества инструкций Variable Declaration, которые Вы можете использовать. Такие зарезервированные слова как Var, Vars и Variables - синонимы к Variable и могут использоваться взаимозаменяемо. Например, Вы можете переписать инструкцию выше как:

Vars: Number(0), Condition(False); Var: TextStr("Text");

Значения в круглых скобках имеют два предназначения. Во-первых, они указывают тип переменной, которая может быть: числовой, истинной/ложной или текстовой строкой. Если Вы используете числовое выражение, переменная - числовая переменная; если Вы используете выражение true/false, то это - истинная/ложная переменная; и аналогично, если Вы используете, текстовое строковое выражение, переменная - текстовая строковая переменная. Во-вторых, значение в круглых скобках назначает начальное значение переменной. Как объяснено ранее в этой книге, все команды в EasyLanguage читаются сверху вниз, и они интерпретируются для каждого бара на диаграмме слева направо. Переменная берет значение в круглых скобках как свое начальное значение. Обратите внимание: Для вашего удобства, EasyLanguage обеспечивает множество предобъявленных числовых и истинных/ложных переменных. Вы можете использовать эти переменные в ваших торговых сигналах, методах анализа и функциях, не объявляя их и не устанавливая их начальное значение. Числовые переменные, доступные для Вашего использования - от Value0 до Value99, и их начальное значение - ноль (0). Учтите, что в большинстве наших примеров мы используем Значение 1. Истинные/ложные переменные, доступные для Вашего использования - от Condition0 до Condition99, и их начальное значение является False (Ложным). Нет никаких предобъявленных текстовых строковых переменных. Единственное преимущество для использования предобъявленных переменных состоит в том, что Вы не должны объявлять их. Недостаток - то, что название(я) менее интуитивно понятны, и Вы не можете установить их начальные значения самостоятельно. Назначение Значений Переменным Как только Вы объявили вашу переменную(ые) (или если Вы используете предобъявленную переменную(ые)), Вы можете назначить значения для них по всему торговому сигналу, методике анализа, или функции. Синтаксис: Name = Expression; Имя - наименование переменной, и Expression (Выражение) является или числовым, истинным/ложным, или текстовым строковым выражением. Тип выражения должен соответствовать типу переменной. Если инструкция объявляет значение как числовую переменную, выражение должно быть числовым выражением. Например, следующая инструкция назначает средний истинный диапазон последних 10 баров как переменную Value1:

Value1 = Average(TrueRange, 10);

Следующие инструкции объявляют истинную/ложную переменную по имени KeyReversal, и затем назначают результат сравнения этой переменной:

Variable: KeyReversal(False); KeyReversal = Low < Low[1] AND Close > High[1];

Ссылка на Значение Переменной Как только Вы объявили переменную, и ей было назначено значение, Вы можете ссылаться не это значение, используя имя переменной вместо выражения. Например, следующие инструкции вычисляют цену вход на покупку, объявляют ее как числовую переменную по имени EntryPrc, и затем ссылаются на значение переменной в заказе на покупку:

Variable: EntryPrc(0); EntryPrc = Highest(High, 10); If MarketPosition <> 1 Then Buy Next Bar at EntryPrc Stop;

В следующем примере инструкции вычисляют самый высокий максимум последних 10 баров, сравнивают это с текущим максимумом высоко, и объявляют результат как истинную/ложную переменную по имени Condition1. В этом случае мы используем инструкцию IF-THEN, чтобы определить, истинно ли Condition1, и если так, то затем генерируется сигнал (alert):

Condition1 = High > Highest(High, 10)[1]; If Condition1 Then Alert("New 10-bar high");

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

Condition1 = High < Highest(High, 10)[1] AND Low > Lowest(Low,10)[1]; If Condition1 = False Then Alert("New high or low");

Обычно записывают выражение так, чтобы проверялась истинность выражения; однако, Вам решать каким образом записать выражение или инструкцию. Также возможно обратиться к значению переменной на предыдущем баре; чтобы сделать это, включите после имени переменной в квадратных скобках число. Например, следующие инструкции обращаются к значению переменной по имени EntryPrc пять баров назад:

Variable: EntryPrc(0); EntryPrc = Highest(High, 10); If EntryPrc > EntryPrc[5] Then Buy Next Bar at Entryprc Stop;

Совет: "Работая с Series Variables" EasyLanguage автоматически определяет, происходит ли обращение к предыдущему значению переменной в каком-либо пункте в торговом сигнале, методике анализа или функции и, если необходимо, хранит исторические значения переменной, (и так много, как определено установкой MaxBarsBack). Например, рассмотрим следующий индикатор:

Value1 = Close * 1.05; Value2 = Close - Close[10]; Value3 = Value1[5] + Value2; Plot1(Value3);

На историческое значение Value1 ссылаются в третьей строке (значение пять баров назад); установка MaxBarsBack для индикатора - 10 (так как есть ссылка на закрытие 10 баров назад, и это значение - максимально требуемая история). Поэтому, индикатор будет хранить значения для Value1 для последних 10 баров. Переменные Value2 и Value3 не требуют, чтобы их история сохранялась, и, таким образом, исторические значения этих переменных не сохраняются. Переменная может быть простой или рядом (серией). Когда она представляет серию значений, история сохраняется; когда переменная простая - история не сохраняется. Это свойство переменных становится важным при доступе к значениям переменных от сторонних языков через DLLs, потому что там может и не быть исторических данных, сохраненных для переменной, или храниться не столько данных, сколько желательно сторонним разработчикам. В этом случае Вы можете принудительно объявить переменную как переменную ряда, ссылаясь на предыдущее значение переменной в торговом сигнале, методике анализа или функции (то есть, используя 'фиктивную' инструкцию). Или, Вы можете хотеть рассмотреть работу с функциями; Вы можете вынудить функцию быть функцией ряда. См. раздел настоящей главы, "Понимание Пользовательских Функций"

EasyLanguage - Использование констант

Константы - особые метки, которые содержат значение; Вы можете определить значение константы один раз в начале процедуры и затем ссылаться на это значение везде по торговому сигналу или методике анализа, используя имя константы. Значение константы не может быть изменено в пределах процедуры EasyLanguage; ее значение остается постоянным в продолжение всей процедуры. Преимущество использования констант состоит в том, что Вы можете переопределить значение константы при использовании торговой стратегии или методики анализа. Например, 1-строчный Индикатор Скользящего среднего написан с константой по имени Length, которая является числом баров, которые надо включить в среднее. Этой константе назначено значение по умолчанию 9, но Вы можете заменить это значение на любое число в тот момент, когда Вы применяете индикатор к диаграмме или таблице, имея, таким образом, торговый сигнал, методику анализа или функцию, которые вычисляют скользящее среднее, используя любое количество баров. Константы придают максимальные гибкость и управляемость стратегией торговли или методикой анализа, без необходимости обращаться к EasyLanguage PowerEditor или TradeStation StrategyBuilder. Кроме того, Вы можете использовать одну и ту же процедуру EasyLanguage в окне диаграммы или табличном сетки (или в различных окнах диаграммы или табличных приложениях), используя различные значения констант в каждом из них. Например, Вы можете применить 1-строчный Индикатор Скользящего среднего к диаграмме Microsoft, чтобы вычислить 10-барное среднее, и Вы можете применить тот же самый индикатор к диаграмме IBM , чтобы вычислить 18-барное среднее. Константы позволяют одному и тому же индикатору осуществлять эти различные вычисления; Вы не должны создавать новый индикатор или даже изменять его в EasyLanguage PowerEditor. Другое важное преимущество состоит в том, что, когда Вы используете inputs в ваших торговых сигналах, Вы можете тогда использовать особенности оптимизации TradeStation в вашей торговой стратегии. Для получения информации относительно оптимизации ваших торговых стратегий, обращайтесь к Мастеру Ответов Интерактивного Пользовательского Руководства в раздел "Понятие Оптимизации". Типы Констант Константы могут быть трех типов: числовая, истинная/ложная или текстовая строка. Числовая константа представляет собой числовые значения, истинная/ложная константа представляет собой выражение, которое вычисляется как Истина или Ложь, и текстовые строковые выражения содержат текстовые строки. Константы могут быть буквальными выражениями типа определенного числа или текстовой строки, или они могут быть выражениями, значения которых изменятся от бара к бару; например, константа может быть установлена как значение закрытия бара, и тогда значение константы изменяется с каждым баром. Или, это может быть установлено на диапазон бара, используя функцию Range. Значение константы не может измениться в пределах бара. Чтобы использовать Константы, Вы сначала должны объявить их; как только Вы объявите их, Вы можете ссылаться на них в вашем торговом сигнале или методике анализа. Нет никакого Оператора присваивания для Констант (так как их значение не может быть изменено в пределах процедуры). Объявление Констант Перед использованием любого имени как константы, необходимо указать EasyLanguage, что это имя будет использоваться как константа, или объявить inputs, которую Вы будете использовать. Чтобы сделать так, используйте инструкцию Input Declaration. Синтаксис: Input: Name(value); Name (Имя) - название константы. Имя должно начинаться с символа и может содержать максимум 20 символов. Имя может содержать символы, числа, черточки, или периоды. Value (Значение) - любое числовое, True/False или текстовое строковое значение, которое будет использоваться как значение по умолчанию для константы. Вы можете объявить более чем одну константу, используя ту же самую инструкцию, отделяя inputs запятыми. Например, следующая инструкция Input Declaration объявляет три различных inputs:

Inputs: MyNumber(0), MyCondition(False), MyText("Text");

Нет никаких ограничений для количества inputs, которые Вы можете объявить в одной инструкцией; однако, Вы можете также использовать такое количество инструкций Input Declaration, как Вам удобно. Обратите внимание: зарезервированное слово Inputs - синоним для Input; они могут использоваться взаимозаменяемо. Значение в круглых скобках обслуживает две цели: во-первых, оно определяет тип константы. Если используется числовое выражение, то это - числовая константа; если используется выражение true/false, это - истинная/ложная константа; и, если используется текстовое строковое выражение, константа - текстовая строковая константа. Во-вторых, это значение назначает значение по умолчанию для константы. Значение, указанное для каждой константы может быть изменено, когда Вы применяете или форматируете торговую стратегию или методику анализа. Ссылка на Значение Константы Как только Вы объявили константу, Вы можете сослаться на его значение, просто используя имя константы вместо числового, истинного/ложного или текстового строкового выражения. Например, следующие инструкции вычисляют цену входа в сделку с использованием константы в качестве коэффициента:

Input: Mult(1.3); Variable: EntryPrc(0); EntryPrc = Highest(High,10) * Mult; If MarketPosition <> 1 Then Buy Next Bar at EntryPrc Stop;

Сначала мы объявляем константу (Mult). Затем мы объявляем переменную, которой мы назначаем самую высокую из максимальных цен последних 10 баров, умноженную на константу (чье значение установлено как 1.3). Как только мы вычислили цену входа (EntryPrc), мы размещаем заказ. Если мы в настоящее время не находимся в длинной позиции, мы размещаем стоп-заявку на покупку на следующем баре по цене, которую мы вычислили ранее, или выше. Обратите внимание, что мы ссылаемся на значение константы, просто используя константу вместо значения. В EasyLanguage используются выражения true/false в инструкциях типа IF-THEN, и в While loops (Циклах с условием) (они описаны в разделе "Управляющие структуры EasyLanguage" на странице 33). Эти инструкции начинают работать, когда выражение true/false вычисляется как Истина. Следующие команды показывают пример ссылки на значение true/false константы:

Input: DrawLine(False); Plot1(Momentum(Close, 10), "Momentum"); If DrawLine Then Plot2(0, "Zero");

Этот индикатор изображает линейный график импульса (движущей силы), используя цену закрытия последних 10 баров. Также возможно обратиться к значению константы на предыдущем баре; чтобы сделать это, включите число в квадратные скобки после имени константы. Например, следующие инструкции вычисляют и составляют график значения импульса:

Inputs: Price(Close), Length(5); Value1 = Price - Price[Length] Plot1( Value1, "Momentum");

Мы используем константу, чтобы обратиться к цене, которую мы хотим использовать, чтобы вычислить импульс, и для указания количества баров для использования в вычислениях. В этом случае значение константы 5 (5 баров назад) может быть изменено. Если значение константы не изменяется, то ссылаться на предыдущее значение нет необходимости. Совет: "Назначение Серий Значений на Константу" Константы вычисляются каждый раз, когда на них ссылаются в теле методики анализа или торгового сигнала - в этом они подобны простым функциям. Однако функции ряда не рассчитываются в каждом случае. Например, если Вы используете функцию AverageFC (функция ряда) четыре раза в вашей процедуре, то вычисление происходит только однажды, и затем на получившееся значение ссылаются в течение процедуры. Однако могут быть моменты, когда Вы хотите использовать функцию ряда и при этом желаете, чтобы она повторно рассчитывалась в каждом случае обращения к ней; чтобы вынудить функцию повторно вычисляться, Вы можете объявить функцию ряда как константу. Тогда функция будет вызываться (т.е., будут повторно произведены расчеты) каждый раз, когда используется константа. Чтобы иллюстрировать, как рассчитываются Константы, мы записали простой индикатор с использованием функции Random. Когда мы записываем индикатор без Константы, обе инструкции печати возвращают различные значения (Random - простая функция):

Print(Random(1)); Print(Random(1));

Когда мы записываем этот индикатор, используя константу, который мы назначаем значение Random(1), и затем выводи значение константы, то дважды получаем одинаковый результат

Input: Val (Random(1)); Print(Val); Print(Val);

EasyLanguage - Управляющие структуры

EasyLanguage имеет три типа инструкций, которые управляют действиями, которые выполняются при различных обстоятельствах. Эти инструкции дают возможность Вам выполнить действия: только, когда некоторые условия истинны; в течение периода, в течение которого некоторые условия являются истинными; или для установленного числа итераций. В EasyLanguage, три основных управляющих структуры: IF-THEN statement While loop For loop Каждая из них описана ниже. IF-THEN Инструкция Инструкция IF-THEN позволяет определять операции, которые будут исполнены только тогда, когда некоторое условие истинно. Синтаксис:

If Condition1 Then {EasyLanguage instruction};

Condition1 - любое выражение типа true/false, а {EasyLanguage instruction} - любая инструкция EasyLanguage. Например, Вы можете сохранять счетчик некоторого события, произошедшего на графике (к примеру, сколько раз открытие бара было выше, чем максимум на предыдущем баре), используя инструкцию IF-THEN и добавляя 1 к переменной каждый раз, когда такое условие будет выполнено:

If Open > High[1] Then Value1 = Value1 + 1;

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

If Average (Close, 10) Crosses Over Average (Close, 20) Then Buy Next Bar at Market;

Инструкции IF-THEN часто используются в EasyLanguage; например, ShowMe изучения написаны исключительно с инструкциями IF-THEN. Цель изучения ShowMe состоит в том, чтобы идентифицировать некоторый сценарий, и отметить любой бар, на котором этот сценарий происходит. Следующий пример показывает типичный ShowMe с инструкцией, которая находит и отмечает каждый внешний бар в ценовой диаграмме:

If High > High[1] AND Low < Low[1] Then Plot1 (High, "Outside Bar");

Если внешний бар найден, помещается специальная метка в области максимальной цены бара на графике. Имейте в виду, что только первая команда EasyLanguage после зарезервированного слова then (тогда) включена (выполняется) в инструкцию IF-THEN. Например, возьмите следующее ShowMe:

If High > High[1] AND Low < Low[1] Then Plot1 (High, "Outside Bar"); Alert;

Инструкция Alert не включена как часть инструкции IF-THEN, и поэтому выполняется на каждом баре. Вы можете, однако, включить более чем одну инструкцию в инструкцию IF-THEN. Чтобы сделать так, используйте Блочную инструкцию IF-THEN. Блочная Инструкция IF-THEN Блочные инструкции IF-THEN дают возможность Вам определить любое число инструкций, которые будут выполнены инструкцией IF-THEN. Для этого Вы вставляете необходимую инструкцию между зарезервированных слов Begin (Начало) и End (Конец). Например, чтобы ShowMe отмечало бар и подавало сигнал каждый раз, когда найден бар с открытием выше предыдущего максимума, Вы можете использовать Блочную инструкцию IF-THEN:

If High > High[1] AND Low < Low[1] Then Begin Plot1 (High, "OutSide Bar"); Alert; End;

Все инструкции в пределах блока Begin - End должны завершаться точкой с запятой. Вы можете вставить в пределах блока столько инструкций, сколько Вам необходимо. Инструкция IF-THEN Else Вы можете преобразовать инструкцию IF-THEN так, чтобы она исполняла некоторое действие в том случае, если условие выполнено, и другое действие, если условие не выполнено. Это делается использованием инструкции IF-THEN Else. Рассмотрим следующую инструкцию:

If Close > Close[1] Then Value1 = Value1 + Volume Else Value1 = Value1 - Volume;

В этом примере, Value1 сохранит результат суммирования торгового объема в дни с положительным изменением цен, и вычитания объема в дни с отрицательным изменением цен закрытия. Обратите внимание, что хотя нет ни одной точки с запятой вплоть до последней строки, вышеупомянутый пример - одна законченная инструкция. Комбинирование Блочной IF-THEN и IF-THEN Else Инструкций Когда Вы используете инструкцию IF-THEN Else, Вы можете также использовать Блочную инструкцию IF-THEN для команд IF-THEN или Else (или обеих). Есть три разновидности правильной формы этих инструкций IF-THEN: 1. Блочная IF-THEN с Else

If Condition1 Then Begin {EasyLanguage instruction}; End Else {EasyLanguage instruction};

2. Блочная IF-THEN с Блочным Else

If Condition1 Then Begin {EasyLanguage instruction(s)}; End Else Begin {EasyLanguage instruction(s)}; End;

3. IF-THEN с Блочным Else

If Condition1 Then {EasyLanguage instruction}; Else Begin {EasyLanguage instruction(s)}; End;

Вложенные Инструкции IF-THEN Вы можете также вложить инструкции IF-THEN. Вложение - этот термин используется, когда одна управляющая структура включена в пределах другой; поэтому, вложенная инструкция IF-THEN просто означает, что есть одна или более инструкций IF-THEN в пределах другой инструкции IF-THEN. Например, можно написать торговый сигнал, который будет или покупать или продавать при определенных рыночных условиях, а именно: если закрытие рынка больше чем открытие, сигнал размещает заказ на покупку 100 акций; если закрытие рынка ниже, чем открытие, сигнал размещает заказ на продажу 100 акций. Эту команду лучше всего писать, используя вложенные инструкции IF-THEN, следующим образом:

If Open > High[1] Then Begin If Close > Open Then Buy 100 shares This Bar on Close Else Sell 100 shares This Bar on Close; End;

Обратите внимание: чтобы вложить инструкцию IF-THEN, мы используем блок Begin - End. While Loop While loop (Цикл с условием продолжения) повторяет назначенные команды, пока выражение управления имеет значение "ИСТИННО". Когда рыночные условия изменяются, и выражение управления становятся Ложными - цикл завершается. Обратите внимание: При работе с RadarScreen или OptionStation, где Вы анализируете несколько символов одновременно, имейте виду, что использование циклов увеличивает время и требуемые ресурсы, и время и требуемые ресурсы пропорциональны количеству анализируемых символов. Синтаксис:

While Condition1 Begin {EasyLanguage instruction(s)}; End;

Condition1 - любое выражение true/false; называется выражением управления. {EasyLanguage instruction(s)} - любое количество правильных инструкций EasyLanguage. Например, следующий While loop используется, чтобы сосчитать количество баров, генерирующих суммарно объем в 1 000 000 акций:

Variables: SumVolume(0), Counter(0); SumVolume = 0; Counter = 0; While SumVolume < 1000000 Begin SumVolume = SumVolume + Volume[Counter]; Counter = Counter + 1; End;

Сначала мы объявляем две переменные: SumVolume и Counter. Хотя мы инициализируем переменные с ноля (0) при их объявлении, мы также принудительно сбрасываем переменные, чтобы обнуление происходило на каждом новом цикле. Цикл заканчивается, как только назначенный суммарный объем будет достигнут, процедура перемещается в следующий бар, значения сбрасываются и цикл запускается снова. Инструкции в While loop повторяются, пока выражение управления (Sum Volume < 1000000) не возвращает значение "ЛОЖНО". В этом практическом примере, While loop добавляет объем исторических баров, по одному, начиная с текущего бара (Counter = 0), и двигаясь назад (Counter = 1, Counter = 2, и так далее), пока результат суммирование не станет больше чем 1 000 000 акций. Бесконечные Циклы При использовании While loop есть вероятность, что выражение управления никогда не примет значение Ложь, приводя к бесконечному циклу (то есть, который никогда не заканчивается). Чтобы избежать этого, когда цикл выполняет итерации в течение более чем 5 секунд, TradeStation, генерирует ошибку выполнения программы и торговая стратегию или методика анализа выключается. В вышеупомянутом примере, если бы суммарный объем не достиг 1 000 000, то цикл продолжился бы неопределенно долго, по крайней мере, пока не закончились бы данные. Поэтому, всегда желательно обеспечить отказоустойчивый путь для выхода из цикла. Используя вышеупомянутый пример снова, мы изменим выражение управления так, чтобы оно вычислялось как False после рассмотрения 20 баров, таким образом принуждая цикл завершиться, или когда объем достигает целевого числа или когда 20 баров будут рассмотрены:

Variables: SumVolume(0),Counter(0); SumVolume = 0; Counter = 0; While SumVolume < 1000000 AND Counter < 20 Begin SumVolume = SumVolume + Volume [Counter]; Counter = Counter + 1; End;

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

For Value1 To|Downto M Begin {EasyLanguage instruction(s)}; End;

Value1 - любая числовая переменная или несколько числовых выражений, а {EasyLanguage instruction(s)} - одна или более правильных инструкций EasyLanguage. Число раз, в продолжение которых цикл выполняет итерации, определено переменной Value1 , которую называют переменной управления. Опять же, она может быть любой объявленной числовой переменной. Значение переменной управления установлено как N при первом вычислении инструкция, и затем это значение увеличивается или уменьшается автоматически на каждой итерации. Если слово To используется в синтаксисе, то переменная увеличивается на единицу на каждой итерации. Если используется слово Downto , то переменная уменьшается на каждой итерации. Внутри - выражение, которое вычисляется каждый раз при запуске цикла на выполнение, а именно: инструкция Value1 <= М, когда используется слово To, и Value1> =M, когда используется Downto . Поэтому, если цикл For увеличивает переменную управления и она становится больше чем М, команды в цикле не будут выполняться. Аналогично, если цикл уменьшает переменную управления и она меньше чем М, команды не выполняются. Например, следующий цикл выполняет команды итерации 5 раз:

For Value1 = 1 To 5 Begin {EasyLanguage instruction(s)}; End;

Value1 начнется с 1 для первой итерации, затем 2, 3, 4, и 5 и на шестой итерации цикл завершится, так как Value1 будет больше чем 5. For циклы обычно используются, чтобы вернуться назад на определенное число баров. Например, следующий цикл используется, чтобы суммировать объем последних 5 баров:

Variable: SumVolume(0); For Value1 = 0 To 4 Begin SumVolume = SumVolume + Volume [Value1]; End;

Этот цикл также использует переменную управления как смещение бара для зарезервированного слова Volume. Обратите внимание, что, так как мы хотим учесть и объем текущего бара (Volume[0]), то мы используем в нашем цикле значения от 0 до 4, а не 1 - 5, как мы сделали в предыдущем примере. Это - обычная и эффективная практика. Вы можете завершить цикл раньше, изменяя значение переменной управления. Для предыдущего примера, если Вы хотите остановить суммирование сразу при достижении 500 000, можно использовать следующие команды:

Variable: SumVolume(0); For Value1 = 0 To 4 Begin SumVolume = SumVolume + Volume[Value1]; If SumVolume > 500000 Then Value1 = 5; End;

Циклы For используются во многих торговых сигналах, методиках анализа и функциях, встроенных в TradeStation.

EasyLanguage - Запись предупреждений

Многие из методов анализа, встроенных в TradeStation, обеспечивают опцию предоставления аудио/визуального предупреждения. Когда предупреждение вызывается, оно регистрируется в окне Tracking Center, и появляется диалоговое окно, как показано на Рисунке 2-4. В то же самое время запускается звук уведомления.
Рисунок 2-4. Диалоговое окно Уведомления о Предупреждении

Диалоговое окно отображает название символа, название методики анализа и рабочей области, в которой предупреждение было вызвано. Кроме того, диалоговое окно имеет поле по имени Additional Info (Дополнительная Информация), которое содержит дополнительную информацию, обеспеченную методикой анализа. Вся эта информация также регистрируется в Tracking Center. Чтобы включить предупреждение в методику анализа, Вы используете alert инструкции. Описание, включенное в поле Additional Info, написано в инструкции предупреждения EasyLanguage, включенной в процедуру, которая вызвала предупреждение. Вы можете включить alert инструкции в: Индикаторы ShowMe изучения PaintBar изучения ActivityBar изучения ProbabilityMap изучения Вы можете использовать любое из зарезервированных слов, описанных в этом разделе с индикаторами и изучениями. Когда критерии EasyLanguage выполнены на последнем баре в ценовой диаграмме или таблице, вызывается предупреждение. Очень важно помнить, что предупреждения вызываются только тогда, когда критерии, указанные alert инструкцией выполнены на последнем баре ценовой диаграммы или таблицы. Исторические случаи предупреждений не регистрируются в окне Tracking Center, и при этом диалоговое окно Alert Notification не появляется. Предупреждения можно представить как выключатель, который может быть в положении «включено» или «выключено» в зависимости от используемой инструкции. Как только все команды инструкции прочитаны, заключительное состояние этого выключателя определяет, будет вызвано предупреждение или нет. Например, скажем, четвертая строка индикатора вызывает предупреждение; однако, самая последняя строка индикатора - инструкция, которая отключает предупреждение. В этом случае, индикатор не будет вызывать предупреждение. Предупреждения вызываются после того, как все инструкции EasyLanguage были проанализированы для последнего бара ценовой диаграммы или сетки. Это дает Вам возможность включать и/или отключать предупреждения в изменяющихся рыночных условиях. Ниже - связанные с предупреждением зарезервированные слова, которые Вы будете использовать, чтобы включить предупреждения в ваши индикаторы и/или изучения. Alert Это зарезервированное слово вызывает предупреждение и дает возможность Вам описать условия, которые вызвали предупреждение. Синтаксис: Alert("Description") ; Description (Описание) - любая определяемая пользователем текстовая строка. Вы используете текстовую строку, чтобы обеспечить информацию о предупреждении: типа рыночных условий, которые вызвали это предупреждение. Эта текстовая строка появится в поле Additional Info диалогового окна Alert Notification (показанной на Рисунке 2-4) и в Tracking Center. Вы можете не давать описания, тогда в поле Additional Info в диалоговом окне Alert Notification и описании предупреждений в Tracking Center будут пробелы. Если Вы включаете более чем одну инструкцию Alert в ваш индикатор или изучение, то вызывается Описание, включенное в последнее вызванное предупреждение. Например, предположим, что следующий индикатор применен к ценовой диаграмме:

Plot1 (Average (Close, 10), "Avg"); If Close Crosses Over Plot1 Then Alert ("Price crossed over average"); If Volume > Average(Volume, 10) Then Alert ("Volume Alert");

Если на последнем баре ценовой диаграммы оба условия истинны, то вычисляются оба предупреждения. В этом случае, фактически вызывается и регистрируется только одно предупреждение, и оно будет иметь последнее Описание, которое в вышеупомянутом примере является предупреждением с Описанием "Volume Alert". Cancel Это зарезервированное слово используется, чтобы отменить предупреждение; оно выключает любые предупреждения, вызванные в течение текущего бара. Синтаксис: Cancel Alert Например, если Вы записываете индикатор с двумя alert критериями, но Вы хотите, чтобы предупреждение вызывалось только после 11:00am, Вы можете использовать следующие инструкции:

If Close Crosses Over Average (Close, 10) Then Alert ("Average Cross Over"); If Volume > Average (Volume, 10) Then Alert ("Volume Spike"); If Time <= 1100 Then Cancel Alert;

Если предупреждение вызвано любой из инструкций Alert, оно выключается инструкцией Cancel Alert, если это происходит до 11:00am. Если предупреждение вызвано после 11:00am, тогда любая инструкция Alert истинна и выполняется. CheckAlert Это зарезервированное слово определяет, действительно ли текущий бар - последний бар на ценовой диаграмме (или таблицы) и действительно ли предупреждение включено в данный момент для индикатора или изучения. Когда предупреждение включено и вызывается на последнем баре на диаграмме (или таблицы), то это зарезервированное слово возвращает значение "ИСТИННО". Это зарезервированное слово возвратит значение "ЛОЖНО" для всех других баров на ценовой диаграмме, и на последнем баре ценовой диаграммы, если предупреждение не включено. Это позволяет Вам оптимизировать ваши индикаторы (изучения) для увеличения скорости обработки; Вы можете написать индикатор (изучение), игнорирующий все инструкции, касающиеся предупреждения, если в данный момент рассматривается не последний бар ценовой диаграммы или предупреждение не включено. Синтаксис: CheckAlert Например, следующие инструкции могут использоваться, чтобы вызвать предупреждение, когда текущий объем - удвоенный средний объем, и отобразить отношение между текущим объемом и средним его значением за период. Поскольку используется CheckAlert, вычисления игнорируются для всех исторических баров так же, как когда предупреждение не включено.

If CheckAlert Then Begin Value1 = Volume / Average (Volume, 10); If Volume >= 2 * Average (Volume, 10) Then Alert ("Volume is" + Value1 ); End ;

Обратите внимание: Применение CheckAlert в инструкции IF-THEN эффективно для оптимизации вашей методики анализа; однако, даже в том случае, когда последующие инструкции игнорируются, индикатор или изучение все же принимают во внимание следующие инструкции, чтобы определить число баров(MaxBarsBack), необходимых для вычисления индикатора или изучения. Обратитесь к разделу "Аварийные Директивы Компилятора" для получения информации относительно других зарезервированных слов, которые Вы можете использовать, чтобы игнорировать инструкции полностью. AlertEnabled Это зарезервированное слово возвращает значение "TRUE", когда предупреждение включено для индикатора или изучения, примененного к ценовой диаграмме или таблице (и FALSE, когда - выключено). Это позволяет Вам оптимизировать индикатор или изучение для увеличения скорости обработки; инструкции после этого зарезервированного слова вычисляются только тогда, когда предупреждение включено. Различие между этим зарезервированным словом и CheckAlert в том, что AlertEnabled возвращает значение "TRUE" для всех баров, когда предупреждение включено, тогда как CheckAlert возвращает значение "TRUE" только для последнего бара на диаграмме. Синтаксис: AlertEnabled Например, следующие инструкции вычисляют кумулятивный объем роста/падения, и предупреждение вызывается, когда линия кумулятивного роста/падения превышает свое максимальное значение на последних 50 барах:

If AlertEnabled Then Begin If Close > Close[1] Then Value1 = Value1 + Volume Else Value1 = Value1 - Volume; If Value1 > Highest (Value1,50)[1] Then Alert ("New A/D line high"); End;

В этом примере, линия роста/падения будет рассчитана, только если предупреждение включено, и вычисление будет произведено для всех баров на ценовой диаграмме или в таблице, а не только на последнем баре. Обратите внимание: Хотя инструкции, которые следуют за этим зарезервированным словом, иногда игнорируются, индикатор или изучение все еще принимают во внимание инструкции, определяющие количество баров, необходимых для вычисления индикатора или изучения (MaxBarsBack), а также любых серийных функций, рассчитываемых в пределах инструкций. См. раздел "Директивы Компилятора Alert" для получения информации о дополнительных зарезервированных словах, которые Вы можете использовать, чтобы игнорировать инструкции полностью. Использование Директив Компилятора Alert Следующие зарезервированные слова - директивы компилятора, которые дают команду вашему индикатору или изучению полностью игнорировать инструкции, которые следуют за зарезервированным словом, в случае, если предупреждение не включено для индикатора или изучения. Индикатор или изучение не будут принимать во внимание инструкции после этих слов, даже когда они (инструкции) определяют количество баров, необходимых для выполнения вычислений (MaxBarsBack); также не будут рассчитываться любые серийные функции в пределах этих инструкций. #BeginAlert Инструкции между этой директивой компилятора (#BeginAlert) и зарезервированным словом #End вычисляются только тогда, когда предупреждение включено для методики анализа. Вы должны использовать зарезервированное слово #End с этим зарезервированным словом. Синтаксис: #BeginAlert; {EasyLanguage instruction(s) }; #End; Например, индикатор, который вычисляет 10-барный импульс цен закрытия, требует данные десяти баров для построения результирующего графика. Однако если предупреждение добавить предупреждение к этому индикатору, и предупреждение использует 50-барное среднее объема, то требование к необходимому количеству баров повышено до пятидесяти. Вместе с тем, 50-барное среднее используется только для вычисления предупреждения, и поэтому, если предупреждение не включено, то индикатор не будет ожидать 50 баров для возвращения результата. Поэтому, чтобы получить график индикатора после десяти баров и игнорировать требование 50 баров, используйте #BeginAlert в вашем индикаторе следующим образом:

Plot1 (Close - Close[10], "Momentum"); #BeginAlert; If Plot1 Crosses Over 0 AND Volume > Average (V, 50)* 2 Then Alert ("Momentum is now positive"); #End;

Вышеупомянутый индикатор вычисляет график импульса и вызывает предупреждение, если значение импульса становится положительным при одновременном превышении объемом удвоенного 50-барного среднего объема. Когда индикатор применен с выключенным предупреждением, для вычислений требуется 10 баров. При включении предупреждения индикатор рассчитывается повторно; заново оцениваются инструкции в пределах директив компилятора, и новое требование - 50 баров. #BeginCmtryOrAlert Когда комментарий и инструкции предупреждения взаимосвязаны, но комментарий или инструкции предупреждения не связаны с вычислениями индикатора или изучения, используют зарезервированное слово #BeginCmtryOrAlert. Инструкции между этой директивой компилятора и зарезервированным словом #End вычисляются только тогда, когда или комментарий сгенерирован, или предупреждение включено. Вы должны использовать зарезервированное слово #End с этим зарезервированным словом. Синтаксис: #BeginCmtryOrAlert; {EasyLanguage instruction(s) }; #End; Например, следующий индикатор вычисляет 10-барный график импульса цен закрытия, и вызывает предупреждение, когда значение импульса становится положительным при одновременном превышении объемом удвоенного 50-барного среднего объема. Кроме того, написан комментарий, чтобы помочь идентифицировать бар с указанными рыночными условиями.

Plot1 (Close - Close[10], "Momentum"); #BeginCmtryOrAlert; If Plot1 > 0 Then Commentary ("Momentum is positive, ") Else Commentary ("Momentum is negative, "); If Volume > Average (Volume, 50) Then Begin Commentary ("and volume is greater than average.") If Volume > Average(Volume, 50) * 2 Then Alert; End; Else Commentary("and volume is lower than average."); #End;

EasyLanguage - Понятие массивов

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

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

В этом случае Вы используете два числа, чтобы сослаться на каждый элемент [строка, столбец]. Например, иллюстрация выше показывает двумерный массив, содержащий 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 для получения дополнительной информации.

EasyLanguage - Понятие функций пользователя

Функция пользователя - определенный набор команд, на которые Вы ссылаетесь по имени, и возвращающие значение. Значение, возвращенное функцией, может быть числовым, true/false или текстовой строкой, и Вы можете использовать функции в любой части инструкции, где требуется это значение. Например, в торговле принято вычислять диапазон (ранг) бара (максимум минус минимум). Каждый раз, когда пользователь EasyLanguage хочет вычислить диапазон бара, он не должны писать выражение (High - Low), потому что EasyLanguage снабжена функцией по имени Range. Всякий раз, когда Вы нуждаетесь в вычислении диапазона бара, Вы можете использовать пользовательскую функцию EasyLanguage Range вместо того, чтобы писать выражение. Range - одна из самых простых функций, доступных в EasyLanguage; есть сотни функций, доступных для вашего использования, плюс Вы может записать ваш собственные. Другая концепция, которую Вы должны понять для работы с функциями - концепция параметров. Когда необходимо, функции пользователя написаны с параметрами (также именуемые как константы (inputs) или параметры). Параметры позволяют человеку, использующему функцию, изменять объем информации, которую функция должна использовать для своего вычисления. Например, функция пользователя Average (Среднее) написана с параметром по имени Length (Длина). Поэтому, вместо того, чтобы иметь одну функцию для среднего с 10 барами, другую для среднего с 12 барами, и третью для среднего с 15 барами, и т.д., есть только одна Average функция пользователя, а пользователь может определить число баров, которые функция будет использовать, чтобы вычислить среднее. Также пришлось бы создавать функцию для вычисления среднего цен закрытия, другую для среднего цен открытия, третью для среднего объема и т.д., что очень неудобно. Поэтому функция Average также имеет параметр по имени Price (Цена), который дает возможность пользователю определить цену или данные, которые будут усредняться этой функцией. Следующая инструкция вычисляет среднее цен закрытия последних 10 баров и назначает результат на переменную Value1:

Value1 = Average (Close, 10);

Параметры функции пользователя включены в круглые скобки после нее самой, и каждый параметр отделен запятой. В зависимости от функции, параметры могут быть необходимыми или дополнительными. Параметры обсуждены подробно в "Понятие Параметров и Типов Параметра" на странице 58. Использование Встроенных Функций Для вашего удобства, EasyLanguage PowerEditor имеет Словарь EasyLanguage, который является инструментом, где перечислены все зарезервированные слова EasyLanguage и встроенные функции пользователя, сгруппированные по категориям. Словарь EasyLanguage позволяет Вам просматривать список слов и функций, и обеспечивает прямые ссылки к Интерактивному Пользовательскому Руководству. Все программы TradeStation обеспечены обширной библиотекой встроенных функций пользователя, которые располагаются от обычно-используемых вычислений (например, автоматического обмена данными, интерфейса управления рабочей областью, CCI) к общим математическим и статистическим операциям (например, AbsValue, Sine (Синусу), Square (Квадрат)). Всякий раз, когда Вы должны выполнить вычисление, вместо того, чтобы писать вычисление самостоятельно, сначала используйте Словарь EasyLanguage, и ищите встроенную функцию, которая может выполнить вычисление. Вы можете также использовать встроенные функции как ссылки или инструмент самообучения при записи ваших собственных функций. Если Вы не уверены, сделает ли функция точно то, что Вы хотите, выделите функцию в Словаре EasyLanguage и нажмите кнопку Define для получения описания функции пользователя и ее использования. Словарь EasyLanguage - необходимая ссылка, которую Вы будете использовать часто, поскольку Вы работаете с EasyLanguage. Ссылка на Предыдущие Значения Функций Вы можете сослаться на значения функций на предыдущих барах. Например, следующая инструкция обращается к значению 10-барного среднего объема один бар назад:

Value1 = Average (Volume, 10) [1] ;

В вышеупомянутом примере смещается сама функция. Использование Предыдущих Значений в качестве Параметров Вы можете также смещать значение, которое Вы назначаете как параметр. Например, Вы можете записать следующую инструкцию:

Value1 = Average (Volume[1], 10);

То, что смещено - значение, которое передают в функцию как параметр, а не функция непосредственно. В вышеупомянутом примере, функция будет использовать объем предыдущего бара, чтобы выполнить вычисление. В данном случае результаты одинаковы для обеих из вышеупомянутых инструкций. Однако различие в результатах может быть существенно в зависимости от выполняемого вычисления. Например, предположим, что есть функция по имени OpenDiff, которая вычисляет разницу между открытием текущего бара и прошлым значением функции через параметр. Функция берет переданное значение и вычитает его из цены открытия текущего бара, используя следующую формулу: OpenDiff = Open - Price, где Open - цена открытия бара, и Price - параметр для функции. Предположим, что Вы записываете следующую инструкцию:

Value1 = OpenDiff (Close)[1];

EasyLanguage получает значение функции на предыдущем баре. Возвращенное значение равно открытию на предыдущем баре минус закрытие предыдущего бара. Однако, предположим, что Вы записываете другую инструкцию вместо этой:

Value1 = OpenDiff (Close[1]);

Функция вычтет закрытие предыдущего бара из открытия текущего бара, приводя к результату, совершенно отличному от результата предыдущей инструкции. Использование Псевдонимов Данных При применении торговой стратегии или методики анализа к ценовой диаграмме или таблице, процедура применяется к потоку данных. Это может быть поток данных на диаграмме, один из символов в окне Position Analysis или символе в окне RadarScreen. По умолчанию, все торговые стратегии и методики анализа базируются на потоке данных, к которому процедура применена и все значения, по умолчанию, вычисляются с использованием данных этого потока. Однако Вы можете обратиться к любому доступному потоку данных. Например, Вы можете применить индикатор к ценовой диаграмме OMGA и Dow 30 Index, который ссылается на оба символа. Или, Вы можете применить индикатор к основному активу в окне OptionStation Position Analysis, который обращается к ценам опционов, перечисленных в окне. Чтобы обратиться к другому потоку данных, кроме того, к которому торговая стратегия или методика анализа применены на диаграмме, Вы добавляете псевдоданные dataN после функции. Например, следующая инструкция вычисляет 20-барное среднее цен закрытия второго символа в ценовой диаграмме даже притом, что индикатор применен к первому символу:

Value1 = Average (Close, 20) of data2;

Например, когда индикатор применен к акции, которая представлена на графике как Data1, а второй поток данных - Dow 30, то индикатор может вычислить 10-дневный средний объем Dow 30 и включить это вычисление в анализ акции. Инструкция была бы написана следующим образом:

Value1 = Average( Volume, 20) of data2;

Повторяем, когда никаких псевдоданных не определено, EasyLanguage предполагает, что функция предназначена для вычислений на потоке данных, к которому процедура применена. Так, если индикатор применен к ценовой диаграмме, которая имеет три акции, и следующая инструкция используются в индикаторе:

Value1 = Average (Volume, 20);

... то среднее объема будет рассчитано на основании данных символа, к которому индикатор применен. Обратите внимание: При форматировании индикатора на ценовой диаграмме, на вкладке Properties есть опция для выбора символа, к которому применен индикатор, как показано на Рисунке 2-7. Этот выбор отображает поток данных, к которому индикатор в настоящее время применен.
Рисунок 2-7. Вкладка Properties Индикатора
В RadarScreen и в OptionStation, когда никакие псевдоданные не определены, символ, к которому индикатор применен - заданный по умолчанию поток данных. Для информации относительно того, как обратиться к другим потокам данных в RadarScreen и OptionStation, читайте главу EasyLanguage, соответствующую используемому приложению. Работая с ценовыми диаграммами, Вы можете также базировать параметр для функции на другом потоке данных в противоположность полной функции. Рассмотрим следующую инструкцию:

Value1 = Average (Volume of data2, 10);

В вышеупомянутой инструкции псевдоданные используются в параметре функции. Как и со смещениями бара, различие между использованием псевдоданных для полной функции вместо (как) параметра является делом очень тонким, но может привести к значительно отличающимся результатам в зависимости от выполняемого вычисления. Например, давайте используем функцию, для который мы ранее обсуждали смещение бара, а именно OpenDiff. Эта функция вычисляет разницу с ценой открытия бара, и значение передается к функции. Функция вычитает значение текущей цены из цены открытия текущего бара: OpenDiff = Open - Price. Предположим, что мы записываем следующую инструкцию:

Value1 = OpenDiff (Close) of data2;

EasyLanguage базирует полное вычисление функции на втором потоке данных; при этом используется и открытие и закрытие второго потока данных, и затем возвращает разницу. Теперь, предположим, что мы записываем инструкцию следующим образом:

Value1 = OpenDiff (Close of data2);

Функция основана на первом потоке данных, но вычислит OpenDifffunction с использованием открытия текущего бара data1 и закрытием текущего бара data2. Возвращенное значение было бы значением открытия первого потока данных минус закрытие второго потока данных. Запись Функций пользователя Единственная инструкция, требуемая функции - та, которая определяет, какое значение функция возвратит. Эту инструкцию называют Функциональным Оператором присваивания Значения, и состоит она из имени функции, сопровождаемого знаком равенства (=) и выражения, представляющего значение функции. Например, если есть функция по имени One, которая возвращает числовое значение 1, вся необходимая инструкция:

One = 1;

Аналогично, функция по имени HigherHigh, которая возвращает значение истина, если максимум текущего бара больше чем максимум предыдущего бара, может быть написана, используя следующую инструкцию:

HigherHigh = High > High[1];

Значение True или False назначены на функцию HigherHigh посредством Функционального Оператора присваивания Значения, и это значение возвращено как значение функции. Или, функция по имени TenBarAvg, которая вычисляет 10-барное среднее объема, с использованием For loop, выглядела бы следующим образом:

Value2 = 0; For Value1 = 0 To 9 Begin Value2 = Value2 + Volume[Value1]; End; TenBarAvg = Value2 / 10;

Функция может возвратить числовое, истинное/ложное, или текстовое строковое значение. Вы сами определяете, какое значение функция возвратит, когда Вы создаете функцию или форматируете ее свойства в EasyLanguage PowerEditor, как показано на Рисунке 2-8.
Рисунок 2-8. Свойства Функции в EasyLanguage PowerEditor

Любой из компонентов EasyLanguage, рассмотренных в этой главе, например, инструкции IF-THEN, циклы, переменные, массивы, математика и операторы отношения, и другие функции EasyLanguage, могут использоваться, чтобы выполнить вычисления в пределах функции EasyLanguage, и как только Вы вычисляете окончательное значение, Вы назначаете это значение на имя функции, используя Функциональный Оператор присваивания Значения. Понятие о Типах Функций: Простой и Серийной Большинство функций - простые функции. Эти функции выполняют вычисление и возвращают значение. Однако, некоторые функции - серийные функции. Серийные функции ссылаются на предыдущие значения непосредственно самой функции, переменных и/или массивов в пределах функции. Когда функция включает счетчик или операцию накопления от бара к бару, она - также серийная функция. Использование предыдущего значения функции в пределах самой функции - обычно используемая методика и, фактически, множество стандартных индикаторов - экспоненциальное среднее, ADX, MACD - используют эту методику, также Индикатор Распределения Накопления Лэрри Вилльямса накапливает значения от бара до бара. Давайте рассмотрим соображения, связанные с каждым типом функции. Простые Функции Простые функции не могут обратиться к предыдущим значениям функции непосредственно, а также к предыдущим значениям переменных или массивов, объявленных в функции при выполнении ее вычислений. Простые функции требуют меньшего количества памяти и вычисляют быстрее, чем серийные функции, потому что окончательные значения этих функций, и всех их переменных и массивов, не рассчитываются и не сохраняются от бара к бару. Эти функции рассчитываются только тогда, когда их вызывает методика анализа или торговый сигнал. Функция по имени Summation, включенная в EasyLanguage PowerEditor и показанная ниже, является примером простой функции:

Inputs: Price(NumericSeries), Length(NumericSimple); Variables: Counter(0), Sum(0); Sum = 0; For Counter = 0 To Length - 1 Begin Sum = Sum + Price[Counter]; End; Summation = Sum;

Даже притом, что функция ссылается на предыдущие значения параметра (Price), это - простая функция, потому что это она не ссылается на свои предыдущие значения или переменных/массивов. Серийная Функции Серийная функция может обращаться к своим предыдущим значениям или предыдущим значениям любых переменных или массивов, объявленных в функции при выполнении ее вычислений. Серийные функции выполняются от бара к бару, даже если к функции явно не обращаются на каждом баре. Когда переменные или массивы используются как параметры, серийные функции рассчитываются каждый раз, когда их вызывают. Иначе говоря, функция рассчитывается один раз на каждом баре в конце процедуры. Для иллюстрации, почему серийные функции выполняются на каждом баре, давайте рассмотрим функцию BarNumber, которая встроена в EasyLanguage PowerEditor. Эта функция подсчитывает количество баров, которые прошли с тех пор, как торговый сигнал или методика анализа запустили ее вычисление. Эта функция написана с использование только одной инструкции, следующим образом:

BarNumber = BarNumber[1] + 1;

Чтобы получить значение на текущем баре, эта функция будет читать свое же значение один бар назад, и добавлять 1 к этому значению. Таким путем функция сохраняет общее количество баров с момента своего запуска. Предположим, что мы используем эту функцию в индикаторе следующим образом:

If Close > Open Then Plot1(BarNumber);

Ниже - таблица, которая показывает первые восемь баров диаграммы.
Рисунок 2-9. Пример серийной функции - BarNumber

Как отмечено на Рисунке 2-9, функцию вызывают в течение баров один - пять (потому что закрытие больше чем открытие), в то же время условия, необходимые для вызова функцию ложны для баров шесть и семь. Если функция не была рассчитана на этих барах, то не могло бы увеличиться ее значение, чтобы сохранить точный счет числа бара. Кроме того, если бы на восьмом баре функция сослалась на BarNumber [1], то не было бы понятно, к какому значению функция обращается. Опять же, если серийная функция не вызывается на определенном баре, то вычисления выполняются в конце процедуры для того, чтобы сохранить все значения - функции непосредственно и любых переменных и/или массивов в функции - для возможности более поздней ссылки функцией на предыдущие значения. Также, если одну и ту же самую серийную функцию вызывают два или более раз на баре, используя те же самые параметры, и функция не использует переменные или массивы как параметры, то функция рассчитывается только один раз на баре, и значение, полученное в результате этого единственного вычисления, используется позднее, когда функцию вызывают (чтобы увеличить скорость вычислений). Однако если функция использует переменную или массив как параметр, то функция рассчитывается каждый раз, когда ее вызывают в пределах одного бара. Например, предположим, что Вы записали следующий индикатор:

MyValue1 = MySeriesFunction(Close, 25); MyValue2 = MySeriesFunction(Close, 25); MyValue3 = 10; If Condition1 Then Value1 = XAverage(Close, MyValue3); MyValue3 = 20; If Condition2 Then Value1 = XAverage(Close, MyValue3);

Первые две строки вызывают одну и ту же самую серийную функцию, и они не используют переменные или массивы как параметры; поэтому функция MySeriesFunction рассчитывается только один раз, и полученное значение назначается и на MyValue1 и на MyValue2. Однако функция XAverage использует переменную как параметр; поэтому, функция рассчитывается дважды на каждом баре. Она (функция) должна удостовериться, что функция рассчитана с самым последним текущим значением переменной, которая используется как параметр. В вышеупомянутом примере, значение, сохраненное в MyValue3, действительно изменяется для второго вычисления функции. Параметры обсуждаются подробно в следующем разделе. Также, когда Вы получаете данные в реальном масштабе времени и имеете обновление на каждом тике для методики анализа (или для генератора ордеров на последнем баре в торговой стратегии), EasyLanguage вычисляет методику анализа или торговую стратегию так же как любые серийные функции, на которые ссылаются методика анализа или торговая стратегия, для каждого нового тика. Чтобы точно сохранять накопленные значения, каждый раз, когда получен новый тик, все переменные, массивы, и функциональные значения "перемещаются назад" к предыдущему бару, и осуществляется вычисление, основанное на самом последнем тике. Это гарантирует, что торговые сигналы, методики анализа и функции выполняют вычисления, как если бы каждый тик был последним тиком на текущем баре. Совет: Сокращение Времени Вычисления Когда Вы используете серийную функцию как параметр для простой функции, и такой специфический параметр используется неоднократно, время вычисления для стратегии торговли, или методика анализа может заметно увеличиться. Эта ситуация к увеличению времени для расчетов, потому что серийная функция должна быть рассчитана каждый раз, когда ссылаются на простую функцию. Чтобы избежать такой ситуации, назначьте серийную функцию на переменную, и затем используйте переменную как параметр для простой функции. Эта простая настройка сокращает время вычислений, так как серийная функция вызывается только однажды, когда ее назначают на переменную. Понятие о Параметрах и Типах Параметров Многие функции написаны так, что при их использовании они требуют некоторую дополнительную информацию. Такая информация предоставляется функции посредством параметров. Есть три типа параметров: числовой, истинный/ложный и текстовая строка: ? Numeric - Числовой - Когда параметр определен как числовой, пользователь функции может передать любое число (например, 5, 10, или 100) или числовое выражение как параметр в функцию. Этот параметр будет использоваться в пределах функции как числовое выражение. ? True/false - Истинный/ложный - Когда параметр определен как истинный/ложный, пользователь функции может передать любое выражение true/false (или Истина или Ложь) как параметр в функцию. Эти параметры могут использоваться в пределах функции как выражение true/false. ? Text string - Текстовые строковые параметры позволяют пользователю функции передавать любое текстовое строковое значение (например, "ABC") или текстовое строковое выражение как параметр в функцию. Эти параметры могут использоваться в пределах функции как текстовое строковое выражение. Подобно функции, параметр может быть следующих подтипов: простой или серийный, или может иметь подтип ссылки. Каждый подтип описан затем. Простые Параметры Простые параметры - постоянные значения, которые установлены в торговом сигнале или методике анализа, которая вызывает функцию. Простые параметры требуют меньшего количества памяти и увеличивают скорость. Они сохраняют свои значения в пределах функции; простые параметры не могут иметь значений, назначаемых на них в пределах тела функции. Когда пользователь желает использовать число, например (то есть, 10, 15, или 20), то должен определить параметр как числовой простой. Например, функция Average использует параметр по имени Length, который дает возможность Вам определить количество баров, используемых при вычислении среднего. Так как это количество не изменяется от бара к бару (это - постоянное число типа 9, 18, или 50), то нет необходимости хранить предыдущие значения параметра. Поэтому, чтобы увеличить скорость и улучшить использование памяти функции, Length определен как числовой простой параметр. Когда функция запрашивает простой параметр, пользователь может поставить любое значение, функцию, переменную или массив. Серийные Параметры Подобно простым параметрам, параметры ряда - постоянные значения, которые установлены в торговом сигнале или методике анализа, которая вызывает функцию. Однако когда функция обращается к предыдущим значениям значения, используемым как параметр (например, Value1, Condition1, или Close), тогда этот параметр должен быть определен как серийный параметр. Значения серийных параметров сохраняются для каждого бара, и текущие и исторические значения доступны внутри тела функции. Это позволяет функции обращаться к значению параметра на предыдущем баре (независимо оттого, что сама функция простая или серийная). Серийные параметры используют больше памяти и снижают в некоторой степени скорость вычислений, но они необходимы, чтобы обратиться к историческим значениям параметра. Например, функция Average использует параметр по имени Price, который дает Вам возможность определить, какая величина будет усредняться. Чтобы вычислять 10-барное среднее цен закрытия, функция должна будет обратиться к 10 последним ценам закрытия символа; поэтому, параметр Price определен как числовой серийный параметр. Однако серийные параметры не могут иметь значений, назначаемых на них в пределах тела функции. Когда функция запрашивает параметр ряда, пользователь может использовать любое значение, функцию, переменную, или массив. Параметры Ссылки Параметры можно передать значением или ссылкой. Когда параметр передает информацию значением, как имеет место с простым и серийным параметрами, функция создает копию информации, переданную в нее, и независимо оттого, что сделано с параметром в функции, не затрагивает значение параметра в пределах торгового сигнала или методики анализа который вызывает функцию. Однако когда информацию передает ссылка, функция использует первоначальную информацию от торгового сигнала или методики анализа, который вызывает функцию, и любые вычисления функция исполняет на параметре, отраженном в значении параметра в пределах методики анализа или торгового сигнала который вызывает функцию. Это лучше всего представить, рассмотрев пример. Предположим, что Вы добавили изображение к текстовому документу. Если изображение добавляется значением, копия изображения создается в текстовом документе. Если оригинальное изображение изменяется, изображение в документе текстового процессора остается неизменным, и наоборот. Однако если изображение вставлено ссылкой, то документ использует оригинальное изображение; и если изображение изменяется в текстовом документе, то первоначальное (оригинальное) изображение изменяется также. Верно и обратное, если первоначальное (оригинальное) изображение изменяется, изображение в текстовом документе отражает изменение. Когда параметр передает информацию значением, оно может быть или простым или серийным. Когда параметр передает информацию ссылкой, он должно иметь тип ссылки. Вы можете использовать в параметрах ссылки переменные, функции, и массивы. Когда переменную передает ссылка, функция будет использовать переменную от торгового сигнала или методики анализа, который вызывает функцию, так что любые операции выполненные функцией будут отражены в переменной в торговом сигнале или методике анализа, так же как в функции. Например, предположим, есть индикатор, который вычисляет два числа, представляющие верхнее и нижнее значения канала. Вместо того, чтобы создавать две функции, одну, чтобы вычислить верхнюю границу и вторую, чтобы вычислить нижнюю границу, функция может принять две переменные ссылкой. Тогда, функция может вычислить эти два значения и назначить результат на каждую из переменных, переданных ссылкой. Как только функцию вызывают, переменные в индикаторе принимают значения, соответствующие верхней и нижней границам. Рисунок 2-10 показывает EasyLanguage для Ленточного Индикатора. Функцию, которую мы записали, чтобы вычислить эти две полосы, называют MyBands. Обратите внимание, что переменные для индикатора являются также параметрами, которые передаются ссылкой в функцию MyBands.
Рисунок 2-10. Индикатор, использующий функцию с константой, переданной ссылкой

The MyBands function is shown next. This function defines the upper band as the highest high of the last 10 bars, and the lower band as the lowest low of the last 10 bars. Inputs: UpperBand(NumericRef), LowerBand(NumericRef); UpperBand = Highest(High, 10); LowerBand = Lowest(Low, 10); MyBands = 1;

Обратите внимание, что функция назначает значение 1 MyBands. Это - необходимая инструкция, и в индикаторе значение (1) назначено на переменную Value1. Помните, что каждая функция должна содержать оператор присваивания, и возвращать назначенное значение. Однако цель функции в примере состоит в том, чтобы вычислить и назначить значения на UpperBand и LowerBand переменные, и эти значения используются индикатором. Учитывая, что значения переменных и массивов сохраняются от бара к бару, параметры ссылки позволяют обращаться к предыдущим значениям, используя смещения бара. Первая строка в вышеупомянутой функции - инструкция Input Declaration, которая определяет параметры, которые должны быть определены пользователем при использовании функции. Следующий раздел охватывает вопросы, как объявить параметры при записи функции. Определение Параметров Как было сказано в предыдущем разделе, параметры могут быть следующих типов: числовой, true/false или строковый, и они могут быть следующих подтипов: простой, серийный или ссылка. При записи функции Вы должны определить, какие параметры функция будет требовать от пользователя функции. Чтобы сделать это, Вы используете инструкцию Input Declaration. Вы можете объявить множество параметров (одного или различных типов) с использованием одной инструкции Input Declaration. Например:

Input: MyNumber(NumericSimple);

Вышеупомянутая инструкция Input Declaration объявляет числовой простой параметр. Чтобы определять числовой серийный параметр, Вы используете:

Input: MyNumber(NumericSeries);

Чтобы определять числовой параметр ссылки, Вы используете:

Input: MyNumber(NumericRef);

Префикс определяет тип: Числовой, True/False, или Строка, а суффикс определяет подтип, Простой, Ряд, или Ссылка. Например, чтобы определить два параметра true/false, один ряд и одну ссылку, Вы использовали бы следующую инструкцию Input Declaration:

Inputs: MyValue(TrueFalseSeries), MyValue1(TrueFalseRef);

Или, чтобы определить строковый простой параметр:

Input: MyString(StringSimple);

Обратите внимание: Вы можете определить параметр как Числовой, True/False, или Строку, не определяя подтип. В этом случае EasyLanguage автоматически определяет подтип параметра - простой или ряд (однако, если параметр - подтипа ссылка, Вы должны явно это определить). Работа с Массивами Объявление параметра как массива немного отличается. Чтобы объявить массив, Вы должны определить, является ли он числовым, true/false или строковым; указать, что это - массив, и действительно ли имеет подтип ссылки. Синтаксис:

Input: MyArray[M] (Input Type);

MyArray - имя вашего массива, [М] - выражение, представляющее размер и измерение массива, и Input Type - параметр одного из подтипов массива: ? NumericArray ? NumericArrayRef ? TrueFalseArray ? TrueFalseArrayRef ? StringArray ? StringArrayRef Обратите внимание: суффикс Ref' используется, когда Вы передаете массив ссылкой. Когда массив имеет больше чем одно измерение, используется соответствующий список символов, отделенных запятыми. Например, следующая инструкция Input Declaration означает, что функция ожидает числовой массив с тремя измерениями:

Input: MyNumericArray [X,Y,Z] (NumericArray);

Когда массив посылают от торгового сигнала или методики анализа к функции, эти символы (в вышеупомянутом примере символы X, Y, Z) принимают числовые значения, соответствующие размеру массива, и Вы можете использовать слова в пределах тела функции, чтобы работать с массивом. Например, если функция принимает одномерный массив true/false, следующие инструкции могут использоваться, чтобы пересечь массив, использующий For loop:

Input: MyArray [M] (TrueFalseArray); Value2 = 0; For Value1 = 0 To M Begin Value2 = Value2 + MyArray[Value1]; End;

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

Input: MyArray [M] (NumericArray); If MyArray[0][10] > High Then {EasyLanguage instruction};

Когда массив передает значение (то есть, когда значение передается не ссылкой), невозможно назначать или изменять значения элементов массива. Однако значения могут читаться и использоваться в пределах тела функции, и Вы можете обратиться к предыдущим значениям элементов. Например, следующие инструкции составляют функцию по имени MaxValArray, которая находит максимальное значение, сохраненное в массиве (но не изменяет значения любого из элементов в пределах массива):

Input: MyNumericArray [M] (NumericArray); Variable: Result(0); Result = MyNumericArray[0]; For Value1 = 1 To M Begin If MyNumericArray [Value1] > Result Then Result = MyNumericArray [Value1]; End; MaxValArray = Result;

Когда массив передается ссылкой, все его значения могут изменяться в теле функции. Любые изменения, сделанные в функции будут отражены в торговом сигнале или методике анализа, которые вызывают функцию. Например, следующие инструкции составляют функцию по имени SortMyArray, которая принимает массив и сортирует его с использованием методики "пузырьковая сортировка" (то есть, пропускает значение в последнем элементе массива, заполняет каждый элемент значением в предыдущем элементе, и помещает последнее значение в первый элемент):

Input: MyArray [N] (NumericArrayRef); Variables: Done (False), Counter(0); Done = False; While Done = False Begin Done = True; For Counter = 0 To N-1 Begin If MyArray [Counter] > MyArray [Counter+1] Then Begin Value1 = MyArray [Counter] ; MyArray[Counter] = MyArray[Counter+1]; MyArray[Counter + 1] = Value1; Done = False; End; End; End; SortMyArray = 1;

Обратите внимание, что макет инструкции включен в вышеупомянутую функцию (подсвечено в полутоне). Функция возвращает значение 1; однако, в этом примере, истинная цель функции - манипулирование массивом, который Вы передаете ссылкой. Этот массив изменяется функцией, и изменение отражается в торговом сигнале или методике анализа, которые вызвали функцию, независимо от значения, возвращаемого функцией. Следующая инструкция вызывает функцию из вышеупомянутого примера.

Value1 = SortMyArray(MyArray[12]) ;

Эта инструкция может быть включена в любой торговый сигнал или методику анализа. В этом случае, значение, сохраненное в Value1 не важно. Однако, как только функцию вызывают, массив MyArray изменяется (в этом случае значение добавляется к массиву и сортируется по "пузырьковой" методике).

EasyLanguage - Методы вывода

В дополнение к обычным средствам представления графической информации, EasyLanguage обеспечивает много способов отобразить информацию об анализируемых данных. Среди самых полезных методов - Комментарий, окно Message Log, окно Debug и запись в файл. В этом разделе обсуждаются эти четыре альтернативных метода вывода. Работа с Комментарием Цель создания комментария для сигнала торговли, методики анализа, или функции состоит в том, чтобы послать дополнительную информацию об определенном ценовом баре, выбранной пользователем процедуры, к окну Expert Commentary. Посланная информация может быть чем угодно, что Вы хотите; например, рыночный комментарий или отладочные сообщения могут быть включены в текст комментария для пользователя. Пример комментария показан на Рисунке 2-11.
Рисунок 2-11. Диаграмма с окном Expert Commentary

Обратите внимание: В случае табличных приложений, подобных окну OptionStation Position Analysis, комментарий будет всегда основан на самом последнем баре, так как нет никакого способа выбрать исторический бар в табличном приложении. Важно помнить, что когда комментарий требуется для бара, стратегия торговли или методика анализа повторно полностью рассчитываются для всей диаграммы и каждого символа в таблице. Это необходимо, потому что из-за подпрограмм оптимизации, используемых EasyLanguage, некоторые вычисления выполняются только тогда, когда комментарий получен; поэтому, когда потребуется комментарий, эти вычисления должны быть выполнены с начала диаграммы или для полного набора данных. Зарезервированные слова для работы с комментарием описаны ниже. Commentary Это зарезервированное слово посылает выражение (или список выражений) к окну Expert Commentary для любого бара, выбранного на ценовой диаграмме (или последний бар в случае табличного приложения). Вы можете использовать это зарезервированное слово несколько раз. Синтаксис: Commentary(MyExpression); MyExpression - числовая, текстовая строка, или выражение true/false, которое нужно послать в окно Expert Commentary. Вы можете послать несколько выражений; они должны быть отделены запятыми. Чтобы включить перевод каретки в ваш Комментарий, используйте зарезервированное слово NewLine как выражение Commentary, где необходимо. Вместо этого Вы можете также использовать зарезервированное слово CommentaryCL (обсуждается ниже). Например, следующие инструкции выводят комментарий, показанный на Рисунке 2-12

Commentary ("This is commentary "); Commentary ("written in one line");

Рисунок 2-12. Окно Expert Commentary

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

Commentary("The 10-bar avg of the close", NewLine); Commentary("is:", Average (Close, 10));

Также, Вы можете создать связи в вашем тексте Commentary с Windows Media Player (чтобы запустить аудио клип) и к определениям Интерактивное Пользовательское Руководство. Связи - это слова в вашем Комментарии, которые появляются в отличном (от других) цвете и если произвести клик, то запускается аудио клип или появится указанное определение Интерактивного Пользовательского Руководства. Эти слова упоминаются как слова перехода. Чтобы создать слово перехода, которое запускает музыкальный (.WAV) файл, включают полное имя и путь к звуковому файлу, используя следующий синтаксис: \wb\we Например, чтобы связать ваш комментарий с файлом c: \windows\ding.wav, Вы могли записать следующую инструкцию:

Commentary ("This links to a file: \wbc:\ding.wav\we");

Чтобы создать слово перехода, которое открывает существующее определение Интерактивного Пользовательского Руководства, включают слово, используя следующий синтаксис: \pb\pe или \hb\he Окно Expert Commentary использует HELP_KEY WinHelp вызов API и отыскивает указанную тему Технологий TradeStation Интерактивного Пользовательского Руководства. Текстовая строка между \pb и \pe используется как ключевое слово, и "определение" добавляется в конец текстовой строки. Например, следующий синтаксис восстанавливает тему Bottom, определенную в Интерактивном Пользовательском Руководстве. \pbBottom\pe Текстовая строка между \hb и \he используется как ключевое слово, и "(Индикатор)" добавляется в конец текстовой строки. Например, следующий синтаксис восстанавливает тему ADX (Indicator) из Интерактивного Пользовательского Руководства. \hbADX\he Перед созданием слова перехода, удостоверьтесь, что определение существует в Интерактивном Пользовательском Руководстве. Определить, что слово существует, можно используя поиск Интерактивного Пользовательского Руководства. Вы можете создать слова перехода для любого элемента указателя, который имеет суффикс ", defined "или" (Indicator) ". CommentaryCL Это зарезервированное слово посылает выражение (или список выражений) в окно Expert Commentary для любого бара выбранного указателем Expert Commentary (или для последнего бара в случае табличного приложения). Вы можете использовать это зарезервированное слово несколько раз, и оно будет включать перевод каретки в конце каждого посланного выражения (или списка выражений). Синтаксис: CommentaryCL(MyExpression); MyExpression - это отдельное выражение или отделенный запятыми список числовых выражений, текстовых строк, или выражений true/false, которые посылаются в окно Expert Commentary. Например, следующие инструкции инициируют комментарий, показанный на Рисунке 2-13.

CommentaryCL ("The close of today is:", Close); CommentaryCL ("The 10-day average of the close is:"); Average (Close,10));

Рисунок 2-13. Окно Expert Commentary

Вы можете также создать связи в вашем тексте Commentary с Windows Media Player (чтобы запустить видео или аудио клип) используя зарезервированное слово CommentaryCL. Обратитесь к обсуждению слов перехода в описании зарезервированного слова Commentary. AtCommentaryBar Это зарезервированное слово возвращает значение "True" на баре, нажатом пользователем указателем Expert Commentary. Оно возвратит значение "False" для всех других баров. Это позволяет Вам оптимизировать ваши сигналы торговли, методы анализа, и функции для скорости, поскольку это позволит EasyLanguage пропускать все связанные с комментарием вычисления для всех баров, если они не требуют комментария. Синтаксис: AtCommentaryBar Различие между AtCommentaryBar и CommentaryEnabled (обсуждается ниже) - то, что CommentaryEnabled возвращает значение "True" для ВСЕХ баров, когда окно Expert Commentary является открытым, в то время как AtCommentaryBar возвращает значение "True" только для бара, нажатого указателем Expert Commentary. Например, следующие инструкции отображают с 50-барное среднее объема в окне Expert Commentary, но избегают вычисления этого среднего для любого другого бара диаграммы:

If AtCommentaryBar Then Commentary ("The 50-bar vol avg: ", Average (Volume, 50));

Обратите внимание: Хотя инструкции, которые следуют за этим зарезервированным словом, иногда игнорируются, сигнал торговли, методика анализа, или функция все еще принимает во внимание инструкции, когда это определяется количеством баров, необходимых для индикатора или изучения, чтобы исполнить его вычисления (MaxBarsBack), а также для расчета любых функций ряда в пределах инструкций. См. раздел "Использование Директив Компилятора Комментария " для информации относительно дополнительных зарезервированных слов, которые Вы можете использовать, чтобы иметь инструкции, которые оба игнорировали полностью. CommentaryEnabled Это зарезервированное слово возвращает значение "TRUE" только, когда окно Expert Commentary является открытым, и Комментарий требовали. Это позволяет Вам оптимизировать ваши сигналы торговли, методы анализа, и функции для скорости, поскольку это позволяет EasyLanguage исполнять связанные с комментарием вычисления только когда окно Expert Commentary является открытым. Синтаксис: CommentaryEnabled Различие между CommentaryEnabled и AtCommentaryBar - то, что CommentaryEnabled возвращает значение "TRUE" для ВСЕХ баров, когда окно Expert Commentary является открытым, в то время как AtCommentaryBar возвращает значение "TRUE" только для бара, нажатого с указателем Expert Commentary. Например, следующие инструкции вычисляют совокупный объем и активизируют строку, которая будет отображена в окне Expert Commentary:

If CommentaryEnabled Then Begin If Close > Close[1] Then Value1 = Value1 + Volume Else Value1 = Value1 - Volume; Commentary ("The value of the A/D line is: ", Value1); End;

Обратите внимание: Хотя инструкции, которые следуют за этим зарезервированным словом, иногда игнорируются, сигнал торговли, методика анализа, или функция все еще принимает во внимание инструкции, когда это определяет номер баров, необходимых для индикатора или изучения, чтобы исполнить его вычисления (MaxBarsBack), также любые функции ряда в пределах инструкций рассчитаны. См. раздел "Использование Директив Компилятора Комментария " для информации относительно дополнительных зарезервированных слов, которые Вы можете использовать, чтобы иметь инструкции, которые полностью игнорируют все условия. Использование Директив Компилятора Комментария Эти зарезервированные слова - директивы компилятора, и есть команда для вашего сигнала торговли, методика анализа, или функции, чтобы полностью игнорировать инструкции, которые следуют за зарезервированным словом, если alert включен для индикатора или изучения. Сигнал торговли, методика анализа, или функция не будут принимать во внимание инструкции после этих слов, даже когда это определяется количеством баров, необходимых для исполнения их вычисления, и при этом не вычисляются никакие функций ряда. #BeginCmtry Когда инструкции комментария не обязательна для нормального вычисления торгового сигнала, методики анализа или функции, то используют зарезервированное слово #BeginCmtry. Инструкции между этой директивой компилятора и зарезервированным словом #End вычисляются только тогда, когда требуется комментарий. Вы должны использовать зарезервированное слово #End с этим зарезервированным словом. Синтаксис:

#BeginCmtry; {EasyLanguage instruction(s)}; #End;

Например, индикатор, который вычисляет с 10-барный импульс цен закрытия, нуждается в десяти барах, чтобы запустить вычисление графика. Однако если комментарий добавляется к этому индикатору, и комментарий использует 50-барное среднее объема, то установка MaxBarsBack увеличивается до пятидесяти. Однако, 50-барное среднее используется только для комментария, так что нет никакой потребности иметь индикатор, ждущий пятьдесят баров перед предоставлением результатов, если Комментарий не требуется. Чтобы иметь график индикатора после 10 баров и игнорировать требование о 50 барах, индикатор может быть написан следующим образом:

Plot1( Close - Close[10], "Momentum"); #BeginCmtry; If Plot1 > 0 Then Commentary ("Momentum is positive, ") Else Commentary ("Momentum is negative, "); If Volume > Average(Volume, 50) Then Commentary (" and volume is greater than average.") Else Commentary (" and volume is lower than average."); #End;

Этот индикатор составляет график импульса и состояния комментария, вне зависимости от того, что импульс положителен или отрицателен, и если объем меньше среднего за 50 баров. Когда индикатор применен без использования комментарий, - единственное требование для запуска вычислений - наличие 10-и законченных баров. Когда комментарий требуется, то индикатор повторно рассчитывается, инструкции в пределах директив компилятора оцениваются, и новое минимальное количество требуемых баров - 50. Любые функции ряда в пределах этих зарезервированных слов также игнорируются. #BeginCmtryOrAlert Когда комментарий и alert инструкции переплетены, и комментарий, и alert инструкции не необходимы для нормального вычисления сигнала торговли, методики анализа, или функции, используют зарезервированное слово #BeginCmtryOrAlert. Инструкции между этой директивой компилятора и зарезервированным словом #End оцениваются только тогда, когда или комментарий требуются, или alert включен. Инструкции не рассматривают при определении установки MaxBarsBack, и любые функции ряда в пределах этих зарезервированных слов игнорируются. Вы должны использовать зарезервированное слово #End с этим зарезервированным словом. Синтаксис:

#BeginCmtryOrAlert; {EasyLanguage instruction(s)}; #End;

Например, использование того же самого индикатора, что описан в предыдущем зарезервированном слове, но alert вызывается, когда текущий объем вдвое превышает 50-барное среднее:

Plot1( Close - Close[10], "Momentum"); #BeginCmtryOrAlert; If Plot1 > 0 Then Commentary ("Momentum is positive, ") Else Commentary ("Momentum is negative, "); If Volume > Average (Volume, 50) Then Begin Commentary (" and volume is greater than average."); If Volume > 2 * Average(Volume, 50) Then Alert; End Else Commentary (" and volume is lower than average."); #End;

Использование Окна Файла регистрации Сообщения Вы можете послать любой тип информации в окно Message Log от торгового сигнала, методами анализа, или функции. Окно Message Log - активный документ, который постоянно находится в ProSuite Рабочем столе в пределах рабочего пространства точно так же как любое другое окно ProSuite. Оно имеет обширный интерфейс прикладной программы (API), который позволяет другим приложениям связывать с помощью интерфейса с ним, и записывать запросы к нему. Печать информации в Файл регистрации Сообщения должна быть сделана всякий раз, когда дополнительная информация, которую обычно не показывают в других местах, требуется от сигнала торговли, методики анализа, или функции. Примеры этого типа информации: специализированы сообщения или простые английские сообщения, которые нельзя показать должным образом в окне таблицы или диаграмме. Вы можете также послать информацию окну Debug EasyLanguage, которое постоянно находится в EasyLanguage PowerEditor, для использования при отладке ваших сигналов торговли, методов анализа, и функций. Обратитесь к следующему разделу для информации относительно посылки текста к окну Debug, файлу, или принтеру. Обратите внимание: До Service Pack 3 of Version 2000i, окно Message Log не устанавливается автоматически (если Вы не апгрейдите предыдущую версию). Если Вы не апгрейдите, и Вы хотите использовать окно, Вы должны выбрать инсталляцию окна из меню Custom инсталляции. Этот раздел предполагает, что оно установлено. MessageLog Это зарезервированное слово посылает выражение или отделенный запятыми список выражений в окно Message Log. Синтаксис:

MessageLog(Expression);

Выражение - любое выражение EasyLanguage, или отделенный запятыми список выражений. Выражения могут быть числовыми, true/false, или текстовая строка, или любая комбинация. Как упомянуто выше, окончательное выражение посылается в окно Message Log и отображается в реальном времени в окне. Файл регистрации Сообщения имеет ограничение в 255 символов. Например, следующие инструкции посылают дату и время, последнюю торговую цену, максимальную и минимальную цены текущего года, объем и средний объем для последнего бара диаграммы в Файл регистрации Сообщения:

If LastBarOnChart Then Begin MessageLog ("Average Volume:", Average (Volume, 50)); MessageLog ("Volume: ", Volume); MessageLog ("Highest High: ", HighY(0), "Lowest Low: ", LowY(0)); MessageLog ("Last: ", Close); MessageLog ("Date: ", ELDateToString (Date), "Time: ",Time); End;

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

MessageLog (Value1:N:M);

Value1 - любое числовое выражение, N - минимальное количество десятичных знаков, и М - количество десятичных знаков после запятой. Если числовое выражение, посылаемое Файлу регистрации Сообщения, имеет больше десятичных чисел, чем определено N, то зарезервированное слово MessageLog будет использовать необходимое количество цифр. Десятичные значения будут округлены к самому близкому значению. Например, предположим, что Value1 равно 3.14159, и мы написали следующее:

MessageLog (Value1:0:4);

Числовое выражение, отображенное в Файле регистрации Сообщения, было бы равно 3.1416. Посылка Информации в Окно Отладки, Файл, на Принтер Вы можете послать информацию от любого сигнала торговли, методики анализа, или функции в окно Debug. Это окно постоянно находится в EasyLanguage PowerEditor, и может использоваться, чтобы послать текст, который помог бы Вам видеть промежуточные вычисления, которые не отображаются в окончательных результатах сигнала торговли, методики анализа или функции, или любое сообщение, которое помогло бы определить точное поведение инструкции EasyLanguage. Окно Debug EasyLanguage не предлагает API, и при этом оно не может быть включено в рабочее пространство (оно постоянно находится в EasyLanguage PowerEditor), но оно очень эффективно и удобно для того, чтобы отладить команды. Обратите внимание: окно Debug заменило Файл регистрации Печати, который был доступен в предыдущих версиях TradeStation. Print Это зарезервированное слово посылает информацию Окну Отладки EasyLanguage, файлу, или заданному по умолчанию принтеру Windows. Независимо от того, откуда Вы посылаете информацию, зарезервированное слово Print всегда добавляет перевод каретки в конце выражения, так что каждая новая инструкция помещается в новую строку. Синтаксис:

Print([Printer,| File(""),] Expression );

- полный путь и имя файла, которому инструкция Print должна послать выражение(я), а Expression - любое выражение, или отделенный запятыми список выражений. Выражения могут быть числовыми, true/false, или текстовая строка (или любая комбинация). Чтобы использовать окно Debug EasyLanguage как метод вывода, включите список выражений без любой дополнительной информации. Например, следующая инструкция посылает дату, время, и близко к окну Debug:

Print (Date, Time, Close);

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

Print (Value1:N:M);

Значение 1 - любое числовое выражение, N - минимальное количество десятичных знаков, и М - количество десятичных знаков после запятой. Если числовое выражение, посылаемое окну Debug, имеет больше десятичных знаков, чем определено N, то инструкция Print использует необходимое количество цифр по мере необходимости, производя округление к самому близкому значению. Например, предположим, что Value1 равно 3.14159, и мы написали следующую инструкцию:

Print (Value1:0:4);

Числовое выражение, отображенное в окне Debug, было бы 3.1416. Как другой пример, чтобы форматировать цены закрытия, Вы можете использовать следующую инструкцию:

Print (ELDateToString (Date), Time, Close:0:4);

Чтобы послать информацию текущему принтеру, Printer должен быть первым выражением, включенным в круглые скобки зарезервированного слова. Например, следующая инструкция посылает дату, время, и закрытие каждого бара диаграммы к текущему принтеру:

Print (Printer, Date, Time, Close);

При использовании инструкции Print для исторических баров, на печать выводится множество строк на странице; однако, применение инструкции Print для реальных данных собирает на печать данные при закрытии каждого бара. Например, если стратегия торговли или методика анализа применены к диаграмме с 500 барами, и стратегией торговли или методика анализа посылает одну строку принтеру для каждого бара на диаграмме, первая распечатка будет состоять из 500 строк, с таким количеством строк на странице, какое каждая страница может содержать. Тогда как, если данные собираются в реальном времени, то одна строка будет посылаться принтеру при закрытии каждого бара (одна строка на страницу, каждый раз при закрытии бара). То же самое будет при посылке информации в файл, и для всех других приложений. Чтобы послать информацию в файл, первым выражением, включенным в круглые скобки зарезервированного слова должен быть File вместе с полным путем и именем файла, заключенным в кавычки. Например, следующая инструкция посылает дату EasyLanguage, время и закрытие каждого бара диаграммы в файл, вместо принтера:

Print (File("c:\tradestation\MyText.txt"), Date, Time, Close);

Важно: Каждый раз, когда сигнал торговли, методика анализа, или функция повторно рассчитаны, или удалены и повторно обращались к диаграмме, конечный файл записывается поверху. Также, Вы не можете использовать текстовое строковое выражение как имя файла, это должен быть фактический путь и имя файла. Обратитесь к обсуждению зарезервированного слова FileAppend (ниже) для информации относительно добавления в конец файл вместо того, чтобы записать поверх него. При посылке информации на принтер или в файл, мы рекомендуем Вам использовать зарезервированное слово FileAppend вместо Print. FileAppend Это зарезервированное слово создает и добавляет в конец текстовые строковые выражения в указанном файле. При посылке информации на принтер или в файл, мы рекомендуем Вам использовать это зарезервированное слово вместо Print. Синтаксис:

FileAppend("", Text);

- текстовое строковое выражение, представляющее полный путь и имя файла, а Text - текстовое строковое выражение, которое добавляется в конец к файлу. Это зарезервированное слово выводит текстовое строковое выражение в указанный файл. Оно не будет удалять конечный файл (а дописывать в него), когда стратегия торговли или методика анализа применены к диаграмме (или таблице) или повторно рассчитаны, оно не будет добавлять перевод каретки в конце выражения, посланного файлу и, наконец, оно выводит только текстовые строковые выражения. Это факт позволяет использовать текстовое строковое выражение как имя файла, что дает возможность пользователям определить имя файла, которое будет записано через переменную и/или inputs. Например, следующие инструкции используют имя символа как имя файла:

Variable: Txt(" "); Txt = "c:\My Documents\” + GetSymbolName + ".txt"; FileAppend (Txt, "This will be sent to a file");

Это зарезервированное слово обеспечивает альтернативу к инструкции Print, оно не удаляет конечный файл каждый раз, когда стратегия торговли или методика анализа применены или повторно рассчитаны. Конечный файл растет, пока он не отредактирован вручную или удален. Обратите внимание: Вы можете использовать зарезервированное слово FileDelete, чтобы удалить файл и имитировать поведение инструкции Print. Перевод каретки не добавляется до конца каждого посланного выражения; используйте зарезервированное слово NewLine всякий раз, когда Вы хотите включить перевод каретки. Например, следующая инструкция пишет текст в файл - одна строка для каждого бара на диаграмме:

FileAppend ("c:\My Documents\text.txt", "This text will be sent to a file" + NewLine);

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

FileAppend ("c:\My Documents\text.txt", ELDateToString (Date) + NumToStr (Close, 2));

Обратите внимание, что дата текущего бара включена, но как параметр для зарезервированного слова ELDateToString, который конвертирует дату EasyLanguage (формат YYYMMDD) в текстовое строковое выражение. Аналогично, заключительная цена включена как параметр для NumToStr, который конвертирует числа в текстовые строковые выражения.

EasyLanguage - Текстовый объект на ценовых диаграммах

Другой способ отображать информацию на экране состоит в том, чтобы записать текст на ценовой диаграмме. Первое понятие, которое Вы должны понять, чтобы начать работать с текстом - то, что каждый образец объекта рисунка текста на диаграмме, называемый текстовым объектом, имеет индивидуальный идентифицирующий номер. Все зарезервированные слова EasyLanguage используют номер ID, чтобы обратиться к определенному текстовому объекту. Чтобы увидеть номер ID для текстового объекта, дважды щелкните текстовый объект, тогда отобразится диалоговое окно Format Text; заголовок будет содержать номер ID, как показано на Рисунке 2-14.
Рисунок 2-14. Форматирование текстового объекта на диаграмме
Вы можете использовать текстовые рисунки в торговых сигналах, методах анализа (индикаторы и изучения) или функциях. Когда Вы используете текстовые объекты в торговых сигналах, методах анализа или функциях, они добавляются к диаграмме, используя заданный по умолчанию размер, цвет, и выравнивание. Эти атрибуты могут измениться с использованием зарезервированных слов текстовых объектов EasyLanguage. Для размещения текста на диаграмме, Вы должны привязать определенную точку на диаграмме к текстовому объекту. Вы определяете точку, указывая дату и время (ось X) и цену (ось Y). Это - основная информация, которой Вы управляете при работе с текстовыми объектами; дополнительная информация, которой Вы управляете с помощью зарезервированных слов - цвет, текстовая строка и выравнивание текста. Все зарезервированные слова, используемые для работы с текстовыми объектами, возвращают числовое значение, представляющее результат операции, которую они выполнили. Если зарезервированное слово было способно выполнить свою задачу успешно, то оно возвратит значение 0; однако, если произошла ошибка выполнения, то зарезервированное слово возвратит числовое значение, представляющее определенную ошибку. Следующая таблица перечисляет возможные возвращаемые значения текстовых объектных зарезервированных слов.
Всякий раз, когда любое из текстовых объектных зарезервированных слов неспособно исполнить свою задачу и возвращает ошибку, сигнал торговли, методика анализа, функция прекращает управление всеми текстовыми объектами от того бара и дальше вперед. Сигнал торговли, методика анализа или сама функция продолжают вычисляться, но все инструкции, которые включают текстовые объектные зарезервированные слова, возвратят значение - 9 (Предыдущая ошибка отказа) и не будут исполнять назначенное действие. Также, очень важно, что Вы сохраняете номер ID текстовых объектов на ценовой диаграмме; если у Вас появится намерение изменить или обратиться к этому объекту, Вы всегда нуждаетесь в номере ID. Если Вы добавляете множество текстовых объектов на ценовую диаграмму, то мы рекомендуем Вам использовать массивы, чтобы хранить их номера ID (обратитесь к разделу "Понятие Массивов" на странице 45 для получения информации относительно использования массивов). Зарезервированные слова Текстовых Объектов Далее - список всех зарезервированных слов текстовых объектов, доступных в EasyLanguage. Text_New Это зарезервированное слово добавляет указанную текстовую строку к ценовой диаграмме, в указанном баре и ценовом значении. Оно возвращает числовое выражение, соответствующее номеру ID текстового объекта, который добавляют к диаграмме. Если Вы хотите изменить текстовый объект, очень важно, что Вы всегда фиксируете и сохраняете этот номер; номер ID - единственный способ сослаться на определенный текстовый объект. Синтаксис:

Value1 = Text_New (BarDate, BarTime, Price, "MyText")

Параметры: BarDate и BarTime - числовые выражения, соответствующие дате и времени, соответственно, для бара, на котором Вы хотите прикрепить текстовый объект, Price - числовое выражение, представляющее ценовое значение, которое закрепляется за текстовым объектом, и MyText - текстовое строковое выражение, которое добавляется к ценовой диаграмме. Все текстовые объекты прикрепляются в определенном баре и ценовом значении на ценовой диаграмме. Вы должны обеспечить эту информацию к зарезервированному слову Text_New для сигнала торговли, методики анализа, или функции, чтобы добавить текстовый объект к диаграмме. Примечания: Value1 - любая числовая переменная или массив, содержит номер ID для нового текстового объекта. Текстовые объекты добавляются к диаграмме с использованием цвета, вертикального и горизонтального выравнивания по умолчанию для данного приложения. Вы можете изменить любое из этих свойств, используя зарезервированные слова, перечисленные в этом разделе. Пример: Например, следующие инструкции добавляют текстовую строку "Key" к цене диаграммы каждый раз, когда выполняется разворотная модель:

Variable: ID (-1); If Low < Low[1] AND Close > High[1] Then ID = Text_New (Date, Time, Low, "Key");

Text_Delete Это зарезервированное слово удаляет из диаграммы текстовый объект с номером ID, который соответствует указанному. Важно помнить, что, если используется недопустимый номер ID, зарезервированное слово возвратит значение - 2, и никакие дополнительные операции не будут выполняться ни на каких текстовых объектах сигналом торговли, методикой анализа, или функцией, которая генерировала ошибку. Синтаксис:

Value1 = Text_Delete(Text_ID)

Параметры: Text_ID - числовое выражение, представляющее идентификационный номер текстового объекта для удаления. Примечания: Value1 - любая числовая переменная или массив. Вы должны назначить текстовое объектное зарезервированное слово на числовую переменную или массив так, чтобы Вы могли определить, действительно ли зарезервированное слово выполнило свою операцию успешно. Пример: Следующие инструкции записывают текстовую строку "Key" везде, где есть ключевая разворотная модель на ценовой диаграмме, и удаляет старый текст из диаграммы, поскольку найдены новые ключевые разворотные модели:

Variables: OldKeyID(-1), ID(-1); If Low < Low[1] AND Close > High[1] Then Begin OldKeyID = ID; ID = Text_New (Date, Time, Low, "Key"); If OldKeyID <> -1 Then Value1 = Text_Delete (OldKeyID); End;

В вышеупомянутом примере, мы объявляем, что две переменные содержат Текстовые ID для существующих и новых текстовых объектов. Когда мы находим новую разворотную модель, мы назначаем номер ID текущего текста на переменную OldKeyID. Затем мы создаем новый текстовый объект при новой разворотной модели. Наконец, мы удаляем текстовый объект с номером ID, содержащимся в переменной OldKeyID. Мы сначала проверяем OldKeyID, чтобы он был (-1), потому что он будет – (1), пока мы не нарисуем второй текстовый объект на диаграмме, а мы не хотим ссылаться на текстовый объект, который не существует. Text_GetColor Это зарезервированное слово возвращает числовое выражение, соответствующее цвету, назначенному на указанный текстовый объект. Важно помнить, что, если используется недопустимый номер ID , то возвратится значение - 2, и никакие дополнительные операции не будут выполнены ни на каких текстовых объектах сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Синтаксис:

Value1 = Text_GetColor(Text_ID)

Параметры: Text_ID - числовое выражение, представляющее номер ID текстового объекта, которому назначается цвет. Примечания: Value1 - любая числовая переменная или массив. Вы должны назначить текстовое объектное зарезервированное слово на числовую переменную или массив так, чтобы Вы могли определить, действительно ли зарезервированное слово выполнило свою операцию успешно. Для получения списка поддерживаемых цветов, обратитесь к Приложению B этой книги. Пример: Например, следующая инструкция записывает текстовую строку "Key" везде, где есть разворотная модель на ценовой диаграмме, и сравнивает цвет текстового объекта с фоном ценовой диаграммы. Если цвета одинаковы, то индикатор рисует текстовую строку с использованием текстовых объектов индикатора использованием другого цвета:

Variables: ID(-1), TxtColor(0); If Low < Low[1] AND Close > High[1] Then Begin ID = Text_New (Date, Time, Low, "Key"); TxtColor = Text_GetColor (ID) ; If TxtColor = GetBackGroundColor Then Value1 = Text_SetColor (ID, TxtColor + 1); End;

В вышеупомянутом примере, мы сначала объявляем две переменные, одну, чтобы хранить ID номер текстового объекта, вторую - для хранения номера, представляющего цвет текстового объекта. Затем, когда мы находим ключевой разворот, мы вставляем текстовый объект в минимальном значении бара. Мы также получаем цвет текстового объекта и затем сравниваем цвет текстового объекта с цветом фона диаграммы. Если они одинаковы, то мы, изменяем цвет текстового объекта (добавляя единицу к существующему номеру цвета). Text_GetDate Это зарезервированное слово возвращает числовое выражение, соответствующее дате EasyLanguage бара, на котором прорисовывается указанный текстовый объект. Важно помнить, что, если используется недопустимый номер ID, то возвращается значение - 2, и никакие дополнительные операции не будут выполнены ни на каких текстовых объектах торговым сигналом, методикой анализа или функцией, которая генерировала ошибку. Синтаксис:

Value1 = Text_GetDate(Text_ID)

Параметры: Text_ID - числовое выражение, представляющее номер ID текстового объекта, дату которого Вы хотите получить. Примечания: Value1 может быть любая числовая переменная или массив. Полученная дата EasyLanguage назначается на эту переменную или массив. Пример: Следующая инструкция назначает на переменную Value1 дату EasyLanguage бара, на котором прорисовывается текстовый объект с ID номер 5:

Value1 = Text_GetDate(5);

Text_GetFirst Вы можете использовать текстовые объекты в торговых сигналах, методах анализа (индикаторы и изучения) или функциях. EasyLanguage дает возможность Вам искать текстовые объекты, основываясь на том, как они были созданы. Это зарезервированное слово возвращает номер ID самого старого текстового объекта на ценовой диаграмме (прорисованном первым). Важно помнить, что, если используется недопустимый номер ID, то зарезервированное слово возвратит значение - 2, и никакие дополнительные операции не будут выполнены ни на каких текстовых объектах торговым сигналом, методикой анализа или функцией, которая генерировала ошибку. Синтаксис:

Value1 = Text_GetFirst(Num)

Параметры: Num - числовое выражение, представляющее тип текстового объекта. Возможные значения для Num:
Если используется значение, отличное от 1, 2 или 3 - EasyLanguage примет значение 3. Примечания: Value1 - любая числовая переменная или массив, который содержит номер ID желательного текстового объекта. Пример: Следующие инструкции удаляют самый старый текстовый объект на ценовой диаграмме, прорисованный сигналом торговли, методикой анализа или функцией:

Value1 = Text_GetFirst(1); Value2 = Text_Delete (Value1);

Обратите внимание: Когда самый старый (первый) текстовый объект удален, следующий самый старый (второй) текстовый объект становится первым, прорисованным на ценовой диаграмме, и так далее. Text_GetHStyle Текстовый объект всегда прикрепляется к определенному бару. Из-за этого есть три возможных пути горизонтально выровнять текстовый объект: налево от бара, к которому он прикреплен, направо, или центрировано. Это зарезервированное слово возвращает числовое значение, указывающее горизонтальное выравнивание текстового объекта. Синтаксис:

Value1 = Text_GetHStyle(Text_ID)

Параметры: Text_ID - числовое выражение, представляющее номер ID текстового объекта, значение горизонтальное выравнивания которого Вы хотите получить. Примечания: Value1 - любая числовая переменная или массив, который содержит информацию о горизонтальном выравнивании рассматриваемого текстового объекта. Зарезервированное слово может возвратить одно из этих трех значений:
Пример: Следующие команды получают горизонтальное выравнивание текстового объекта #10 и выравнивают его вправо от бара:

If Text_GetHStyle(10) <> 1 Then Value1 = Text_SetHStyle(1); Text_GetNext

Вы можете использовать текстовые объекты в торговых сигналах, методах анализа (индикаторы и изучения) или функциях. EasyLanguage дает возможность Вам искать текстовые объекты, основываясь на том, как они были созданы. Применяемое приложение хранит хронологический порядок всех текстовых объектов, которые добавлялись к диаграмме, и эта информация доступна в EasyLanguage. Это зарезервированное слово возвращает номер ID текстового объекта на ценовой диаграмме, добавленного непосредственно после указанного текстового объекта. Вы можете использовать это зарезервированное слово вместе с зарезервированным словом Text_GetFirst, чтобы пройти все текстовые объекты в ценовой диаграмме. Важно помнить, что, если используется недопустимый номер ID, то зарезервированное слово возвратит значение - 2, и никакие дополнительные операции не будут выполнены ни на каких текстовых объектах сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Синтаксис: Value1 = Text_GetNext (Text_ID, Num) Параметры: Текст ID - числовое выражение, представляющее номер ID текстового объекта, а Num - числовое выражение, представляющее тип текстового объекта. Возможные значения для Num:
Если используется значение, отличное от 1, 2 или 3, то EasyLanguage примет значение 3. Примечания: Value1 - любая числовая переменная или массив, содержащая номер ID текстового объекта, который добавляют после указанного текстового объекта. Пример: Следующие инструкции устанавливают цвет всех текстовых объектов в диаграмме к желтому:

Value1 = Text_GetFirst(3); While Value1 <> -2 Begin Value2 = Text_SetColor (Value1, #CCFFCC); Value1 = Text_GetNext (Value1, 3); End;

В вышеупомянутом примере, мы получаем номер ID для первого текстового объекта, прорисованного на диаграмме. Затем мы устанавливаем его цвет в желтый. Далее получаем номер ID следующего текстового объекта и устанавливаем его цвет в желтый. Этот цикл продолжается до тех пор, пока Text_GetNext не возвратит - 2, что означает, что на ценовой диаграмме больше нет текстовых объектов. Имейте в виду, что когда сигнал торговли, методика анализа или функция возвращают -2, это означает, что на диаграмме больше не может быть прорисован текстовый объект. Text_GetString Это зарезервированное слово возвращает текстовое строковое выражение, соответствующее указанному текстовому объекту. Важно помнить, что если используется недопустимый номер ID, зарезервированное слово возвратит значение - 2, и никакие дополнительные операции не будут выполнены ни на каких текстовых объектах сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Синтаксис:

MyText = Text_GetString (Text_ID)

Параметры: Text_ID - числовое выражение, представляющее номер ID текстового объекта, текстовое строковое выражение которого Вы хотите получить. Примечания: MyText - любая текстовая переменная или массив, содержит текстовое строковое выражение, соответствующее текстовому объекту с указанным номером ID. Пример: Следующие инструкции выводят содержание текстового объекта #5 в окно Debug:

Variable: MyText (" "); Print (Text_GetString(5));

Text_GetTime Это зарезервированное слово возвращает числовое выражение, соответствующее времени EasyLanguage бара, к которому указанный текстовый объект прикреплен. Важно помнить, что если используется, недопустимый номер ID, то зарезервированное слово возвратит значение - 2, и никакие дополнительные операции не будут выполнены ни на каких текстовых объектах сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Синтаксис:

Value1 = Text_GetTime (Text_ID)

Параметры: Text_ID - числовое выражение, представляющее номер ID текстового объекта, для которого Вы хотите получить время. Примечания: Value1 - любая числовая переменная или массив, содержит время указанного текстового объекта. Пример: Следующая инструкция назначает EasyLanguage время бару, к которому прикреплен текстовый объект с ID номер 5 на переменную Value1:

Value1 = Text_GetTime(5);

Text_GetValue Текстовые объекты прикреплены в определенном ценовом значении на ценовой диаграмме. Данное зарезервированное слово возвращает числовое значение, соответствующее цене, по которой указанный текстовый объект прикреплен. Важно помнить, что, если используется недопустимый номер ID, то зарезервированное слово возвратит значение - 2, и никакие дополнительные операции не будут выполнены ни на каких текстовых объектах сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Синтаксис:

Value1 = Text_GetValue (Text_ID)

Параметры: Text_ID - числовое выражение, представляющее номер ID текстового объекта, ценовое значение которого Вы хотите получить. Примечания: Value1 - любая числовая переменная или массив, содержит ценовое значение, в котором указанный объект прикреплен. Пример: Например, следующая инструкция может использоваться, чтобы вывести в окно Debug значение, в котором текстовый объект #10 прикреплен:

Print (Text_GetValue(10));

Text_GetVStyle Текстовый объект всегда прикрепляется в определенном ценовом значении на ценовой диаграмме, и есть три возможных способа выровнять текстовый объект вертикально: по верхнему краю, по нижнему краю, или по центру. Данное зарезервированное слово возвращает числовое значение, представляющее вертикальное выравнивание указанного текстового объекта. Важно помнить, что если используется недопустимый номер ID, то зарезервированное слово возвратит значение - 2, и никакие дополнительные операции не будут выполнены ни на каких текстовых объектах сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Синтаксис:

Value1 = Text_GetVStyle (Text_ID)

Параметры: Text_ID - числовое выражение, представляющее номер ID текстового объекта, вертикальное выравнивание которого Вы хотите получить. Примечания: Value1 может быть любая числовая переменная или массив, содержит ценовое значение, в котором указанный объект прикреплен. Это зарезервированное слово возвращает одно из трех значений:
Пример: Следующие команды получают вертикальное выравнивание текстового объекта #10 и устанавливают его в Основании:

If Text_GetHStyle(10) <> 1 Then Value1 = Text_SetVStyle(1);

Text_SetColor Это зарезервированное слово устанавливает цвет указанного текстового объекта. Синтаксис:

Value1 = Text_SetColor (Text_ID, Color)

Параметры: Text_ID - числовое выражение, представляющее номер ID текстового объекта, а Color - цвет EasyLanguage или его числовой эквивалент. Для получения списка доступных цветов, обратитесь к Приложению B этой книги. Примечания: Value1 - любая числовая переменная или массив. Вы должны назначить текстовый объект зарезервированным словом на числовую переменную или массив так, чтобы Вы могли определить, действительно ли зарезервированное слово выполнило свою операцию успешно. Важно помнить, что, если используется недопустимый номер ID, то зарезервированное слово возвратит значение - 2, и никакие дополнительные операции не будут выполнены ни на каких текстовых объектах сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Пример: Следующий индикатор отображает слово "Key"везде, где есть ключевая модель разворота на ценовой диаграмме, и сравнивает цвет текстового объекта с фоном ценовой диаграммы. Если есть соответствие цветов, то индикатор настраивает текстовый объект на отличный цвет (путем добавления 1 к текущему цвету):

Variables: ID(-1), TxtColor(0); If Low < Low[1] AND Close > High[1] Then Begin ID = Text_New (Date, Time, Low, "Key"); TxtColor = Text_GetColor (ID); If TxtColor = GetBackgroundColor Then Value1 = Text_SetColor (ID, TxtColor + 1); End;

Text_SetLocation

Все текстовые объекты прикреплены в определенной области и ценовом значении на ценовой диаграмме. Это зарезервированное слово изменяет точку, в которой прикреплен указанный текстовый объект. Синтаксис:

Value1 = Text_SetLocation (Text_ID, BarDate, BarTime, Price)

Параметры: Текст ID - числовое выражение, представляющее ID номер текстового объекта для модификации; BarDate и BarTime - числовые выражения, представляющие новую дату и время EasyLanguage, соответственно, чтобы прикрепить текстовый объект; и Price - новое ценовое значение, чтобы прикрепить текстовый объект. Примечания: Value1 - любая числовая переменная или массив. Вы должны назначить текстовое объектное зарезервированное слово на числовую переменную или массив так, чтобы Вы могли определить, действительно ли зарезервированное слово выполнило его операцию успешно. Важно помнить, что, если используется недопустимый номер ID, то зарезервированное слово возвратит значение - 2, и никакие дополнительные операции не будут выполнены ни на каких текстовых объектах сигналом торговли, методикой анализа, или функцией, которая генерировала ошибку. Мы рекомендуем, чтобы Вы изменяли местоположение текстового объекта, а не удаляли текстовый объект и вставляли новый. Настройка существующего объекта быстрее и генерирует меньше номеров ID, за которыми в дальнейшем приходится следить. Пример: Эти инструкции отображают название символа выше первого бара на диаграмме (после MaxBarsBack) и затем изменяют местоположение текста так, чтобы отобразить его на последнем баре диаграммы:

If BarNumber = 1 Then Value1 = Text_New (Date, Time, High *1.01, GetSymbolName); Value2 = Text_SetLocation (Value1, Date, Time, High * 1.01);

Text_SetString Это зарезервированное слово изменяет текстовое строковое выражение указанного текстового объекта. Синтаксис:

Value1 = Text_SetString (Text_ID, "MyText")

Параметры: Text_ID - числовое выражение, представляющее номер ID текстового объекта, текстовое строковое выражение которого Вы хотите изменить, и MyText - новое текстовое строковое выражение для текстового объекта. Примечания: Value1 - любая числовая переменная или массив. Вы должны назначить текстовое объектное зарезервированное слово на числовую переменную или массив так, чтобы Вы могли определить, действительно ли зарезервированное слово выполнило свою операцию успешно. Важно помнить, что, если используется недопустимый номер ID , зарезервированное слово возвратит значение - 2, и никакие дополнительные операции не будут выполнены ни на каких текстовых объектах сигналом торговли, методикой анализа, или функцией, которая генерировала ошибку. Мы рекомендуем, чтобы Вы изменяли текстовое строковое выражение текстового объекта, а не удаляли текстовый объект и вставляли новый. Изменение существующего текстового объекта быстрее и генерирует меньше номеров ID, за которыми в дальнейшем приходится следить. Пример: Эти инструкции отображают цену закрытия символа выше первого бара в диаграмме (после MaxBarsBack) и затем изменяют местоположение текста и текста отображает цену закрытия последнего бара на диаграмме:

If BarNumber = 1 Then Value1=Text_New (Date,Time,High*1.01, NumToString (Close,2)); Value2 = Text_SetLocation (Value1, Date, Time, High * 1.01); Value3 = Text_SetString (Value1, NumToString (Close, 2));

Text_SetStyle Текстовый объект всегда прикрепляется в определенном баре и ценовом значении. Есть три горизонтальных параметра настройки выравнивания: влево от бара, к которому он прикреплен (текстовый объект), вправо, или по центру. Также есть три вертикальных параметра настройки выравнивания: по вершине указанной цены, по основанию или по центру. Это зарезервированное слово изменяет горизонтальное и вертикальное выравнивание указанного текстового объекта. Синтаксис:

Value1 = Text_SetStyle (Text_ID, HVal, VVal)

Параметры: Text ID - числовое выражение, представляющее номер ID текстового объекта, выравнивание которого Вы хотите изменить, а HVal, и VVal - числовые выражения, представляющие горизонтальное и вертикальное выравнивание текстового объекта, соответственно.
Если нет никаких текстовых объектов с номером ID, указанным Вами, или если операция всегда дает сбой, то это зарезервированное слово возвратит числовое выражение, соответствующее одному из EasyLanguage для кодов ошибки объектов, и никакие дополнительные операции не будут выполнены ни на каких текстовых объектах сигналом торговли, методикой анализа, или функцией, которая генерировала ошибку. Примечания: Value1 - любая числовая переменная или массив. Вы должны назначить текстовое объектное зарезервированное слово на числовую переменную или массив так, чтобы Вы могли определить, действительно ли зарезервированное слово выполнило свою операцию успешно. Пример: Следующая инструкция изменяет выравнивание текстового объекта #3 , так что текстовый объект выравнивается вправо и находится выше указанной цены:

Value1 = Text_SetStyle(3, 1, 1) ;

EasyLanguage - Trendlines на ценовых диаграммах

Вы можете рисовать и управлять trendlines на ценовой диаграмме от сигнала торговли, методики анализа (индикатора и изучения) или функции. Самая первая концепция, которую Вы должны понять, чтобы начать работать с trendlines - то, что каждый образец trendline, рисующего объект на диаграмме имеет отличный идентификационный (ID) номер. Все команды EasyLanguage используют номер ID, чтобы обратиться к определенной trendline. Чтобы увидеть номер ID trendline, дважды щелкните trendline, чтобы отобразить диалоговое окно Format Trendline; заголовок будет содержать номер ID, как показано на Рисунке 2-15.
Рисунок 2-15. Форматирование trendline на диаграмме

Trendlines добавляются к диаграмме, используя заданные по умолчанию свойства (то есть, цвет, толщину, тип линии, состояние продления, и состояние alert) графического приложения. Вы можете изменить эти атрибуты, используя trendline-связанные зарезервированные слова. Чтобы разместить trendline на диаграмме, Вы должны определить ее начальную и конечную точки. Каждая точка определяется с использованием даты и времени (ось X) и ценового значения (ось Y). Это - основная информация, которой Вы управляете при работе с trendlines; дополнительная информация, который Вы управляете с помощью зарезервированных слов, включает цвет, толщину, и тип линии, а так же состояние продления линии и alert. Все зарезервированные слова, используемые в работе с trendlines, возвращают числовое значение, представляющее результат операции, которую они выполнили. Если зарезервированное слово было способно выполнить свою задачу успешно, то оно возвратит значение 0; однако, если произошла ошибка, то зарезервированное слово возвращает числовое значение, представляющее определенную ошибку. Следующая таблица перечисляет возможные возвращаемые значения trendline зарезервированных слов:
Всякий раз, когда любое из trendline зарезервированных слов неспособно выполнить свою задачу и возвращает ошибку, сигнал торговли, методика анализа или функция прекращает управлять всеми trendlines от данного бара и далее вперед. Сигнал торговли, методика анализа или функция продолжат вычисления, но все инструкции, которые включают trendline зарезервированные слова, возвратят значение-9 (Предыдущая ошибка отказа) и не будут исполнять предназначенное действие. Если Вы имеете намерение изменить или обратиться к trendline, прорисованной на ценовой диаграмме, то Вы должны сохранить номер ID trendline. Если Вы добавляете множество trendlines на ценовую диаграмму, то мы рекомендуем Вам использовать массивы, чтобы сохранить их номера ID. Trendline Зарезервированные слова Далее - список всех trendline зарезервированных слов, доступных в EasyLanguage. TL_New Это зарезервированное слово добавляет trendline с указанными точками начала и конца к ценовой диаграмме. Оно возвращает числовое выражение, соответствующее номеру ID trendline, который добавляют к диаграмме. Если Вы хотите изменить trendline, всегда очень важно, чтобы Вы зафиксировали и сохранили номер ID - единственный способ сослаться на определенный trendline. Синтаксис:

Value1 = TL_New (iBarDate, iBarTime, iPrice, eBarDate, eBarTime, ePrice)

Параметры: iBarDate, iBarTime, иiPrice - числовые выражения, соответствующие дате, времени и цене соответственно, начальной точки; eBarDate, eBarTime, иePrice - числовые выражения, соответствующие дате, времени и цене соответственно, конечной точки trendline. Примечания: Value1 - любая числовая переменная или массив, содержит номер ID для нового trendline. Необходимо минимум две различные точки, чтобы нарисовать trendline на ценовой диаграмме, и это - информация, которую Вы должны обеспечить к TL_New зарезервированному слову, чтобы нарисовать trendline на ценовой диаграмме от сигнала торговли, методики анализа или функции. Trendlines добавляются к диаграмме, используя заданный по умолчанию в графическом приложении набор свойств. Поскольку Вы все будете видеть, то Вы можете изменить любое из этих свойств, используя зарезервированные слова, перечисленные в данном разделе. Например, следующие инструкции добавляют trendline к ценовой диаграмме (и продлевают ее вправо) каждый раз, когда есть разворотная модель:

Variable: ID (-1); If Low < Low[1] AND Close > High[1] Then Begin ID = TL_New(Date[1], Time[1], Low, Date, Time, Low); Value1 = TL_SetExtRight (ID, True); End;

TL_Delete Это зарезервированное слово удаляет указанный trendline из ценовой диаграммы. Синтаксис:

Value1 = TL_Delete (Tl_ID)

Параметры: Tl_ID - числовое выражение, представляющее номер ID trendline, который необходимо удалить. Примечания: Value1 - любая числовая переменная или массив. Вы должны назначить trendline зарезервированное слово на числовую переменную или массив так, чтобы Вы могли определить, действительно ли зарезервированное слово выполнило свою операцию успешно. Важно помнить, что, если используется недопустимый номер ID , то зарезервированное слово возвратит значение -2, и никакие дополнительные операции не будут выполнены ни на каком trendlines сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Пример: Следующие инструкции рисуют trendline при обнаружении разворотной модели и продлевают ее вправо и, кроме того, удаляют старый trendline из диаграммы после того как найдена новая разворотная модель:

Variables: OldKeyID(-1), ID(-1); If Low < Low[1] AND Close > High[1] Then Begin OldKeyID = ID; ID = TL_New(Date[1], Time[1], Low, Date, Time, Low); Value1 = TL_SetExtRight (ID, True); If OldKeyID <> -1 Then Value1 = TL_Delete (OldKeyID) ; End;

В вышеупомянутом примере мы сначала объявляем две переменные, одну, чтобы считать номер ID старого trendline, и вторую, чтобы держать номер ID для нового trendline. Когда мы находим новую разворотную модель, мы сохраняем номер ID существующего trendline в OldKeyID, и создаем новый trendline в минимальном значении бара разворотной модели и продлеваем его вправо. Затем мы удаляем старый trendline. Перед удалением старого trendline, мы сначала проверяем, что номер ID в OldKeyID - не-1, пока вторая trendline не прорисована. Таким образом, мы не делаем ссылку на недопустимый номер ID. TL_GetAlert Это зарезервированное слово получает установку alert для указанного trendline. Синтаксис:

Value1 = TL_GetAlert (Tl_ID)

Параметры: Tl_ID - числовое выражение, представляющее номер ID trendline, состояние alert которого Вы хотите получить. Примечания: Value1 может быть любая числовая переменная или массив, и которая содержит состояние alert. Это зарезервированное слово возвращает одно из этих трех значений:
Alert, установленный на Breakout on Close вызывается, когда на предыдущем баре закрытие символа было ниже чем trendline, а на текущем баре закрытие выше чем trendline. Alert, установленный на Breakout Intrabar вызывается, когда текущая цена пересекает trendline. Пример: Следующая инструкция проверяет статус Breakout Intrabar для trendline #10 и, если нет установки на Breakout on Close, то устанавливает Alert Breakout on Close:

If TL_GetAlert(10) <> 2 Then Value1 = TL_SetAlert (10, 2);

TL_GetBeginDate Это зарезервированное слово возвращает дату начальной точки trendline. Точка начала - та, что с более ранней датой. Если trendline расположен вертикально, то предполагается что нижняя из двух точек является начальной точкой. Синтаксис:

Value1 = TL_GetBeginDate (Tl_ID)

Параметры: Tl_ID - числовое выражение, представляющее номер ID trendline, начальную дату которого Вы хотите получить. Примечания: Value1 - любая числовая переменная или массив, содержит дату начальной точки. Важно помнить, что если используется недопустимый номер ID , то зарезервированное слово возвратит значение -2, и никакие дополнительные операции не будут выполнены ни на каком trendlines сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Пример: Следующая инструкция назначает дату EasyLanguage бара, используемого как точка начала для trendline с ID номер 5, переменной Value1:

Value1 = TL_GetBeginDate(5) ;

TL_GetBeginTime Это зарезервированное слово возвращает время начальной точки trendline. Точка начала - та, что с более ранней датой. Если trendline расположен вертикально, то предполагается, что нижняя из двух точек является начальной точкой. Синтаксис:

Value1 = TL_GetBeginTime (Tl_ID)

Параметры: Tl_ID - числовое выражение, представляющее номер ID trendline, начальное время которого Вы хотите получить. Примечания: Value1 - любая числовая переменная или массив, содержит дату начальной точки. Важно помнить, что, если используется недопустимый номер ID , то зарезервированное слово возвратит значение -2, и никакие дополнительные операции не будут выполнены ни на каком trendlines сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Пример: Следующая инструкция назначает время EasyLanguage бара, используемого как точка начала для trendline с ID номер 5, переменной Value 1:

Value1 = TL_GetBeginTime(5) ;

TL_GetBeginVal Это зарезервированное слово возвращает числовое выражение, соответствующее ценовому значению, используемому как начальная точка trendline. Начальная точка trendline - та, что с более ранней датой; если trendline расположен вертикально, то предполагается, что нижняя из двух точек является начальной точкой. Синтаксис:

Value1 = TL_GetBeginVal (Tl_ID)

Параметры: Tl_ID - числовое выражение, представляющее номер ID trendline, начальное ценовое значение которого Вы хотите получить. Примечания: Value1 - любая числовая переменная или массив, содержит ценовое значение начальной точки trendline. Важно помнить, что, если используется недопустимый номер ID , то зарезервированное слово возвратит значение -2, и никакие дополнительные операции не будут выполнены ни на каком trendlines сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Пример: Следующая инструкция назначает ценовое значение начальной точки trendline #5 переменной Value1:

Value1 = TL_GetBeginVal(5) ;

TL_GetColor Это зарезервированное слово возвращает числовое выражение, соответствующее цвету, назначенному на указанный trendline. Синтаксис:

Value1 = TL_GetColor (Tl_ID)

Параметры: Tl_ID - числовое выражение, представляющее номер ID trendline, цвет которого Вы хотите получить. Примечания: Value1 - любая числовая переменная или массив, содержит цвет EasyLanguage или числовой эквивалент указанного trendline. Важно помнить, что, если используется недопустимый номер ID , то зарезервированное слово возвратит значение -2, и никакие дополнительные операции не будут выполнены ни на каком trendlines сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Для получения списка поддерживаемых цветов обратитесь к Приложению B этой книги. Пример: Следующие инструкции рисуют trendline в минимальной значении каждой разворотной модели. Если цвет trendline соответствует цвету фона диаграммы, то индикатор устанавливает trendline на отличный цвет (путем прибавления 1 к текущему цвету):

Variable: ID(-1); If Low < Low[1] AND Close > High[1] Then Begin ID = TL_New (Date[1], Time[1], Low, Date, Time, Low); Value1 = TL_GetColor (ID) ; If Value1 = GetBackGroundColor Then Value2 = TL_SetColor (ID, Value1 + 1); End;

TL_GetEndDate Это зарезервированное слово возвращает дату конечной точки trendline. Конечная точка trendline - та, что с более поздней датой; если trendline расположен вертикально, то предполагается, что верхняя из двух точек является конечной точкой. Синтаксис:

Value1 = TL_GetEndDate (Tl_ID)

Параметры: Tl_ID - числовое выражение, представляющее номер trendline, конечную дату которого Вы хотите получить. Примечания: Value1 - любая числовая переменная или массив, содержит дату начальной точки. Важно помнить, что, если используется недопустимый номер ID , то зарезервированное слово возвратит значение -2, и никакие дополнительные операции не будут выполнены ни на каком trendlines сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Пример: Следующая инструкция назначает дату EasyLanguage бара, используемого как конечная точка для trendline с ID номер 5, переменной Value1:

Value1 = TL_GetEndDate(5);

TL_GetEndTime Это зарезервированное слово возвращает время конечной точки trendline. Конечная точка trendline - та, что с более поздней датой; если trendline расположен вертикально, то предполагается, что верхняя из двух точек является конечной точкой. Синтаксис:

Value1 = TL_GetEndTime (Tl_ID)

Параметры: Tl_ID - числовое выражение, представляющее номер ID trendline, конечное время которого Вы хотите получить. Примечания: Value1 - любая числовая переменная или массив, содержит дату конечной точки. Важно помнить, что, если используется недопустимый номер ID , то зарезервированное слово возвратит значение -2, и никакие дополнительные операции не будут выполнены ни на каком trendlines сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Пример: Следующая инструкция назначает время EasyLanguage бара, используемого как конечная точка для trendline с ID номер 5, переменной Value1:

Value1 = TL_GetEndTime(5);

TL_GetEndVal Это зарезервированное слово возвращает числовое выражение, соответствующее ценовому значению, используемому как конечная точка trendline. Конечная точка trendline - та, что с более поздней датой; если trendline расположен вертикально, то предполагается, что верхняя из двух точек является конечной точкой. Синтаксис:

Value1 = TL_GetEndVal (Tl_ID)

Параметры: Tl_ID - числовое выражение, представляющее номер ID trendline, конечное ценовое значение которого Вы хотите получить. Примечания: Value1 - любая числовая переменная или массив, содержит ценовое значение конечной точки trendline. Важно помнить, что, если используется недопустимый номер ID , то зарезервированное слово возвратит значение -2, и никакие дополнительные операции не будут выполнены ни на каком trendlines сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Пример: Следующая инструкция назначает ценовое значение конечной точки trendline #5 переменной Value1:

Value1 = TL_GetEndVal(5) ;

TL_GetExtLeft Trendlines может быть продлен вправо или влево. Это зарезервированное слово возвращает значение "True" или "False" . Если trendline продлен влево, то вернется значение "True"; в противном случае вернется значение "False". Синтаксис:

Condition1 = TL_GetExtLeft (Tl_ID)

Параметры: Tl_ID - числовое выражение, представляющее номер ID trendline, состояние продления которого Вы хотите получить. Примечания: Condition1 может быть любая переменная true/false или массив, содержит значение true/false, определяющее, действительно ли trendline продлен. Если используется недопустимый номер ID, возвращается значение False. Пример: Следующие команды продлевают trendline #10 влево, если она уже не продлена:

If TL_GetExtLeft(10) = False Then Value1 = TL_SetExtLeft (10, True);

TL_GetExtRight Trendlines может быть продлен вправо или влево. Это зарезервированное слово возвращает значение "True" или "False". Если trendline продлен вправо, то вернется значение "True"; в противном случае вернется "False". Синтаксис:

Condition1 = TL_GetExtRight (Tl_ID) ;

Параметры: Tl_ID - числовое выражение, представляющее номер ID trendline, состояние продления которого Вы хотите получить. Примечания: Condition1 может быть любая переменная true/false или массив, содержит значение true/false, определяющее, действительно ли trendline продлен. Если используется недопустимый номер ID, то возвращается значение "False". Пример: Следующие команды продлевают trendline #10 вправо, если она уже не продлена:

If TL_GetExtRight(10) = False Then Value1 = TL_SetExtRight (10, True);

TL_GetFirst Вы можете рисовать trendlines, используя торговые сигналы, методы анализа (индикаторы и изучения), функции, или используя инструмент объектного рисунка. EasyLanguage дает возможность искать trendlines на основании того, каким методом он был создан. Графическое приложение сохраняет хронологический порядок всего trendlines, который добавляют к диаграмме, и эта информация доступна EasyLanguage. Данное зарезервированное слово возвращает номер ID первого trendline, который добавлен к ценовой диаграмме (сигналом торговли, методикой анализа, или функцией или инструментом рисунка). Важно помнить, что, если используется недопустимый номер ID , то зарезервированное слово возвратит значение -2, и никакие дополнительные операции не будут выполнены ни на каком trendlines сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Синтаксис:

Value1 = TL_GetFirst (Num)

Параметры: Num - числовое выражение, представляющее тип начала координат trendline. Возможные значения для Num:
Если значение используется значение, отличное от 1, 2, или 3, то EasyLanguage примет значение 3. Примечания: Value1 - любая числовая переменная или массив, которая содержит номер ID желательного trendline. Пример: Следующие инструкции удаляют самый старый trendline на ценовой диаграмме, добавленный сигналом торговли, методикой анализа или функцией:

Value1 = TL_GetFirst(1); Value2 = TL_Delete(Value1);

Обратите внимание: Когда самый старый (первый) trendline удален, следующий самый старый (второй) trendline становится первым, добавленным на ценовую диаграмму, и так далее. TL_GetNext Вы можете рисовать trendlines, используя торговые сигналы, методы анализа (индикаторы и изучения), функции, или используя инструмент объектного рисунка. EasyLanguage дает возможность искать trendlines на основании того, каким методом он был создан. Графическое приложение сохраняет хронологический порядок всего trendlines, который добавляют к диаграмме, и эта информация доступна EasyLanguage. Данное зарезервированное слово возвращает номер ID trendline на ценовой диаграмме, который добавлен немедленно после указанного trendline. Вы можете использовать это зарезервированное слово вместе с зарезервированным словом TL_GetFirst, чтобы охватить все trendlines в ценовой диаграмме. Важно помнить, что если используется недопустимый номер ID, то зарезервированное слово возвратит значение -2, и никакие дополнительные операции не будут выполнены ни на каком trendlines сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Синтаксис:

Value1 = TL_GetNext (TL_ID, Num)

Параметры: TL_ID - числовое выражение, представляющее номер ID trendline, а Num - числовое выражение, представляющее тип начала координат trendline. Возможные значения для Num:
Если используется значение отличное от 1, 2, или 3, то EasyLanguage примет значение 3. Примечания: Value1 - любая числовая переменная или массив, содержит номер ID trendline, который добавляют после указанного trendline. Пример: Следующие инструкции устанавливают цвет всех trendlines в диаграмме к желтому:

Value1 = TL_GetFirst(3) ; While Value1 <> -2 Begin Value2 = TL_SetColor (Value1, #CCFFCC); Value1 = TL_GetNext (Value1, 3) ; End;

В вышеупомянутом примере мы получаем номер ID для первого trendline, добавленного на диаграмму. Затем мы устанавливаем его цвет в желтый. Далее получаем номер ID следующего trendline и устанавливаем его цвет в желтый. Этот цикл продолжается до тех пор, когда TL_GetNext возвращает -2, что означает, что нет больше trendlines на диаграмме. Имейте в виду, что когда сигнал торговли, методика анализа или функция вернет -2, то он более не может рисовать trendline на диаграмме. TL_GetSize Это зарезервированное слово возвращает числовое выражение, представляющее толщину trendline, где 0 - самая тонкая линия, а 6 - самая толстая. Синтаксис:

Value1 = TL_GetSize (Tl_ID)

Параметры: Tl_ID - числовое выражение, представляющее номер ID trendline, установленную толщину которого Вы хотите получить. Примечания: Value1 - любая числовая переменная или массив, содержит установку толщины. Важно помнить, что, если используется недопустимый номер ID , то зарезервированное слово возвратит значение -2, и никакие дополнительные операции не будут выполнены ни на каком trendlines сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Пример: Следующая инструкция назначает толщину trendline #10 переменной Value1:

Value1 = TL_GetSize(10) ;

TL_GetStyle Это зарезервированное слово возвращает числовое выражение, представляющее тип линии, используемый для указанного trendline. Синтаксис:

Value1 = TL_GetStyle (Tl_ID)

Параметры: Tl_ID - числовое выражение, представляющее номер ID trendline, тип линии которого Вы хотите получить. Примечания: Value1 - любая числовая переменная или массив, содержит числовое выражение, представляющее тип линии указанного trendline. Ниже - возможные возвращаемые значения и их числовые эквиваленты:
Вы можете использовать или числа или зарезервированное слово EasyLanguage. Важно помнить, что если используется недопустимый номер ID, то зарезервированное слово возвратит значение -2, и никакие дополнительные операции не будут выполнены ни на каком trendlines сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Пример: Следующая инструкция IF-THEN проверяет тип линии trendline перед выполнением команды EasyLanguage:

If TL_GetStyle(10) = Tool_Solid Then {EasyLanguage instruction};

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

Value1 = TL_GetValue (10, 990203, 1400);

Даже при том, что указанная дата - в феврале, TL_GetValue зарезервированное слово возвратит значение trendline, как будто trendline был продлен в область указанного бара (по тому же самому наклону). Синтаксис:

Value1 = TL_GetValue (Tl_ID, TLDate, TLTime)

Параметры: Tl_ID - числовое выражение, представляющее номер ID trendline, ценовое значение которого Вы хотите получить. TLDate и TLTime - дата и время, соответственно, бара, для которого Вы хотите получить значение trendline. Примечания: Value1 - любая числовая переменная или массив. Вы должны назначить trendline зарезервированное слово на числовую переменную или массив так, чтобы Вы могли определить, действительно ли зарезервированное слово выполнило свою операцию успешно. Важно помнить, что если используется недопустимый номер ID, то зарезервированное слово возвратит значение -2, и никакие дополнительные операции не будут выполнены ни на каком trendlines сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Пример: Следующая инструкция вызывает alert, когда закрытие пересекает trendline #10:

If Close Crosses Over TL_GetValue (10, Date, Time) Then Alert ("Trendline is broken");

TL_SetAlert Это зарезервированное слово изменяет состояние alert для trendline. Синтаксис:

Value1 = TL_SetAlert (Tl_ID, AlertVal)

Параметры: Tl_ID - числовое выражение, представляющее идентификационный номер trendline, а AlertVal - числовое выражение, представляющее установку alert для trendline. Вы можете определить одно из этих трех значений:
Alert, установленный на Breakout on Close вызывается, когда на предыдущем баре закрытие символа было ниже чем trendline, а на текущем баре закрытие выше чем trendline. Этот тип alert вычисляется, как только бар закрыт. Alert, установленный на Breakout Intrabar вызывается, когда текущая цена пересекает trendline. Этот тип alert вычисляется при каждой текущей цене. Примечания: Value1 - любая числовая переменная или массив. Вы должны назначить trendline зарезервированное слово на числовую переменную или массив так, чтобы Вы могли определить, действительно ли зарезервированное слово выполнило свою операцию успешно. Важно помнить, что если используется недопустимый номер ID, то зарезервированное слово возвратит значение -2, и никакие дополнительные операции не будут выполнены ни на каком trendlines сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Пример: Следующая инструкция проверяет состояние alert для trendline #10 и если он не установлен на Breakout on Close, то включает alert и устанавливает на Breakout on Close:

If TL_GetAlert(10) <> 2 Then Value1 = TL_SetAlert (10, 2);

TL_SetBegin Это зарезервированное слово изменяет начальную точку указанного trendline. Очень важно знать, что является начальной точкой и конечной точкой для trendline; точка начала имеет более раннюю дату и время. Если trendline расположен вертикально, то точку с более низким ценовым значением считают начальной точкой. Однако, если начальная точка trendline изменена (EasyLanguage или с помощью инструмента рисунка) так, что она имеет более позднюю дату, чем конечная точка, то тогда начальной точкой становится старая точка окончания trendline. Синтаксис:

Value1 = TL_SetBegin (Tl_ID, iDate, iTime, iVal)

Параметры: Tl_ID - числовое выражение, представляющее идентификационный номер trendline, а iDate, iTime, iVal - числовые выражения, представляющие дату начальной точки trendline, время и значение соответственно. Примечания: Value1 - любая числовая переменная или массив. Вы должны назначить trendline зарезервированное слово на числовую переменную или массив так, чтобы Вы могли определить, действительно ли зарезервированное слово выполнило свою операцию успешно. Это зарезервированное слово возвращает нуль (0), когда оно успешно изменяет начальную точку trendline, и оно возвращает одну из ошибок объектного рисунка EasyLanguage, когда происходит сбой. Например, если точка начала trendline установлена в точно то же самое значение, которое имеет конечная точка, то зарезервированное слово возвратит ошибку -5. Важно помнить, что если используется недопустимый номер ID, то зарезервированное слово возвратит значение -2, и никакие дополнительные операции не будут выполнены ни на каком trendlines сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Пример: Следующая инструкция устанавливает точку начала trendline #5 на максимально высокой цене 10 баров назад:

Value1 = TL_SetBegin (5, Date[10], Time[10], High[10]);

TL_SetColor Это зарезервированное слово изменяет цвет указанного trendline. Синтаксис:

Value1 = TL_SetColor (Tl_ID, Color)

Параметры: Tl_ID - числовое выражение, представляющее номер ID trendline, цвет которого Вы хотите изменить, а Color - один из поддерживаемых EasyLanguage цветов. Для получения списка поддерживаемых цветов обратитесь к Приложению B этой книги. Примечания: Value1 - любая числовая переменная или массив. Вы должны назначить trendline зарезервированное слово на числовую переменную или массив так, чтобы Вы могли определить, действительно ли зарезервированное слово выполнило свою операцию успешно. Важно помнить, что если используется недопустимый номер ID, то зарезервированное слово возвратит значение -2, и никакие дополнительные операции не будут выполнены ни на каком trendlines сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Пример: Следующие инструкции рисуют trendline в минимальном значении разворотной модели и сравнивают цвет trendline с фоном диаграммы. Если наблюдается соответствие цветов, то команды EasyLanguage добавляют 1 к существующему цвету, и устанавливают trendline на этот новый цвет:

Variables: ID(-1), TLColor(0); If Low < Low[1] AND Close > High[1] Then Begin ID = TL_New (Date[1], Time[1], Low, Date, Time, Low); TLColor = TL_GetColor (ID) ; If TLColor = GetBackgroundColor Then Value1 = TL_SetColor (ID, TxtColor+1); End;

TL_SetEnd Это зарезервированное слово изменяет конечную точку указанного trendline. Очень важно знать, что является начальной точкой и конечной точкой для trendline; конечная точка имеет более позднюю дату и время. Если trendline расположен вертикально, то точку с более высоким ценовым значением считают конечной точкой. Однако, если конечная точка trendline изменена (EasyLanguage или с использованием инструмента рисования) так, что она имеет более раннюю дату чем начальная точка, то конечной точкой тогда становится первоначальная начальная точка trendline. Синтаксис:

Value1 = TL_SetEnd (Tl_ID, eDate, eTime, eVal)

Параметры: Tl_ID - числовое выражение, представляющее идентификационный номер trendline, а eDate, eTime, и eVal - числовые выражения, представляющие новую дату точки окончания trendline, время и ценовое значение соответственно. Примечания: Value1 - любая числовая переменная или массив. Вы должны назначить trendline зарезервированное слово на числовую переменную или массив так, чтобы Вы могли определить, действительно ли зарезервированное слово выполнило свою операцию успешно. Это зарезервированное слово возвращает нуль (0), когда оно успешно изменяет конечную точку trendline, и одну из ошибок объектных рисунков EasyLanguage, когда происходит сбой. Например, если конечная точка trendline установлена в точно то же самое значение, что и точка начала, то зарезервированное слово возвратит ошибку -5. Важно помнить, что если используется недопустимый номер ID, то зарезервированное слово возвратит значение -2, и никакие дополнительные операции не будут выполнены ни на каком trendlines сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Пример: Следующая инструкция устанавливает конечную точку trendline #5 на максимальной цене текущего бара:

Value1 = TL_SetEnd (5, Date, Time, High);

TL_SetExtLeft Trendlines может быть продлен влево или право. Это зарезервированное слово дает возможность Вам переключить trendline между продленным влево и не продленным. Синтаксис:

Value1 = TL_SetExtLeft (Tl_ID, Extend)

Параметры: Tl_ID - числовое выражение, представляющее номер ID trendline, а Extend - выражение true/false, которое продлевает trendline влево или нет. Примечания: Value1 - любая числовая переменная или массив. Вы должны назначить trendline зарезервированное слово на числовую переменную или массив так, чтобы Вы могли определить, действительно ли зарезервированное слово выполнило свою операцию успешно. Важно помнить, что если используется недопустимый номер ID, то зарезервированное слово возвратит значение -2, и никакие дополнительные операции не будут выполнены ни на каком trendlines сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Пример: Следующие инструкции рисуют trendline в минимальном значении модели разворота и продлевают его вправо:

Variable: ID (-1); If Low < Low[1] AND Close > High[1] Then Begin ID = TL_New (Date[1], Time[1], Low, Date, Time, Low); Value1 = TL_SetExtRight (ID, True); End;

TL_SetExtRight Trendlines может быть продлен влево или вправо. Это зарезервированное слово дает возможность Вам переключить trendline между продленным вправо и не продленным. Синтаксис:

Value1 = TL_SetExtRight (Tl_ID, Extend)

Параметры: Tl_ID - числовое выражение, представляющее номер ID trendline, а Extend - выражение true/false, которое продлевает trendline вправо или нет. Примечания: Value1 - любая числовая переменная или массив. Вы должны назначить trendline зарезервированное слово на числовую переменную или массив так, чтобы Вы могли определить, действительно ли зарезервированное слово выполнило свою операцию успешно. Важно помнить, что если используется недопустимый номер ID, то зарезервированное слово возвратит значение -2, и никакие дополнительные операции не будут выполнены ни на каком trendlines сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Пример: Следующие инструкции рисуют trendline в минимально значении модели разворота и продлевают его влево и вправо:

Variable: ID (-1); If Low < Low[1] AND Close > High[1] Then Begin ID = TL_New (Date[1], Time[1], Low, Date, Time, Low); Value1 = TL_SetExtRight (ID, True); Value1 = TL_SetExtLeft (ID, True); End;

TL_SetSize Это зарезервированное слово изменяет толщину указанного trendline. Нуль (0) - самая тонкая, а шесть (6) - самая толстая установка. Синтаксис:

Value1 = TL_SetSize (Tl_ID, Num)

Параметры: Tl_ID - числовое выражение, представляющее номер ID trendline, а Num - числовое выражение, представляющее толщину trendline, 0-6. Примечания: Value1 - любая числовая переменная или массив. Вы должны назначить trendline зарезервированное слово на числовую переменную или массив так, чтобы Вы могли определить, действительно ли зарезервированное слово выполнило свою операцию успешно. Важно помнить, что если используется недопустимый номер ID, то зарезервированное слово возвратит значение -2, и никакие дополнительные операции не будут выполнены ни на каком trendlines сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Пример: Следующая инструкция устанавливает тип линии trendline #10 к самой тонкой установке типа линии:

Value1 = TL_SetSize (10, 0);

TL_SetStyle Это зарезервированное слово дает возможность Вам изменить стиль указанного trendline. Синтаксис:

Value1 = TL_SetStyle (Tl_ID, Style);

Параметры: Tl_ID - числовое выражение, представляющее номер ID trendline, стиль которого Вы хотите изменить, а Style - числовое выражение, представляющее новый тип линии для trendline. Возможные стили:
Вы можете использовать или номер или зарезервированное слово. Стиль применяется только тогда, когда trendline установлен на самый тонкий размер, который является нулем (0). Примечания: Value1 - любая числовая переменная или массив. Вы должны назначить trendline зарезервированное слово на числовую переменную или массив так, чтобы Вы могли определить, действительно ли зарезервированное слово выполнило свою операцию успешно. Важно помнить, что если используется недопустимый номер ID, то зарезервированное слово возвратит значение -2, и никакие дополнительные операции не будут выполнены ни на каком trendlines сигналом торговли, методикой анализа или функцией, которая генерировала ошибку. Пример: Следующая инструкция изменяет тип линии trendline #10 к пунктиру:

Value1 = TL_SetStyle (10, Tool_dotted);

EasyLanguage - Понятие полей данных. Мультимедиа.

Понятие Полей Данных Есть категория зарезервированных слов по имени Поля Данных. Основная цель этих слов состоит в том, чтобы индикаторы, RadarScreen и OptionStation использовали меньше памяти и были более эффективными; другими словами, чтобы оптимизировать работу ваших табличных сетки. Важно помнить, что не возможно обратиться к историческим значениям для любого из этих полей данных. Они полезны для того, чтобы выполнить анализ на внутридневных минутных и тиковых барах или сослаться на информацию текущего дня (например, внутридневной максимум, минимум, открытие). Далее - список полей данных, доступных в приложениях ProSuite. Для получения описаний этих слов, включая примеры их использования, см. Приложение C, " Справочник Зарезервированных слов": ОБРАТИТЕ ВНИМАНИЕ: Доступность данных для любого поля котировок зависит от datafeed.

Обратите внимание: Если поле котировки имеет то же самое имя, как и другое зарезервированное слово, то для ссылки на поле котировки Вы должны использовать признак фунта (#) как префикс. Мультимедиа и EasyLanguage Вы можете включить звуковой (.wav) файл или видео файл (.avi) в любой из ваших сигналов торговли, методов анализа или функцию. Обычно использование аудио и видео включает alert и комментарий. Вы можете записать ваши методы анализа так, что когда alert вызван, то видео и/или звуковой файл запускается. Зарезервированные слова, которые Вы используете, чтобы включить звуковые и видео файлы, описаны ниже. Запуск Звуковых Файлов Есть только одно зарезервированное слово, которое Вы используете, чтобы запустить звуки; оно описано ниже. PlaySound Это зарезервированное слово находит и запускает указанный звуковой файл (.wav файл). Это зарезервированное слово возвращает "True", если было способно найти и запустить звуковой файл, и оно возвращает значение "False", если не способно найти или запустить его. Синтаксис:

Condition1 = PlaySound (FileName);

Параметры: Condition1 - любая переменная true/false или массив, а FileName - любое текстовое строковое выражение, которое представляет полный путь и имя звукового файла, который будет запущен. Только .wav файлы можно запустить. Примечания: Мы рекомендуем, чтобы Вы использовали это зарезервированное слово только на последнем баре диаграммы или на барах, где получен комментарий. Иначе, Вы можете обнаружить, что .wav файл запускается более часто, чем Вы предполагали. Например, если ваше намерение состоит в том, чтобы запустить .wav файл всякий раз, когда образуется некоторый паттерн бара, и этот паттерн происходит 50 раз на ценовой диаграмме, то торговый сигнал, методика анализа или функция запустят .wav файла 50 раз. Пример: Следующие инструкции запускают звуковой файл Ding.wav, когда есть разворотная модель на последнем баре диаграммы:

If LastBarOnChart AND Low < Low[1] AND Close > High[1] Then Condition1 = PlaySound ("c:\windows\sounds\ding.wav");

Запуск Видео Файлов Вы можете запустить видео файл (.avi файл) используя комбинации трех зарезервированных слов. EasyLanguage позволяет Вам формировать файлы видеозаписи из нескольких различных .avi файлов. Сначала Вы получаете номер ID для каждого файла видеозаписи, который Вы будете использовать в вашем торговом сигнале, методике анализа или функции, затем Вы определяете, какие .avi файлы составят нужный файл видеозаписи. Вы можете запустить файл видеозаписи в любое время. Эти три зарезервированных слова, необходимые для создания файлов видеозаписи, описаны ниже. MakeNewMovieRef Это зарезервированное слово создает новый файл видеозаписи и возвращает числовое значение, представляющее номер ID нового созданного файла видеозаписи. Синтаксис:

Value1 = MakeNewMovieRef;

Параметры: Value1 - любая числовая переменная или массив. Примечания: Как только Вы создаете файл видеозаписи, используя это зарезервированное слово, Вы можете добавить один или более .avi файлов к нему, используя зарезервированное слово AddToMovieChain. Вы должны сохранить номер ID файла видеозаписи, поскольку это будет путь к ссылке на файл видеозаписи. Пример: Следующая инструкция создает новый файл видеозаписи и назначает номер ID на переменную Value1:

Value1 = MakeNewMovieRef;

AddToMovieChain Это зарезервированное слово добавляет .avi файлы к существующему файлу видеозаписи и возвращает значение true/false, представляющее успех операции. Если зарезервированное слово было способно добавить .avi файл к файлу видеозаписи, оно возвращает значение "True"; если это не возможно - оно возвращает значение "False". Синтаксис:

Condition1 = AddToMovieChain (Movie_ID, File);

Параметры: Condition1 - любая переменная true/false или массив, Movie_ID - числовое выражение, представляющее номер ID файла видеозаписи, к которому Вы добавляете .avi файл, и File - текстовое строковое выражение, представляющее полный путь и имя .avi файла, который добавляется к файлу видеозаписи. Примечания: Когда файл видеозаписи запускается, то запустятся все .avi файлы в порядке, в котором они добавлялись к файлу видеозаписи. Пример: Следующие инструкции создают файл видеозаписи и добавляют два .avi файла к нему:

Variable: ID (-1);

ID = MakeNewMovieRef ; Condition1 = AddToMovieChain (ID, "c:\MyMovie.avi"); Condition2 = AddToMovieChain (ID, "c:\MyOtherMovie.avi");

PlayMovieChain Это зарезервированное слово запускает файл видеозаписи и возвращает выражение true/false, представляющее успех операции. Если зарезервированное слово было способно запустить файл видеозаписи, оно возвращает значение "True", если это было невозможно - оно возвращает значение "False". Синтаксис:

Condition1 = PlayMovieChain (Movie_ID);

Параметры: Condition1 - любая переменная true/false или массив, Movie_ID - числовое выражение, представляющее номер ID файла видеозаписи. Примечания: Как только Вы создали файл видеозаписи, используя зарезервированное слово MakeNewMovieRef, и добавили .avi файлы к файлу видеозаписи, Вы готовы запустить его. Мы рекомендуем Вам использовать зарезервированное слово PlayMovieChain только на последнем баре диаграммы или на барах, где получен комментарий (использование AtCommentaryBar или LastBarOnChart зарезервированных слов). Иначе, Вы можете обнаружить, что файл видеозаписи запускается более часто, чем Вы рассчитывали. Пример: Следующие инструкции создают и запускают файл видеозаписи на баре, где получен комментарий:

Variable: ID(-1); If BarNumber = 1 Then Begin ID = MakeNewMovieRef; Condition1 = AddToMovieChain (ID, "c:\MyMovie.avi"); Condition2 = AddToMovieChain (ID, "c:\MyOtherMovie.avi"); End; If AtCommentaryBar Then Condition1 = PlayMovieChain (ID);

Обратите внимание, что файл видеозаписи создан, и видео файлы добавляются к этому только однажды, используя инструкцию IF-THEN, чтобы проверить первый бар диаграммы. Если мы не используем эту инструкцию IF-THEN, то индикатор создаст так много файлов видеозаписи, как много есть баров в диаграмме. Обратите внимание: Вы можете также использовать зарезервированное слово LastBarOnChart вместо AtCommentaryBar.

EasyLanguage - Запись торговых сигналов

Запись Торговых Сигналов EasyLanguage дает возможность Вам выразить ваши торговые идеи, используя TradeStation Торговые Сигналы. Пример инструкции в пределах Торгового Сигнала:

Buy 100 Shares Next Bar at Market;

Инструкции, используемые в создаваемом Торговом Сигнале, имеют две части, по своей структуре похожие на язык, который Вы используете, чтобы связаться с вашим брокером. Первая часть инструкции - торговый ордер, который является описанием действия, которое Вы хотите исполнить; например, купить 100 акций. Вторая часть инструкции - метод выполнения, который точно объясняет как (когда и по какой цене) ордер должен быть выполнен; например, на следующем баре по рынку. Есть четыре зарезервированных слова, которые Вы можете использовать, чтобы выразить ваши торговые идеи при записи Торговых Сигналов. Обращаем Ваше внимание на эти слова как торговля приказы, и они:
Рисунок 3-1. Торговые Приказы
Каждый из этих ордеров может иметь четыре различных метода выполнения:
Как и все прочие инструкциями EasyLanguage, инструкции, созданные с использованием этих торговых приказов, оцениваются (вычисляются) в конце каждого бара, на котором размещен ордер. Когда ордер размещен this bar on close (т.е., в момент закрытия текущего бара), то приказ выполняется немедленно, как только бар закрыт. Если приказ определен как next bar at market, то он выполняется в момент открытия (по цене открытия) следующего бара. Стоповые и лимитированные ордера остаются невыполненными, но активными заявками на всех последующих барах, пока цена, указанная в ордере, не будет выполнена или бар закроется. В зависимости от используемого торгового приказа, стоповые и лимитированные ордера трактуются как по цене выше или ниже, чем указанная цена. Инструкция Buy next bar at 100 limit открывает длинную позицию в течение следующего бара по первой цене, меньшей или равной 100. Точно так же инструкция ExitShort next bar at 50 stop закрывает короткую позицию в течение следующего бара по первой зарегистрированной цене, большей или равной 50. В случае стоп и лимитных ордеров, которые не будут выполнены (т.е., цена, указанная в приказе не достигнута) - ордер отменяется в момент закрытия бара. Рисунок 3-2. Показывает значение различных ордеров.
Рисунок 3-2. Стоповые и Лимитированные ордера
Каждый компонент торгового ордера обсуждается в разделе "Торговые приказы".

EasyLanguage - Механизм тестирования торговой стратегии

Для проверки результата использования Торговой Стратегии на прошлых данных используется Механизм Тестирования Торговой Стратегии. Этот механизм собирает все ордера, сгенерированные в соответствии с Торговой Стратегией, примененной к диаграмме, и создает TradeStation Отчет об исполнении Стратегии. Данный раздел охватывает все отличные процедуры, которые использует Механизм тестирования торговой стратегии, а также допущения, необходимые для оценки Торговой стратегии, примененной к диаграмме. Механизм тестирования торговой стратегии исполняет две функции: обратное тестирование и автоматизацию. Обратное тестирование - процесс анализа исторических данных и получения исторических результатов доходности, а автоматизация - процесс контроля и анализа новых данных непосредственно по их получению. Этот раздел подробно описывает каждый процесс. Краткий обзор Как только Вы создаете график движения цен и применяете к нему Торговую стратегию, TradeStation оценивает все правила Торговой стратегии для самого первого (самого старого) бара на диаграмме - в соответствии со всеми процедурами EasyLanguage - и генерирует торговые ордера (на покупку, продажу или выход), которые выполняются или в момент закрытия текущего бара или на следующем баре. Сначала TradeStation оценивает все команды для первого бара на диаграмме, затем читает данные второго бара и оценивает все ордера, которые остались невыполненными, но активными от первого бара, на ценовых данных второго бара, ища возможность эти ордера выполнить. Если доступны тиковые данные, то TradeStation может наблюдать за каждой торговой ценой или тиком, определяя цену, по которой ордера будут выполнены. Если тиковые данные недоступны, то TradeStation может моделировать заполняющие (недостающие) цены, используя несколько рыночных предположений, объясненных позже в этом разделе. Как только Механизм тестирования торговой стратегии оценил ордера, которые были активны на втором баре, TradeStation возвращается к командам EasyLanguage, которые составляют Торговую стратегию и генерирует необходимые ордера теперь относительно закрытия второго бара и размещает их на третьем бара. Этот процесс, названный обратным тестированием, повторяется на каждом баре, пока не достигнут последний бар на диаграмме (самый недавний бар). Результаты каждой торговой операции сохраняются и в дальнейшем представляются разнообразными способами в TradeStation Отчете об исполнении Стратегии, который упоминается обычно как Сообщение Стратегии. Вторая часть процесса - автоматизация новых ордеров. Процесс обратного тестирования занимает несколько секунд, затем TradeStation начинает оценивать новые полученные данные. TradeStation также контролирует любые невыполненные ордера, остающиеся в процессе обратного тестирования. Когда закрывается новый бар- TradeStation оценивает команды EasyLanguage Торговой стратегии для этого нового бара и размещает все ордера относительно закрытия текущего и/или следующего бара. Этот процесс повторяется на каждом новом баре, пока Торговая стратегия не удалена из диаграммы или не закрыто рабочее пространство. Автоматизация и обратное тестирование подробно обсуждены ниже. Автоматизация Автоматизация - процесс контроля новых данных, которые получает GlobalServer для символа, к которому применена Торговая стратегия. Правила, по которым работает Механизм тестирования торговой стратегии для оценки ордеров Торговой стратегии, описаны далее. Цена, по Которой Ордера Размещаются и Выполняются Первое, что делает TradeStation, получая любой ордер от Торговой стратегии - проверяет, чтобы ордер имел правильную (допустимую) цену для торгового инструмента, к которому применена торговая стратегия. Правильная (допустимая) цена - любая цена, которая имеет правильное (допустимое) десятичное значение в сравнении с параметрами настройки помещенного в диаграмму символа. Параметры настройки - ценовой масштаб и минимальное значение. Если ценовой масштаб данного символа - 1/100, а минимальное движение - 10, то этот символ торгуется только по 10 пунктов; поэтому, 100.1, 950.5 и 10 000.7 - правильные (допустимые) цены, тогда как 95.125 - недопустимая цена. Если обрабатываемый ордер - or higher order, цена округляется вверх к самой близкой правильной (допустимой) цене торговой сделки. Если это - or lower order, то цена округляется вниз к самой близкой цене. Рисунок 3-3 показывает, как ордера интерпретируются в соответствии с Механизмом тестирования Торговой Стратегии.
Рисунок 3-3. Стоповые и Лимитированные приказы
Чтобы продолжить вышеупомянутый пример, в котором ценовой масштаб является 1/100 и минимальное движение - 10, если размещен ордер Buy at 100.125 limit, то этот ордер будет помещен в TradeStation как ордер Buy at 100.1 or anything lower (купить по 100.1 или ниже). Если размещен ордер Buy at 100.125 stop, то этот ордер будет помещен как Buy at 100.2 or higher (купить по 100.2 или выше). Эти округления необходимы, потому что, если получен ордер buy at 100.125 or higher, то это означает, что Вы не хотите покупать по 100.124 или по 100.120 или еще ниже, потому что в ордере заявлено '100.125 or higher'; поэтому, единственная альтернатива - необходимо округлить цену к самой близкой правильной (допустимой) цене сделки. По той же самой причине верно обратное для or lower ордеров. Определение Ордеров к Выполнению Торговая стратегия может разместить более чем один ордер одного типа (buy, sell, or exit) на некоторых барах и когда это происходит, Механизм тестирования торговой стратегии определяет, который ордер выполнять, по следующим двум правилам: Правило 1: Ордера на Закрытии и на Следующем Баре по Рынку Ордера, которые размещены, чтобы быть выполненными на текущем баре в момент закрытия, имеют самый высокий приоритет; только когда все такие ордера были выполнены, оцениваются ордера next bar at market. Если есть больше чем один ордер одного типа (например, три ордера на покупку на текущем баре на закрытии), то ордер, который был размещен первым, имеет приоритет и выполняется первым. Это важно помнить при проектировании Торговой стратегии, которая содержит множество ордеров на вход, которые могут выполняться по рыночной цене на одном и том же баре. Например, предположим, что ваша Торговая стратегия имеет Торговый сигнал, который открывает длинную позицию на следующем баре после того, как найдено пересечение скользящего среднего, и второй сигнал, который открывает короткую позицию на следующем баре после того, как найдено формирование модели подсвечника. Если условия и длинной и короткой позиции выполнены на одном и том же баре, то Торговая стратегия будет вынуждена выполнить один из ордеров, чтобы открыть короткую или длинную позицию, а затем немедленно выполнить противоположный ордер. Если сигнал входа в короткую позицию перечислен вторым, то Торговая стратегия закончит текущий бар открытием короткой позицией. Однако, если сигнал входа в длинную позицию перечислен вторым, то Торговая стратегия закончит бар длинной позицией.
Рисунок 3-4. Торговые сигналы в TradeStation StrategyBuilder. Вы можете переместить сигналы вверх или вниз, чтобы определить порядок, в котором они читаются.

Подобным же образом, Торговый сигнал может иметь множество ордеров. Если дело обстоит именно так, то сначала будет выполнен ордер, который первым задокументирован в PowerEditor Торговом сигнале, и если есть множество сигналов в Торговой стратегии, которые размещают один и тот же тип ордера, то ордеру от сигнала, который перечислен ранее во вкладке Signal TradeStation StrategyBuilder, дают приоритет (Рисунок 3-4). Вы можете перестроить Торговые сигналы, используя кнопки Move Up и Move Down во вкладке Signals. Другой пример, когда Торговая стратегия включает два Торговых сигнала, открывающих длинную позицию, Signal A и Signal B. Каждый открывает позицию с различным размером позиции. Предположим, что Signal A открывает позицию с 100 акциями, а Signal B откроет позицию с 500 акциями. Если оба сигнала инициализируют ордер на покупку на одном и том же бар, то какой бы сигнал не был первым в TradeStation StrategyBuilder, второй ордер игнорируется. Заметьте: возможно применение пирамидинга для Торговой стратегии, когда используются множественные входы в одном и том же направлении. Правила использования ордеров в Торговых стратегиях в случае пирамидинга объясняются на странице 124. Итоговое правило: первыми оцениваются ордера this bar on close, и лишь затем ордера next bar at market. Если есть несколько ордеров одного типа, то ордера, инициируемые сигналом, который расположен выше в TradeStation StrategyBuilder, имеют более высокий приоритет. Кроме того, если есть более чем один ордер одного типа в Торговом Сигнале, то ордера, задокументированные первыми в PowerEditor - оцениваются первыми, а остальные игнорируются (если не позволен пирамидинг). Как показано на Рисунке 3-5, если Signal A стоит выше в TradeStation StrategyBuilder, то тогда Ордер А1 будет выполнен, а остальные игнорируются; тогда как, если Signal B перечислен первым в TradeStation StrategyBuilder, то будет выполнен Ордер В1.
Рисунок 3-5. Торговая стратегия с несколькими Торговыми сигналами и ордерами.
Правило 2: Стоповые и Лимитированные приказы Как только все рыночные приказы оценены, Механизм тестирования торговой стратегии анализирует Стоповые и Лимитированные приказы. Если есть несколько Стоповых или Лимитированных приказов, то Механизм тестирования торговой стратегии дает более высокий приоритет ордеру, который наиболее близок к рынку (наиболее близкий к текущей цене). Это сделано, чтобы моделировать, как стоп и лимит приказы фактически выполняются. Если символ торгует по 950 и есть два лимитных приказа покупать - один по 949 и второй по 948 - при падении рынка сначала будет исполнен ордер на покупку по 949, и во вторую очередь ордер по 948. Поэтому, TradeStation Механизм Стратегии выполняет эти ордера способом, приводящим к максимально реалистичным результатам. В качестве другого примера предположим, что есть три (или больше) различных ордера на покупку по лимитированной цене (например, buy 100 shares at 101 limit, buy 300 shares at 98 limit, и buy 500 shares at 95 limit). В том случае, когда возведение пирамиды запрещено, TradeStation отобразит только ордер to buy 100 shares at 101 limit, как наиболее близкий к рынку. Если же допускается возведение пирамиды, то все три ордера будут показаны, и первым будет выполнен ордер, который наиболее близок к рынку. Итоговое правило: если Стоповые или Лимитированные ордера с условием "или выше" ордер, то при выполнении ордеров TradeStation дает более высокий приоритет ордеру с самым низким ценовым ориентиром. Если Стоповые или Лимитированные ордера с условием "или ниже", то при выполнении ордеров TradeStation дает более высокий приоритет ордеру с самым высоким ценовым ориентиром. Расширенная Подсказка: Допустимые Ордера Хотя многие брокеры не принимают стоповые ордера на покупку и лимитированные ордера на продажу ниже рынка, и лимитированные ордера на покупку и стоповые ордера на продажу выше рынка, TradeStation примет эти заказы и выполнит их на следующем баре по первой доступной цене, которой обычно будет цена открытия бара. Например, если рынок торгуется по 950, а Торговая стратегия размещает ордер buy at 1,000 limit, то TradeStation выполнит этот ордер в течение следующего по первой цене под 1 000, которой вероятно будет открытие следующего бара. Определение Количества Акций при Открытии Позиций
Рисунок 3-6. Форматирование Стратегии - вкладка Costs
При форматировании Торговых Стратегий на вкладке Costs (Рисунок 3-6) есть опция для определения заданного по умолчанию количества акций (или контрактов), которое Торговая стратегия будет использовать при открытии позиции. Это количество используется, если в спецификации ордера не определено количество акций для покупки или продажи. Когда в ордере определено количество акций/контрактов - это отменяет установку, указанную во вкладке Costs. Как только определено количество акций/контрактов, Механизм тестирования торговой стратегии смотрит на установку на вкладке Properties, отмеченную как Entry Settings: Maximum Number of contracts/shares per position (Параметры настройки Входа: Максимальный Количество акций/контрактов в позиции (показано на Рисунке 3-7). В случае необходимости, количество акций/контрактов из всех ордеров корректируется так, чтобы общее количество акций/контрактов в открытой позиции не превышало количество, указанное в этой опции. Если нет никакой открытой позиции, и Торговая стратегия размещает ордер на покупку 5 500 акций, и количество, введенное на вкладке Properties - 5 000, то Механизм тестирования торговой стратегии уменьшит количество акций до 5 000. Тот же самый максимальный предел Торговая стратегия учитывает при возведении пирамиды, и если есть 1 000 акций в открытой позиции и Торговая стратегия размещает ордер на покупку 5 500 акций, то Механизм тестирования торговой стратегии изменит ордер на 4 000 акций. Резюме: чтобы определить, сколько акций/контрактов будет включать ордер, мы должны найти наименьшее из этих двух чисел: Максимальное количество контрактов/акций в позиции (минус текущее количество акций/контрактов), как определено во вкладке Properties Количество акций/контрактов на позицию. Максимальное количество акций/контрактов на позицию позволяет Вам установить глобальное ограничение на количество акций/контрактов, торгуемых Торговой стратегией. Это позволяет Вам изменять предельное количество в зависимости от символа, который Вы торгуете, при невозможности изменить Торговый сигнал(ы) в пределах Торговой стратегии. Ограничение Количества Открытых Входов в Позицию Когда Вы разрешаете построение пирамиды, что возможно для Торговой стратегии, настроенной на покупку (или продажу) несколько раз подряд (увеличивающийся размер позиции), Вы можете определить максимальное число раз, которое Торговая стратегия может покупать (или продавать), не закрывая при этом ни один из открытых входов. Вы можете отрегулировать это значение в разделе Entry Settings (Параметры настройки Входа) диалогового окна Format Strategy, как показано на Рисунке 3-7. Опция Maximum open entries per position (Максимум открытых входов в позиции) дают Вам возможность вынудить Торговую стратегию игнорировать любые новые распоряжения добавить к текущей позиции, как только Торговая стратегия уже купила (или продала) указанное количество последовательных раз в единственной позиции.
Рисунок 3-7. Форматирование Стратегии - вкладка Properties.

Резервные Ордера Резервные ордера - ордера, которые сгенерированы Торговой стратегией, но не активны. Они остаются зарезервированными в продолжение бара, на котором они были размещены, т.е. до закрытия бара, а затем ордер или аннулируется или становится активным, если в течение этого же бара созданы условия для его активации. Например, предположим, что Вы применили Торговую стратегию к дневной диаграмме, оцениваемый бар - понедельник и ваша текущая позиция - отсутствие позиции (ни длинная, ни короткая). В этом месте Торговая стратегия размещает ордер на выход из длинной позиции на следующем баре в случае понижения. Так как Вы в настоящее время не находитесь в длинной позиции, то TradeStation генерирует этот ордер и размещает его как резервный. Вас не информируют, что этот ордер был сгенерирован и он невидим для Вас. Теперь, предположим, что впоследствии на следующем баре размещен ордер на покупку. В течение следующего бара (бар вторника) ордер на вход исполнен (и теперь вы в длинной позиции). В этой точке статус ордера на выход из позиции изменяется на активный (указан во вкладке Active Orders окна Tracking Center). Условия изменились таким образом, что ордер становится активным. Однако, если бы длинная позиция не была установлена в течение бара вторника, то ордер на выход был бы аннулирован (снят). Эта способность резервирования дает Вам возможность разместить защитные стопы на баре входа в позицию; ордер размещается как резервный только до закрытия бара, в который он помещен. Ниже - список сценариев, при которых ордера размещаются как резервные: Общие Сценарии: "Если Торговая стратегия не находится в длинной позиции, то все ордера на выход из длинных позиций размещаются как резервные. "Если ордер на выход из длинной позиции привязан к определенному входу, но текущая длинная позиция не была инициализирована входом, к которому привязан выход, то ордер на выход размещается как резервный. "Если Торговая стратегия не находится в короткой позиции, то все ордера выхода из коротких позиций размещаются как резервные. "Если ордер на выход из короткой позиции привязан к определенному входу, но текущая короткая позиция не была инициализирована входом, к которому привязан выход, то ордер на выход размещается как резервный. "Если есть несколько или более высокие ордера на выход, то Торговая стратегия обходит (обсчитывает) все ордера, начиная с ордера с самой низкой ценой, и добавляет количество акций/контрактов из каждого ордера на выход. Все ордера, расположенные выше и вне заданного количества акций/контрактов размещаются как резервные. "Если есть несколько или более низкие ордера на выход, то Торговая стратегия обходит (обсчитывает) все ордера, начиная с ордера с самой высокой ценой, и добавляет количество акций/контрактов из каждого ордера на выход. Все ордера, расположенные ниже и вне заданного количества акций/контрактов размещаются как резервные. При отсутствии Пирамидинга: "Все случаи, описанные в Общих Сценариях. "Если Торговая стратегия уже находится в длинной позиции, то любой дополнительный стоповый или лимитированный приказ на покупку размещается как резервный. "Если Торговая стратегия находится в короткой позиции, то любой дополнительный стоп или лимит приказ на продажу размещается как резервный. "Если Торговая стратегия находится в длинной или короткой позиции и есть более чем один или более высокий ордер на выход, то все приказы на выход, кроме того, который с самым низким ценовым ориентиром, размещаются как резервные. "Если Торговая стратегия находится в длинной или короткой позиции и есть более чем один или более низкий ордер на выход, то все приказы на выход, кроме того, который с самой высокой базовой ценой, размещаются как резервные. "Если есть несколько или более высокие или более низкие приказы на вход, в то время как Торговая стратегия не находится ни в длинной, ни в короткой позиции, то все приказы кроме ордера, который наиболее близок к рынку, будут размещены как резервные. Пирамидинг - Позволяет Множественные Ордера в Одном и том же Направлении и Различные Ордера на Вход: "Все случаи, описанные в Общих Сценариях. "Если Торговая стратегия имеет более чем один или более высокие приказы на вход, то сначала будут рассмотрены и сочтены самые низкие ордера и если в сумме эти ордера достигнут числа максимального количества акций/контрактов, позволенных Торговой стратегией, то все дополнительные более высокие приказы на вход будут размещены как резервные. "Если Торговая стратегия имеет более чем один или более низкие приказы на вход, то сначала будут рассмотрены и сочтены самые высокие ордера и если в сумме эти ордера достигнут числа максимального количества акций/контрактов, позволенных Торговой стратегией, то все дополнительные более высокие приказы на вход будут размещены как резервные. Пирамидинг - Позволяет Множественные Ордера в Одном и том же Направлении в соответствии с Различными Ордерами на Вход: "Все случаи, описанные в Общих Сценариях. "Если Стратегия Торговли находится в длинной или короткой позиции и новый приказ сгенерирован тем же самым сигналом входа, который открыл позицию ранее, то тогда ордер размещается как резервный. Отмена Ордеров Как правило, весь стоп и лимитные приказы отменяются в момент закрытия бара. Например, если торговая стратегия применена к дневному графику движения цен и лимитный приказ на покупку размещен в понедельник, то ордер будет активным везде на баре вторника. Данный лимитный приказ отменяется в момент закрытия сессии во вторник, если базовая цена лимитного приказа не пересечена рынком. Это также относится и к внутридневным графикам. Заметьте, что мы используем слово бар вместо слова день. Это подразумевает, что если Вы применяете торговую стратегию к 30-минутному бару и торговая стратегия размещает лимитированный приказ на покупку в 10:00, то ордер активен от 10:0 до 10:30 (или в продолжение бара) и отменяется, если ордер не выполнен к моменту закрытия бара. Есть одно исключение к этому правилу: в том случае, когда торговая стратегия размещает точно такой же ордер на двух или более последовательных барах. В этом случае TradeStation не будет отменять ордер, чтобы заменить его точным дубликатом. Вместо этого она оставляет ордер активным до тех пор, пока он не исполнится или не изменится. Например, давайте предположим, что торговая стратегия на дневной диаграмме размещает ордер buy 100 shares at 50 limit on Monday. Этот ордер остается активным в течение вторника и отменяется в конце торговой сессии во вторник, если торговая стратегия не размещает другой ордер buy 100 shares at 50 limit в течение бара вторника. Если изменяется любой элемент ордера, типа количества акций, цены, и т.п., то ордер отменяется и размещается новый активный ордер. Когда Вы работаете с внутридневными диаграммами, то Вы можете написать приказы только для этого дня (ордера, которые отменяются в конце дня), которые размещают один и тот же самый ордер неоднократно в течение дня, как только это находят точку входа. Стоповые и лимитные приказы отменяются в момент закрытия бара когда: "Ордер не был размещен на этом баре торговой стратегией "Ордер был размещен, но или количество акций или базовая цена изменились на последнем баре "Отличный (другой) торговый сигнал генерировал ордер на текущем баре "Отличный (другой) торговый сигнал с базовой ценой выше/ниже был размещен по цене, которая ближе к рынку (тогда ордер размещается как резервный) Обратное тестирование В течение обратное тестирования TradeStation делает обзор всех исторических данных и получает исторические результаты для Торговой стратегии, приложенной к графику движения цен. Проверка Разрешающей способности Данных Стратегии Чем более мелкая разрешающая способность данных, которые стратегия может анализировать, тем более точны результаты Торговой стратегии - при сравнении результатов в реальном масштабе времени с результатами обратного тестирования. В реальном времени стоповые и лимитированные приказы проверяются на возможность исполнения для каждого тика, полученного от вашего источника данных; поэтому, когда ваша Торговая стратегия включает стоповые и лимитные приказы, для получения достоверные результатов при обратном тестировании вашей Торговой стратегии необходимо иметь в наличии все исторические для каждого тика. Бар имеет четыре цены: открытие, максимум, минимум и закрытие. Читая эти четыре значения, мы можем установить единственный факт - то, что первая и последняя торговавшиеся цены соответствуют значениям открытия и закрытия соответственно. Приказ, при котором рынок достиг максимума или минимума, и насколько сильно рынок колебался при движении внутри бара, не может быть выведен из этих четырех цен. Поэтому, когда тиковые данные не доступны, TradeStation должен делать предположения о том, как рынок двигался "внутри бара". Как показано на Рисунке 3-8, при форматировании Торговой стратегии, вкладка Properties включает раздел, отмеченный как Backtesting Settings (Параметры настройки Обратного тестирования), который содержит опцию Strategy testing resolution (проверка разрешающей способности стратегии). Эта опция дает возможность Вам определить разрешающую способность данных, используемых при обратном тестировании вашей Торговой Стратегии. Если Вы не определяете эту опцию, то используется разрешающая способность данных графика движения цен, к которому Торговая стратегия применена.
Рисунок 3-8. Форматирование Стратегии - вкладка Properties.

Когда Вы устанавливаете эту опцию для тестирования на уровне тика (предполагая, что эти данные доступны), Механизм тестирования торговой стратегии ведет себя при обратном тестировании так же, как это было бы при автоматическом режиме (торговле в реальном масштабе времени). Однако очень часто нет возможности иметь в наличии все тиковые данные, необходимые для обширного обратного тестирования. В таких случаях TradeStation оценивает такие большие промежутки тиковых данных, какие доступны, и использует допущения для бара в остальных частях данных. Также, исходя из соображений возможностей обработки (память и скорость), что не всегда может быть удобно или даже возможно для обратного тестирования на тиковых данных, можно использовать обратное тестирование при какой-то оптимальной разрешающей способности. Например, если тестирование выполняется на 5 000 дневных барах, то Торговая стратегия может рассматривать 10-минутные бары, чтобы найти заполняющие цены (цены исполнения ордеров) вместо того, чтобы рассматривать каждый тик, так как 5 000 дней тиковых данных - огромное количество данных для загрузки и использования их на графике движения цен. В этом случае TradeStation обратится к 10-минутным барам для поиска цен, заполняющих стоповые и/или лимитированные приказы, размещенные Торговой стратегией. Это значительно улучшает точность результатов (по сравнению с использованием дневных данных при обратном тестировании) и значительно уменьшает требования к ресурсам по сравнению с испытанием Торговой стратегии на тиковых данных. С другой стороны, если Торговая стратегия размещает приказы только в момент закрытия текущего бара или на следующем баре по рынку, то нет необходимости использовать для обратного тестирования высокую разрешающей способность, т.к. эти цены всегда известны. Помните, из четырех цен, которые мы знаем для каждого бара, нам точно известно по какой цене бар открылся и по какой цене бар закрылся; так что, если Торговая стратегия включает ордер на покупку на открытии следующего бара, то эта цена не будет иметь существенных отличий при сравнении исторических данных и данных в реальном времени. Исследование тиков, которые составляют бар, не дает никакой дополнительной информации о ценах открытия или ценах закрытия на акции в конце рабочего дня на бирже по сравнению с тем, что мы видим на дневном баре. Поэтому, изменение установки разрешающей способности обратного тестирования для Торговой Стратегии, содержащей только эти типы приказов, не увеличивает точности обратного тестирования Торговой стратегии. Допущения для Бара Когда тиковые данные не доступны, TradeStation делает некоторые допущения о том, как был сформирован каждый ценовой бар. Эти допущения для бара применяются только тогда, когда Торговая стратегия использует стоповые и/или лимитированные приказы; они не применяются, когда Торговая стратегия включает приказы только на закрытии бара или рыночные приказы, как описано в разделе выше. После обширного исследования было установлено несколько правил, чтобы описать «нормальное» поведение баров. Механизм тестирования торговой стратегии следует за этими правилами в попытке моделировать рыночную деятельность, когда недостаточно доступных данных. Однако - рыночные допущения, разработанные, чтобы улучшить точность испытания в случае недостаточности данных, дают расхождения между результатами, полученными на исторических данных и данных в реальном масштабе времени. Вот эти Допущения: 1. рынок торговался по каждой правильной (допустимой) цене всюду по диапазону бара. 2. если цена открытия ближе к минимуму, чем к максимуму (т.е., открытие находится в основании нижней половины бара), то движение внутри бара принято по схеме: Открытие-> Минимум-> Максимум-> Закрытие (см. Рисунок 3-9). 3. если цена открытия находится в верхней половине бара (т.е., ближе к максимуму, чем к минимуму), то движение внутри бара принято по схеме Открытие-> Максимум-> Минимум-> Закрытие (см. Рисунок 3-9). Первое предположение подразумевает, что заполняющиеся цены стоповых и лимитированных приказов в течение обратного тестирования не могут быть точно такими же, как при торговле в реальном времени. Стоповые и лимитированные приказы интерпретируются как первая доступная цена или некоторый уровень; если Вы размещаете стоп-приказ на покупку на 100, а рынок торгуется по 99.875 и затем сразу переходит к цене 100.5, то ордер в реальном масштабе времени выполнится по 100.5, но если выполнятся обратное тестирование и тиковые данные недоступны Торговой Стратегии, то TradeStation не будет иметь никакой возможности узнать, что рынок единовременно (рывком) перешел к следующей цене, так что ордер будет заполнен по 100.
Рисунок 3-9. Допущение о движении внутри бара
Второе и третье допущения важны только тогда, когда есть несколько активных ордеров на одном баре. Если Торговая Стратегия размещает ордера и stop loss (приказ ограничения убытков) и profit target (приказ снятия прибыли), и обе цены достигнуты в течение одного бара, то лишь поведение рынка внутри бара определяет, является ли торговля прибыльной или убыточной. Например, если рынок упал, достиг минимума, а затем оживился и достиг максимума, то если первым выполнится stop loss - трейдер потеряет деньги. Однако, если вначале будет достигнут максимум, то profit target сделает торговлю прибыльной. Без доступа к тиковым данным нет никакого способа определить, как рынок двигался внутри бара. Допущения могут быть правильными или неверными. Однако, имейте в виду, что в соответствии с законом средних чисел, если обратное тестирование включает в себя достаточное количество таких сценариев и они разрешены непротиворечивым способом, то ошибки за и против взаимно уничтожат друг друга. Срыв Тиков Рынки не двигаются по прямой линии, они имеют свойство колебаться даже, когда находятся в сильной тенденции. Фактически, рынок будет редко, если такое вообще возможно, двигаться по прямой линии, как это принято вторым и третьим допущениями, объявленными в предыдущем разделе. Даже в пределах бара рынок будет обычно колебаться, достигая цен предыдущих рекордных минимумов и максимумов, и его движение будет вообще более напоминать иллюстрацию на Рисунке 3-10, чем прямую линию. Чтобы моделировать это поведение, Механизм тестирования торговой стратегии использует методику, названную "срыв тиков", которая моделирует рыночные колебания при заполнении стоповых и лимитированных приказов.
Рисунок 3-10. Нормальное движение цен внутри бара

Метод, которым Механизм тестирования Стратегии моделирует это рыночное явление - срывая принятую цену на некоторый процент от диапазона бара (10 % по умолчанию) в противоположном направлении любого заполненного стопового или лимитированного приказа. Например, если диапазон бара - 10 пунктов, и стоп-приказ на покупку заполнен, то TradeStation осматривает бар в направлении вниз на 1 пункт под ценой стоп-приказа на вход в позицию, и ищет приказы для заполнения в соответствие с допущениями для бара (Рисунок 3-11). Если заполненный стоповый или лимитированный приказ читаются как "'или более высокий" ордер, то Механизм тестирования торговой стратегии срывает tick вниз, если ордер читается как "или более низкий ордер", - срывает тик вверх.
Рисунок 3-11. Срыв тика

Срыв тиков незначительно изменяет результаты Торговой стратегии и только тогда, когда Торговая стратегия включает множество стоповых и лимитированных приказов, которые размещаются очень близко друг к другу. Давайте рассмотрим пример того, как срыв тиков может затронуть результаты вашей Торговой стратегии. Предположим, что есть три ордера, активных для некоторого бара: стоп-приказ на покупку по 100, стоп-приказ на продажу по 99.125 и лимитированный приказ ExitLong по 103. Рынок открывается по 99.5, доходит до 105, падает к 90 и, наконец, закрывается по 92. Какие сделки имели место и какая у Вас позиция на рынке в момент закрытия бара? При выключенном срыве тика (установленном на 0 %), сначала выполняется стоп-приказ на покупку, сопровождается он соответственно ExitLong лимитированным приказом, приводя к получению прибыли, и затем выполняется ордер на продажу, оставляя Вас в короткой позиции в момент закрытия бара. При срыве тиков, установленном на 10 %, сначала заполнится стоп-приказ на покупку и TradeStation срывает цену на 10 % ниже, доставая стоп-приказ на продажу (это выводит Вас из длинной позиции с убытком и устанавливает в короткую позицию), и срывает цену снова, на сей раз вверх. В этом точке, так как нет никаких правильных (допустимых) ордеров (ордер ExitLong игнорируется, так как Вы находитесь в короткой позиции), TradeStation заканчивает обходить бар, и оставляет Вас в короткой позиции. Этот пример иллюстрирован на Рисунке 3-12.
Рисунок 3-12. Пример Срыва тика

При этой методике TradeStation, не имея тиковых данных, производит несколько колебательных движений внутри бара. Данный специфический пример показал, как методика срыва тика может развернуть торговлю от прибыльной к проигрышной; однако, оно также легко может превратить проигрышную торговлю в прибыльную. И снова повторяем, если обратное тестирование включает достаточное количество подобных сценариев и все они разрешены непротиворечивым способом, то ошибки на пользу стратегии и против имеют тенденцию к взаимоуничтожению. Очень важно помнить, что эта методика разработана, чтобы моделировать рыночную деятельность, но это - только моделирование. Фактическое движение рынка может значительно отличаться от этого моделирования и приводить к отличиям в результатах Отчета об исполнении Стратегии TradeStation.

EasyLanguage - Торговые приказы

Используя эти четыре торговых приказа, Вы можете смоделировать разнообразные торговые идеями и типы ордеров. Этот раздел подробно описывает эти четыре торговых приказа - Buy, Sell, ExitLong и ExitShort. Buy Этот торговый приказ используется, чтобы открыть длинную позицию (он закрывает ваши короткие позиции и открывает длинную позицию). Специальные сообщения ордера определены дополнительными параметрами, используемыми в инструкции (т.е., количество акций, по какой цене и т.п.). Синтаксис:

Buy [("Order Name")] [Number of Shares] [Execution Method];

Только слово Buy необходимо для открытия длинной позиции. Далее - полная инструкция EasyLanguage: Buy; Когда параметры не определены, значения по умолчанию, используемые для этой инструкции:

Buy ("Buy") This Bar on Close;

Вышеупомянутый ордер использует заданное по умолчанию количество акций/контрактов, указанное Торговой стратегией на вкладке Costs при форматировании стратегии. Каждая часть инструкции, Order Name (имя ордера), Number of Shares (количество акций) и Execution Method (метод исполнения) описана далее. Order Name Если ваш Торговый сигнал или ваша Торговая стратегия включают несколько длинных входов, то полезно маркировать каждый ордер входа отличным именем. Называя ордера входа, Вы можете легко идентифицировать все позиции и на диаграмме, и в Отчете об исполнении Стратегии TradeStation. Обозначение ордеров входа также позволяет Вам связывать выход со специфическим ордером входа (для получения дополнительной информации обратитесь к обсуждению торгового приказа ExitLong на 136). Чтобы назвать ордер входа в длинную позицию, включите подробное имя в кавычки в пределах круглых скобок после торгового приказа Buy. Например:

Buy ("My Entry");

Эта команда инициализирует длинную позицию по имени My Entry. Когда Торговый сигнал или Стратегия, которые содержит эту инструкцию, применены к графику движения цен, название ордера (оно же название сигнала) отображается на диаграмме под экранными стрелками, которые соответствуют этой инструкции, и в Отчете об исполнении Стратегии TradeStation на вкладке Trade by Trade Рисунок 3-13.
Рисунок 3-13. Названия Торговых сигналов
Number of Shares Чтобы определить количество акций (или контрактов) в открываемой длинной позиции разместите числовое выражение, сопровождаемое словом shares (или contracts) после торгового приказа Buy (и, если используется, после названия ордера входа). Некоторые примеры:

Buy ("My Entry") 100 Shares; Buy 5 Contracts; Buy Value1 Shares;

Заметьте: слова shares и contracts - синонимы. Если количество акций/контрактов не определено, то используется значение, введенное на вкладке Costs диалогового окна Format Strategy. Вкладка Costs содержит раздел, который управляет заданным по умолчанию торговым количеством; оно может быть установлено или на per transaction (за сделку) или fixed unit (фиксированная единица). Установки этого диалогового окна используются Механизмом Торговой стратегии только, если инструкция Buy не определяет количество акций/контрактов в открываемой позиции. Execution Method Вы можете использовать четыре различных метода выполнения с торговым приказом Buy:
Метод выполнения this bar on close предназначен только для целей обратного тестирования; он позволяет Вам проводить тестирование при рыночных ценах близких к поставленным в Ваших ордерах, что Вы не можете автоматизировать использованием TradeStation. Учитывая, что все ордера оцениваются и заполняются в конце каждого бара, TradeStation читает и запускает выполнение "this bar on close" как только бар закрылся (например, как только закончилась дневная торговая сессия). TradeStation заполняет ордер, используя цену закрытия текущего бара, но Вам придется разместить ордер по рынку для выполнения на следующем баре. Это неизбежно приводит к проскальзыванию. Метод выполнения next bar at price limit дает команду TradeStation покупать при первой возможности по указанной цене или ниже. Метод выполнения next bar at price stop дает команду TradeStation покупать при первой возможности по указанной цене или выше. Стоповые и лимитированные приказы заполняются, как только рынок затронет приказ. Такие ордера становятся рыночными приказами, когда цена символа пересекает указанную в приказе стоимость. Это оставляет возможность для стоповых и лимитированных приказов быть не исполненными (т.е., цены никогда не пересекаются); в этом случае, ордера отменяются в момент закрытия бара. Как правило, трейдеры используют методы исполнения next bar at market и this bar on close, когда точная цена на вход не является критической в их торговой стратегии, и они ожидают большое движение вверх. Трейдеры используют лимитированные приказы на покупку при попытке войти в длинную позицию при низких ценах, при работе с уровнями поддержки, или когда пытаются стать в позицию в основании. И, наоборот, они используют стоп-приказы на покупку, когда ищут волатильность или ценовой прорыв. Это обычные способы использования данных типов приказов; они достаточно гибки, чтобы использоваться многими другими отличными способами. Примеры Следующая инструкция дает команду купить 100 акций/контрактов по цену закрытия бара:

Buy 100 Shares This Bar on Close;

Следующая инструкция покупает заданное по умолчанию количество акций/контрактов, указанное на вкладке Costs, на открытии следующего бара, и называет этот ордер входа Entry#1:

Buy ("Entry#1") Next Bar at Market;

Следующая инструкция размещает ордер на покупку 5 контрактов в максимальной точке текущего бара плюс диапазон (ранг) текущего, или при любой цене еще выше. Заметьте, что Range - функция, которая возвращает разницу между максимумом и минимумом. Этот ордер остается активным всюду на следующем (пока не исполнится или не будет отменен):

Buy 5 Contracts Next Bar at High + Range Stop;

Следующая инструкция размещает ордер на покупку 100 акций по самой низкой из минимальных цен последних 10 баров, или при любой цене еще ниже. Этот ордер остается активным всюду на следующем баре (пока не исполнится или не будет отменен), и ордер называется LowBuy:

Buy ("LowBuy") 100 Shares Next Bar at Lowest (Low,10) Limit ;

Sell Этот торговый приказ используется, чтобы открыть короткую позицию (он закрывает вашу длинную позицию и открывает короткую). Специальные сообщения ордера определяются дополнительными параметрами, используемыми в инструкции (т.е., количество акций, по какой цене, и т.п.). Синтаксис:

Sell [("Order Name")] [Number of Shares] [Execution Method] ;

Для открытия короткой позиции обязательно слово Sell. Далее - полная инструкция EasyLanguage: Sell ; Когда параметры не определены, значения по умолчанию, используемые для этой инструкции:

Sell ("Sell") This Bar on Close;

Вышеупомянутый ордер использует заданное по умолчанию количество акций/контрактов, указанное Торговой стратегией на вкладке Costs при форматировании стратегии. Каждая часть инструкции, Order Name, Number of Shares и Execution Method описаны ниже. Order Name Если ваш Торговый сигнал или ваша Торговая стратегия содержат несколько коротких входов, полезно маркировать каждый ордер входа отличным названием. Называя ордера входа, Вы можете легко идентифицировать все позиции и на диаграмме и в Отчете об исполнении Стратегии TradeStation. Обозначение ордеров входа позволяет Вам также связывать выход со специфическим ордером входа (для получения дополнительной информации обратитесь к обсуждению торгового приказа ExitShort на странице 141). Чтобы назвать короткий ордер входа, включите подробное имя в кавычки и в пределах круглых скобок после торгового приказа Sell. Например:

Sell ("My Entry");

Эта команда инициализирует короткую позицию по имени My Entry. Когда Торговый сигнал или Стратегия, которые содержит эту инструкцию, применены к графику движения цен, название ордера (оно же название сигнала) отображается на диаграмме под экранными стрелками, которые соответствуют этой инструкции, и в Отчете об исполнении Стратегии TradeStation на вкладке Trade by Trade (Рисунок 3-13 на странице 132). Number of Shares Чтобы определить количество акций (или контрактов) в открываемой короткой позиции, разместите числовое выражение, сопровождаемое словом shares (или contracts) после торгового приказа Sell (и, если используется, после названия ордера входа). Некоторые примеры:

Sell ("My Entry") 100 Shares; Sell 5 Contracts; Sell Value1 Shares;

Заметьте: слова shares и contracts синонимы. Если количество акций/контрактов не определено, то используется значение, введенное на вкладке Costs диалогового окна Format Strategy. Вкладка Costs содержит раздел, который управляет заданным по умолчанию торговым количеством; оно может быть установлено или fixed unit (фиксированная единица) или per transaction (за сделку). Установки этого диалогового окна используются Механизмом Торговой стратегии только, если инструкция Sell не определяет количество акций/контрактов в открываемой позиции. Execution Method Вы можете использовать четыре различных метода выполнения торгового приказа Sell: ...this bar on close
Метод выполнения this bar on close предназначен только для целей обратного тестирования; он позволяет Вам проводить тестирование при рыночных ценах близких к поставленным в Ваших ордерах, что Вы не можете автоматизировать использованием TradeStation. Учитывая, что все ордера оцениваются и заполняются в конце каждого бара, TradeStation читает и запускает выполнение "this bar on close" как только бар закрылся (например, как только закончилась дневная торговая сессия). TradeStation заполняет ордер, используя цену закрытия текущего бара, но Вам придется разместить ордер по рынку для выполнения на следующем баре. Это неизбежно приводит к проскальзыванию. Ордер Sell next bar at price Limit дает команду TradeStation продавать при первой возможности по указанной цене или выше. Ордер Sell next bar at price Stop дает команду TradeStation продавать при первой возможности по указанной цене или ниже. Стоповые и лимитированные приказы заполняются, как только рынок затронет приказ. Ордер становится рыночным приказом, когда цена торгуемого символа пересекает указанную в приказе стоимость. Это оставляет возможность для стоповых и лимитированных приказов быть не исполненными (т.е., цены никогда не пересекаются); в этом случае, ордера отменяются в момент закрытия бара. Трейдеры обычно используют рыночные ордера и ордера на закрытии, когда точная цена входа в позицию не является критической в торговой стратегии торговли, и ожидается большое движение вниз. Они используют Sell limit приказы при попытке открыть короткие позиции по наиболее высоким ценам, при работе с уровнями сопротивления, или при попытке продать коротко на вершине. И наоборот, они используют Sell stop приказы всякий раз, когда ищут волатильный прорыв вниз. Все это - обычное использование этих типов приказов; они достаточно гибки, чтобы использоваться различными способами. Примеры Следующая инструкция продает 100 акций/контрактов по цене закрытия текущего бара:

Sell 100 Shares This Bar on Close;

Эта инструкция продает заданное по умолчанию количество акций/контрактов, указанное на вкладке Costs диалогового окна Format, при открытии следующего бара, и называется этот ордер Entry#2:

Sell ("Entry#2") Next Bar at Market;

Следующая инструкция размещает ордер на продажу 5 контрактов в минимуме текущего бара минус ранг текущего, или по любой цене еще ниже. Заметьте, что Range - функция EasyLanguage, которая возвращается значение (high-low) текущего бара. Этот ордер остается активным всюду на следующем (пока не заполнится или не будет отменен).

Sell 5 Contracts Next Bar at Low - Range Stop;

Следующая инструкция размещает ордер на продажу 100 акций в самой высокой цене из максимумов последних 10 баров, или по любой цене еще выше. Этот ордер остается активным всюду на следующем баре (пока не заполнится или не будет отменен) и называется ордер HighSell:

Sell ("HighSell") 100 Shares Next Bar at Highest(High,10) Limit;

ExitLong Этот торговый приказ используется, чтобы закрыть длинную позицию. Специальные сообщения ордера определяются дополнительными компонентами, используемыми в инструкции (т.е., сколько акций/контрактов, по какой цене, и т.п.). Ордер на выход из позиции не позволяется использовать при построении пирамиды. Как только критерии выхода выполнены и ордер выхода заполнен, ордер игнорируется для данной позиции до тех пор, пока позиция не изменяется (т.е., куплено больше акций/контрактов, установлена новая длинная позиция). Синтаксис:

ExitLong [("Order Name")] [from entry ("Entry Name")] [ Number of Shares [Total]] [Execution Method];

Только слово ExitLong необходимо для выхода из длинной позиции. Например: ExitLong; Значения по умолчанию, используемые для остальной части выражения, когда они не определены явным образом:

ExitLong ("LX") This Bar on Close;

Вышеупомянутая инструкция закрывает все длинные позиции. Каждая часть инструкции, Order Name, Number of Shares и Execution Method описана ниже. Order Name Если ваш Торговый сигнал или Торговая стратегия включают несколько выходов, то полезно обозначить их различными названиями. Как показано на Рисунке 3-13, это дает возможность Вам идентифицировать эти ордера выхода и на графике движения цен и в Отчете об исполнении Стратегии TradeStation. Название ордера включено в оба этих окна. Назначая имя ордера выхода, определяют название в кавычках в пределах круглых скобок немедленно после слова ExitLong. Например:

ExitLong ("My Exit");

Эта команда полностью закрывает длинную позицию, а название ордера My Exit.

From entry ("Entry Name”)

Связь Выхода со Входом Возможно связать команду выхода с определенным входом. Это можно сделать лишь в том случае, если Вы присвоили имя входу в длинную позицию и длинный вход находится в том же самом Торговом сигнале, что и ордер выхода. Рассмотрим следующий Торговый сигнал:

Buy ("MyBuy") 10 Shares Next Bar at Market; Buy 20 Shares Next Bar at High + 1 Point Stop ; ExitLong From Entry ("MyBuy") Next Bar at High + 3 Points Stop;

В вышеупомянутом примере, Торговый сигнал покупает в сумме 30 акций; ваша длинная позиция - 30 акций. Однако, команда ExitLong ликвидирует только 10 купленных акций, используя ордер входа MyBuy. Она игнорирует любой другой ордер и не продает другие 20 акций. Поэтому этот сигнал оставляет Вас в длинной позиции с 20 акциями. Вы можете также закрыть только часть ордера входа. Например, если ваш вход, который Вы назвали "MyBuy", покупает 10 акций, то Вы можете определить, что Вы хотите выйти из длинной позиции "MyBuy", но продать лишь 5 акций, а не все 10:

Exitlong From Entry ("MyBuy") 5 Shares Next Bar at High + 3 Points Stop;

Важно: название входа чувствительно к регистру. Убедитесь, что использовали непротиворечивое преобразование букв в прописные. Также, важно помнить, что ордера выхода не позволяют пирамидинг; поэтому, если выход не ликвидирует позицию, Вам нужен другой ордер выхода (или Buy/Sell ордер), чтобы ликвидировать позицию. Number of Shares Определить, сколько акций (или контрактов) нужно закрыть, можно, разместив числовое выражение, сопровождаемое словом shares или contracts после торгового приказа ExitLong. Некоторые примеры:

ExitLong 100 Shares; ExitLong From Entry ("MovAvg") 10 Shares Next Bar at High + 1 Point Stop ;

Заметьте: слова shares и contracts - синонимы. Если Вы не определяете количество акций или контрактов в команде ExitLong, то ордер выхода ликвидирует длинную позицию полностью. Когда Вы определяете количество акций/контрактов, команда ExitLong выходит на указанное количество акций/контрактов из каждого открытого входа. Поэтому, если Торговая стратегия допускает возведение пирамиды и купила 500 акций дважды (общее количество акций - 1 000), и в Торговой стратегии прописан ордер ExitLong 100 shares, то реализуется команда на выход общим количеством 200 акций: 100 акций от каждого из двух входов. Рисунок 3-14 иллюстрирует этот пример. После покупки общего количества 1 000 акций (по 500 в двух различных точках входа), ордер, основанный на команде Exitlong 100 shares next bar at market, выходит общим количеством 200 акций, по 100 от каждого входа, оставляя Вас в длинной позиции, состоящей из 800 акций. Экранные титры (Рисунок 3-14) показывают, сколько акций в вашей текущей позиции.
Рисунок 3-14. Команда «ExitLong 100 shares next bar at market» выходит 100 акциями из каждого открытого входа.

Однако, если Вы хотите выйти общим количеством 100 акций, то Вы можете использовать слово Total в команде ExitLong. Использование слова Total дает команду Торговой стратегии выходить 100 акциями от первого открытого входа (принцип: первым пришел - первым ушел). Этот пример показан на Рисунке 3-15
Рисунок 3-15. Команда 'ExitLong 100 shares total next bar at market' выходит 100 акциями из самого старого (первого) открытого входа(ов).
Execution Method Вы можете использовать четыре различных метода выполнения с торговым приказом ExitLong:
Метод выполнения this bar on close предназначен только для целей обратного тестирования; он позволяет Вам проводить тестирование при рыночных ценах близких к поставленным в Ваших ордерах, что Вы не можете автоматизировать использованием TradeStation. Учитывая, что все ордера оцениваются и заполняются в конце каждого бара, TradeStation читает и запускает выполнение "this bar on close" как только бар закрылся (например, как только закончилась дневная торговая сессия). TradeStation заполняет ордер, используя цену закрытия текущего бара, но Вам придется разместить ордер по рынку для выполнения на следующем баре. Это неизбежно приводит к проскальзыванию. Ордер ExitLong at price Limit дает команду TradeStation выходить из длинной позиции при первой возможности по указанной цене или выше. Ордер ExitLong at price Stop дает команду TradeStation выходить из длинной позиции при первой возможности по указанной цене или ниже. Стоповые и лимитированные приказы обрабатываются TradeStation, как только рынок коснется ордера. Ордер становится рыночным приказом, когда цена торгуемого символа пересекает указанную в приказе стоимость. Это оставляет возможность для стоповых и лимитированных приказов быть не исполненными (т.е., цены никогда не пересекаются); в этом случае, ордера отменяются в момент закрытия бара. В общем случае трейдеры используют рыночные приказы и приказы на закрытии, когда точная цена входа не является критической в их торговой стратегии. Они используют лимитированные приказы, когда пытаются выйти из длинных позиций по наиболее высоким ценам, на уровнях сопротивления или в вершине. И, наконец, они вообще используют стоп-приказы всегда, когда ограничивают убытки. Все это - обычное использование для различных типов приказов; они достаточно гибки, чтобы использоваться многими другими способами. Связь Цены Выхода с Баром Входа При определении метода выполнения, Вы можете варьировать стоповый и лимитированный приказы, используя 'At$' вместо 'at'. Использование At$ вынуждает Торговый сигнал обращаться к значению, которое числовое выражение Price имело на баре, где был сгенерирован ордер входа. Рассмотрим следующую инструкцию:

ExitLong From Entry ("MyBuy") Next Bar At$ Low - 1 Point Stop;

Вышеупомянутая инструкция размещает ордер выхода из длинной позиции на один пункт ниже минимума бара, на котором была сгенерирована установленная длинная позиция (например, если ордер buy next bar... сгенерирован сегодня, то цены, на которые ссылаются, будут сегодняшние, а не завтрашние. Даже при том, что ордер будет размещен и заполнится завтра, он был сгенерировано сегодня и это - тот бар, на который ссылаются). Чтобы использовать зарезервированное слово At$, Вы должны назвать ордер входа и команда ExitLong должна обратиться к определенному ордеру входа. Другой пример, если максимальный риск, допускаемый для позиции - 5 пунктов ниже цены закрытия бара, относительно которого Вы генерировали ордер входа, то Вы можете использовать следующую инструкцию:

ExitLong From Entry ("MyBuy") Next Bar At$ Close - 5 Points Stop;

Это - ценная методика, которая позволяет Вам просто обращаться к ценам бара, на котором был сгенерирован ордер входа. Примеры Эта инструкция дает команду на выход из длинной позиции всеми акциями/контрактами в момент закрытия текущего бара. Ваша позиция будет - вне рынка.

ExitLong This Bar on Close;

Следующая инструкция дает команду на выход всеми акциями/контрактами из ваших позиций, открытых в соответствии с ордером входа Entry#1, на открытии в следующем баре, и ордер выхода называется LongExit.

ExitLong ("LongExit") From Entry ("Entry#1") Next Bar at Market;

Следующая инструкция размещает ордер на закрытие 5 акций/контрактов из общего количества в точке минимума текущего бара 1 пункт и ниже. Этот ордер активен везде на следующем (пока не заполнится или не будет отменен):

ExitLong 5 Contracts Total Next Bar at Low - 1 Point Stop;

Следующая команда размещает ордер выхода по 100 акций от каждого входа точке максимума текущего бара плюс ранг текущего бара или выше. Этот ордер остается активным всюду на следующем баре (пока не заполнится или не будет отменен) и будет называться HighExit.

ExitLong ("HighExit") 100 Shares Next Bar at High + Range Limit;

Следующая инструкция позволяет Вам контролировать риск, размещая ордер выхода на 5 пунктов ниже цены закрытия бара, на котором был сгенерирован длинный ордер входа:

ExitLong From Entry ("MyBuy") Next Bar At$ Close - 5 Points Stop;

ExitShort Этот торговый приказ используется, чтобы закрыть короткую позицию. Специальные сообщения ордера определяются дополнительными компонентами, используемыми в инструкции (т.е., сколько акций/контрактов, по какой цене и т.п.). Ордера выхода не допускают пирамидинга. Как только критерии выхода выполнены, и ордер выхода заполнен, ордер игнорируется для этой позиции, пока позиция не изменяется (т.е. больше акций/контрактов продано или установлена новая короткая позиция). Синтаксис:

ExitShort [("Order Name")] [from entry ("Entry Name")] [Number of Shares [Total]] [Execution Method] ;

Только слово ExitShort обязательно для выхода из короткой позиции. Например: ExitShort; Значения по умолчанию, используемые для остальной части выражения, когда они не определены явно:

ExitShort ("SX") This Bar on Close ;

Вышеупомянутая инструкция закрывает короткую позицию полностью. Каждая часть инструкции, Order Name, Entry Name, Number of Shares и Execution Method описаны ниже. Order Name Если ваш Торговый сигнал или Торговая стратегия включают несколько выходов, то полезно обозначить их различными названиями. Как показано на Рисунке 3-13, это дает возможность Вам идентифицировать эти ордера выхода и на графике движения цен и в Отчете об исполнении Стратегии TradeStation. Чтобы назвать выход, напишите имя в кавычках и круглых скобках после торгового приказа ExitShort. Например:

ExitShort ("My Exit");

Эта инструкция выходит из короткой позиции полностью, и ордер называют My Exit.

From entry ("Entry Name”)

Связь Выхода с Входом Возможно, связать команду выхода с определенным входом. Это может быть сделано, только если Вы присвоили имя короткому входу и если короткий вход находится в том же самом Торговом сигнале, что и выход. Например:

Sell ("MySell");

ExitShort from Entry ("MySell");

В предыдущем примере, инструкция ExitShort действует только на позиции, установленные от входа по имени MySell и игнорирует позиции, установленные любыми другими инструкциями. Важно: название входа чувствительно к регистру. Убедитесь, что использовали непротиворечивое преобразование букв в прописные. Также важно помнить, что ордера выхода не могут использоваться при построении пирамиды; поэтому, если выход не ликвидирует позицию (полностью), то Вам необходим другой ордер выхода (или buy/sell ордер), чтобы ликвидировать позицию. Number of Shares Определить, сколько акций/контрактов нужно ликвидировать, можно использованием числового выражения, сопровождаемого словами shares или contracts, после торгового приказа ExitShort. Например:

ExitShort 100 Shares;

или

ExitShort 5 Contracts;

Заметьте: слова shares and contracts - синонимы. Если Вы не определяете количество акций/контрактов в команде ExitShort, то ордер закроет все акции/контракты, оставляя вас в позиции - вне рынка. Если же Вы определяете количество акций/контрактов, то команда ExitShort закрывает определенное количества акций/контрактов из каждого открытого входа. Например, если Торговая стратегия учитывает возведение пирамиды и шортится по 500 акций три раза (общее количество акций в позиции - 1 500 акций), и размещен ордер ExitShort 100 shares, то ордер выхода закроет 300 акций: по 100 акций от каждого из этих трех входов. Обратитесь к обсуждению по торгового приказу ExitLong на странице 136 для получения дополнительных примеров и диаграмм, иллюстрирующих эту особенность. Однако, если цель инструкции ExitShort состоит в том, чтобы выйти общим количеством 100 акций, то Вы можете использовать зарезервированное слово Total в инструкции ExitShort. Использование слова Total заставляет Торговую стратегию выйти 100 акциями из самого старого открытого входа (принцип: первым пришел - первым ушел). Execution Method (Метод Выполнения) Вы можете использовать четыре различных метода выполнения с торговым приказом ExitShort:
Метод выполнения this bar on close предназначен только для целей обратного тестирования; он позволяет Вам проводить тестирование при рыночных ценах близких к поставленным в Ваших ордерах, что Вы не можете автоматизировать использованием TradeStation. Учитывая, что все ордера оцениваются и заполняются в конце каждого бара, TradeStation читает и запускает выполнение "this bar on close" как только бар закрылся (например, как только закончилась дневная торговая сессия). TradeStation заполняет ордер, используя цену закрытия текущего бара, но Вам придется разместить ордер по рынку для выполнения на следующем баре. Это неизбежно приводит к проскальзыванию. Ордер ExitShort at price Limit заставляет TradeStation закрывать короткую позицию при первой возможности по указанной цене или ниже. Ордер ExitShort at price stop заставляет TradeStation закрываться при первой возможности по указанной цене или выше. Стоповые и лимитированные приказы обрабатываются TradeStation, как только рынок коснется ордера. Ордер становится рыночным приказом, когда цена торгуемого символа пересекает указанную в приказе стоимость. Это оставляет возможность для стоповых и лимитированных приказов быть не исполненными (т.е., цены никогда не пересекаются); в этом случае, ордера отменяются в момент закрытия бара. В общем случае трейдеры используют рыночные приказы и приказы на закрытии, когда точная цена входа не является критической в их торговой стратегии или когда произошло большое движение рынка. Они используют лимитированные приказы, когда пытаются выйти из коротких по наиболее низким ценам, на уровнях поддержки или в основании. И, наконец, они вообще используют стоп-приказы всегда, когда ограничивают убытки. Все это - обычное использование для различных типов приказов; они достаточно гибки, чтобы использоваться многими другими способами. Связь Цены Выхода с Баром Входа При определении метода выполнения Вы можете изменить стоповый и лимитированный приказы, используя 'At$' вместо 'at''. Использование At$ вынуждает Торговый сигнал обращаться к значению, которое числовое выражение Price имело на баре, на котором ордер входа был сгенерирован. Рассмотрим следующую инструкцию:

ExitShort From Entry ("MyBuy") Next Bar At$ High + 1 Point Stop;

Инструкция размещает ордер выхода из короткой позиции полностью в точке максимума бара, где указанный короткий ордер входа был сгенерирован, плюс 1 пункт. Например, если ордер sell next bar сгенерирован сегодня, то цены, на которые ссылаются, будут сегодняшние, а не завтрашние. Даже при том, что ордер будет размещен и заполнится завтра, он был сгенерирован сегодня, и это - бар, на который ссылаются. Чтобы использовать зарезервированное слово At$, Вы должны назвать ордер входа, и команда ExitShort должна обратиться к названию определенного ордера входа. Другой пример, если Вы допускаете для позиции максимальный риск в 5 пунктов от цены закрытия бара, на котором сгенерирован ордер входа в рынок, то Вы можете использовать следующее выражение:

ExitShort From Entry ("MySell") Next Bar At$ Close + 5 Points Stop;

Это - ценная методика, которая позволяет Вам легко обращаться к ценам бара, на котором был сгенерирован ордер входа. Примеры Следующая инструкция выходит всеми акциями/контрактами из всех открытых коротких входов в момент закрытия текущего бара:

ExitShort This Bar on Close;

Следующая команда выходит всеми акциями/контрактами из любых коротких входов, открытых в соответствии с ордером входа Entry#1, на открытии следующего бара, и этот ордер называется ShortExit.

ExitShort ("ShortExit") From Entry ("Entry#1") Next Bar at Market;

Следующая команда размещает ордер закрытие лишь 5 контрактов точке максимума текущего бара плюс 1 пункт или выше. Этот ордер активен всюду на следующем баре (пока не заполнено или не будет отменен):

ExitShort 5 Contracts Total Next Bar at High + 1 Point Stop;

Следующая команда размещает ордер на выход по 100 акций из каждого открытого входа в точке минимума текущего бара минус ранг текущего бара или выше. Этот ордер активен всюду на следующем баре (пока не заполнится или не будет отменен), и называется он HighExit.

ExitShort ("HighExit") 100 Shares Next Bar at Low - Range Limit;

Следующая инструкция позволяет Вам контролировать риск, размещая ордер выхода на 5 пунктов выше цены закрытия бара на котором был сгенерирован Ваш ордер входа в короткую позицию:

ExitShort From Entry ("MySell") Next Bar At$ Close + 5 Points Stop;

EasyLanguage - Понятие встроенных стопов

Стопы - торговые сигналы выхода, которые - не рыночные управляются; они выводят Вас из рынка на основании приемлемого для Вас уровня риска и желаемой нормы прибыли. В TradeStation доступны шесть встроенных стопов (торговых сигналов), которые написаны с использование определенных зарезервированных слов. Встроенные стопы уникальны, поскольку зарезервированные слова, которые они используют, пересчитываются на каждом тике, а не при закрытии бара. Другими словами, они активизируются на входном баре и обновляются на каждом баре позиции потиково (от тика к тику). Все другие команды EasyLanguage, которые Вы записываете сами, рассчитываются только на закрытии бара. Это уникальное поведение особенно важно помнить при использовании скользящего стопа. Как только встроенный стоп-приказ размещен, значение скользящего стопа повторно рассчитывается на каждом тике и, в случае необходимости, стоп-приказ отменяется, а новый стоп-приказ размещается перед закрытием бара. Это означает, что встроенный стоп-приказ может быть сгенерирован, размещен и заполнен на том же самом баре с использованием цен этого бара. Например, предположим, что Вы применяете торговую стратегию, которая содержит встроенный скользящий стоп, к дневной диаграмме (на реальных/отсроченных данных). Цена, по которой размещается ордер, повторно рассчитывается на каждом тике. Если цена ордера отличается от последнего вычисления (например, потому что рынок сделал новый максимум), то открытая заявка отменяется, а новый ордер размещается в текущий бар независимо от состояния бара. Недостаток в использовании встроенных стопов (или ваших собственных торговых сигналов, написанных с определенными зарезервированными словами) состоит в том, что, так как они модифицируются на каждом тике, то данная конкретная "стоп-цена" может быть реально недостижима из-за обновления "стоп-цены" от тика к тику. Кроме того, результаты этих стопов (подобно любым торговым сигналам входа/выхода) можно быть искажены в соответствии с допущениями для бара. Вы можете использовать шесть встроенных стопов в ваших торговых стратегиях, или Вы можете использовать определенные зарезервированные слова в ваших собственных торговых сигналах выхода. Восемь специальных зарезервированных слов перечислены ниже вместе с описанием соответствующего торгового сигнала. SetBreakEven Это зарезервированное слово используется, чтобы разместить ордер выхода из позиции в точке безубыточности, как только указанное количество прибыли достигнуто. Синтаксис:

SetBreakEven (FloorAmnt)

Параметры: FloorAmnt - количество прибыли, которое будет достигнуто прежде, чем будет размещен ордер выхода. Примечания: Используется с SetStopContract или SetStopPosition. Торговый сигнал: Breakeven Stop-Floor (Стоп на уровне безубыточности) - когда прибыль (для позиции или единичной акции/контракта) превышает уровень безубыточности - генерируется ордер выхода. Ордер выхода - стоп-приказ, размещенный по входной цене (средняя цена на вход при нескольких входах) плюс комиссионные, указанные на вкладке Costs при форматировании стратегии. Прибыль основной позиции рассчитывается вычитанием любых комиссионных, указанных на вкладке Costs, из полной прибыли позиции. Прибыль от единичной акции/контракта в основной позиции рассчитывается делением полной прибыли позиции на количество акций/контрактов и следующим вычитание комиссионных из полученного значения. Breakeven Stop-Floor торговый сигнал только вступает в силу, как только достигнуто заданное количество прибыли. Поэтому, Вы не должны использовать его для ограничения убытков. SetExitOnClose Это зарезервированное слово используется, чтобы разместить ордер выхода из позиции в момент закрытия текущего бара. Синтаксис:

SetExitOnClose

Параметры: Нет Торговый сигнал: Close at End of Day (Закрытие в конце дня) - Торговый сигнал The Close at End of Day не имеет никаких параметров. Он дает команду на закрытие всех открытых позиций в момент закрытия дневной сессии. Это особенно полезно для внутридневных трейдеров, которые не хотят иметь открытых позиций до начала следующего рабочего дня. SetDollarTrailing Это зарезервированное слово используется, чтобы определить количество (прибыли), основанное на максимальной открытой (достигнутой) прибыли позиции, которое Вы можете (себе позволить) потерять (в долларах). Позиция или единичная акция/контракт закрывается, когда указанное количество достигнуто. Синтаксис:

SetDollarTrailing (DollarValue)

Параметры: DollarValue - количество максимальной открытой (достигнутой в данной позиции) прибыли, которое Вы можете потерять. Примечания: Используется с SetStopContract или SetStopPosition. Торговый сигнал: Dllr Risk Trailing (Скользящий долларовый риск) - Торговый сигнал Dllr Risk Trailing позволяет Вам указывать максимальную сумму денег, которой Вы желаете рисковать на позицию, основанной на максимальной (достигнутой) прибыли открытой позиции. Максимальная прибыль рассчитывается от точки входа, с использование наивысшей из максимальных цен для длинной позиции, и наименьшей из минимальных цен для короткой позиции. Сумма долларовой прибыли для единичного контракта или позиции, которой Вы желаете рискнуть, вычитается из полученного значения и скользящий стоп размещается в этой точке. Например, предположим, что скользящий долларовый риск установлен на 500 $. Защитный стоп был бы размещен в точке максимальной прибыли минус 500 $. Если сумма, который Вы желаете рискнуть, больше чем максимальная прибыль открытой позиции, то такой скользящий стоп не вступает в силу. Следовательно, торговый сигнал Dllr Risk Trailing только фиксирует прибыль; он не дает команду на закрытие позиции, если Вы торгуете с убытком. Поэтому, Вы не должны использовать его для ограничения потерь.

SetPercentTrailing

Это зарезервированное слово используется, чтобы определить часть (процент) от максимальной прибыли открытой позиции, который Вы можете себе позволить потерять (как процент) по достижении некоторого уровня прибыли, который должен быть достигнут для того, чтобы стоп вступил в силу. Позиция или единичная акция/контракт закрывается, когда указанный процент от достигнутой максимальной прибыли потерян. Синтаксис:

SetPercentTrailing(FloorAmnt, Amount)

Параметры: FloorAmnt - сумма прибыли, которая будет достигнута прежде, чем стоп вступает в силу. Amount - процент от прибыли, которую Вы можете позволить потерять. Примечания: Используется с SetStopContract или SetStopPosition. Торговый сигнал: Percent Risk Trailing (Скользящий процентный риск) - торговый сигнал Percent Risk Trailing дает возможность Вам указать, какой процент от максимальной достигнутой прибыли позиции Вы можете себе позволить отдать прежде, чем позиция будет автоматически закрыта. Также требует, чтобы был обеспечен минимальный уровень прибыли, который должен быть достигнут позицией прежде, чем стоп вступит в силу. Максимальная прибыль рассчитана от входной точки с использованием наивысшего из максимумов при длинной позиции или наименьшего из минимумов в короткой позиции. Рассчитывается сумма, которой Вы желаете рискнуть, которая вычитается из максимально возможной для позиции прибыли и в точку с полученным значением размещается скользящий стоп. Например, предположите, что Percent Risk Trailing Стоп помещен в 20 % с уровнем 500 $. Как только прибыль превысит значение уровень 500 $, стоп станет активным. Стоп размещается в точке 80% от максимальной прибыли, достигнутой позицией до настоящего времени. Если максимальная прибыль открытой позиции не превышает некоторый нижний предел, то скользящий стоп не вступает в силу. Следовательно, это стоп только фиксирует прибыль, но не ограничивает потери. SetProfitTarget Это зарезервированное слово используется, чтобы определить сумму прибыли, которой Вы хотите достигнуть, чтобы ликвидировать позицию. Синтаксис:

SetProfitTarget (DollarValue)

Параметры: DollarValue - сумма прибыли, при достижении которой позиция закрывается. Примечания: Используется с SetStopContract или SetStopPosition. Торговый сигнал: Profit Target (Ориентир прибыли) - торговый сигнал Profit Target дает возможность Вам автоматически закрыть Ваши позиции при достижении некоторого уровня прибыли. Если этот уровень прибыли не достигнут, то стоп не вступит в силу. Этот стоп фиксирует прибыль, но не ограничивает потери. SetStopLoss Это зарезервированное слово используется, чтобы определить сумму, которую Вы можете себе позволить потерять на позицию или акцию/контракт. Синтаксис:

SetStopLoss (DollarValue)

Параметры: DollarValue - сумма, которую Вы можете потерять на позицию или акцию/контракт. Примечания: Используется с SetStopContract или SetStopPosition. Торговый сигнал: Stop Loss Торговый сигнал Stop Loss дает возможность Вам определить максимальную сумму денег, которой Вы желаете рисковать на любой позиции или на любой акции/контракте. Например, если Вы определяете Stop Loss в 500 $ на S&P 500, TradeStation автоматически выходят из полной позиции, когда потери позиции достигают 500 $. Торговый сигнал Stop Loss (Ограничение убытков) никогда не должен использоваться как единственный выход, который использует ваша торговая стратегия, поскольку для этого сигнала требует, чтобы позиция потеряла деньги перед тем, как выйти из торговли. Например, если рынок движется в Вашу сторону, и Вы получаете большую прибыль, то Вы должны были бы потерять всю прибыль плюс еще некоторая сумма, которую Вы определяете как "ограничение убытков" прежде, чем торговая стратегия исполнит ордер, ликвидирующий позицию или акцию/контракт. SetStopContract Это зарезервированное слово используется, чтобы указать, что стоп применяется для акции/контракта. Если ни одно из слов SetStopContract или SetStopPosition не используются, то стоп оценивается на основании позиции. SetStopPosition Это зарезервированное слово используется, чтобы указать, что стоп применяется для полной позиции. Если ни одно из слов SetStopContract или SetStopPosition не используются, то стоп оценивается на основании позиции.

EasyLanguage - Запись индикаторов и изучений

Индикаторы и изучения (studies) отображают информацию на графике движения цен. Самое общее определение индикатора - математическая формула, которая возвращает число для каждого бара на диаграмме, в конечном виде изображенная как строка, гистограмма, или ряд точек. Изучения - во многом подобны индикаторам, за исключением того, что они имеют определенное встроенное форматирование. Изучения, доступные Вам в TradeStation - ShowMe, PaintBar, ProbabilityMap и ActivityBar. В этом разделе обсуждается, как записать индикаторы изучения (ShowMe, PaintBar, ProbabilityMap и ActivityBar). Запись Индикаторов Когда Вы применяете индикатор к графику движения цен, Вы можете форматировать индикатор, чтобы отобразить его значения различными способами; например, как показано на Рисунке 3-16, Вы можете отформатировать индикатор, чтобы отобразить его линейную диаграмму, как гистограмму в основании диаграммы или как ряд точек и т.д.
Рисунок 3-16. Различные стили форматирования индикаторов

Вы можете даже форматировать свойства индикатора, чтобы отобразить его график баров. Например, в случае индикатора с тремя графиками, типа Moving Average Indicator (Индикатора Скользящего среднего) с 3 линиями, Вы можете форматировать индикатор и устанавливать один график как bar high, другой как bar low, а третий как right tick. Индикатор Moving Average с 3-мя строками, отображенный как столбиковая диаграмма показан на Рисунке 3-17
Рисунок 3-17. Индикатор, отформатированный, чтобы отображаться как столбиковая диаграмма

Для получения подробной информации относительно форматирования индикаторов, обратитесь к Интерактивному Руководству Пользователя. Удостоверьтесь, что Вы понимаете концепцию масштабирования графиков движения цен и индикаторов. Использование различного масштаба может существенно изменить вид ваших индикаторов. Для получения дополнительной информации о масштабировании, ищите Интерактивном Руководстве Пользователя раздел "Форматирование Индикатора". Инструкция Plot, обычно используемая для записи индикаторов на ценовых графиках, описывается ниже.

PlotN(Expression, "", ForeColor, BackColor, Width)

Значения на дисплее является результатом вычисления или выражения, отображенным на графике движения цен. Для графиков движения цен отображаемые значения могут быть только числовыми. Синтаксис:

PlotN(Expression [,"" [,ForeColor [,BackColor, [,Width]]]]);

Параметры: N - номер между 1 и 4; представляет один из четырех доступных графиков. Expression - числовое значение, составляющее график; - название графика. ForeColor - цвет EasyLanguage, используемый для графика (упоминается также, как PlotColor); BackColor определяет цвет фона (используется только с окнами OptionStation Position Analysis и RadarScreen), и Width - числовое значение, представляющее ширину графика. Параметры , ForeColor, BackColor и Width являются дополнительными. Для получения списка доступных цветов и размеров обратитесь к Приложению B этой книги. Примечания: Параметр BackColor не имеет никакого эффекта при составлении графика индикатора в окне графика движения цен; однако, значение для параметра требуется, чтобы определить ширину, как показано в примере. Пример: Любой или несколько дополнительных параметров могут быть опущены, пока нет других параметров справа. Например, параметры BackColor и Width могут быть исключены из инструкции следующим образом:

Plot1 (Volume, "V", Red);

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

Plot1(Volume, Black, White, 2);

Правильно:

Plot1(Volume, "V", Black, White, 2);

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

Plot1(Volume);

Когда никакое название графика не определено, EasyLanguage использует Plot1, Plot2, Plot3, или Plot4 как названия для каждого графика. Первый график называют Plot1, второй Plot2, и так далее. При обращении к цвету графика или ширине, Вы можете использовать слово Default вместо параметра(ов), чтобы иметь инструкцию Plot, использующую цвет по умолчанию и/или ширину, выбранную на вкладке Properties диалогового окна Format indicator. Например, следующая инструкция отобразит объем в цвете по умолчанию, но определяет конкретную ширину:

Plot1 ( Volume, "V", Default, Default, 3);

Повторяем, Вы можете использовать слово Default для параметров цветов или параметра ширины. Один и тот же график (т.е., Plot1, Plot2) может использоваться более чем один раз в методике анализа; единственное требование - чтобы Вы использовали то же самое название графика в обоих образцах инструкции Plot. Если никакое название не назначено, то используется заданное по умолчанию название графика (т.е., Plot1, Plot2). Например, если Вы хотите составить график изменения сети, используя красный цвет как отрицательный и зеленый, как положительный, Вы можете использовать тот же самый номер графика (в нашем случае Plot1) дважды - лишь бы он был тем же самым:

Value1 = Close - Close[1]; If Value1 > 0 Then Plot1( Value1, "NetChg", Green ) Else Plot1 ( Value1, "NetChg", Red );

В этом примере, название графика "NetChg" должно быть одинаковым обоих образцах инструкции Plot. Заметьте: Как только Вы определили график, используя зарезервированное слово PlotN, Вы можете ссылаться на значение графика, просто используя зарезервированное слово PlotN. В примере ниже, зарезервированное слово Plot1 используется, чтобы составить график распределения накопления объема. На значение графика ссылаются в следующей инструкции, чтобы записать критерии предупреждения alert:

Plot1 (AccumDist (Volume), "AccumDist"); If Plot1 > Highest (Plot1, 20) then Alert ;

SetPlotColor(Number, Color) Это зарезервированное слово используется, чтобы изменить цвет специфической части графика в окне графика движения цен. Синтаксис:

SetPlotColor (Number, Color);

Параметры: Number - номер от 1 до 4 представляет номер графика для изменения. Color - цвет EasyLanguage, который используется для графика. Для получения списка доступных цветов обратитесь к Приложению B этой книги. Пример: Следующие инструкции EasyLanguage окрашивают график в красный цвет, когда RSI Индикатор находится выше 75, и зеленым - когда он ниже 25:

Plot1 (RSI (Close, 9), "RSI"); SetPlotColor (1, Default); If Plot1 > 75 Then SetPlotColor (1, Red); If Plot1 < 25 Then SetPlotColor (1, Green);

В этом примере RSI Индикатор имеет три возможных цвета: красный, когда его значение более чем 75, зеленый, когда его значение меньше чем 25, и цвет по умолчанию, когда его значение между 25 и 75. Если бы Вы отрегулировали только два цвета: один для значений более чем 75, и второй для значений менее чем 25, то оставшиеся значения между 25 и 75 имели один из двух цветов (который был отрегулирован последним). Вы должны сбросить цвет графика к цвету по умолчанию для каждого бара так, чтобы значения отображались красным при значениях более 75 и зеленым при значениях менее 25. Остальная часть значений имеет цвет по умолчанию. В этом примере мы использовали зарезервированное слово SetPlotColor, чтобы сбросить график к цвету по умолчанию. Вы можете также урегулировать цвет графика по умолчанию, используя зарезервированное слово PlotN. Если Вы урегулируете цвет по умолчанию в инструкции PlotN, то Вы можете не использовать первую инструкцию SetPlotColor; поэтому ваши команды могут быть следующие:

Plot1 (RSI (Close, 9), "RSI", Default); If Plot1 > 75 Then SetPlotColor (1, Red); If Plot1 < 25 Then SetPlotColor (1, Green);

SetPlotWidth(Number, Width) Это зарезервированное слово регулирует ширину указанного графика. Синтаксис:

SetPlotWidth (Number, Width);

Параметры: Number - номер от 1 до 4 представляет номер графика для изменения. Width - EasyLanguage ширина, которая используется для графика. Для получения списка доступных размеров обратитесь к Приложению B этой книги. Пример: Следующие инструкции EasyLanguage изменяют ширину графика к более толстой линии, когда Индикатор Импульса - более чем 0, и к более тонкой линии, когда он находится под 0:

Plot1 (Momentum (Close, 10), "Momentum"); If Plot1 > 0 Then SetPlotWidth (1, 4); If Plot1 < 0 Then SetPlotWidth (1, 1);

В этом примере, Индикатор Импульса имеет два возможных размера: более толстый, при значениях более чем 0, и более тонкий, когда значения - ниже 0. Однако, в некоторых случаях Вы можете пожелать, чтобы индикатор имел три или больше возможных размера. Пожалуйста, обратитесь к примеру для предыдущего зарезервированного слова SetPlotColor, для получения дополнительных разъяснений использования зарезервированного слова SetPlotWidth. Определение Доступности Индикаторов Когда Вы создаете индикатор в EasyLanguage PowerEditor, Вы запрашиваете определенное окно (например, график движения цен, окно OptionStation Position Analysis, окно RadarScreen) о доступности вашего индикатора. Под доступным мы подразумеваем, что индикатор будет в библиотеке индикаторов, когда Вы выбираете индикатор для вставки в приложение. Для получения информации относительно определения приложений, для которых ваш индикатор является доступным, обратитесь к Интерактивному Руководству Пользователя

EasyLanguage - Запись ShowMe и PaintBar

ShowMe и PaintBar во многом подобны друг другу, в обоих ищут и отмечают некоторым способом бар, на котором выполняется определенное условие. Различие их состоит в способе, которым каждое изучение отмечает бар: в PaintBar бар отмечаются цветом, в то время как ShowMe обычно размещают метку выше или ниже бара. ShowMe лучше всего использовать, когда цель анализа состоит в том, чтобы найти критерий, который обычно случается единожды на некоторых барах. Метка (обычно круглая точка) помещается выше или ниже этих баров. Предназначение изучения ShowMe состоит в том, чтобы сократить объем работы при анализе (рассматривании) диаграммы, на которой ищут бары с выполненными некоторыми критериями. PaintBar лучше всего использовать, чтобы подсветить на графике момент, когда рынок входит в некоторый режим или тенденцию. Другими словами, его лучше всего использовать, чтобы подсветить эпизоды, который случаются на множестве последовательных баров. Например, на Рисунке 3-18 мы видим, как изучение ShowMe используется, чтобы найти все бары Бычьего (Повышательного) разворота, а PaintBar используется всякий раз, когда импульс символа положителен.
Запись ShowMe и PaintBar
Рисунок 3-18. ShowMe и Paintbar
ShowMe Изучения Чтобы записать изучение ShowMe, Вы используете зарезервированное слово PlotN, описанное на странице 150, но вместо того, чтобы составить график значений для каждого тика или бара, Вы определяете условия, используя инструкцию IF-THEN, при которых выполняется инструкция Plot. Также, вместо того, чтобы определять значение, чтобы составить график, Вы определяете значение на баре, куда надо разместить метку, когда выполнены некоторые условия (например, high, low, open, close или любое другое числовое значение). Ниже - пример ShowMe Outside Bar (Внешний бар), которое размещает метку в максимуме текущего бара, когда максимум текущего бара выше максимума на предыдущем баре, и текущий минимум ниже минимума на предыдущем баре:

If High > High[1] AND Low < Low[1] Then Plot1 (High, "Outside Bar");

В вышеупомянутом примере мы определяли только значение, куда разместить метку, в данном случае - в максимум бара, и мы назвали график Outside Bar. Мы можем также определить цвет метки и ширину, или толщину метки, как описано в обсуждении зарезервированного слова PlotN. Для работы с ShowMe имеется дополнительное зарезервированное слово NoPlot. NoPlot(Num) Это зарезервированное слово удаляет указанный график из текущего бара на графике движения цен. Синтаксис:

NoPlot(Num)

Параметры: Num - числовое выражение, представляющее номер графика для удаления. Примечания: Это зарезервированное слово полезно при обработке данных, получаемых в реальном масштабе времени/отсроченном, и если Вы выбрали флажок Update Every Tick для изучения ShowMe. Если условие ShowMe становится истинным в течение бара, но не верно в конце бара, то метка удаляется. Если Вы не используете это зарезервированное слово, и метка была бы помещена на бар, когда условие стало истинным, то она остается там, даже когда условие становится ложным. Пример: Следующее ShowMe отмечает минимум бара, на котором произошел гэп (разрыв) вниз, но удаляет метку, если условие более не истинно для бара:

If High < Low of 1 Bar Ago Then Plot1 (Low, "GapDown") Else NoPlot (1);

PaintBar Изучения Чтобы записывать изучения PaintBar, Вы используете зарезервированные слова, описанные ниже. PlotPaintBar (BarHigh, BarLow, "PlotName", ForeColor, BackColor, Width) Это зарезервированное слово используется только в пределах изучения PaintBar и предоставляет Вам возможность окрасить бар полностью (целиком) указанным цветом или окрасить часть бара между двумя указанными значениями. Синтаксис:

PlotPaintBar (BarHigh, BarLow [, BarOpen [, BarClose [,""[, ForeColor [, BackColor [, Width]]]]]]);

Параметры: BarHigh, BarLow, BarOpen и BarClose - числовые выражения, представляющие максимум, минимум, открытие и цену закрытия бара, который будет прорисован (обработан)изучением PaintBar. - название графика. ForeColor - цвет EasyLanguage, который будет использоваться, чтобы окрасить бар, BackColor - цвет EasyLanguage, который в настоящее время не используется, и Width - числовое значение, представляющее ширину графика. Примечания: Вы можете определить только два из параметров: BarHigh, BarLow, BarOpen или BarClose. Однако учтите, что Вы должны определить или два или четыре параметра бара. Параметр BackColor в настоящее время не имеет никакого эффекта (зарезервирован) на диаграмме; однако, Вы явным образом должны включить его в инструкцию, когда Вы хотите определить Width. Вы можете сократить зарезервированное слово PlotPaintBar до PlotPB. Также Вы можете использовать зарезервированное слово PlotN, описанное ранее, чтобы записать изучение PaintBar; однако, мы рекомендуем Вам использовать зарезервированное слово PlotPaintBar . Для получения списка доступных цветов и размеров обратитесь к Приложению B этой книги. Пример: Например, следующие команды могут использоваться, чтобы окрасить красным цветом бары, на которых объем вдвое превосходит средний объем на последних 10-ти барах:

If Volume > 2 * Average (Volume, 10) Then PlotPB (High, Low, Open, Close, "AvgVol", Red );

Следующие команды окрасят область между двумя графиками Bollinger Bands Indicator (Индикатора Полос Боллинжера), когда значение 14-тибарного ADX ниже, чем 25:

Variables: Top(0), Bottom(0); Top = BollingerBand (Close, 14, 2); Bottom = BollingerBand (Close, 14, -2); If ADX(14) < 25 Then PlotPaintBar (Top, Bottom, "Area", Blue);

В последнем примере обратите внимание, что, хотя мы опустили параметры BarLow и BarClose, мы все же можем определить название и цвет графика. Мы применяли это изучение PaintBar к диаграмме и отформатировали таким образом, чтобы использовалась пунктирная линия. Результат показан на Рисунке 3-19.
Запись ShowMe и PaintBar
Рисунок 3-19. Использование PaintBar для выделения области диаграммы
NoPlot(Num) Это зарезервированное слово удаляет указанный график из текущего бара в графике движения цен. Синтаксис:

NoPlot (Num)

Параметры: Num - числовое выражение, представляющее номер графика для удаления. Примечания: Это зарезервированное слово полезно при обработке данных, получаемых в реальном масштабе времени/отсроченном, и если Вы выбрали флажок Update Every Tick для изучения PaintBar. Если условие PaintBar становится истинным в течение бара, но не верно в конце бара, то график удаляется из этого бара. Если Вы не используете это зарезервированное слово и бар был окрашен, когда условие стало истинным, то он остается окрашенным, даже когда условие становится ложным. Пример: Следующее изучение PaintBar окрашивает бары, цена закрытия которых меньше среднего значения за 10 предыдущих периодов, но удаляет график из текущего бара, если это условие больше не истинно:

If Close < Average (Close, 10) Then PlotPaintBar (High, Low, "Price Изучение PaintBar использует один график для двух параметров; поэтому, чтобы удалить вышеупомянутый график, Вы должны использовать одну инструкцию NoPlot, как показано выше. Если Вы используете четыре ценовых параметра с зарезервированным словом PlotPaintBar, то Вам придется использовать две инструкции NoPlot, чтобы удалить графики NoPlot(1) и NoPlot(2).

EasyLanguage - Запись ProbabilityMap

Изучения ProbabilityMap создают "область рисунка" справа от любого бара, нажатого в графическом приложении. Они обычно используются, чтобы показать самое вероятное направление или область, куда символ будет двигаться в будущем. Пример показан на Рисунке 3-20.
EasyLanguage - Запись ProbabilityMap
Рисунок 3-20. Изучение ProbabilityMap, пытающееся предсказывать будущее направление рынка.

Однако, это не единственное использование ProbabilityMap, поскольку методика анализа всего лишь предоставляет полотно, на котором Вы можете нарисовать любую модель или текстуру. Как упомянуто выше, при создании нового изучения ProbabilityMap, ваша первая задача состоит в том, чтобы определить область вероятностей. Эта область является прямоугольной и представляет собой сетку со строками и столбцами. Как показано на Рисунке 3-21, количество строк определяется максимальной и минимальной ценами, и высотой строки, а количество столбцов определяется как множество баров. Вы регулируете эти значения, используя зарезервированные слова. Когда первоначальная сетка создана, она содержит ячейки с нулевым значением. Поэтому, после того, как Вы определяете область вероятностей, Вы должны назначить число между 0 и 100 для каждой из ячеек в сетке. Это число отражает вероятность, что цена (или значение) достигнет этой специфической ячейки.
EasyLanguage - Запись ProbabilityMap
Рисунок 3-21. Область вероятностей ProbabilityMap
Как объяснено выше, при создании изучения ProbabilityMap, создается прямоугольная область и разделяется на сетку с указанным количеством строк и столбцов. Каждой из ячеек в этой сетке назначается значение от 0 до 100, представляющее вероятность того, что цена достигнет этой ячейки. Когда изучение ProbabilityMap применено к графику движения цен, назначается определенный цвет на каждую ячейку области вероятностей и, таким образом, создается ProbabilityMap граф. Как показано на Рисунке 3-22, есть три доступных модели: fire (огонь), smoke (дым) и fade (постепенное изменение). Вы определяете модель, используя вкладку Properties в диалоговом окне Format.
Рисунок 3-22. Цветовые модели ProbabilityMap
При создании ProbabilityMap, важно знать, что они вычисляются теми же методами, что и другие методики анализа (и как объясняется в Главе 2 "Основные Элементы EasyLanguage"); однако, они не принимают во внимание все бары на графике движения цен так, как другие методики анализа. Они принимают во внимание только один из множества баров, определенных установкой MaxBarsBack. Например, если в установке MaxBarsBack определены 50 баров, и мы помещаем указатель ProbabilityMap в 53-ий бар графика движения цен, то изучение ProbabilityMap начинает вычисления на 50-ом баре диаграммы и далее до 53-его бара, пока не отображается область вероятностей. Однако, если мы размещаем наш указатель в 100-ый бар графика движения цен, то изучение ProbabilityMap начнет вычисления с 51-го бара диаграммы и далее до самого последнего бара, в котором и отображается область вероятностей (область вероятностей фактически создается для каждого из этих 50 баров, однако отображается она единовременно только для одного бара). Это изображено на Рисунке 3-23.
EasyLanguage - Запись ProbabilityMap
Рисунок 3-23. Вычисления ProbabilityMap и MaxBarsBack
Как и с любой торговой стратегией или методикой анализа, Вы должны определить количество используемых баров в поле Maximum Number of Bars study will reference (MaxBarsBack). Зарезервированные слова, доступные для использования с ProbabilityMap разделены на две группы: зарезервированные слова набора и зарезервированные слова получения. Зарезервированные слова набора используются, чтобы определить свойства изучений ProbabilityMap и непосредственно для рисования граф. Зарезервированные слова получения, с другой стороны, используются, чтобы читать значения существующего изучения ProbabilityMap или других методик анализа, приложенных к графику движения цен. Зарезервированные слова Набора Для создания ProbabilityMap Вы будете использовать все зарезервированные слова набора. Эти слова определяют размер и свойства изучения ProbabilityMap. PM_SetHigh(Num) Это зарезервированное слово определяет верхнюю границу области ProbabilityMap. ProbabilityMap не отображается выше указанного значения. Синтаксис:

PM_SetHigh (Num)

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

PM_SetHigh (Close + (Range * 3));

PM_SetLow (Num) Это зарезервированное слово определяет нижнюю границу области ProbabilityMap. ProbabilityMap не отображается ниже указанного значения. Синтаксис:

PM_SetLow (Num)

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

PM_SetLow (Lowest (Low,20));

PM_SetNumColumns(Num) Это зарезервированное слово используется, чтобы определить количество столбцов в ProbabilityMap области вероятностей. ProbabilityMap не отображается вне указанного количества баров. Синтаксис:

PM_SetNumColumns (Num)

Параметры: Num - числовое выражение, представляющее максимальное количество баров вправо от текущего бара, где ProbabilityMap может быть отображен. Пример: Следующая инструкция определяет изучение ProbabilityMap с областью вероятностей в 50 баров:

PM_SetNumColumns(50);

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

PM_SetNumColumns (MaxBarsForward);

PM_SetRowHeight(Num) Это зарезервированное слово используется, чтобы определить (в пунктах) высоту каждой строки ProbabilityMap области вероятностей. Синтаксис:

PM_SetRowHeight (Num)

Параметры: Num - числовое выражение, представляющее высоту строки. Примечания: Высота строки области вероятностей обычно определяется как: (ProbabilityMap Upper Boundary - ProbabilityMap Lower Boundary) / Number of Rows Так, например, если разница между верхней и нижней границами ProbabilityMap - 50, и Вы хотите иметь 100 строк, то высота строки должна быть 0.5. Чем больше строк в ProbabilityMap, тем лучшая "разрешающая способность"; другими словами, ячейки сетки более мелкие и конечный граф показывается более детально. Однако, тогда требуется больше времени для прорисовки графа, так как необходимо вычислять больше ячеек. Пример: Если Вы хотите иметь 50 строк в ProbabilityMap, следующие команды определяют соответствующую высоту строки:

PM_SetRowHeight ((PM_High - PM_Low) / 50);

PM_SetCellValue (Column, Price, Value) Это зарезервированное слово используется, чтобы урегулировать значение индивидуальной ячейки в ProbabilityMap области вероятностей. Синтаксис:

PM_SetCellValue (Column, Price, Value)

Параметры: Column, Price и Value - числовые выражения. Column and Price - столбец и строка области вероятностей, соответственно, а Value - числовое выражение между 0 и 100, окрашивающее отдельную согласно цветным моделям, показанным на Рисунке 3-22. Пример: Следующая инструкция регулирует ячейку в столбце, соответствующем закрытию последнего бара на диаграмме (первый бар в ProbabilityMap области вероятностей) к значению 100:

PM_SetCellValue (1, Close, 100);

Зарезервированные слова Получения Зарезервированные слова Получения дают возможность стратегиям торговли, методикам анализа и функциям читать информацию от изучения ProbabilityMap. PM_Low Это зарезервированное слово возвращает числовое значение, представляющее нижнюю границу области вероятностей изучения ProbabilityMap. Это значение важно знать, чтобы не сделать запрос на получение значений вне области вероятностей изучения ProbabilityMap. Синтаксис:

PM_Low

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

If Value1 >= PM_Low AND Value1 <= PM_High Then PM_SetCellValue (1, Value1, 100);

PM_High Это зарезервированное слово возвращает числовое значение, представляющее верхнюю границу области вероятностей изучения ProbabilityMap. Это значение важно знать, что Вы не сделали запрос значений вне области вероятностей ProbabilityMap. Синтаксис:

PM_High

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

If Value1 >= PM_Low AND Value1 <= PM_High Then PM_SetCellValue (1, Value1, 100);

PM_GetRowHeight Это зарезервированное слово возвращает числовое значение, представляющее высоту (в пунктах) ячеек области вероятностей изучения ProbabilityMap. Синтаксис:

PM_GetRowHeight

Параметры: Нет. Чтобы получить значение, возвращенное этим зарезервированным словом, Вы можете назначить значение на числовую переменную, например, Value1. Примечания: Это значение должно использоваться как приращение при пересечении области вероятностей ProbabilityMap. Пример: Следующий цикл пересекает первый столбец области вероятностей ProbabilityMap:

Value1 = PM_Low; While Value1 < PM_High Begin {EasyLanguage instructions } Value1 = Value1 + PM_GetRowHeight; End;

PM_GetNumColumns Это зарезервированное слово возвращает числовое значение, представляющее количество столбцов области вероятностей изучения ProbabilityMap. Синтаксис:

Value1 = PM_GetNumColumns

Параметры: Нет. Чтобы получить значение, возвращенное этим зарезервированным словом, Вы можете назначить значение на числовую переменную, например, Value1. Пример: Следующий цикл пересекает строку области вероятностей изучения ProbabilityMap от первого столбца к последнему:

For Value1 = 1 To PM_GetNumColumns Begin {EasyLanguage instruction(s) } End;

PM_GetCellValue (Column, Price) Это зарезервированное слово возвращает номер, соответствующий значению указанной ячейки области вероятностей изучения ProbabilityMap. Номер, возвращенный этим зарезервированным словом - число между 0 и 100, соответствующий цветовым моделям, показанным на Рисунке 3-22. Синтаксис:

Value1 = PM_GetCellValue (Column, Price)

Параметры: Column и Price - числовые выражения, представляющие ячейку в области вероятностей ProbabilityMap изучения , для которой Вы хотите получить значение. Чтобы получить значение, возвращенное этим зарезервированным словом, Вы можете назначить значение на числовую переменную, например, Value1. Пример: Следующая инструкция получает значение ячейки в нижнем левом углу области вероятностей ProbabilityMap изучения:

Value1 = PM_GetCellValue (1, PM_Low);

EasyLanguage - Запись ActivityBar

ActivityBar изучения предоставляют Вам возможность показать торговые модели, которые возникают в пределах некоторого диапазона баров на диаграмме. В отличие от других индикаторов или изучений, которые состоят из линий, прорисованных между ценовыми точками или из графических символов выше или ниже бара, ActivityBar изучения, продуцирует несколько ячеек справа или слева от бара, в которых показывается дополнительная торговая информация в пределах каждого бара. ActivityBar изучения смещают каждый бар вниз уменьшая одновременно его видимые размеры и добавляют ячейки слева и справа. При записи нового ActivityBar изучения в PowerEditor полезно думать об изучениях как о методе мультианализа данных, где есть два потока данных для одного символа; при этом один поток данных имеет более тонкую разрешающую способность (меньшее сжатие данных), чем другой и помещен в скрытый подграф. Все команды EasyLanguage оцениваются на скрытом потоке данных, называемом ActivityData поток данных, и конечные ячейки добавляются к видимым барам. Для создания изучения ActivityBar необходимы только две команды. Первая - команда, которая определяет высоту ячеек и настраивается от бара к бару. Вторая - команда или критерий, который определяет, действительно ли ячейка добавляется. Вы можете также определить и прорисовать зону вокруг ячеек ActivityBar изучения. Вы можете прорисовать эту зону влево, вправо или по обе стороны бара. Команды EasyLanguage определяют верхние и нижние границы для левой и правой зоны отдельно, ширина автоматически определяется самой длинной строкой ячеек. Например, если самая длинная строка имеет 35 ячеек, то зона прорисуется достаточно широкой, чтобы включить все 35 ячеек. Вы можете также прорисовать стрелку или указатель, чтобы отметить определенную цену бара. Вы можете прорисовать эту стрелку слева или справа от бара (или с обеих сторон). По умолчанию эти указатели - точки, прорисованные на цене открытия и цене закрытия бара. Зарезервированные слова ActivityBar изучения могут быть разделены на три группы: 1) зарезервированные слова набора, используемые для определения свойств ActivityBar, 2) зарезервированные слова получения - для получения информации о существующем ActivityBar изучении, и 3) другие зарезервированные слова, которые не необходимы для создании ActivityBar изучения, но полезны при работе с ними. Зарезервированные слова первых двух группа, набора и получения, описаны ниже. Для получения информации относительно зарезервированных слов третьей группы, обратитесь к Библиотеке Зарезервированных Слов в Интерактивном Руководстве Пользователя. Зарезервированные слова Набора Есть много зарезервированных слов ActivityBar изучения, но только два обязательны для записи ActivityBar: AB_AddCell и AB_SetRowHeight. Эти и другие зарезервированные слова набора для ActivityBar изучений обсуждаются ниже. AB_AddCell (Price, Side, Str_Char, Color, Value) Это зарезервированное слово используется, чтобы добавить ячейку к текущему бару диаграммы. Вы можете добавить ячейки только анализируемому в настоящее время бару (например, выражение AB_AddCell (...) [1] не допускается). Это зарезервированное слово должно быть включено в ActivityBar изучение. Синтаксис:

AB_AddCell (Price, Side, Str_Char, Color, Value)

Параметры: Price - числовое выражение, представляющее ценовое значение, в котором добавляется ячейка. Это может быть любое значение внутри или снаружи ранга бара. Side - определяет сторону бара, с которой помещается ячейка, принимает значение одного из двух зарезервированных слов: LeftSide или RightSide. Str_Char - текстовое строковое выражение, представляющее текст, сохраняемый в добавляемой ячейке. Выражение ограничено одним символом. Если текстовое строковое выражение длиннее чем один символ, то используется только первый символ (например, если Вы используете текстовое строковое выражение "High", то символ "H" помещается в ячейку). Color - цвет EasyLanguage или его числовой эквивалент, представляющий цвет, в котором ячейка прорисована. Для получения списка доступных цветов см. Приложение B этой книги. Value - числовое выражение, сохраненное в ячейке. Это значение требуется, однако, оно не затрагивает вычисление ActivityBar, и необходимо исключительно для вашего использования. Вы можете обратиться к этому значению позже от ActivityBar изучения непосредственно или от других методик анализа, которые ссылаются на данное ActivityBar изучение. Используйте для этого параметра Ноль (0), если Вы не хотите определить значимое значение. Примечания: При записи ActivityBar Вы должны также определить высоту ячейки. Чтобы сделать так, используйте зарезервированное слово AB_SetRowHeight, описанное ниже. Пример: Следующая инструкция добавляет зеленую ячейку с правой стороны бара для каждого тика. Каждая ячейка содержит символ A и сохраняет объем торговли для тика в каждой ячейке:

AB_AddCell (Close of ActivityData, RightSide, "A", Green, Volume of ActivityData);

AB_SetRowHeight (Value) Это зарезервированное слово используется, чтобы определять высоту каждой ячейки (строки) от бара к бару; оно необходимо при записи ActivityBar изучения. Синтаксис:

AB_SetRowHeight (Value)

Параметры: Value - числовое выражение, представляющее высоту строки. Примечания: Вам нужно, чтобы высота строки была динамичной, потому что символы сильно изменяются по цене от одного символа к другому. Например, с высотой строки 0.25 будет работать удобно, если инструмент торгуется по 50 $, но это будет огромная высота строки для торговли мелкими акциями по 1$. Кроме того, разброс цен для символа может значительно измениться в течение промежутка в несколько лет, и приемлемая высота строки для сегодняшних цен может быть неудобна на данных в прошлом. Встроенные ActivityBar изучения используют зарезервированное слово AB_RowCalc как параметр для этого зарезервированного слова, чтобы вычислить динамическую высоту строки. При записи ActivityBar изучения Вы должны также использовать зарезервированное слово AB_AddCell (описано ранее), чтобы добавить ячейки. Пример: Следующая инструкция регулирует высоту строки к 1/20-ому от среднего ранга последних 10 баров. Результат - приблизительно 20 строк ячеек в баре:

AB_SetRowHeight(Average(Range, 10) /20 );

AB_SetZone (HighVal, LowVal, Side) Это зарезервированное слово определяет свойства зоны ActivityBar изучения. Синтаксис:

AB_SetZone (HighVal, LowVal, Side)

Параметры: HighVal и LowVal - числовые выражения, представляющие верхнюю и нижнюю границы зоны ActivityBar изучения, соответственно. Side - одно из двух зарезервированных слов LeftSide или RightSide, которые определяет сторону бара, с которой зона прорисована. Примечания: Зона прорисовывается на каждом баре с использованием свойств (цвет и толщина) самих баров, и достаточно широко, чтобы соответствовать самой широкой строке ячеек этого бара. Зона ActivityBar изучения не прорисовывается, если нет никаких ячеек для бара. Пример: Следующие инструкции прорисовывают зону ActivityBar изучения влево от каждого бара в одном среднеквадратичном отклонении выше и ниже срединной цены ActivityBar ячеек:

Value1 = AB_Median (RightSide); Value2 = AB_StdDev (1, RightSide); AB_SetZone (Value1 + Value2, Value1 - Value2, RightSide);

Вышеупомянутый пример использует зарезервированные слова AB_Median и AB_StdDev. Эти зарезервированные слова описаны в Приложении C "Справочник Зарезервированных слов", а так же в Интерактивном Руководстве Пользователя. AB_SetActiveCell(Price, Side) ActivityBar изучения отображают ценовые маркеры на каждом баре диаграммы. По умолчанию эти маркеры прорисовываются на открытии (с левой стороны) и закрытии (с правой стороны) бара. Это зарезервированное слово отменяет заданное по умолчанию размещение этих маркеров, разрешая Вам разместить их в любое месте на баре. Синтаксис:

AB_SetActiveCell (Price, Side)

Параметры: Price - числовое выражение, представляющее цену, в которую Вы хотите поместить маркер; Side - определяет положение маркера (слева или справа). Side принимает значение только одно из двух зарезервированных слов: LeftSide или RightSide. Пример: Следующие инструкции размещают правый маркер в модальную ячейку ActivityBar изучения:

Value1 = AB_Mode (RightSide); AB_SetActiveCell (Value1, RightSide);

AB_RemoveCell (Price, Offset, Side) Это зарезервированное слово используется, чтобы удалить ячейку из текущего бара ActivityBar изучения. Синтаксис:

AB_RemoveCell (Price, Offset, Side)

Параметры: Price - числовое выражение, представляющее цену строки, из которой ячейка должна быть удалена. Offset - номер столбца ячейки, которая будет удалена (где: столбец 1 - ближайший к бару); Side - определяет сторону бара, на которой ячейка расположена (Вы должны использовать одно из двух зарезервированных слов: LeftSide или RightSide, чтобы определить сторону). Примечания: Если указанная ячейка не существует, то ActivityBar изучение генерирует ошибку во время выполнения программы с сообщением "ActivityBar tried to reference an empty row" (ActivityBar пытается обратиться к пустой строке). Пример: Следующая инструкция удаляет последнюю ячейку с правой стороны бара из строки, соответствующей закрытию бара:

Value1 = AB_GetNumCells (Close of Data1, RightSide); AB_RemoveCell (Close of Data1, Value1, RightSide);

Этот пример использует зарезервированное слово AB_GetNumCells, чтобы получить количество ячеек на правой стороне ActivityBar, и затем использует полученное значение, как параметр Offset для AB_RemoveCell. Зарезервированные слова Получения Используя зарезервированные слова, описанные в этом разделе, Вы можете обращаться к информации ячеек существующего ActivityBar изучения из любой другой методики анализа, торговой стратегии или функции. AB_GetCellChar (Price, Side, Offset) Это зарезервированное слово возвращает текстовое строковое выражение, содержащееся в указанной ячейкой. Синтаксис:

AB_GetCellChar (Price, Side, Offset)

Параметры: Price - числовое выражение, представляющее цену ячейки, на которую ссылаются. Side - определяет сторону бара, с которой ячейка расположена (Вы должны использовать одно из двух зарезервированных слов: LeftSide или RightSide, чтобы определить сторону).Offset - номер столбца ячейки, на которую ссылаются (где: столбец 1 - ближайший к бару). Примечания: Вы можете использовать это зарезервированное слово в ActivityBar изучении так же, как в любой другой методике анализа, торговой стратегии или функции. Чтобы сохранить текстовое строковое выражение, возвращенное зарезервированным словом, Вы можете назначить это зарезервированное слово на текстовую строковую переменную. Если Вы ссылаетесь к ячейке, которая не существует, то произойдет ошибка выполнения программы. Пример: Следующие инструкции восстанавливают текстовое строковое выражение, содержащееся в первой ячейке строки, соответствующей цене закрытия бара:

Variable: Str (" "); Str = AB_GetCellChar (Close of data1, LeftSide, 1);

AB_GetCellColor (Price, Side, Offset) Это зарезервированное слово возвращается номер, представляющий цвет, использованный для прорисовки указанной ячейки. Синтаксис:

AB_GetCellColor (Price, Side, Offset)

Параметры: Price - числовое выражение, представляющее цену ячейки, на которую ссылаются. Side - определяет сторону бара, с которой ячейка расположена (Вы должны использовать одно из двух зарезервированных слов: LeftSide или RightSide, чтобы определить сторону). Offset - номер столбца ячейки, на которую ссылаются (где: столбец 1 - ближайший к бару). Примечания: Чтобы сохранить номер, возвращенный зарезервированным словом, Вы можете назначить это зарезервированное слово на числовую переменную. Числовое значение возвращается как EasyLanguage числовой эквивалент, используемый для определения цвета. Для получения списка доступных цветов обратитесь к Приложению B этой книги. Вы можете использовать это зарезервированное слово в ActivityBar изучении так же, как в любой другой методике анализа, торговой стратегии или функции. Если Вы ссылаетесь на ячейку, которая не существует, то во время выполнения программы произойдет ошибка. Пример: Следующая инструкция восстанавливает цвет первой ячейки, расположенной с правой стороны бара на цене открытия. Цвет назначается на переменную Value1:

Value1 = AB_GetCellColor (Open of Data1, RightSide, 1);

AB_GetCellDate (Price, Side, Offset) Каждый раз, когда ячейка добавляется к бару, дата и время, в которое это произошло, сохраняется ячейкой. Это зарезервированное слово возвращает дату EasyLanguage, соответствующую дате, когда ячейка была добавлена к бару. Синтаксис:

AB_GetCellDate (Price, Side, Offset)

Параметры: Price - числовое выражение, представляющее цену упоминаемой ячейки. Side - определяет сторону бара, с которой ячейка расположена (Вы должны использовать одно из двух зарезервированных слов: LeftSide или RightSide, чтобы определить сторону). Offset - номер столбца ячейки, на которую ссылаются (где: столбец 1 - ближайший к бару). Примечания: Чтобы сохранить дату, возвращенную зарезервированным словом, Вы можете назначить это зарезервированное слово на числовую переменную. Вы можете использовать это зарезервированное слово в ActivityBar изучении так же, как в любой другой методике анализа, торговой стратегии или функции. Если Вы ссылаетесь на ячейку, которая не существует, то во время выполнения программы произойдет ошибка. Пример: Следующая инструкция восстанавливает дату первой ячейки на правой стороне в цене открытия бара, и назначает эту дату на числовую переменную Value1:

Value1 = AB_GetCellDate (Open of Data1, RightSide, 1);

AB_GetCellTime (Price, Side, Offset) Каждый раз, когда ячейка добавляется к бару, дата и время, когда это произошло, сохраняется ячейкой. Это зарезервированное слово возвращает время, когда ячейка была добавлена к бару. Синтаксис:

AB_GetCellTime (Price, Side, Offset)

Параметры: Price - числовое выражение, представляющее цену упоминаемой ячейки. Side - определяет сторону бара, с которой ячейка расположена (Вы должны использовать одно из двух зарезервированных слов: LeftSide или RightSide, чтобы определить сторону). Offset - номер столбца ячейки, на которую ссылаются (где: столбец 1 - ближайший к бару). Примечания: Чтобы сохранять время, возвращенное зарезервированным словом, Вы можете назначить это зарезервированное слово на числовую переменную. Вы можете использовать это зарезервированное слово в ActivityBar изучении так же, как в любой другой методике анализа, торговой стратегии или функции. Если Вы ссылаетесь на ячейку, которая не существует, то во время выполнения программы произойдет ошибка. Пример: Следующая инструкция восстанавливает время первой ячейки, расположенной с правой стороны в цене открытия бара, и назначает эту дату на числовую переменную Value1:

Value1 = AB_GetCellDate (Open of Data1, RightSide, 1);

AB_GetCellValue (Price, Side, Offset) Когда Вы добавляете ячейку к бару, используя зарезервированное слово AB_AddCell, Вы можете сохранить значение в ячейке. Вы можете использовать зарезервированное слово AB_GetCellValue, чтобы получить это значение. Синтаксис:

AB_GetCellValue (Price, Side, Offset)

Параметры: Price - числовое выражение, представляющее цену упоминаемой ячейки. Side - определяет сторону бара, с которой ячейка расположена (Вы должны использовать одно из двух зарезервированных слов: LeftSide или RightSide, чтобы определить сторону). Offset - номер столбца ячейки, на которую ссылаются (где: столбец 1 - ближайший к бару). Примечания: Чтобы сохранять время, возвращенное зарезервированным словом, Вы можете назначить это зарезервированное слово на числовую переменную. Вы можете использовать это зарезервированное слово в ActivityBar изучении так же, как в любой другой методике анализа, торговой стратегии или функции. Если Вы ссылаетесь на ячейку, которая не существует, то во время выполнения программы произойдет ошибка. Пример: Следующая инструкция восстанавливает время первой ячейки, расположенной с правой стороны в цене открытия бара, и назначает эту дату на числовую переменную Value1:

Value1 = AB_GetCellValue (Open of Data1, RightSide, 1);

AB_GetNumCells (Price, Side) Это зарезервированное слово возвращает количество ячеек в указанной строке. Синтаксис:

AB_GetNumCells (Price, Side)

Параметры: Price - числовое выражение, представляющее цену упоминаемой строки. Side - определяет сторону бара (Side принимает значение одного из двух зарезервированных слов: LeftSide или RightSide). Примечания: Если Вы ссылаетесь на любой атрибут несуществующей ячейки, то генерируется ошибка во время выполнения программы, когда ActivityBar изучение применено к диаграмме. Например, если при цене 100 есть 5 ячеек справа от бара, а изучение пытается получить цвет ячейки номер 6, то генерируется ошибка и изучение выключается. Вы можете избежать этих ошибок, используя зарезервированное слово AB_GetNumCells, чтобы определить количество доступных ячеек перед тем, как попытаетесь обратиться к любой из них. Чтобы сохранить конечное значение, Вы можете назначить это зарезервированное слово на числовую переменную. Вы можете использовать это зарезервированное слово в ActivityBar изучении так же, как любой другой методике анализа, торговой стратегии или функции. Пример: Следующие инструкции получают текстовое строковое выражение, сохраненное в последней ячейке в строке, соответствующей открытию бара. Обратите внимание, что мы сначала получаем общее количество ячеек в искомой строке, затем сохраняем это количество в переменной Value1. Далее мы используем конечное количество (Value1), чтобы получить текстовое строковое выражение:

Variable: Str (" "); Value1 = AB_GetNumCells (Open of Data1, RightSide); Str = AB_GetCellChar (Open of Data1, Value1, RightSide);

AB_GetZoneHigh (Side) Это зарезервированное слово возвращает числовое значение, представляющее верхнюю границу зоны ActivityBar изучения. Синтаксис:

AB_GetZoneHigh (Side)

Параметры: Side - определяет сторону, чтобы получить значение. Side принимает значение одного из двух зарезервированных слов - LeftSide или RightSide. Примечания: Чтобы сохранять конечное значение, Вы можете назначить это зарезервированное слово на числовую переменную. Вы можете использовать это зарезервированное слово в ActivityBar изучении так же, как любой другой методике анализа, торговой стратегии или функции. Пример: Следующая инструкция назначает максимальную цену зоны ActivityBar на числовую переменную Value1:

Value1 = AB_GetZoneHigh (RightSide);

AB_GetZoneLow (Side) Это зарезервированное слово возвращает числовое значение, представляющее нижнюю границу зоны ActivityBar изучения. Синтаксис:

AB_GetZoneLow (Side)

Параметры: Side - определяет сторону, чтобы получить значение. Side принимает значение одного из двух зарезервированных слов: LeftSide или RightSide. Примечания: Чтобы сохранять конечное значение, Вы можете назначить это зарезервированное слово на числовую переменную. Вы можете использовать это зарезервированное слово в ActivityBar изучении так же, как любой другой методике анализа, торговой стратегии или функции. Пример: Следующая инструкция назначает минимальную цену зоны ActivityBar на числовую переменную Value1:

Value1 = AB_GetZoneLow (RightSide);

AB_High Это зарезервированное слово возвращает числовое значение, представляющее максимальную цену бара, в котором ячейка прорисована. Синтаксис:

AB_High

Параметры: Нет. Примечания: Если ни одна ячейка не прорисована, то возвращается значение ноль (0). Чтобы сохранять конечное значение, Вы можете назначить это зарезервированное слово на числовую переменную. Вы можете использовать это зарезервированное слово в ActivityBar изучении так же, как в любой другой методике анализа, торговой стратегии или функции. Пример: Следующие инструкции используют инструкцию While loop, чтобы пересечь все возможные ячейки:

Value1 = AB_High; While Value1 > AB_Low Begin {EasyLanguage Instruction (s) } Value1 = Value1 - AB_GetRowHeight; End;

Сначала, мы используем AB_High, чтобы получить самую высокую цену, в которой была прорисована ячейка, затем мы назначаем это значение на Value1. В каждой итерации While loop (Цикла с условием продолжения) мы вычитаем значение, равное одной строке (которое мы получаем использованием AB_GetRowHeight). Цикл продолжается, пока Value1 больше чем минимальная цена на бар, в котором прорисована ячейка. AB_Low Это зарезервированное слово возвращает числовое значение, представляющее меньшее из двух значений: минимальной цены бара, на котором ActivityBar изучение применено, и минимальной цены бара, но котором ячейка прорисована. Синтаксис:

AB_Low

Параметры: Нет. Примечания: Если ни одна ячейка не прорисована, то возвращается значение ноль (0). Чтобы сохранять конечное значение, Вы можете назначить это зарезервированное слово на числовую переменную. Вы можете использовать это зарезервированное слово в ActivityBar изучении так же, как в любой другой методике анализа, торговой стратегии или функции. Пример: Следующие инструкции используют While loop, чтобы пересечь все возможные ячейки:

Value1 = AB_Low; While Value1 < AB_High Begin {EasyLanguage Instruction(s) } Value1 = Value1 + AB_GetRowHeight; End;

Сначала, мы используем AB_Low, чтобы получить самую низкую цену, в которой ячейка прорисована, затем мы назначаем это значение на Value1. В каждой итерации While loop мы добавляем значение, равное одной строке (которое мы получаем использованием AB_GetRowHeight). Цикл продолжается, пока Value1 - меньше чем самая высокая цена на баре, в котором прорисована ячейка. Другие Зарезервированные слова, связанные с ActivityBar Изучениями Далее - список зарезервированных слов, которые Вы можете использовать при записи ActivityBar изучения. ActivityData Это зарезервированное слово - псевдоним данных, используемый при ссылке на скрытый поток данных, используемый ActivityBar изучением. Когда Вы хотите обратиться к потоку данных ActivityBar, а зарезервированное слово, которое Вы используете - не зарезервированное слово ActivityBar (таким образом ссылаются на поток данных ActivityBar изучения по умолчанию), то Вы должны использовать этот псевдоним данных. Синтаксис: ...

of ActivityData

Параметры: Нет. Примечания: Зарезервированное слово Of используется с ActivityData для удобства чтения. Пример: Следующая инструкция вычисляет среднее последних 10 цен закрытия из потока данных ActivityBar изучения. Например, предположим, что ActivityBar изучение использует 30 -минутное сжатие данных и применено к ежедневной диаграмме. В этом случае инструкция вычисляет среднее последних десяти 30-минутных баров:

Value1 = Average (Close, 10) of ActivityData;

BarStatus(DataNum) Может быть очень полезно знать, в какой части бара ActivityBar изучение вызывают для последней операции, или когда ActivityBar изучение читается для торговли "внутри бара". Это зарезервированное слово получает эту информацию. Синтаксис:

BarStatus (DataNum)

Параметры: DataNum - числовое выражение, представляющее поток данных, который оценивается; может быть между 1 и 50 включительно. Примечания: Это зарезервированное слово возвратит одно из четырех возможных значений: 2 = заключительный тик бара 1 = тик в пределах бара 0 = тик открытия бара -1 = произошла ошибка при выполнении операции зарезервированного слова Пример: Следующие инструкции сбрасывают числовую переменную Value1 к 0, когда бар, к которому применено ActivityBar изучение, закрыт:

If BarStatus (1) = 2 Then Value1 = 0 Else Value1 = Value1 + 1;

LeftSide Это зарезервированное слово используется с другими зарезервированными словами ActivityBar, чтобы определить сторону ActivityBar, к который Вы хотите обратиться. Оно определяет, что Вы ссылаетесь на левую сторону от бара. Синтаксис:

LeftSide

Параметры: Нет. Пример: Следующая инструкция получает количество ячеек слева от бара для строки, соответствующей цене закрытия:

Value1 = AB_GetNumCells (Close of Data1, LeftSide);

RightSide Это зарезервированное слово используется с другими зарезервированными словами ActivityBar, чтобы определить сторону ActivityBar, к который Вы хотите обратиться. Оно определяет, что Вы ссылаетесь на правую сторону от бара. Синтаксис:

RightSide

Параметры: Нет. Пример: Следующая инструкция получает количество ячеек справа от бара для строки, соответствующей цене открытия:

Value1 = AB_GetNumCells (Open of Data1, RightSide);

EasyLanguage для RadarScreen

Эта глава охватывает вопросы использования EasyLanguage с RadarScreen При работе с RadarScreen, Вы можете записать индикаторы для использования в окне RadarScreen так же, как для графика движения цен. RadarScreen дает возможность Вам просмотреть и упорядочить символы по практически любому вообразимому критерию. В отличие от графиков движения цен, где ваши индикаторы ограничены составлением графика числовых значений, в RadarScreen можно составить график числовых или текстовых строковых выражений. Эта возможность, объединенная со способностью сортировать ваши символы по критериям индикаторов (до четырех индикаторов, в порядке возрастания или по убыванию), наделяет Вас большой властью и гибкостью при ранжировании ваших символов. Эта глава описывает зарезервированные слова, которые Вы будете использовать, чтобы записать индикаторы RadarScreen, а также некоторые соображения, которые Вы должны иметь в виду при записи этих зарезервированных слов, чтобы полностью использовать возможности RadarScreen. Запись Индикаторов RadarScreen При работе с графиками движения цен, индикатор - математическая формула, которая возвращает числовое значение. Эти значения отображаются на графике движения цен, или над ценовыми данными или в подграфе ниже них. Однако, при работе с RadarScreen, индикатор может возвратить как числовое, так и текстовое строковое значение. Это дает Вам возможность просмотреть ваши символы, а так же отсортировать их. Например, Вы можете отобразить (на дисплее) тысячи символов, просканировать данные на некоторых критериях, и включить предупреждения, которые предупредят Вас, когда на символах выполняется любой из критериев вашего индикатора(ах). Вы также можете сортировать символы. Другими словами, Вы можете сортировать символы некоторыми индикаторами так, чтобы символы, которыми Вы хотите торговать, группировались в верхней части окна. Давайте рассмотрим окно RadarScreen. Каждый столбец - индикатор, а значение, показанное в каждой ячейке, представляет собой значение индикатора, рассчитанного для символа в этой специфической строке. Отображенные значения - значения индикаторов для последних доступных ценовых данных (самый последний бар). Рисунок 4-1 показывает окно RadarScreen, содержащее несколько индикаторов.
Рисунок 4-1. Различные индикаторы в окне RadarScreen
Вы можете установить предупреждения на каждом индикаторе, а также сортировать ваши символы на критериях до четырех индикаторов. Имейте в виду, что концепции ценовых баров и сжатия данных на графике движения цен, также применяет при работе с окнами RadarScreen. Например, в RadarScreen, сжатие данных может изменяться точно так же, как это делается в графике движения цен, и когда индикатор обращается к барам, то он обращается к сжатию данных, выбранному для символа. Например, если 1-нострочный Индикатор Скользящего среднего применен к окну RadarScreen и сжатие данных символа установлено как дневное (значение по умолчанию), а константа Length установлена на 10, то индикатор вычислит 10-дневное среднее для этого символа. Однако если сжатие данных другого символа установлено на 30 минут, то тот же самый индикатор вычислит 5-часовое среднее для того символа. Как EasyLanguage оценивает данные для окна RadarScreen, подробно обсуждено в Главе 2 "Основные Элементы EasyLanguage". Обратитесь к первому разделу этой главы, называемой "Как вычисляет EasyLanguage". В ней даны основные знания, необходимые для понимания инструкции Plot RadarScreen, и начинайте писать ваши индикаторы. Зарезервированные слова, обычно используемые для записи индикаторов RadarScreen, описаны ниже. Графические Инструкции Зарезервированные слова, используемые для создания индикаторов, относятся к инструкциям, называемым графическими инструкциями, потому что они управляют отображением информации (на дисплее) или составлением графиков в любой таблице (т.е., в окне RadarScreen) или на графике движения цен. PlotN(Expression, "", ForeColor, BackColor) Отображаемые значения - результат вычисления или выражения в окне RadarScreen. Значения могут быть числовыми или текстовой строкой. Синтаксис:

PlotN (Expression [,"" [,ForeColor [,BackColor]]]);

Параметры: N - номер между 1 и 4, представляет один из четырех доступных графиков. Expression - значение, которое будет нанесено на график (или числовое или текстовое строковое выражение); - название графика. ForeColor - цвет EasyLanguage, который будет использоваться для переднего плана графика, аBackColor - цвет EasyLanguage, который будет использоваться для фона графика. Параметры , ForeColor иBackColor являются дополнительными. При составлении графика текстового строкового выражения, выражение должно быть включено в кавычки (например, "T"). Для получения списка доступных цветов обратитесь к Приложению B этой книги. Примечания: Есть категория зарезервированных слов по имени Quote Fields (Поля Котировок (Данных)). Эти слова дают возможность обратиться к информации от datafeed, и позволяют индикаторам, примененным в RadarScreen, использовать меньше памяти и быть более эффективным в вычислениях. Они очень полезны при выполнении анализа на минутных и тиковых барах и ссылке на информацию текущего дня (например, дневной максимум, минимум, открытие). Для получения информации относительно Полей Котировок обратитесь к Главе 2 "Основные Элементы EasyLanguage". Пример: Один или несколько из дополнительных параметров могут быть опущены, пока нет других параметров справа. Например, цвет фона может быть исключен из инструкции следующим образом:

Plot1 (Volume, "V", Black);

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

Plot1(Volume, Black, White);

Правильно:

Plot1(Volume, "V", Black, White);

Единственный обязательный параметр для правильной (допустимой) инструкции Plot - значение, составляющее график. Так что следующая инструкция правильна:

Plot1(Volume);

Когда не определено название графика, EasyLanguage будет использовать Plot1, Plot2, Plot3 или Plot4 как названия для каждого графика. Первый график будет называться Plot1, второй Plot2 и т.д. При обращении к цвету символа или цвету фона Вы можете использовать слово Default вместо параметра(ов), чтобы получить инструкцию Plot с использованием цвета по умолчанию, выбранного на вкладке Properties диалогового окнаFormat indicator. Например, следующая инструкция может использоваться, чтобы отобразить объем в заданном по умолчанию цвете символа, но определенном цвете фона:

Plot1(Volume, "V", Default, Red);

Опять же, Вы можете использовать слово Default для любого из параметров цвета. Один и тот же самый график (т.е., Plot1, Plot2) может использоваться не один раз в индикаторе; единственное требование - чтобы Вы использовали то же самое название графика в обоих образцах инструкции Plot. Если никакое название не назначено, то используется заданное по умолчанию название графика (т.е., Plot1, Plot2). Например, если Вы хотите составить график сетевого изменения, использующий красный цвет, когда значения отрицательны и зеленый, когда значения положительны, Вы можете использовать тот же самый номер графика (в нашем случае Plot1) дважды, лишь бы название графика было то же самое: Value1 = Close - Close[1]; If Value1 > 0 Then Plot1 (Value1, "NetChg", Green) Else Plot1 (Value1, "NetChg", Red); В этом примере, название графика "NetChg" должно быть то же самое в обоих образцах инструкции Plot. Как было сказано ранее, основное преимущество RadarScreen заключается в его способности составлять график не только числовых значений, но также и текстовых строковых значений. Например, следующий индикатор отображает T в ячейке, когда на символе наблюдается разворотная модель, и F - в противном случае:

If Low < Low[1] AND Close > Close[1] Then Plot1 ("T", "KR") Else Plot1 ("F", "KR");

SetPlotColor(Number, Color) Это зарезервированное слово используется, чтобы изменить передний план или цвет специфического графика. Синтаксис:

SetPlotColor (Number, Color);

Параметры: Number - номер от 1 до 4, представляющий номер графика для изменения. Color - цвет EasyLanguage, который используется для графика. Примечания: Это зарезервированное слово изменяет цвет графика; зарезервированное слово SetPlotBGColor, описанное далее, изменяет цвет фона графика (используется только с табличными приложениями; другими словами, в RadarScreen или окнах OptionStation Position Analysis). Для получения списка доступных цветов обратитесь к Приложению B этой книги. Пример: Цвет графика может быть изменен при каждом изменении цены; например, если значение индикатора - отрицательное, то график может отображаться красным цветом, а когда значение индикатора - положительное, то график может быть отображен зеленым цветом. Следующие инструкции показывают, как изменить цвет индикатора; в данном случае Индикатора Темпа:

Plot1 (Momentum (Close, 10), "Momentum"); If Plot1 > 0 Then SetPlotColor (1, Green) Else SetPlotColor (1, Red);

В этом примере, Индикатор Темпа имеет два возможных цвета: зеленый, когда его значения - более чем 0, и красный, когда - ниже 0. Пожалуйста, обратитесь к примеру, для следующего зарезервированного словаSetPlotBGColor, для получения информации о дополнительных возможностях использования этого зарезервированного слова. SetPlotBGColor(Number, Color) Это зарезервированное слово используется, чтобы изменить цвет фона ячейки, где отображается значение графика. Синтаксис:

SetPlotBGColor(Number, Color);

Параметры: Number - номер от 1 до 4, идентифицирующий график для изменения; Color - цветом EasyLanguage, который используется для фона ячейки. Примечания: Цвет графика может быть установлен, поскольку Вы создаете график, используя зарезервированное слово PlotN; зарезервированное слово SetPlotBGColor используется, чтобы изменить цвет на значении основанием значения. Например, если на символ назначают более высокую цену, то индикатор изменяет цвет фона ячейки на красный, а когда значение символа ниже предыдущего, то индикатор устанавливает цвет на зеленый. Для получения списка доступных цветов обратитесь к Приложению B этой книги. Пример: Следующие инструкции EasyLanguage окрашивают фон ячейки в красный цвет, когда значение Индикатора RSI более чем 75, и в зеленый, когда менее 25:

Plot1 (RSI (Close, 9), "RSI") ; SetPlotBGColor (1, Default); If RSI(Close, 9) > 75 Then SetPlotBGColor (1, Red); If RSI(Close, 9) < 25 Then SetPlotBGColor (1, Green);

В этом примере, Индикатор RSI имеет три возможных цвета: красный, когда его значение - более чем 75, зеленый, когда - ниже 25, и цвет по умолчанию, когда его значение - между 25 и 75. Если бы Вы установили только два цвета, один для значений более чем 75 и второй для значений менее 25, то осталась бы неокрашенной область между этими двумя цветами от 25 до 75. В этом примере, мы использовализарезервированное слово SetPlotBGColor , чтобы сбросить график к цвету по умолчанию. Вы можете также установить цвет по умолчанию графика, используя зарезервированное слово PlotN . Если Вы устанавливаете цвет по умолчанию в инструкции PlotN, то Вы не должны использовать первую инструкцию SetPlotBGColor; вместо этого ваши команды были бы следующие:

Plot1 (RSI (Close, 9), "RSI", Default, Default); If RSI(Close, 9) > 75 Then SetPlotBGColor (1, Red); If RSI (Close, 9) < 25 Then SetPlotBGColor (1, Green);

То же самое касается предыдущего зарезервированного слова, SetPlotColor. NoPlot(Num) Это зарезервированное слово удаляет указанный график из ячейки. Синтаксис:

NoPlot(Num)

Параметры: Num - числовое выражение, представляющее номер графика для удаления. Примечания: Это зарезервированное слово полезно, когда Вы хотите, чтобы ячейка возвратилась назад к пустым ячейкам. Пример: Следующий индикатор отображает процентное изменение цены (от открытия), когда это изменение больше чем 5% в любом направлении, вверх или вниз. Когда процентное изменение - меньше чем 5%, в ячейке - пробел:

Value1 = ((Close - Open)/Open) * 100 ; If Value1 >= 5 or Value1 <= 5 Then Plot1 (Value1, "Pcnt Change") Else NoPlot (1);

EasyLanguage - Анализ и чтение данных OptionStation

Эта глава охватывает вопросы использования EasyLanguage с OptionStation Вы можете записать индикаторы для использования с окном OptionStation Position Analysis так же, как графиками движения цен. Вы можете также создать традиционные Search Strategies для использования с Мастером Поиска Позиции, Pricing, Volatility, and Bid/Ask Models, которые дают возможность Вам полностью настроить ценовое моделирование OptionStation и вычисление поиска позиции. В этой глава сначала дается обзор, как OptionStation использует Механизм Ценового Моделирования, чтобы обработать данные от GlobalServer, получить смоделированные значения и подготовить данные к анализу. В главе описываются специфические зарезервированные слова OptionStation, представлены контекстные примеры создания индикаторов OptionStation, Search Strategies и моделей. Включены, с объяснением зарезервированных слов, описания Механизма поиска позиции и Механизма ценового моделирования, так что Вы поймете эффект ваших команд EasyLanguage при вычислении Механизмов. Анализ данных OptionStation При разработке индикаторов, Поиска Стратегий и моделей в OptionStation, необходимо понять как OptionStation обрабатывает данные, получает их от GlobalServer и как исполняет вычисления, а также какие данные являются доступными Вам в любом точке в процессе вычислений. Процесс анализа данных OptionStation происходит в три универсальных шагах, как показано в рисунке 5-1.
Рисунок 5-1. Процесс анализа данных OptionStation

Сначала любые новые данные для основного актива и опционов, в настоящее время анализируемых, передаются от GlobalServer в OptionStation. Это - начало процесса анализа данных и поэтому рассматривается как Шаг 1. Автоматически, как только любые новые данные получены OptionStation, Механизм ценового моделирования OptionStation вычисляет необходимые смоделированные значения и готовит все данные к анализу. Вычисляются смоделированные расчетные значения Рыночной Ожидаемой Волатильности (Market Implied Volatility - MIV) на закрытии, MIV на Bid-е и MIV на Ask-е; волатильность, теоретическая и оценка греков для всех анализируемых опционов; смоделированные значения Bid и Ask опционов и MIV для смоделированных значений Bid и Ask. Этот автоматический процесс рассматривают как Шаг 2. Это - ресурсоемкий шаг, потому что значения вычисляются для основного актива(ов), выбранного для анализа и всех опционов, включенных в анализ. (nie. Greeks - "Греки". Коэффициенты, название которым дали буквы греческого алфавита. Являются промежуточными результатами расчетов по модели Блэка-Шоулза и используются для оценки различных рисков опционных сделок) Ценовая, Волатильная и/или Bid/Ask модели используются в течение Шага 2. Механизм ценового моделирования описан подробно в разделе этой главы, "Запись Моделей OptionStation." Шаг 3 происходит, когда Вы выполняете Поиск Позиции или открываете окно Position Analysis OptionStation. В процессе Поиска Позиции, выполняются любые выбранные Стратегии Поиска, с использованием данных от GlobalServer и значений, вычисленных в Шаге 2. Точно так же, когда Вы открываете окно Position Analysis, все индикаторы выполняются и использованием данных GlobalServer и значений, вычисленных в Шаге 2. Это означает, что когда Вы записываете индикаторы OptionStation, Стратегии Поиска и/или модели, то Вы должны иметь в виду какие данные являются доступными. Например, Вы не можете ссылаться на информацию позиции, когда Вы пишете Ценовую, Волатильную или модель Bid/Ask, потому что позиции не установлены до Шага 3. Таблица на рисунке 5-2 показывает доступность данных в различных документах EasyLanguage OptionStation (Индикатор, Поиск стратегии, Ценовая Модель, Модель Волатильности или Модель Bid/Ask).
Рисунок 5-2. Доступность данных OptionStation
Держите в памяти информацию вышеупомянутой таблицы, когда Вы записываете ваши индикаторы, Стратегии Поиска и/или модели, чтобы иметь уверенность, что Вы ссылаетесь на доступные данные. Чтение Данных OptionStation Предыдущий раздел дал краткий обзор порядка, в котором OptionStation выполняет вычисления, а также какие данные являются доступными Вам в каждой стадии. Есть огромное количество информации, доступной Вам, и в зависимости от документа EasyLanguage OptionStation (Индикатор, Поиск стратегии, Ценовая модель, модель Волатильности, или модель Bid/Ask), который Вы создаете, Вы можете обратиться к информации основного актива, опциона и/или позиции. Чтобы Вы могли управлять большим количеством доступной информации, OptionStation EasyLanguage предлагает зарезервированные слова, которые действуют как спецификаторы, чтобы дать возможность Вам определить, хотите ли Вы обратиться к информации основного актива, опции или позиции. Например, чтобы вычислить собственную стоимость опциона, Вы восстанавливаете цену реализации опциона как цену закрытия основного актива. В этом случае, Вы должны определить, что Вы хотите обратиться к цене закрытия основного актива в противопоставлении(?) закрытию опциона. Это возможно сделать, используя зарезервированные слова, выделяя последние как спецификаторы (или псевдонимы данных). Зарезервированные слова, которые Вы можете использовать как спецификаторы, перечислены ниже, сгруппированы по типам информации, которую они предоставляют: актив, опцион или позиция. Информация Актива EasyLanguage разрешает Вам ссылаться на информацию, связанную с основным анализируемым активом через набор зарезервированных слов. Эти зарезервированные слова доступны при работе со всеми документами (Индикатор, Поиск стратегии, Ценовая модель, модель Волатильности или модель Предложения/Спроса) EasyLanguage OptionStation. Asset Это зарезервированное слово используется как спецификатор или псевдоним данных, для ссылки на информацию для основного актива (акции или индекса) анализируемого опциона. Синтаксис:

Value of asset

Параметры: Нет. Value - любое значение, которое Вы можете получить для основного актива; например, часть информации, такая как цена закрытия, объем торговли и т.д. Of - опускаемое слово, которое делает выражение более удобным для чтения. Примечания: Это зарезервированное слово предназначено для использования с акциями и индексами. Для ссылки на фьючерсы используйте Of Future или OfFuture(num). Если Вы используете Of Asset, чтобы обратиться к фьючерсному контракту, OptionStation получит информацию только для контракта того же самого фьючерсного ряда(?). Пример: Следующее выражение обращается к последней цене закрытия основного актива:

Close of asset

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

Average (Volume of asset, 10)

Future Это зарезервированное слово используется как спецификатор или псевдоним данных для ссылки на информацию для основного актива при анализе опционов на фьючерсных контрактах. Синтаксис:

Value of future

Параметры: Нет. Value - любое значение, которое Вы можете получить для основного актива; например, часть информации, такая как цена закрытия, объем торговли и т.д. Of - опускаемое слово, которое делает выражение более удобным для чтения. Примечания: См. примечания для Future(num) Пример: Следующее выражение обращается к последней цене закрытия основного актива:

Close of future

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

Average(Volume of future, 10)

Future(num) Это зарезервированное слово используется как спецификатор или псевдоним данных для ссылки на информацию для определенного фьючерсного контракта, но не только фьючерсный контракт может быть проанализирован. Синтаксис:

Value of future(num)

Параметры: Num - числовое выражение, представляющее фьючерсный контракт, к которому выражение обращается. Value - любое значение, которое Вы можете получить для фьючерсного контракта, например, часть информации (например, цена закрытия, объем, дата истечения срока действия). Of - опускаемое слово, которое делает выражение более удобным для чтения. Примечания: Когда Вы применяете индикатор к активам или опционам секции окна Position Analysis, индикатор ссылается на фьючерсный контракт в строке, к которой индикатор применен. Однако, Вы можете ссылаться на информацию для любого из доступных фьючерсных контрактов, используя зарезервированное слово OfFuture (num). Например, предположим, что Вы имеете три фьючерсных контракта, перечисленных в разделе Assets вашего окна Position Analysis. Если Вы используете спецификатор Of Future в вашем индикаторе, то вычисления будут ссылаться только на фьючерсный контракт в строке, к которой индикатор применен. Однако когда Вы используете OfFuture (num), то индикатор может ссылаться на любой анализируемый фьючерсный контракт. Аналогично, когда мы применяем индикатор к разделу Options окна, то если мы используем OfFuture (num), мы можем обратиться к фьючерсному контракту, лежащему в основе опциона в строке, к которой индикатор применен или к любому анализируемому фьючерсному контракту. Когда OptionStation получает фьючерсные контракты от GlobalServer, это произвольные числа от 1 до n. Поэтому, чтобы обратиться к специфическому контракту, Вы должны сначала определить, какой число OptionStation назначил на него. Единственная характеристика идентификации фьючерсного контракта - его дата истечения срока действия, что означает, что Вы можете использовать зарезервированное слово ExpirationDate, чтобы найти определенные контракты. Например, если Вы знаете дату истечения срока действия для фьючерсного контракта, и Вы хотите обратиться к нему, Вы можете найти номер, назначенный на этот фьючерс с использованием следующих инструкций:

For Value1 = 1 To NumFutures of asset Begin If ExpirationDate of future = ExpirationDate of future(Value1) Then Value2 = Value1; End;

Когда цикл выполнен, переменная Value2 будет содержать номер, назначенный OptionStation фьючерсному контракту, и Вы можете использовать этот номер вместо параметра Num. Примеры использования зарезервированного слова NumFutures описаны ниже. Или, мы можем найти фронтальный контракт (тот, срок действия которого закончится следующим), ища фьючерсный контракт, который наиболее близок к текущей дате. Мы можем найти фьючерсный контракт с наименьшим номером, когда мы вычитаем текущую дату из даты истечения срока действия.

Variables: OurNumber(0), Counter(0) ; Value1 = DateToJulian(ExpirationDate of future(1)) -DateToJulian(CurrentDate); For Counter = 1 To NumFutures of asset Begin If DateToJulian(ExpirationDate of future(Counter)) - DateToJulian(CurrentDate) < Value1 Then Begin Value1 = DateToJulian(ExpirationDate of future(Counter)) - DateToJulian(CurrentDate); OurNumber = Counter; End; End;

Сначала мы объявляем две переменные, OurNumber и Counter. Мы также используем предобъявленную переменную Value1. Затем мы вычитаем текущую дату из даты истечения срока действия фьючерса с назначенным номером 1 и назначаем результат на переменную Value1. Далее, используя For loop, мы вычитаем текущую дату из даты истечения срока действия каждого доступного фьючерсного контракта (1 через NumFutures) и сравниваем результат со значением в Value1. Если результат меньше, чем значение в Value1, то новое значение назначается на Value1, а номер фьючерсного контракта назначается на OurNumber. Когда цикл завершен, переменная OurNumber будет содержать номер, назначенный OptionStation фронтальному фьючерсному контракту. Обратите внимание: OptionStation зависит от GlobalServer, чтобы отметить опционы "expired" (истекающие). GlobalServer отмечает символы, истекшие в течение Ночного Обслуживания (Nightly Maintenance). Разрешение Ночного Обслуживания будет гарантировать, что все истекшие опционы отмечены и поэтому не включены в анализ. Пример: Следующее выражение обращается к цене закрытия первого перечисленного фьючерсного контракта:

Close of future(1)

Следующее выражение получает самый высокий из максимумов последних 10 баров второго фьючерсного контракта:

Highest (High of future(2), 10)

NumFutures Это зарезервированное слово - не псевдоним данных, но возвращает общее количество фьючерсных контрактов, загруженных в текущем окне Position Analysis. Синтаксис:

NumFutures data alias

Параметры: Нет; однако, Вы должны использовать псевдоним данных Of Asset (где Of - опускаемое слово, которое делает выражение более удобным для чтения). Примечания: Когда NumFutures возвращает значение 0, это означает, что основной актив - акция или индекс. Пример: Вы можете использовать зарезервированное слово NumFutures , чтобы пересечь (обойти) все доступные фьючерсные контракты, используя For loop. Как описано в зарезервированным слове Futures, следующие команды дают возможность Вам найти номер, который OptionStation назначает на определенный фьючерсный контракт, когда Вы знаете его дату истечения срока хранения:

For Value1 = 1 to NumFutures of asset Begin If ExpirationDate of future = ExpirationDate of future(Value1) Then Value2 = Value1; End;

Информация Опциона EasyLanguage позволяет Вам ссылаться на информацию, связанную с анализируемыми опционами, через набор зарезервированных слов. Эти зарезервированные слова доступны при работе со всем документами EasyLanguage (Индикатор, Поиск стратегии, Ценовая модели, модель Волатильности или модель Bid/Ask) OptionStation как показано на рисунке 5-2 на странице 195. Option Это зарезервированное слово используется как спецификатор или псевдоним данных для ссылки на информацию для анализируемого опциона. Синтаксис:

Value of option

Параметры: Нет. Value - любое значение, которое Вы можете получить для опциона; например, расчетная функция или часть информации типа цены закрытия, цены реализации и т.д. Of - опускаемое слово, которое делает выражение более удобным для чтения. Примечания: Когда используется в индикаторе, примененном в секции разделу Options окна Position Analysis, команды обратятся к единственному опциону в каждой строке, к которой индикатор применен. Команды обращаются к определенному анализируемому опциону. Для ссылки на другой опцион, кроме данного, в настоящее время анализируемого, используйте OfOption (num), который описан ниже. Пример: Следующее выражение вычисляет внутреннее значение запроса:

Value1 = Strike of option - Close of asset;

Option(num) Это зарезервированное слово используется как спецификатор или псевдоним данных для ссылки на информацию для определенного опциона. Оно позволяет Вам ссылаться на значения любого доступного опциона, а не только анализируемого. Синтаксис: Value of option(num) Параметры: Num - числовое выражение, представляющее опцион, к которому выражение обращается. Value - любое значение, которое Вы можете получить для опциона; например, часть информации типа: цена закрытия, цена реализации и т.д. Of - опускаемое слово, которое делает выражение более удобным для чтения. Примечания: Когда OptionStation получает опционы от GlobalServer, это произвольные числа от 1 до n. Поэтому, чтобы обратиться к специфическому опциону, Вы должны сначала определить, какой номер OptionStation назначил на него. Характеристики идентификации опциона - дата истечения срока хранения, тип опциона и цена реализации; поэтому, Вы можете использовать зарезервированные слова ExpirationDate, OptionType, и Strike, чтобы идентифицировать номер, назначенный на опцион. Для вашего удобства, OptionStation предоставляет две функции пользователя, разработанные, чтобы определить номер, назначенный на опцион, OS_FindCall и OS_FindPut. Пожалуйста обратитесь к Библиотеке Функций в Интерактивном Пользовательском Справочнике для получения информации относительно этих функций пользователя. Пример: Следующие команды возвращают суммарный открытый интерес для всего опциона Put:

For Value1 = 1 To NumOptions of asset Begin If OptionType of option(Value1) = Put Then TotalPutI = TotalPutI + OpenInt of option(Value1); End;

Инструкция IF-THEN в пределах цикла прибавляет открытый интерес всех анализируемых опционов Put и сохраняет результат в переменной TotalPutI. Вышеупомянутый пример использует зарезервированное слово NumOptions, которое описано ниже. NumOptions Это зарезервированное слово - не псевдоним данных; оно возвращает общее количество анализируемых опционов. Синтаксис:

NumOptions of asset

Параметры: Нет; однако, Вы должны использовать псевдоним данных Of Asset (где Of - опускаемое слово, которое делает выражение более удобным для чтения). Пример: Следующие команды пересекают все доступные опционы, используя For loop; в данном случае цикл прибавляет открытый интерес для всех Опционов Put и сохраняет их в переменной TotalPutI.

For Value1 = 1 To NumOptions of asset Begin If OptionType of option(Value1) = Put Then TotalPutI = TotalPutI + OpenInt of option(Value1); End;

Информация Позиции EasyLanguage также предоставляет возможность ссылки на связанную с позицией информацию через набор зарезервированных слов, которые позволяют манипулировать информацией, связанной и с позицией и с элементом позиции. Эти зарезервированные слова доступны при работе со Стратегиями Поиска и индикаторами, специально написанными для секции Positions окна Position Analysis. Position Это зарезервированное слово используется для ссылки на информацию для анализируемой позиции. Вы не можете ссылаться на другие позиция, а только на позицию в строке в окне Position Analysis, к которой индикатор применен. Синтаксис:

Value of position

Параметры: Нет. Value - любое значение, которое Вы можете получить для позиции; например, часть информации типа: значение Дельты. Of - опускаемое слово, которое делает выражение более удобным для чтения. Пример: Следующая инструкция назначает дельта позиции на переменную Value1:

Value1 = Delta of position;

Leg(num) Это зарезервированное слово используется для ссылки на информацию для любого элемента анализируемой позиции. Синтаксис:

Value of leg(num)

Параметры: Num - числовое выражение, представляющее элемент, к которому выражение обращается. Value - любое значение, которое Вы можете получить для элемента; например, часть информации типа: дата истечения срока хранения, цена реализации и т.д. Of - опускаемое слово, которое делает выражение более удобным для чтения. Примечания: Элементы пронумерованы произвольно от 1 до n. Для ссылки на определенный элемент Вы должны сначала определить, какой номер назначен на этот элемент, который Вы хотите анализировать. Чтобы сделать это, используйте выражение LegType of Leg (num), Strike of Leg(num), или ExpirationDate of Leg(num), чтобы определить, какой опцион включает определенный элемент. Пример: Следующий Поиск стратегии создаст позицию, которая состоит из выписки опциона call (nie. writing a call - выписать опцион) и покупки второго опциона call. OfLeg (num) спецификатор используется, чтобы сравнить цены реализации этих двух оцениваемых элементов:

CreateLeg(1, Call); CreateLeg(-1, Call); Condition1 = Strike of leg(1) < Strike of leg(2) - 10; PositionStatus(Condition1) ;

ModelPosition Это зарезервированное слово используется для ссылки на информацию для смоделированных сформированных позиций, когда Поиск Позиции выполнен. Это зарезервированное слово доступно только при записи Стратегий Поиска. Синтаксис:

Value of ModelPosition

Параметры: Нет. Value - любое значение, которое Вы можете получить для смоделированной позиции; например, расчетная функция или часть информации типа: теоретическое значение. Of - опускаемое слово, которое делает выражение более удобным для чтения. Примечания: Эта информация используется при оценке критериев в Поиске стратегии, чтобы решить, действительно ли включать позицию в результаты поиска. Пример: Следующая инструкция получает Дельта смоделированной позиции и назначает ее на переменную Value1:

Value1 = Delta of ModelPosition;

NumLegs Это зарезервированное слово возвращает номер элемента в анализируемой позиции. Это дает возможность Вам знать точно, сколько элементов открыто в любой временной точке. Синтаксис:

NumLegs data alias

Параметры: Нет; однако, Вы должны определить Of Position или ModelPosition (Of - опускаемое слово, которое делает выражение более удобным для чтения). Пример: Следующий цикл прибавляет общую стоимость всех элементов в позиции и сохраняет результат в переменной Sum:

Variable: Sum(0); For Value1 = 1 To NumLegs of position Begin Sum = Sum + Cost of leg(Value1); End;

EasyLanguage - Запись индикаторов OptionStation

Индикатор - математическая формула, которая возвращает значение. Эти значения отображается или в таблице, подобной окну Position Analysis OptionStation, или в графике движения цен. Этот раздел дает сначала первые понятия, необходимые для написания индикаторов для окна Position Analysis, а затем обсуждает запись индикаторов для графиков движения цен. В окне Position Analysis, показанном на рисунке 5-3, Вы имеете в наличии три раздела для анализа: раздел Assets, раздел Options и раздел Positions. Раздел Assets относится к основному активу (или активам), используемому как основной для окна анализа, раздел Options включает информацию относительно всех опций, доступных в GlobalServer для актива(ов), и раздел Positions включает всю информацию о любой позиции(ях), добавленной в окно Position Analysis. Вы можете записать индикаторы, использующие данные от любого из трех разделов, чтобы вычислить и отобразить традиционную информацию.
Рисунок 5-3. Окно Position Analysis OptionStation
Так как вся информация относительно основного актива(ов), опций и позиций опциона доступна Вам через EasyLanguage, то Вы можете создать индикаторы OptionStation, используя любую часть этой информации. Однако если Вы применяете индикатор, ссылающийся на информацию позиции в разделах Assets или Options окна Position Analysis, то Вы получите нулевые значения. Вы не можете ссылаться на информацию о позициях из разделов Assets и Options. Из-за характера природы окна Position Analysis, такая ссылка не имеет никакого аналитического значения; поэтому, OptionStation не позволяет это делать. Следующий раздел описывает зарезервированные слова, обычно используемые при создании индикаторов. Графические Инструкции Зарезервированные слова, с помощью которых обычно создаются индикаторы, составляют инструкции, называемые графическими инструкциями, потому что они управляют, отображением информации или составлением графиков в любой таблице или на графике движения цен. PlotNum(Expression, "PlotName", ForeColor, BackColor) Значения, следующие из математических вычислений или выражения, отображаются на графике движения цен или в таблице. Для графиков движения цен отображенные значения могут быть только числовыми, тогда как для окна Position Analysis значения могут быть числовыми, true/false или строковыми. Синтаксис:

PlotNum( Expression [, "" [, ForeColor [, BackColor]]]);

Параметры: Num - номер между 1 и 4, представляющий один из четырех доступных графиков. Expression - значение, которое будет составлять график, а - название графика. ForeColor - цвет EasyLanguage, который будет использоваться для линий графика. BackColor - цвет EasyLanguage, который будет использоваться для фона графика. Параметры , ForeColor и BackColor являются дополнительными (nie. не обязательными). Для получения списка доступных цветов обратитесь к Приложению B этой книги. Примечания: Установка цвета фона не имеет никакого эффекта, когда индикатор применен к графику движения цен. Примечания: Есть категория зарезервированных слов по имени Поля Данных (Quote Fields). Эти слова дают возможность Вам обратиться к покадровой информации от datafeed, и позволяют индикаторам, примененным в OptionStation, использовать меньше памяти и быть более эффективным; другими словами, позволяют оптимизировать выполнение индикаторов. Они очень полезны для того, чтобы выполнить анализ на минутных барах и тиках, и ссылаться на информацию текущего дня (например, дневной максимум, минимум, открытие). Для получения информации относительно Полей Данных (Котировок), обратитесь к Главе 2, "Основные элементы EasyLanguage". Пример: Любой или несколько дополнительных параметров могут быть опущены, пока нет других параметров справа. Например, параметр Width может быть исключен из инструкции, следующим образом:

Plot1 (Strike of option, "Strike", Black, White);

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

Plot1 (Strike of option, Black, White, 2);

Правильно:

Plot1 (Strike of option, "Strike", Black, White, 2);

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

Plot1 (Strike of option);

Когда никакое название графика не определено, EasyLanguage назначает Plot1, Plot2, Plot3 или Plot4 в этом ордере, как графические названия для каждого соответствующего графика. При обращении к цвету символа, цвету фона или ширине, слово Default может использоваться вместо параметра(ов), и в результате мы будем иметь инструкцию Plot, использующую цвет и/или ширину по умолчанию, выбранные на вкладке Properties диалогового окна Format indicator. Например, следующая инструкция может использоваться, чтобы отобразить цену реализации опциона с заданным по умолчанию цветом линий и желтым фоном:

Plot1(Strike of option, "Strike", Default, #CCFFCC);

Один и тот же самый номер графика (т.е., Plot1, Plot2 и т.д.) может использоваться несколько раз в методике анализа; единственное требование - чтобы Вы использовали то же самое название графика в обоих образцах инструкции Plot. Если никакое название не назначено, то заданное используется заданное по умолчанию название графиков (Plot1, Plot2 и т.д.). Например, если Вы хотите составить график изменения сети, использующего красный цвет, когда его значения отрицательны и зеленый - когда положительны, Вы можете использовать один и тот же самый номер графика (в данном случае Plot1) дважды.

Value1 = TheoreticalValue of option - Close of option; If Value1 > 0 Then Plot1 ( Value1, "TValue", Green) Else Plot1 ( Value1, "TValue", Red);

В этом примере название графика "TValue" должно быть одно и то же самое в обоих образцах инструкции Plot. SetPlotColor(PlotNumber, Color) Это зарезервированное слово используется, чтобы изменить цвет линии или ее части на отдельном графика, и может использоваться при применении индикаторов к графику движения цен или к окну Position Analysis. Синтаксис:

SetPlotColor(PlotNumber, Color);

Параметры: PlotNumber - номер от 1 до 4, представляющий номер графика для изменения. Color - цвет EasyLanguage, который используется для графика. Примечания: Это зарезервированное слово изменяет цвет линий графика; зарезервированное слово, описанное ниже -SetPlotBGColor, изменяет цвет фона графика (используется только с окном Position Analysis). Для получения списка доступных цветов обратитесь к Приложению B этой книги. Пример: Цвет графика может быть изменен на каждой цене; например, если значение индикатора отрицательное, то график может быть отображен красным цветов, а когда значение индикатора положительное, то график может быть отображен зеленым цветом. Следующие инструкции показывают, как изменить цвет индикатора; в данном случае, Индикатора Темпа (Движущей силы):

Plot1(Momentum(Close of asset, 10), "Momentum"); If Plot1 > 0 Then SetPlotColor(1, Green) Else SetPlotColor(1, Red);

SetPlotBGColor(PlotNumber, Color) Это зарезервированное слово используется, чтобы изменить цвет фона ячейки, в которой отображено значение графика. Это зарезервированное слово работает только тогда, когда индикатор применен к окну Position Analysis; оно игнорируется, когда применено к графику движения цен. Синтаксис:

SetPlotBGColor(PlotNumber, Color);

Параметры: PlotNumber - номер от 1 до 4, идентифицирующий график для изменения Color - цвет EasyLanguage, который используется для фона ячейки. Примечания: Цвет графика может регулироваться, поскольку Вы создаете график, используя зарезервированное слово PlotNum; это зарезервированное слово используется, чтобы изменить значение основного цвет на другое значение. Например, если на символ назначают более высокую цену, то индикатор может изменить цвет фона ячейки на красный, когда цена символ уменьшается, индикатор может изменить цвет на зеленый. Для получения списка доступных цветов обратитесь к Приложению B этой книги. Пример: Следующие инструкции окрашивают фон ячейки в красный цвет, когда RSI Индикатор выше 75, и зеленым, когда он ниже 25:

Plot1 (RSI (Close of asset, 9), "RSI") ; SetPlotBGColor (1, Default); If RSI (Close of asset, 9) > 75 Then SetPlotBGColor (1, Red); If RSI (Close of asset, 9) < 25 Then SetPlotBGColor (1, Green);

В этом примере, RSI Индикатор имеет три возможных цвета: красный, когда при значения более чем 75, зеленый, когда - ниже 25, и цвет по умолчанию, когда его значения между 25 и 75. Если бы Вы устанавливали только два цвета, один для значений более чем 75 и второй - менее 25, то оставшаяся область значений между 25 и 75 окрашивалась одним из этих цветов (в зависимости от того, который из них использовался последним). Поэтому Вам необходимо сбросить цвет графика к цвету по умолчанию на каждом баре таким образом, чтобы в красный цвет окрашивалась часть выше 75, а в зеленый - ниже 25. Остальная же часть графика - цвет по умолчанию. В следующем примере мы использовали зарезервированное слово SetPlotBGColor, чтобы сбросить цвет графика к цвету по умолчанию. Вы можете также установить цвет графика по умолчанию, используя зарезервированное слово PlotNum. Если Вы устанавливаете цвет по умолчанию в инструкции PlotNum, то Вы не должны использовать первую инструкцию SetPlotBGColor (из предыдущего примера); вместо этого ваши команды были бы следующие:

Plot1 (RSI (Close of asset, 9), "RSI", Default, Default) ; If RSI (Close of asset, 9) > 75 Then SetPlotBGColor (1, Red); If RSI (Close of asset, 9) < 25 Then SetPlotBGColor (1, Green);

EasyLanguage - Запись поиска стратегий

Мастер Поиска Позиции OptionStation позволяет Вам перебрать все доступные опционы для отбора тех, которые отвечают вашим критериям и ранжировать их в порядке теоретической доходности, основанной на ваших рыночных предположениях. Один критерий, которые Вы должны определить перед завершением работы Мастера Поиска Позиции - Поиск стратегии. Мастер Поиска Позиции обеспечивает много встроенных Стратегий Поиска - Bear or Bull Credit Spreads, Butterfly Calls, Straddles, Strangles и т.д. - но Вы можете также создать ваши собственный стратегии для использования в Мастере Поиска Позиции. Чтобы создать Поиск стратегии, Вы должны сначала понять, как работает Механизм поиска позиции. Механизм поиска позиции Механизм поиска позиции OptionStation получает и оценивает каждую возможную комбинацию опционов, основанных на предположениях и Поиске стратегии или Стратегиях, которые Вы определили в Мастере Поиска Позиции. Затем он перечисляет найденные позиции (до 50), отсортированные в порядке теоретической доходности. Например, давайте предполагать, что мы использовали Поиск стратегии, который определяет, что запись одного колла (Call) и трех путов (put) размещены с Дельтой, близкой к нейтральной, и что мы анализируем опцион Microsoft. Microsoft - по 95, и мы предполагаем, что он не будет двигаться от этой цены до 17 декабря (указанная дата истечения срока хранения). Мы хотим иметь Дельту насколько возможно ближе к нейтральной, потому что мы думаем, что MSFT не будет двигаться, но если это происходит, коллы и путы не очень изменятся в оценке and hopefully will expire either at a lower price than we sold them for, or worthless (leaving us with at least the money we got up front as the premium). Когда мы выполняем Поиск Позиции, Механизм поиска позиции OptionStation пройдет каждую комбинацию одного колла против трех путов выполнит следующий процесс на каждой комбинации: 1. Выполнить Поиск стратегии и определить, оценивает ли он как True. Другими словами, посмотреть, встречает ли текущая комбинация одного колла и трех коллов критерии, указанные Поиском стратегии. В противном случае он получит отличную комбинацию одного колла против трех коллов и выполнит оценку снова, пока не найдет позицию, которая выполняет критерии. 2. Как только найдена позиция, в которой выполнены критерии Поиска стратегии, эти четыре опциона, составляющие позицию, пропускаются через Механизм ценового моделирования с использованием текущих значений (даты, времени, цены и волатильности) основного символа, чтобы найти все значения моделей предложения относительно каждого из этих четырех опционов. Затем устанавливается позиция, покупки (на смоделированном спросе) или продажи (на смоделированном предложении) каждого из элементов позиции. 3. Затем, Механизм поиска позиции вызывает Механизм ценового моделирования и выполняет позицию через него, используя поиск предположений (дата, время, цена и волатильность) для основного символа, чтобы найти все значения предложения моделей. Далее осуществляется выход из позиции, продавая (на смоделированном предложении) или покупая (на смоделированном спросе) каждый из элементов. Вычитание этих значений из значений, полученных на шаге 2 (минус комиссионные), приводит к теоретической прибыли на позицию, основанную на предположениях. 4. Результаты для этой позиции сохраняются в сообщении Поиска Позиции, если это результат - один из наиболее выгодных 50-ти. Если есть следующая комбинация опциона для проверки, Механизм поиска позиции начинается снова на Шаге 1. Когда нет больше комбинаций опциона для проверки, выдается список OptionStation из пятидесяти (до 50-ти) самых выгодных позиций (теоретически) в окне Position Search. Три из наиболее важных диалоговых окон Мастера Поиска Позиции описаны ниже: Holding Period (Период владения), Volatility (Волатильность) и Underlying Target Price (Базовая цена Основного актива). Период владения Цель Поиска Позиции состоит в том, чтобы найти лучшую позицию, основанную на некоторой цене и предположениях волатильности, в определенной точке времени. Этой точкой времени может быть настоящее или любая другая дата в будущем. Первое диалоговое окно Мастера Поиска Позиции, диалоговое окно Holding Period, показанное на рисунке 5-6, дает возможность Вам определить дату, на которую будет выполнена оценка позиций.
Рисунок 5-6. Период владения Мастера Поиска Позиции OptionStation

Вы имеете три варианта: Закрыть позицию в конце сессии на самой близкой дате истечения срока хранения Закрыть позицию после X дней от окончания сессии Закрыть позицию в определенную дату и время (местное время) Ваш выбор дает OptionStation определенную дату, чтобы работать с вычислением оценки всех позиций. Волатильность Волатильность определена как мера количества, которым основной актив, как ожидается, будет колебаться в установленном промежутке времени. Волатильность вообще измеряется ежегодным взвешенным среднеквадратичным отклонением ежедневной переоценки актива. Волатильность - важный фактор в работе с точными данными опционов.
Рисунок 5-7. Предположения волатильности Мастера Поиска Позиции OptionStation
Вы имеете три варианта при определении волатильности для использования в процессе Поиска Позиции. Они показаны на рисунке 5-7. Использовать текущую волатильность для каждого основного актива OptionStation будет применять волатильность, полученную от Механизма ценового моделирования OptionStation, используя для вычислений самые последние текущие доступные данные. Использовать волатильность диапазоном X % выше и ниже текущей волатильности OptionStation использует указанный процент, выше и ниже текущей волатильности (полученной от Механизма ценового моделирования) и вычисляет доходность каждой позиции, используя максимальное и минимальное значения волатильности. Определить диапазон волатильности для каждого основного актива Вы выбираете максимальное и минимальное значения для диапазона волатильности, ожидаемой в течение периода владения. OptionStation вычисляет доходность каждой позиции, используя эти значения. Базовая Цена Основного Актива В диалоговом окне Underlying Asset Target Price, Вы определяете ожидаемое движение основного актива в течение указанного периода владения. Механизм поиска OptionStation оценивает прибыль каждой позиции в конечную дату и время периода владения, используя волатильность и указанные ценовые предположения.
Рисунок 5-8. Мастер Поиска Позиции OptionStation - предположения базовой цены
Возможны три варианта предположения базовой цены, показаной на рисунке 5-8: Использовать текущую цену, как базовую цену для каждого основного актива Механизм поиска OptionStation использует текущую цену основного актива, как базовую цена в конце периода владения. Использовать целевую цену для каждого актива на X % выше/ниже текущей цены Механизм поиска OptionStation использует указанный процент выше или ниже текущей цены основного актива, как базовую цену в конце периода владения, чтобы оценить прибыль или потерю каждой позиции. Определить стиль базовой цены и диапазон базовой цены для каждого основного актива Нижеследующее доступно для этого варианта: Механизм поиска OptionStation использует указанную цену с предположениями волатильности в конце периода владения, чтобы оценить прибыль или потерю каждой позиции. Эта установка принимает диапазон базовой цены вместо единственного значения. Механизм поиска OptionStation делит указанный диапазон на 100 и оценивает каждую позицию на каждой из 100 цен. Например, если производится поиск позиции с лучшей прибылью, поддерживаемой 30 дней в bullish limited risk (бычья с ограниченным риском) Search Strategy, в предположении, что текущая волатильность постоянной, и ожидаемый диапазон цен - между 1330 и 1340, то Механизм поиска OptionStation оценит каждый bullish limited risk Search Strategy, используя основную цену актива 1330, затем 1330.1, 1330.2, 1330.3 и т.д. пока не достигнет 1340. Это будет цена колл. Механизм Моделирования проведет каждую позиция через 100 допустимых цен в диапазоне выбранных цен и выберет позицию с самым высоким результатом P/L. Если предположение волатильности - также диапазон, то Механизм поиска OptionStation проведет 100 испытаний, т.е. на каждое из значений волатильности. Так что в общем оценка каждой позиции будет проведена 200 раз. This works the same as Price1 to Price2 except that when all the resulting 100 values of the test are done, the resulting profit or loss of each test is multiplied by the probability of the underlying asset reaching that particular target price. Это означает, что, если специфическая (отдельная) позиция чрезвычайно выгодна, но статистическая вероятность достижения основным активом этого уровня очень низкая, то позиция будет оштрафована, понижен результат P/L в сравнении с другими результатами, которые имеют лучшие статистические возможности появления. Вероятность основного актива, достигающего указанной цены, рассчитывается тем же самым способом как Индикатор Probability Calculator (калькулятор вероятности), предоставляемый OptionStation. Следующее выражение - выполненное вычисление, когда базовая цена - выше текущей цены:

ExpDays = SquareRoot (NearDays * .0027 39); StdD1 = Log (Price1/Close of asset) / (Volatility * ExpDays); AnswerH = 1 - NormalSCDensity (StdD1);

Далее - выполнение вычислений, когда базовая цена находится под текущей ценой:

ExpDays = SquareRoot(NearDays * .0027 39); StdD2 = Log (Price2/Close of asset) / (Volatility * ExpDays); AnswerL = NormalSCDensity (StdD2);

Где NearDays - количество дней, остающихся до окончания периода владения, а NormalSCDensity - Нормальное Стандартное Кумулятивное вычисление Плотности (напряженности, концентрации). Этот метод определения ценового предположение подобен методологии диапазона цен, только что максимальное и минимальное низкие значения диапазона цен определяются прибавлением или вычитанием X среднеквадратичных отклонений, основанных на текущей волатильности основного актива, от указанной базовой цены. Используется та же самая методология оценки, как описано в от Price1 до Price2. Этот метод определения ценового предположения подобен методологии диапазона цен, только что максимальное и минимальное значения диапазона цен определяются прибавлением и вычитанием X среднеквадратичных отклонений, основанных на текущей волатильности основного актива, от указанной базовой цены. Используется та же самая методология оценки как описано в от Price1 к Price2 с использованием вероятности. Зарезервированные слова Поиска Позиции Каждый Поиск стратегии должен содержать следующие два зарезервированных слова: CreateLeg и PositionStatus. CreateLeg(Contracts, LegType) Это зарезервированное слово используется, чтобы создать элемент позиции. Синтаксис:

CreateLeg(Contracts, LegType)

Параметры: Contracts - количество контрактов LegType - Call, Put или AssetType. Примечания: Contracts - количество контрактов (или акций), с которым этот элемент будет создан. Если используется положительное количество, то элемент купит указанное количество контрактов; если используется отрицательное количество, то элемент продаст (или запишет) указанное количество контрактов. LegType может быть Call, Put или AssetType, и определяет какой инструмент использовать для определенного элемента. Call и Put очевидны; AssetType определяет использование акций/контрактов основного актива. Рисунок 5-9. Показана таблица с комбинацией возможных альтернатив при работе с зарезервированным словом CreateLeg:
Рисунок 5-9. Разновидности CreateLeg
Пример: См. пример для зарезервированного слова PositionStatus. PositionStatus(Condition) Это зарезервированное слово определяет, действительно ли правильная (допустимая) позиция основана на ваших собственных критериях, и поэтому принята для оценки в результатах Поиска Позиции. Синтаксис: PositionStatus(Condition) Параметры: Condition - любое выражение true/false. Примечания: Когда выражение, которое оценивается как True, передают к этому зарезервированному слову, позиция принята и вычислена для результатов поиска; если выражение оценивается как False - позиция отвергается. Пример: Например, следующие команды используются, чтобы создать позицию, которая состоит из закупки колл только в-деньгах: (nie. In-the-money - "В деньгах". Термин, используемый для описания статуса опциона, премия по которому имеет внутреннюю стоимость, т.е. текущая рыночная цена базового актива превышает цену страйк для опциона "колл" и обратно для опциона "пут".)

CreateLeg (1, Call); Condition1 = (Strike of leg(1) < Close of asset); PositionStatus (Condition1);

EasyLanguage - Запись индикаторов для SuperCharts SE

Этот раздел охватывает вопросы записи индикаторов для использования с SuperCharts SE и предназначен только для тех, кто приобрел только OptionStation. Пожалуйста прочитайте раздел "Запись Индикаторов OptionStation" и затем переходите к данному разделу. Если Вы купили ProSuite или TradeStation, то Вам будет доступен TradeStation для ваших графиков и тестирования торговой стратегии, и Вы должны обратиться к главе этой книги "EasyLanguage для TradeStation" для информации относительно записи торговых сигналов, индикаторов и изучений при использования с TradeStation. Запись Индикаторов Индикаторы вычисляют математическую формулу и отображают ее значения на диаграмме. Когда Вы применяете индикатор к графику движения цен, Вы можете форматировать индикатор, чтобы отобразить его значения различными способами; например, как показано в рисунке 5-4, Вы можете форматировать индикатор таким образом, чтобы отобразить как линейную диаграмму, как гистограмму в основании диаграммы или как ряд точек, и т.д.
Рисунок 5-4. Различные формы индикаторов
Вы можете также форматировать свойства индикатора, чтобы отобразить как столбиковую диаграмму. Например, в случае индикатора с тремя графиками, типа Индикатора Скользящего среднего с 3 строками, Вы можете форматировать индикатор и установить один график на максимумы баров, другой в минимум баров, а третий на правый тик. 3-х линейный индикатор Moving Average показан на рисунке 5-5.
Рисунок 5-5. Индикатор, отформатированный, чтобы отображаться как столбиковая диаграмма
Для подробной информации относительно форматирования индикаторов, пожалуйста обратитесь к Интерактивному Пользовательскому Справочнику. Также, удостоверьтесь, что Вы понимаете концепцию масштабирования относительно графиков движения цен и индикаторов. Использование различного масштабирования может существенно изменить отображение ваших индикаторов. Для получения информации относительно масштабирования, ищите в Мастере Ответов Интерактивного Пользовательского Руководства "Indicator Formatting". Вы используете две графические инструкции - PlotNum и SetPlotColor, - чтобы создать индикатор для использования в графике движения цен, поскольку Вы делаете это для использования в окне Position Analysis OptionStation; однако, есть некоторые параметры этих графических инструкций, которые применяются только при работе с графиками движения цен. Поэтому, графические инструкции обсуждаются снова, на сей раз с приоритетом на параметрах и соображениях, которые применяются при работе с графиками движения цен. PlotNum(Expression, "", ForeColor, BackColor, Width) На графике движения цен отображаются значения, вытекающие из вычисления или выражения. Для графиков движения цен отображенные значения могут только быть числовыми. Синтаксис:

PlotNum(Expression[,""[,ForeColor,[BackColor, [,Width]]]]);

Параметры: Num - номер между 1 и 4, представляющий один из четырех доступных графиков. Expression - числовое значение, которое будет составлять график, и - название{имя} графика. - название графика. ForeColor - цвет EasyLanguage, который используется для графика. BackColor определяет цвет фона (используется только с окнами OptionStation Position Analysis и RadarScreen). Width - числовое значение, представляющее ширину графика. Параметры , ForeColor, BackColor и Width являются дополнительными (nie. не обязательными). Для получения списка доступных цветов и размеров обратитесь к Приложению B этой книги. Примечания: Параметр BackColor не имеет никакого эффекта при составлении графика индикатора в окне графика движения цен; однако, он требуется, чтобы определить ширину, как обсуждено в примере. Пример: Любой или несколько дополнительных параметров могут быть опущены, пока нет других параметров справа. Например, параметры BackColor и Width могут быть исключены из инструкции следующим образом:

Plot1 ( Volume, "V", Black);

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

Plot1 ( Volume, Black, White, 2);

Правильно:

Plot1 ( Volume, "V", Black, White, 2);

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

Plot1 (Volume) ;

Когда никакое название графика не определено, EasyLanguage будет использовать Plot1, Plot2, Plot3 или Plot4 как названия для каждого графика. Первый график будет называться Plot1, второй Plot2 и т.д. При обращении к цвету графика или ширине, Вы можете использовать слово Default вместо параметра(ов), чтобы получить инструкцию Plot с использованием цвета и/или ширины по умолчанию, выбранные на вкладке Properties диалогового окна Format indicator. Например, следующая инструкция может использоваться, чтобы отобразить объем в цвете по умолчанию, но определенной ширине:

Plot1 ( Volume, "V", Default, Default, 3);

Повторим, Вы можете использовать слово Default для параметров цвета или параметра ширины. Один и тот же самый график (т.е., Plot1, Plot2) может использоваться не один в методике анализа; единственное требование - чтобы Вы использовали то же самое название графика в обоих образцах инструкции Plot. Если никакое название не назначено, то используется заданное по умолчанию название графика (т.е., Plot1, Plot2). Например, если Вы хотите составить график сетевого изменения, использующего красный цвет, когда его значения отрицательны и зеленый, когда положительны, Вы можете использовать тот же самый номер графика (в данном случае Plot1) дважды:

Value1 = Close - Close[1]; If Value1 > 0 Then Plot1 ( Value1, "NetChg", Green ) Else Plot1 ( Value1, "NetChg", Red );

В этом примере название графика "NetChg" должно быть одинаковым в обоих образцах инструкции Plot. Обратите внимание: Как только Вы определили график, используя зарезервированное слово PlotNum, Вы можете ссылаться на значение графика, просто используя зарезервированное слово PlotNum. В примере ниже, зарезервированное слово Plot1 используется, чтобы составить график распределения накопления объема. На значение графика ссылаются в следующей инструкции, чтобы записать критерии предупреждения:

Plot1(AccumDist (Volume), "AccumDist"); If Plot1 > Highest (Plot1, 20) then Alert ;

SetPlotColor(Number, Color) Это зарезервированное слово используется, чтобы изменить цвет специфического графика в окне графика движения цен. Синтаксис:

SetPlotColor(Number, Color);

Параметры: Number - номер от 1 до 4, представляющий номер графика для изменения. Color- цвет EasyLanguage, который используется для графика. Для получения списка доступных цветов обратитесь к Приложению B этой книги. Пример: Следующие инструкции EasyLanguage окрашивают график в красный цвет, когда RSI Индикатор выше 75, и зеленым когда они ниже 25:

Plot1 (RSI (Close, 9), "RSI"); SetPlotColor (1, Default); If Plot1 > 75 Then SetPlotColor (1, Red); If Plot1 < 25 Then SetPlotColor (1, Green);

В этом примере RSI Индикатор имеет три возможных цвета: красный, когда его значение более чем 75, зеленый - менее 25, и цвет по умолчанию, когда между 25 и 75. Если бы Вы устанавливали только два цвета, один для значений более чем 75 и второй - менее 25, то оставшаяся область значений между 25 и 75 окрашивалась одним из этих цветов (в зависимости от того, который из них использовался последним). Вы должны сделать так, чтобы сбросить цвет графика к цвету по умолчанию на каждом баре таким образом, чтобы он был красным только при значениях более 75 и зеленым при значениях менее 25. Остальная же его часть - цвет по умолчанию. В следующем примере мы использовали зарезервированное слово SetPlotColor, чтобы сбросить график к цвету по умолчанию. Вы можете также установить цвет по умолчанию графика, используя зарезервированное слово PlotNum. Если Вы устанавливаете цвет по умолчанию в инструкции PlotNum, то Вы не должны использовать первую инструкцию SetPlotColor (nie. в предыдущем примере); вместо этого ваши команды должны быть следующие:

Plot1 (RSI (Close, 9), "RSI", Default); If Plot1 > 75 Then SetPlotColor (1, Red); If Plot1 < 25 Then SetPlotColor (1, Green); SetPlotWidth(Number, Width)

Это зарезервированное слово устанавливает ширину указанного графика. Синтаксис:

SetPlotWidth(Number, Width);

Параметры: Number - номер от 1 до 4, представляющий номер графика, который надо изменить. Width - ширина EasyLanguage, которая используется для графика. Для получения списка доступных размеров обратитесь к Приложению B этой книги. Пример: Следующие инструкции EasyLanguage изменяют толщину графика к более толстой линии, когда Индикатор Темпа более 0, и к более тонкой линии, когда он находится под 0:

Plot1 (Momentum (Close, 10), "Momentum"); If Plot1 > 0 Then SetPlotWidth (1, 2); If Plot1 < 0 Then SetPlotWidth (1, 6) ;

В этом примере, Индикатор Темпа имеет два возможных размера: более толстый, когда он более 0, и более тонкий, когда он менее 0. Однако в некоторых случаях Вам будет необходимо, чтобы индикатор имел три или больше возможных размера. Пожалуйста обратитесь к примеру для предыдущего зарезервированного слова SetPlotColor для получения информации относительно различных способов использования зарезервированного слова. То же самое касается SetPlotWidth. Определение Доступности Индикаторов Когда Вы создаете индикатор в EasyLanguage PowerEditor, Вы запрашиваете определенное приложения (т.е., график движения цен, окно Position Analysis) о доступности вашего индикатора. Под доступным мы подразумеваем, что он будет присутствовать в библиотеке применяемых индикаторов, когда Вы выбираете вставку индикатора в приложение. Доступность индикатора зависти от комплектации TradeStation, который Вы приобрели. Например, если Вы купили ProSuite по умолчанию, то индикатор будет доступен в диаграммах TradeStation, RadarScreen и всех разделах окна Position Analysis. Для получения информации относительно определения приложений, для которых ваш индикатор является доступным, осуществите поиск в Мастере Ответов Интерактивного Пользовательского Руководства фразы "Specifying Applications".

EasyLanguage - Запись моделей OptionStation

Запись моделей OptionStation (Pricing, Volatility, and Bid/Ask) в EasyLanguage - больше напоминает пример трансляции значений вычисления математических процедур EasyLanguage. Чтобы сделать это, Вы только должны знать, как читать все связанные с опционом данные (см. предыдущий раздел в этой главе "Чтение Данных OptionStation") и синтаксис EasyLanguage. Этот раздел описывает, как OptionStation исполняет вычисления, а также зарезервированные слова, которые Вы будете использовать, чтобы создать ваши собственные модели. Механизм ценового моделирования OptionStation использует Механизм ценового моделирования для текущего анализа и прогнозного(?) анализа. Текущий анализ состоит из оценки Ценовой Модели с использованием большинства информации текущей цены для основного актива и всех опционов, а так же текущей даты и времени. Это делается прежде всего в окне Position Analysis, чтобы следить за текущей цепочкой опциона и позициями в реальном/задержанном масштабе времени. Прогнозный анализ состоит из оценки Ценовой Модели Оценки с использованием рыночных предположений. Изменяя дату и время, лежащих в основе цены или волатильности, OptionStation может определить, сколько позиция может стоить при определенных обстоятельствах. Это делается в процессе Поиска Позиции и в окне Position Chart, где OptionStation находит лучшую позицию на указанном пользователем рыночном предположении. Математика Ценовой, Волатильной и Bid/Ask Моделей сложная и расширенная, и цель данного раздела состоит в том, чтобы прояснить, как эти модели используются OptionStation, не объясняя их математические принципы. Чтобы ордер Ценовой Модели дал ценные результаты, он должно иметь все следующие части информации: 1. цена основного актива 2. цена реализации опциона 3. процентные ставки 4. время до истечения опциона 5. волатильность Цена основного актива и цены реализации каждого опциона предоставляются GlobalServer. Процентные ставки - своего рода постоянное число, которое может быть введено пользователем в Ценовую Модель OptionStation. Время до истечения опциона установлено и поэтому легко рассчитывается OptionStation. Волатильность - значение, наиболее открытое для интерпретации, так как есть несколько методов ее вычисления, в зависимости от ваших предпочтений и доступных данных. Как только Механизм ценового моделирования получил первые четыре части информации, он пробежит модели OptionStation и получит MIV (Рыночная Ожидаемая неустойчивость) на необработанном Предложении и Спросе; MIV на Закрытии; Теоретическое Значение опциона; Delta, Gamma, Rho, Theta, Vega; смоделированные Предложение и Спрос; MIV на смоделированном Предложении и Спросе; и смоделированную Волатильность (не обязательно в этом ордере). Когда Механизм ценового моделирования заканчивает вычисления, вся эта информация становится доступной для анализа опционов и основного актива. Механизм ценового моделирования расширяет данные опционов, которые посылаются от datafeed к GlobalServer и OptionStation со всеми, определенными опция, упомянутыми ранее, данными. Все это делается через итеративный процесс в пять шагов, описанный далее. Итеративный процесс с пятью шагами Механизм ценового моделирования OptionStation вычисляет все цены через процесс с пятью шагами. Этот процесс включает три различные модели: Ценовая Модель, Модель Волатильности и Модель Предложения/Спроса. Рисунок 5-10 иллюстрирует этот процесс пяти шагов.
Рисунок 5-10. OptionStation Механизм Оценки Модели с пятью шагами

Этот процесс повторяется для каждого опциона, доступного OptionStation в отдельный момент времени. Другими словами, OptionStation выполняет итерации через этот процесс так много раз как установлено в портфеле символа для основного анализируемого актива. Шаг 1: Получение MIV от Ценовой Модели Цель этого шага состоит в том, чтобы найти Рыночную Ожидаемую неустойчивость (MIV) для последнего необработанного Bid и Ask, посланных datafeed для опциона. Это - итеративный процесс (как показано на рисунке 5-10), который разумно выбирает различные значения волатильности для выполнения Ценовой Модели, чтобы оценить, какая волатильность необходима, чтобы получить цену, равную последнему значению Bid и Ask, полученных от GlobalServer. Поэтому, зная последнюю торговую цену основного актива, страйк и количество дней до истечения опциона, процентную ставку и последнюю торговую цену опциона, OptionStation выполняет итерации через Ценовую Модель, подавая в нее различные значения волатильности, чтобы попробовать приблизить настолько возможно близко результат Ценовой Модели к последней цене, переданной от datafeed. То же самое также делается со значениями Bid и Ask. От этого процесса OptionStation получает MIV на закрытии, MIV на Bid и MIV на Ask. Шаг 2: Модель Волатильности Цель этого второго шага состоит в том, чтобы найти волатильность для специфического опциона. Модель Волатильности вычисляет волатильность для каждого опциона, используя необработанный MIV, полученный на Шаге 1 и метод поиска Newton-Raphson, использующий опцию Vega (для получения описания этого метода обратитесь к Option Volatility & Pricing, by Sheldon Natenberg, McGraw-Hill, 1994. Page 446). Шаг 3: Оценка Модели Цель этого третьего шага (и второго после прохождения Ценовой Модели), состоит в вычислении Теоретического Значения частей опциона, а так же значений всех греков (Delta, Gamma, Theta, Rho и Vega). (nie. Greeks" - Греки". Коэффициенты, название которым дали буквы греческого алфавита. Являются промежуточными результатами расчетов по модели Блэка-Шоулза и используются для оценки различных рисков опционных сделок.) Используя цену основного актива, цену реализации и дни до истечения опциона, процентные ставки и образцовую волатильность, вычисленную на Шаге 2, OptionStation пробежит Ценовую Модель и установит Теоретическое Значение опциона и все значения ее греков. Шаг 4: Модель Bid/Ask Цель этого четвертого шага состоит в том, чтобы вычислить смоделированное значение Предложения и Спроса опциона. Учитывая, что цены Bid и Ask не всегда точно передаются datafeeds, иногда желательно смоделировать значения Bid и Ask. Когда Модель Bid/Ask противоречит выбранным необработанным Bid и Ask, Модель Bid/Ask, использует все значения, полученные в течение первых трех шагов и вычисляет сильный(?) Bid/Ask, который заменяет значения, переданные от datafeed. Шаг 5: Получение Смоделированного MIV с Теоретической Моделью Этот пятый шаг делается с намерением вычислить значения MIV для смоделированного Bid и Ask, рассчитанных в Шаге 4. Как и Шаг 1 это - итерационный шаг, когда Модель Волатильности и Vega выполняются неоднократно с различными значениями для волатильности, пытаясь найти MIV для сильного Bid и Ask при значениях последних, полученных на Шаге 4. Модификация Логики Механизма ценового моделирования Процесс с пятью шагами выполняется для каждого опциона, доступного для основного актива. Другими словами, OptionStation пробежит этот процесс для каждого опциона, доступного в GlobalServer для указанного основного актива. Несмотря на всю оптимизацию, ускорение этого процесса, выполняемого для каждого опциона - очень трудоемкая задача. Поэтому, OptionStation предлагает три различных варианта обновления логики, как показано на рисунке 5-11.
Рисунок 5-11. Обновление Логики OptionStation:

Update all symbols for this underlying when any symbol for this underlying ticks. Все значения для всех опционов рассчитываются всякий раз, когда есть обновление в любом основном активе или символах опциона. Это - наиболее трудоемкий режим OptionStation и в большинстве случаев приведет к ненужным вычислениям, поскольку все смоделированные значения постоянно пересчитываются по получении тиков от datafeed. Update each symbol as it ticks or the underlying ticks. Рекомендуемая установка; когда определенный опциона тикает(?), смоделированные значения модифицируются; и когда основной актив тикает, смоделированные значения для всех опционов модифицируются. Update each symbol as it ticks. Эта установка - наименее трудоемкий выбор; смоделированные значения для определенного опциона модифицируются, когда опцион тикает. Смоделированные значения не модифицируются, когда основной актив тикает. Эти три параметра настройки могут быть основаны или на каждом торговом тике или на каждом тике Bid и Ask, который получен от datafeed, или на обоих, в зависимости от установки соответствующего флажка в поле Calculation Dependencies. Зарезервированные слова, обычно используемые для записи моделей, обсуждаются ниже. Зарезервированные слова Моделей Большинство зарезервированных слов моделей - слова функции "set", в которых они устанавливают различные значения для опционов (например, Theoretical Value, Delta). Эти те же самые слова, когда используется в других EasyLanguage документах, получают значения, а не устанавливают их. TheoreticalValue(num) Это зарезервированное слово используется в Ценовой Модели, чтобы установить Теоретическое Значение опциона. Когда это зарезервированное слово используется в другой методике анализа, оно используется, чтобы получить Теоретическое Значение опциона. Синтаксис:

TheoreticalValue(num)

Параметры: Num - числовое выражение, представляющее Теоретическое Значение опциона. Этот параметр необходим только при установке значения в Ценовой Модели, но не при получении этого значения. Пример: Например, при записи Ценовой Модели, если значение Теоретического Значения сохранено в переменной Value1, то Теоретическое Значение для опциона устанавливается следующим образом:

TheoreticalValue(Value1);

При записи других методик анализа используйте это слово, чтобы получить Теоретическое Значение опциона. Команды такого примера показаны ниже.

Value1 = TheoreticalValue of option;

Обратите внимание на использование спецификатора Of Option. Для получения информации относительно спецификаторов, см. выше раздел в этой главе, названный "Чтение Данных OptionStation". Delta(num) Это зарезервированное слово используется в Ценовой Модели, чтобы установить Delta опциона. Когда это зарезервированное слово используется в другой методике анализа, оно используется, чтобы получить Delta опциона. Синтаксис:

Delta(num)

Параметры: Num - числовое выражение, представляющее Delta опциона. Этот параметр необходим только при установке значения в Ценовой Модели, но не при получении его значения. Пример: Например, при записи Ценовой Модели, если значение Delta сохранено в переменной Value1, то Delta для опциона устанавливается следующим образом:

Delta(Value1);

При записи других методик анализа, следующие команды получают Delta опциона:

Value1 = Delta of option;

Обратите внимание на использование спецификатора Of Option. Для получения информации относительно спецификаторов, см. раздел выше в этой главе, названный "Чтение Данных OptionStation". Gamma(num) Это зарезервированное слово используется в Ценовой Модели, чтобы установить Gamma опциона. Когда это зарезервированное слово используется в другой методике анализа, то оно используется, чтобы получить Gamma опциона. Синтаксис:

Gamma(num)

Параметры: Num - числовое выражение, представляющее Gamma опциона. Этот параметр необходим только при установке значения в Ценовой Модели, но не при получении оного. Пример: Например, если в Ценовой Модели значение Gamma сохранено в переменной Value1, то Gamma для опциона устанавливается следующим образом:

Gamma(Value1);

При записи других методик анализа, следующие команды получают Gamma опциона:

Value1 = Gamma of option;

Обратите внимание на использование спецификатора Of Option. Для получения информации относительно спецификаторов, см. раздел выше в этой главе, названный "Чтение Данных OptionStation". Rho(num) Это зарезервированное слово используется в Ценовой Модели, чтобы установить Rho опциона. Когда это зарезервированное слово используется в другой методике анализа, оно используется, чтобы получить Rho опциона. Синтаксис:

Rho(num)

Параметры: Num - числовое выражение, представляющее Rho опциона. Этот параметр необходим только при установке значения в Ценовой Модели, но не при получении этого значения. Пример: Например, если в Ценовой Модели Оценки значение Rho сохранено в переменной Value1, то Rho для опциона устанавливается следующим образом:

Rho(Value1);

При записи других методик анализа, следующие команды получают Rho опциона:

Value1 = Rho of option;

Обратите внимание на использование спецификатора Of Option. Для получения информации относительно спецификаторов, см. раздел выше в этой главе, названный "Чтение Данных OptionStation". Theta(num) Это зарезервированное слово используется в Ценовой Модели, чтобы установить Theta для опциона. Когда это зарезервированное слово используется в другой методике анализа, оно используется, чтобы получить Theta опциона. Синтаксис:

Theta(num)

Parameters: Num - числовое выражение, представляющееTheta опциона. Этот параметр необходим только при установке значения в Ценовой Модели, но не при получении этого значения. Пример: Например, если в Ценовой Модели значение Theta сохранено в переменной Value1, то Theta опциона устанавливается, используя:

Theta(Value1);

При записи других методик анализа, следующие команды получают Theta опциона:

Value1 = Theta of option;

Обратите внимание на использование спецификатора Of Option. Для получения информации относительно спецификаторов, см. раздел выше в этой главе, названный "Чтение Данных OptionStation". Vega(num) Это зарезервированное слово используется в Ценовой Модели, чтобы установить Vega для опциона. Когда это зарезервированное слово используется в другой методике анализа, оно используется, чтобы получить Vega опциона. Синтаксис:

Vega(num)

Параметры: Num - числовое выражение, представляющее Vega опциона. Этот параметр необходим только при установке значения в Ценовой Модели, но не при получении этого значения. Пример: Например, если в Ценовой Модели значение Vega сохранено в переменной Value1, тогда оно может быть установлено с использование следующих инструкций:

Vega(Value1);

При записи других методик анализа, следующие команды получают Vega опциона:

Value1 = Vega of option;

Обратите внимание на использование спецификатора Of Option. Для получения информации относительно спецификаторов, см. раздел выше в этой главе, названный "Чтение Данных OptionStation". ModelVolatility(num) Это зарезервированное слово используется в Модели Волатильности, чтобы установить волатильность опциона. Когда это зарезервированное слово используется в другой методике анализа, оно используется, чтобы получить волатильность опциона. Синтаксис:

ModelVolatility(num)

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

ModelVolatility(Value1);

Следующее выражение может использоваться, чтобы назначить волатильность опциона на переменную в Ценовой Модели:

Value1 = ModelVolatility of option;

Обратите внимание на использование спецификатора Of Option. Для получения информации относительно спецификаторов, см. раздел выше в этой главе, названный "Чтение Данных OptionStation". Ask(num) Это зарезервированное слово используется в Модели Bid/Ask, чтобы установить Ask на опцион. Когда это зарезервированное слово используется в другой методике анализа, то оно используется, чтобы получить Ask опциона. Синтаксис:

Ask(num)

Параметры: Num - числовое выражение, представляющее смоделированный Ask опциона. Этот параметр необходим только для установки значения в Модели Bid/Ask, но не при получении этого значения. Пример: Например, если в Модели Bid/Ask, значение Ask сохранено в переменной Value1, то значение Ask устанавливается следующим образом:

Ask(Value1);

Следующее выражение может использоваться, чтобы назначить Ask опциона на переменную в Ценовой Модели:

Value1 = Ask of option;

Обратите внимание на использование спецификатора Of Option. Для получения информации относительно спецификаторов, см. раздел выше в этой главе, названный "Чтение Данных OptionStation". Bid(num) Это зарезервированное слово используется в Модели Bid/Ask, чтобы установить Bid на опцион. Когда это зарезервированное слово используется в другой методике анализа, оно используется, чтобы получить Bid опциона. Синтаксис:

Bid(num)

Parameters: Num - числовое выражение, представляющее смоделированный Bid опциона. Этот параметр необходим только для установки значения в Модели Bid/Ask, но не при получении этого значения. Пример: Например, если в Модели Bid/Ask, значение Bid сохранено в переменной Value1, то значение Bid устанавливается следующим образом:

Bid(Value1);

Следующее выражение может использоваться, чтобы назначить Bid опциона на переменную в Ценовой Модели:

Value1 = Bid of option;

Обратите внимание на использование спецификатора Of Option. Для получения информации относительно спецификаторов, см. раздел выше в этой главе, названный "Чтение Данных OptionStation". ModelPrice ModelPrice используется во всех трех моделях (Pricing, Bid/Ask, and Volatility), чтобы обратиться к цене основного актива при выполнении прогнозного анализа (для получения дополнительной информации см. предыдущий раздел " Механизм ценового моделирования"). Синтаксис:

ModelPrice data alias

Параметры: Нет; однако, Вы должны использовать псевдоним данных Of Asset (Of - опускаемое слово, которое делает выражение более удобным для чтения). Примечания: Очень важно использовать ModelPrice при обращении к цене основного актива в любой из моделей; оно будет использоваться в прогнозном анализе, выполняемом Механизмом ценового моделирования (например, при создании Position Charts). Когда Вы используете это зарезервированное слово, его значение изменяется по мере необходимости, чтобы получить Теоретические Значения позиции в прогнозном анализе, таким образом генерируя данные P/L данные для любого числа различных значений основного актива. Пример: Например, следующее выражение может использоваться, чтобы назначить цену основного актива на переменную в Ценовой Модели:

Value1 = ModelPrice of asset;

TargetType Это зарезервированное слово допустимо только в Ценовых Моделях. Оно возвращает числовое значение, соответствующее шагу Механизма ценового моделирования, для которого вызывается Ценовая Модель. Синтаксис:

TargetType

Параметры: Нет. Примечания: Это зарезервированное слово возвращает одно из этих четырех значений: 1 Теоретическое значение и вычисленные греки 2 значения MIV на необработанных данных 3 значения MIV для смоделированных значений Bid/Ask 4 колл Механизма поиска позиции Пример: Например, если есть вычисления, рассчитанные при определенных значениях Рыночной Ожидаемой Волатильности на необработанных данных, и они не необходимы для остальной части процесса, то Вы можете использовать инструкцию IF-THEN с TargetType. Следующая инструкция IF-THEN исполняет команды только тогда, когда Ценовая Модель вызывается, чтобы вычислить значения MIV на необработанных данных:

If TargetType = 1 Then Begin {здесь инструкция EasyLanguage} End;

FirstOption Это зарезервированное слово допустимо только в Моделях Волатильности. Оно возвращает значение true/false. Если оцениваемый опцион самый первый из анализируемых, то это зарезервированное слово возвратит True; если это - любой другой опцион - возвратится False. Синтаксис: FirstOption Параметры: Нет. Примечания: Это зарезервированное слово ускоряет вычисления, которые должны быть выполнены только однажды для полной цепочки опциона. Пример: Например, если анализ использует установленную волатильность для всех опционов, то волатильность должна быть рассчитана только первого опциона; результат может использоваться для остальной части опциона вместо того, чтобы вычислить волатильность столько раз, сколько есть опционов. В EasyLanguage Вы могли бы записать Модель Волатильности следующим способом:

If FirstOption Then Begin {Здесь вычисляется волатильность, полученное значение назначается на глобальную переменную GVValue1} End;

ModelVolatility (GVValue1); Обратите внимание, что в вышеупомянутом примере, GVValue1 - глобальная переменная OptionStation. Описание глобальных переменных см. в следующем разделе "Глобальные переменные OptionStation." TickType TickType возвращает различные значения в зависимости от того, было ли вычисление Механизма ценового моделирования и индикаторов инициализировано новой ценой основного актива, опциона или смоделированного тика. Синтаксис:

TickType

Параметры: Нет Примечания: Это зарезервированное слово возвращает одно из этих четырех значений: 1 Asset (актив) (акция или индекс) 2 Future (фьючерс) 3 Option {опцион} 4 Model (модель) Это зарезервированное слово дает возможность Вам оптимизировать ваши EasyLanguage вычисления для получения максимальной производительности; Вы можете управлять исполнением методикой анализа вычислений. Пример: Например, чтобы исполнить некоторые вычисления только для тиков основного актива (акции, индекса или фьючерса), и игнорировать вычисление, когда тикает опцион, Вы можете записать:

If TickType = 0 OR TickType = 1 Then Begin {здесь инструкция EasyLanguage} End;

Глобальные переменные OptionStation Анализ опциона очень интенсивен в смысле объема вычислений. Одна из причин этого - то, что все три модели (Pricing, Volatility и Bid/Ask) нужно назвать доступными для каждого опциона каждый раз, когда получены новые данные. Однако, некоторые из вычислений избыточны и их можно избежать. Например, некоторые методики анализа опциона используют общее для всех опционов значение волатильности (вместо отличных значений волатильности для каждого опциона). В этом случае вызывать Модель Волатильности для каждого опциона было бы избыточно и тратой ресурсов. Также, смоделированные значения Bid and Ask могут использовать ассиметричную информацию, сгенерированную в Модели Волатильности. Вместо того чтобы дублировать эти комплексные вычисления, Вы можете использовать в моделях метки-заполнители, которые поддерживают некоторое значение вдоль всех опционов и/или вдоль документов EasyLanguage OptionStation. Эти метки - заполнители называют Глобальными переменными OptionStation. Есть три различных типа Глобальных переменных OptionStation: Глобальные переменные Ценовой Модели, Глобальные переменные Модели Волатильности и Глобальные переменные Модели Bid/Ask. Каждый из них обсуждается ниже. Глобальные переменные Ценовой Модели Значения Глобальных переменных Ценовой Модели могут быть установлены только в Ценовой Моделей, но они могут читаться из Модели Волатильности, Модели Bid/Ask, Стратегии Поиска и индикаторов. Синтаксис:

GPValueNum

Параметры: Num - число от 0 до 99. Примечания: Глобальные переменные предобъявлены; Вы не должны объявлять их, используя Инструкцию Объявления. Пример: Например, Ценовая Модель может быть написана так, чтобы вычислять установку дивиденда только один раз для первого опциона, а затем использовать это значение для всех других опционов (команды ниже - часть Годового дивиденда Ценовой Модели):

If FirstOption Then Begin DivOffset = OS_AnnualDividend (AnnDiv, TInDays, IntRate); GPValue2 = DivOffset; End; Price = Price - GPValue2;

Глобальные переменные Модели Волатильности Значения Глобальных переменных Модели Волатильности могут быть установлены только в Моделях Волатильности, но они могут читаться из Ценовой Модели, Модели Bid/Ask, Стратегии Поиска и индикаторов. Синтаксис:

GVValueNum

Параметры: Num - число от 0 до 99. Примечания: Глобальные переменные предобъявлены; Вы не должны объявлять их, используя Инструкцию Объявления. Пример: Например, при вычислении волатильности для цепочки опциона, Вы можете вычислить это значение один раз и сделать это значение доступным для всех других опционов, используя Глобальные переменные Волатильности:

If FirstOption then Begin {здесь инструкция EasyLanguage для вычисления волатильности} GVValue1 = OurVolty; End;

ModelVolatility (GVValue1);

Глобальные переменные Модели Bid/Ask Значения Глобальной переменной Модели Bid/Ask может быть установлено только в Модели Bid/Ask, но они могут читаться из Ценовых Моделей, Моделей Волатильности, Поиска Стратегии и индикаторов. Синтаксис:

GBValueNum

Параметры: Где num - число от 0 до 99. Примечания: Глобальные переменные предобъявлены; Вы не должны объявлять их, используя Инструкцию Объявления. Пример: Например, Модель Bid/Ask может сохранить промежуточные вычисления, которые могли бы быть полезны для индикаторов и Поиска Стратегий, используя глобальные переменные:

GBValue1 = Value1;

EasyLanguage и другие языки

EasyLanguage дает возможность Вам использовать функции, постоянно находящиеся в библиотеках динамической связи (написанных или в ваших торговых сигналах, методиках анализа и функциях). Это означает, что в дополнение ко всем зарезервированным словам EasyLanguage и функциям, Вы также имеете в вашем распоряжении любую функцию в DLL, которые написаны в C или с использованием TradeStation Technologies EasyLanguage DLL Extension Kit, который состоит из четырех файлов и детальной документации. Эта глава представляет Вам это комплект и обсуждает использование функций DLL с EasyLanguage. Это - усложненный раздел, и эта глава предполагает, что Вы знаете C, а также как создать Windows DLL файл. Определение Функции DLL Прежде, чем Вы сможете вызвать функцию DLL от EasyLanguage, Вы должны объявить DLL с использованием DLL инструкции Function Declaration. Синтаксис:

DefineDLLFunc: "DLLNAME.DLL", Return Type, "FunctionName", Parameters;

DLLNAME.DLL - имя DLL, где функция постоянно находится, Return Type - тип выражения, которое функция возвратит, FunctionName - имя функции как определено в DLL, Parameters - список параметров, ожидаемых функцией (каждый параметр, отделенный запятой). Очень важно помнить, что 32-разрядные DLLs используют экспортируемые объявленные функции с учетом регистра, используя _cdecl, stdcall, или fastcall. Для DLLs, чтобы быть совместимым с EasyLanguage, экспортируемые функции должны быть созданы с использованием прописных букв и должны объявлены как _stdcall. Эти экспортируемые функции должны быть перечислены в пределах раздела EXPORTS .DEF файла DLL. Использование "_declspec (dllexport)" от прототипа функции недостаточно для EasyLanguage, чтобы определить местонахождение экспортируемых функций DLL. Например, следующая инструкция объявляет функцию по имени MessageBeep, которая постоянно находится в DLL по имени USER32.DLL. Она возвращает булево (истинное/ложное) значение и ожидает один параметр, int.

DefineDLLFunc: "USER32.DLL", bool, "MessageBeep", int;

Data Types EasyLanguage поддерживает множество типов достоверных данных, которые могут использоваться, чтобы посылать и получать информацию к функциям, содержавшимся в DLLs. Ниже - список типов данных, поддерживаемых EasyLanguage: Фундаментальные типы данных:
Все указатели - 32-разрядные указатели, и EasyLanguage обрабатывает каждого из них тем же самым способом. Также, очень важно помнить, что все значения в EasyLanguage - плавающие, кроме значений Open, High, Low and Close, которые являются целыми числами. Чтобы управлять этими ценами, Вы должны послать функции ценовой масштаб символа, который составляет график. Например, если бумага имеет ценовой масштаб 1/1000, а окончательная цена была 105.125, эту цену будут посылать DLL как 105125. Для DLL, чтобы знать, как читать эту цену, Вы должны послать значение в зарезервированном слове PriceScale, которое в этом случае возвращает значение 1 000. Использование Типов данных Указателя Типы данных указателя предназначены, чтобы передать адреса памяти и пункты данных к функции DLL. Все указатели, используемые в EasyLanguage, обрабатываются как 32-разрядные указатели. Чтобы получить указатель любого элемента данных в EasyLanguage, пользователь должен поставить перед элементом данных амперсанд (&). Например, чтобы обратиться к адресам открытия и максимума бар назад и значению переменной value1 два бара назад, Вы используете следующие выражения: &Open Address of the open price of the current bar. &High[1] Address of the high price of the previous bar. &Value1[2] Address of the Value 1 variable of two bars ago. EasyLanguage в настоящее время поддерживает адреса для следующих объектов данных: Все значения Date, Time, Open, High, Low, Close, Volume, OpenInt. Все true/false и числовые переменные, включая предопределенные переменные. Все true/false и числовые массивы. Текстовые строки передают адрес как значение по умолчанию, когда используется тип параметра LPSTR . Не изменяйте размер переданной строки в пределах вашего DLL, поскольку это может вызвать непредсказуемые результаты. Следующий пример использует правильный синтаксис для включения типа данных указателя как один из параметров, посланных функции от DLL в инструкции.

DefineDLLFunc: "C:\UserDLL\MyLib.DLL",int,"MyFunc", LPLONG; If MyFunc(&Close) > 0 Then Buy next bar at marke

t; Очень важно помнить, что указатели не могут быть правильно назначены на переменную или элемент массива. Поскольку ни переменная, ни элемент массива не имеют необходимую точность, чтобы держать указатель, Вы не должны пробовать сохранить указатель для более позднего использования. ЗАПРЕЩЕНО: следующий пример запрещен в текущей версии EasyLanguage, поскольку он приводит к непредсказуемому результату, когда на Value1 ссылаются в более позднее время.

Value1 = &Open;

Также, не предполагайте, что есть какие-либо отношения между двумя адресами памяти. Например, не применяйте &Open[1] как равный &Open[0] плюс 4. Вы должны всегда использовать обеспеченные Функции ELKIT32, чтобы исполнить вычисления указателя. Использование Функций DLL Однажды определенную инструкцией DefineDLLFunc функцию DLL можно вызвать от EasyLanguage способом, аналогичным вызову любой другой функции EasyLanguage. Функцию DLL можно вызвать в пределах выражения или как явную инструкцию, если возвращаемое значение не используется. Чтобы вызывать функцию DLL, пользователь должен определить имя функции и включить все параметры в пределах круглых скобок. Если используются множественные параметры, они должны быть отделены запятыми. Например, чтобы использовать функцию по имени MessageBeep, которая включена в USER32.DLL, может использоваться следующая инструкция:

DefineDLLFunc: "USER32.DLL",bool, "MessageBeep", int; If Open > Close Then MessageBeep (0); Второй пример: DefineDLLFunc: "MYLIB.DLL", int, "MyAverageFunc", multiple; Value1 = MyAverageFunc ("Open = ", (LONG)Open);

Возвращаемое значение функции MyAverageFunc назначено на Value1. Обратите внимание, что спецификатор типа данных (LONG) включается перед значением второго параметра. Этот спецификатор необходим, потому что MyAverageFunc объявляет множественные поля параметра. В этом образце, спецификатор типа данных должен предшествовать каждому параметру. Исключение к этому правилу - когда текстовая строка используется как параметр функции DLL как в Примере 2. С учетом этого исключения мы знаем, что типом данных должен быть LPSTR. Поэтому, никакой спецификатор типа данных не необходим, даже когда используется MULTIPLE . Это - к тому, почему нет никакого спецификатора типа данных перед строкой "Open =". Дополнительно о EasyLanguage DLL Extension Kit EasyLanguage DLL Extension Kit состоит из четырех файлов: ELKIT32.DLL ELKIT32.H ELKITVC.LIB (для использования только с VC++) ELKITBOR.LIB (для использования только с Borland Builder) Эти файлы расположены в каталоге \Omega Research\Program, а документация для комплекта представлена на компакт-диске программы. EasyLanguage Toolkit Library (ELKIT32.DLL) - динамически компонуемая библиотека, которая предоставляет полезные функции, которые можно вызвать от любого пользовательского DLL. Обычно используется, чтобы найти адрес смещения EasyLanguage объекта данных изнутри пользовательского DLL. Чтобы установить документацию, просмотрите компакт-диск программы и найдите папку по имени DEVKIT. Выполните файл setup.exe из этой папкой, чтобы установить документацию.

EasyLanguage - Приложение А - Синтаксические ошибки

Синтаксические ошибки продуцируются проверке инструкции EasyLanguage, если она не понята или ожидается PowerEditor. Далее следует список всех синтаксических ошибок и их описания, перечисленных в соответствие с номером ошибки. Каждый статья включает описание ошибки, вероятные причины ошибки и примеры правильного и неправильного синтаксиса для инструкции или команды

61 "Word not recognized by EasyLanguage."
"Слово, не распознанное EasyLanguage" Эта ошибка отображается всякий раз, когда слово не распознано PowerEditor. Например, если это - не зарезервированное слово EasyLanguage, не функция EasyLanguage или объявленная определяемая пользователем переменная, не массив или имя входа.


62 "Invalid number."
"Недопустимое число" PowerEditor отображает это сообщение всякий раз, когда находит типографскую ошибку в числе. Например, если вставлен ошибочный символ в числе, то число будет подсвечено и эта ошибка будет отображена. Пример недопустимого числа - 100,b4


63 "Number out of range."
"Число вне диапазона" PowerEditor отображает эту ошибку всякий раз, когда обнаруживает число, которое находится вне поддерживаемого диапазона (число, которое является слишком большим). Следующая инструкция продуцирует данную ошибку:
Value1 =; 99999999999999999999


65 "Invalid variable name."
"Недопустимое имя переменной" PowerEditor отображает эту ошибку всякий раз, когда находит недопустимое название в инструкции объявления переменной. Имена переменных не могут начинаться с числа и других специальных символов, кроме подчеркивания (_). Например, данная ошибка будет сгенерирована, когда проверена следующая инструкция:
Variable: $MyVariable (0);


66 "Invalid input name."
"Недопустимое имя константы" PowerEditor отображает эту ошибку всякий раз, когда находит недопустимое имя в инструкции объявления константы. Названия констант не могут начинаться с числа и других специальных символов, кроме подчеркивания (_). Например, данная ошибка будет сгенерирована, когда проверена следующая инструкция:
Input: $MyInput (0);


70 "Array size cannot exceed 2 billion elements."
"Размер массива не может превышать 2 миллиарда элементов" Массивы могут иметь до 2 миллиардов элементов. Число элементов рассчитывается умножением все измерений массива. Например, объявленный с использованием следующей инструкции массив, будет иметь 66 элементов:
Array: MyArray[10,5](0);
Этот массив будет иметь строки от 0 до 10, и столбцы от 0 до 5; другими словами - 11 строк и 6 столбцов. Результат от умножения измерений массива не может превысить 2 миллиарда.


74 "Invalid array name."
"Недопустимое имя массива" PowerEditor отображает данную ошибку всякий раз, когда находит недопустимое имя в инструкции объявления массива. Название массива не может начинаться с числа и другого специального символа, кроме подчеркивания (_). Например, данная ошибка будет сгенерирована, когда проверена следующая инструкция:
Array: $MyArray [10] (0) ;


90 "The first jump command must be a begin: (\ \hb,\ \pb,\ \wb)"
"Первой командой перехода должна быть начальная: (\ \hb,\ \pb,\ \wb)" Эта ошибка отображается, когда PowerEditor находит в текстовой строке конечную команду перехода без начальной команды перехода. Конечные команды перехода:
\he
\pe
\we
Перед этими командами должна использоваться начальная команда перехода. Обратите внимание: при определении имени файла для зарезервированных слов Print() or FileAppend(), файлы, которые начинаются с любой из команд перехода, генерируют данную ошибку. Так что имя файла в "c:\hello.txt" генерирует ошибку, т.к. часть названия \he.


91 "You cannot nest jump commands within other jump commands."
"Вы не можете вложить команды перехода в пределах других команд перехода" Команды перехода используются в связанных с комментарием текстовых строковых выражениях, чтобы подсветить слова, и создать связи со строками справки. Команды перехода не могут быть вложены, т.е. не может быть несколько начальных команд перехода, не имеющих соответствующих связей с конечными командами перехода.


92 "You must terminate all jump commands with ends (\\he,\\pe,\\we)"
"Вы должны закрыть все команды перехода конечными командами (\\he,\\pe,\\we) " Эта ошибка отображается, когда PowerEditor находит в текстовой строке начальную команду перехода без конечной команды перехода. Начальные команды перехода:
\hb
\pb
\wb
После этих команд должна использоваться конечная команда перехода. Обратите внимание: при определении имени файла для зарезервированных слов Print() or FileAppend(), файлы, которые начинаются с любой из команд перехода, генерируют данную ошибку. Так что имя файла в "c:\hello.txt" генерирует ошибку, т.к. часть названия \he.


151 "This word has already been defined."
"Это слово было уже определено" Определяемые пользователем слова (типа переменных, массивов, констант) должны иметь уникальные имена. Данная ошибка генерируется, когда определяемое пользователем слово используется не один раз, как в следующем примере:
Input: vac(10);
Variable: vac (0) ;


154 "=, <>, >, >=, <, <= expected here."
" =, <>,>,> =, <, <= ожидается здесь" Эта ошибка отображается, когда PowerEditor оценивает комплексные выражения true/false и находит ошибку в пределах выражения.
Condition1 = Condition2 = Close ;
Намерение этой инструкции состояло в том, чтобы назначить сложное истинно-ложное значение на переменную Condition1, используя Condition2 и сравнение, которое включает Close. Исправленная версия выглядела бы следующим образом:
Condition1 = Condition2 AND Open = Close;


155 " '(' expected here."
" '(' ожидается здесь" Левая круглая скобка ожидалась перед подсвеченным словом; например, если Вы используете функцию, которая требует параметров, но никакие параметры не внесены в список.
Value1 = Average + 10;
В данном примере подсветка показывает, что круглая скобка ожидалась перед знаком "+".


156 " ')' expected here."
" ')' ожидается здесь" Правая круглая скобка ожидалась после подсвеченного слова; например, если Вы используете функцию, которая требует параметров, Вы должны включить их в круглые скобки.
Value1 = Average(Close, 10 ;
Здесь подсветка показывает, что закрывающая круглая скобка ожидалась перед ";".


157 "Arithmetic (numeric) expression expected here."
"Числовое выражение ожидается здесь" Эта ошибка отображается всякий раз, когда PowerEditor ожидает число или числовое выражение, а находит истинно-ложное выражение, строковое значение или любое другое ключевое слово, которое не возвращает числовое выражение. Например, функция Average(), ожидающая два числовых выражения, как представлено ниже:
Value1 = Average(Condition1, 10);
генерирует ошибку, так как Condition1 - истинно-ложное выражение.


158 "An equal sign '=' expected here."
"Знак "=" '=' ожидается здесь" Эта ошибка отображается, если опущен знак "=" при назначении значения на переменную, массив или функцию (запись оператора присваивания). Например, следующая инструкция вызовет ошибку:
Value1 10 ;
которая исправляется добавлением знака "=" :
Value1 = 10;


159 "This word cannot start a statement."
"Это слово не может запустить инструкцию" Не все слова могут использоваться, чтобы запустить инструкцию. Например, информационное слово Close не может использоваться, чтобы запустить инструкцию. Обычно зарезервированные слова, которые генерируют некоторое действие, используются в начале инструкций типа Buy, Plot1 или If-Then.


160 "Semicolon (;) expected here."
"Точка с запятой (;) ожидается здесь" Все инструкции EasyLanguage должны заканчиваться точкой с запятой. Всякий раз, когда PowerEditor находит слово или выражение, которое может интерпретироваться как новая строка, он размещает курсор перед этим выражением и показывает данную ошибку. Например, следующие инструкции продуцируют эту ошибку:
Value1 = Close + Open |
Buy Next Bar at Value1 Stop;
Учитывая, что слово Buy всегда используется в начале инструкции, чтобы разместить торговый ордер, точка с запятой требуется после Open.


161 "The word THEN must follow an If condition."
"Слово THEN должен следовать за If условием" Эта ошибка отображается всякий раз, когда слово Then опущено в инструкции If-Then. Слово Then должно всегда следовать за условием инструкции If-Then. Правильный синтаксис для инструкции If-Then:
If Condition1 Then {любая операция}


162 "STOP, LIMIT, CONTRACTS, SHARES expected here."
"STOP, LIMIT, CONTRACTS, SHARES ожидается здесь" Эта ошибка отображается PowerEditor, если он находит числовое выражение после торгового приказа без включения одного из вышеупомянутых слов. Числовое выражение может использоваться в торговом ордере, чтобы определить количество акций (или контрактов) и/или определить цену стопового или лимитированного приказа. Например, выражение:
Buy Next Bar at Low – Range ;
является неправильным, потому что оно не включает торговый приказ после Range. Чтобы сделать это выражение правильным, Вы можете добавить слово Stop или Limit, как показано ниже:
Buy Next Bar at Low - Range Stop;


163 "The word TO or DOWNTO was expected here."
"Слово TO или DOWNTO ожидается здесь" Эта ошибка отображается всякий раз при записи For loop, когда слово to или downto опущено. Правильный синтаксис для For loop:
For Value1 = 1 To 10 Begin
{инструкция}
End;


165 "The word BAR or BARS expected here."
"Слово BAR или BARS ожидается здесь" Эта ошибка отображается при ссылке на значению предыдущего бара, когда слово Bar опущено. Например, следующая инструкция вызовет эту ошибку:
Value1 = Close of 10 Ago ;
Правильный синтаксис:
Value1 = Close of 10 Bars Ago;


166 "The word AGO expected here."
"Слово AGO ожидается здесь" Эта ошибка отображается, когда PowerEditor находит ссылку в любом выражении на число баров без использования фразы Bars Ago. Например:
Value1 = Close of 10 Bars ;
генерирует эту ошибку, потому что слово Ago отсутствует. Правильный синтаксис для этого выражения:
Value1 = Close of 10 Bars Ago;


167 " '}' was expected before end of file."
" '}' ожидается в конце файла" Чтобы добавить комментарий в EasyLanguage, необходимо включить текст комментария в фигурные скобки "{'and'}". Сообщение об ошибке отображается, когда левая фигурная скоба найдена без соответствующей правой фигурной скобки.
{ комментарий трейдера Джоя
If Close > Highest (High, 10)[1] Then
Buy Next Bar at Market; |
В примере выше, правая фигурная скобка была опущена где-нибудь перед вертикальным курсором. В этом примере правая изогнутая скоба должна была быть помещена после слова "Джоя".


168 " '['was expected here."
" '[' ожидается здесь" При объявлении, назначении или ссылке на значениях массива, Вы обязаны использовать квадратные фигурные скобки, чтобы определить элемент(ы) массива. Эта ошибка отображается, если левая квадратная скобка не использовалась при работе с массивом.
Array: MyArray ( 10 ) ;
Например, здесь показано подсветкой, что квадратная скобка, соответствующая объявленному числу элементов массива, ожидается перед круглой скобкой.


169 " ']' was expected here."
" ']' ожидается здесь" При работе со смещениями баров или массивами, бар или индекс массива должны быть включены в квадратные скобки. Данное сообщение отображается, если правая квадратная скобка отсутствует.
Value1 = Close[10 * 1.05 ;
В этом примере, подсветка указывает, что где-нибудь перед точкой с запятой должна быть помещена квадратная скобка. Обратите внимание, что, так как PowerEditor ожидает квадратную скобку, то он размещает подсветку после последнего символа в числовом выражении. Однако, в этом случае, правая скобка была вероятно предназначена, чтобы быть помещенной после числа 10.


170 "Assignment to a function not allowed."
"Назначение на функцию не разрешается" Эта ошибка отображается, когда Вы пытаетесь назначить значение на функцию. По определению, функция - процедура EasyLanguage, которая возвращает значение, так что невозможно назначить значение на функцию (кроме как, при возвращении значения изнутри функции).
Average = 100.1245;
В данном примере подсвеченное имя функции указывает, что Вы не можете назначить это значение.


171 "A value was never assigned to user function."

"Нигде не назначено значение на функцию пользователя" По определению, функция - набор инструкций, которые возвращают значение. Эта ошибка будет отображена при редактировании или создании функции, и PowerEditor находит, что никакое значение не было назначено на функцию. Инструкция, подобная следующей ниже, должна быть включена в каждую функцию:
MyFunction = Value;
где MyFunction - название функции, а Value - выражение, которое будет возвращено при ссылке на функцию.


172 "Either NUMERIC, TRUEFALSE, STRING, NUMERICSIMPLE, NUMERICSERIES, TRUEFALSESIMPLE, TRUEFALSESERIES, STRINGSIMPLE, or STRINGSERIES expected."

"Ожидается любое из NUMERIC, TRUEFALSE, STRING, NUMERICSIMPLE, NUMERICSERIES, TRUEFALSESIMPLE, TRUEFALSESERIES, STRINGSIMPLE или STRINGSERIES" При объявлении входов в функции необходимо определить тип каждого входа. Эта ошибка генерируется, когда любое слово или значение, отличное от правильного (допустимого) типа входа, используется при объявлении входов функции.


174 "Function not verified."

"Функция не проверена" Для того, чтобы произвести проверку ордера в методике анализа, необходимо, чтобы все функции, используемые методикой анализа, были также проверены. Данная ошибка отображается, если есть функция, которая не проверена, а Вы пытаетесь проверять методику анализа. Чтобы решить эту проблему, откройте функцию и проверьте ее, или выполните "Verify All" в меню PowerEditor.


175 " ',' or' )' expected here."
" ',' or ' )' ожидается здесь" Эта ошибка отображается при перечислении множества элементов в круглых скобках, и точка с запятой читается прежде, чем список закончен.
Value1 = Average(Close, 10 ;
В данном случае подсветка указывает, что ожидается следующий параметр (отделенный запятой) или правая круглой скобка перед точкой с запятой.


176 "More inputs expected here."

"Больше констант ожидается здесь" Эта ошибка отображается при ссылке функции или включения сигнала без определения достаточного количества констант. В следующем примере:
Value1 = Average ( Close ) ;
отображается ошибка, потому что только одна константа определена, в то время как функция Average требует двух констант: 1) цену, которая будет усреднена и 2) число баров.


177 "Too many inputs supplied."
"Слишком много констант ведено" PowerEditor отображает эту ошибку, когда слишком много констант введено для функции. Например, функция Average требует только двух констант, так что следующая инструкция генерирует данную ошибку:
Value1 = Average(Close, 10 , 5);
Правильный синтаксис был бы
Value1 = Average (Close, 10);


180 "The word #END was expected before end of file."

"The word #END was expected before end of file." The compiler directive #END must be used to indicate the end of a group of statements included in the alert or commentary only section of an analysis technique. The alert and commentary compiler directives will allow certain instructions to be executed only when the alert or commentary is enabled.


181 "There can only be 10 dimensions in an array."
"Может быть только 10 измерений в массиве" Массивы могут иметь до 10 измерений. Правильный синтаксис для создания многомерное массива:
Array: MyArray[10,10,10](0);
Эта инструкция создает трехмерный массив 11x11x11.


183 "More than 100 errors. Verify termination."
"Более 100 ошибок. Проверка завершена" Когда PowerEditor проверяет документ на корректность, он продолжает оценивать выражения, пока не находит 100 ошибок. Эти ошибки будут находится в файле регистрации ошибок, как только процесс проверки будет закончен. Если PowerEditor находит больше чем 100 ошибок, он остановит процесс и отобразит это сообщение.


185 "Either HIGHER or LOWER expected here."
"Или HIGHER или LOWER ожидается здесь" При определении команды выполнения для ордера в сигнале, возможно использовать слова or Higher и or Lower, как синонимы stop и limit. Данная ошибка происходит, когда слово or найдено в ордере без слов Higher или Lower. Ниже - надлежащий синтаксис для такой инструкции:
Buy Next Bar at Low - Range or Lower;


186 "Input name too long."
"Имя константы слишком длинное" Имена констант в любой методике анализа PowerEditor могут быть не более чем из 20 символов. Данная ошибка отображается PowerEditor всякий раз, когда имя состоит более чем из 20 символов.


187 "Variable name too long."

"Имя переменной слишком длинное" Имена переменных могут иметь до двадцати символов. Эта ошибка отображается всякий раз, когда переменная объявлена с названием, которое содержит больше чем двадцать символов.


188 "The word BEGIN expected here."
"Слово BEGIN ожидается здесь" Эта ошибка генерируется всякий раз, когда PowerEditor ожидает блочную инструкцию. Например, все циклы требуют операторов блока Begin and End; т.о. следующая запись генерируют данную ошибку:
For Value1 = 1 To 10
Value10 = Valuel0 + Volume[Value1];
Правильный синтаксис:
For Value1 = 1 To 10 Begin
Value10 = Value10 + Volume[Value1];
End;


189 "This word not allowed in a signal."

"Это слово не разрешено в сигнале" Слово, подсвеченное PowerEditor, не позволяется в Сигнале. Слова, подобные Plot1, TheoreticalValue, ModelVolatility и т.п., не позволяются в Сигнале.


190 "This word not allowed in a function."

"Это слово не разрешено в функции" Слово, подсвеченное PowerEditor, не позволяется в функции. Слова, подобные Plot1, Buy, Sell и т.п., не позволяются в функциях.


191 "This word not allowed in a study."
"Это слово не разрешено в изучении" Слово, подсвеченное PowerEditor, не позволяется в изучении. Слова, подобные Plot1, Buy, Sell и т.д., не позволяются в изучениях.


192 "This word not allowed in an ActivityBar."

"Это слово не разрешено в ActivityBar" Слово, подсвеченное PowerEditor, не позволяется в изучении ActivityBar. Слова, подобные Plot1, Buy, Sell и т.д., не позволяются в изучениях ActivityBar.


193 "Comma (,) expected here."

"Запятая ( , ) ожидается здесь" Запятые используются, чтобы отделить элементы в списке; например при объявлении множественных констант или переменных, или когда вносится список параметров функции. Эта ошибка генерируется всякий раз, когда PowerEditor находит два слова, которые возможно являются частью списка и не отделены запятой. Например, в следующем примере:
Inputs: Price(Close) | Length(10);
запятая после первой константы отсутствует. PowerEditor размещает вертикальный курсор в месте, где он ожидал запятую.


195 "Matching quote is missing."
"Соответствующая кавычка отсутствует" Все текстовые строковые выражения должны быть в пределах двойных кавычек. Данная ошибка будет отображаться всякий раз, когда нет соответствующей кавычки вокруг текстового строкового выражения. Например, следующая инструкция произведет эту ошибку:
Variable: Txt(" ");
Txt = "This is an example;
потому что отсутствует кавычка справа от текстового выражения. Правильный синтаксис для этого выражения:
Variable: Txt(" ");
Txt = "This is an example";


197 "Signal not verified."

"Сигналов не проверен" Для того, чтобы проверить торговый сигнал, надо сначала проверить любые сигналы, на которые ссылается упомянутый торговый сигнал, с помощью зарезервированного слова IncludeSignal. Данная ошибка отображается, если Вы пытаетесь проверять торговый сигнал, который ссылается на непроверенный сигнал. Чтобы решить эту проблему, откройте сигнал, на который ссылаются и проверьте его, или выполните "Verify All" в меню PowerEditor.


200 "Error found in function."
"Ошибка найдена в функции" Эта ошибка отображается при проверке методики анализа, которая обращается к непроверенной функции. Единственное решение состоит в том, чтобы открыть функцию, проверить ее и затем возвратиться к методике анализа.


201 "User function cannot refer to current cell of itself."

"Функция пользователя не может обратиться к своему текущему элементу" Простая функция не может обратиться к значению этой же функции в пределах ее вычислений. Однако, если ее определить как серийную функцию, то она может обратиться к своим предыдущим значениям. Например, следующая простая функция генерирует ошибку:
MyFunction = MyFunction + Volume;
потому что вычисление обращается к текущему значению функции. Если установить параметр функции "Series", следующее выражение становится правильным при использовании предыдущего значение функции:
MyFunction = MyFunction[1] + Volume;


204 "Orders cannot be inside a loop."

"Ордера не могут быть в цикле" EasyLanguage не разрешает торговые ордера, которые будут помещены в For or While loop (Цикл с условием продолжения). Если намерение размещения ордера в цикле состоит в том, чтобы увеличить число акций или контрактов, обрабатываемых сигналом, то это можно сделать, поместив в цикл вычисление числа акций или контрактов, а затем использовать результат в команде ордера, после того, как цикл закончен. Например,
While Condition1 Begin
Value1 = <вычисление числа акций>;
End;
Buy Value1 Shares Next Bar at Market;


205 "Statement does not return a value."
"Инструкция не возвращает значение" Эта ошибка отображается при попытке возвратить значение из инструкции, не предназначенной, чтобы возвращать значение, вроде тех, которые устанавливают или изменяют значение. Например:
Value1 = AB_SetZone (High, Low, RightSide);
Чтобы исправлять эту ошибку, не назначайте выражение на переменную:
AB_SetZone(High, Low, RightSide);


208 "CONTRACTS, SHARES expected here."

"CONTRACTS, SHARES ожидается здесь" Когда записывается инструкция EasyLanguage для размещения ордера, невозможно определить, сколько контрактов или акций сигнал должен использовать, чтобы открыть (или закрыть) позицию. Данная ошибка будет генерироваться PowerEditor всякий раз, когда он находит числовое выражение после торгового приказа, который не сопровождается словом Stop, Limit, or Higher или or Lower. Например:
Buy 100;
генерирует ошибку, потому что не ясно: "100" - часть команды для определения числа акций или команды выполнения (цена, в которую ордер должен быть помещен). Правильная инструкция может быть такой:
Buy 100 Shares;


209 "Signal name expected within quotes."

"Имя сигнала ожидается в пределах кавычек" При определении названия ордера, он должно быть включено в пределы круглых скобок и двойных кавычек. Данная ошибка отображается, если название отсутствует или не обеспечено кавычками. Например, следующая инструкция вызовет данную ошибку:
ExitLong From Entry ( ) Next Bar at Market;


211 "Signal cannot call itself."
"Сигнал не может вызвать себя" Сигнал не может ссылаться непосредственно при использовании зарезервированного слова IncludeSignal. (?)


213 "Error found in signal."

"Ошибка найдена в сигнале" Эта ошибка отображается при проверке сигнала, содержащего зарезервированное слово IncludeSignal, который ссылается на непроверенный сигнал. Единственное решение состоит в том, чтобы открыть непроверенный сигнал, проверить его, а затем возвратиться к оригинальному сигналу.


214 "Colon (:) expected here."
"Двоеточие (:) ожидается здесь" EasyLanguage ожидает, что двоеточие используется при объявлении некоторых элементов языка, вроде констант, переменных, массивов и DLL. Чтобы объявлять новую константу, слово input должно сопровождаться двоеточием, а затем следует список входных имен. Данная ошибка будет отображаться всякий раз, когда двоеточие отсутствует в таком выражении, например:
Input MyValue(10);
Так как нет двоеточия после слова 'Input', то слово MyValue подсвечено, и отображено сообщение об ошибке. Чтобы исправлять ошибку, просто добавьте двоеточие после 'Input':
Input: MyValue(10);


215 "Cannot use next bar's price and close order in the same signal."

"Невозможно использовать цену следующего бара и закрывать ордер в одном и том же сигнале" EasyLanguage не поддерживает информацию, использующую следующий бар (Date, Time или Open) и размещение ордера в момент закрытия текущего бара в одном и том же сигнале. Если команды не связаны, они должны быть написаны как различные сигналы и объединены с использованием TradeStation StrategyBuilder.
Следующая инструкция генерирует ошибку, потому что она включает ссылку на открытие следующего бара и размещает ордер на закрытии текущего бара:
If Open of Next Bar > Price Then Buy This Bar on Close;


217 "Function circular reference found."

"Найдена циклическая зависимость функций" Циклическая зависимость определяется как две формулы, которые обращаются друг к другу в своих соответствующих вычислениях. Такой тип формулы не может быть решен EasyLanguage, поэтому всякий раз, когда найдена циклическая зависимость, будет отображаться данная ошибка.
Например, циклическая зависимость может случиться, если имеется функцию A, которая определена как значение текущего бара в функции B плюс 1, а определение функции B - значение текущего бара в функции А плюс 1. Чтобы вычислять значение функции A, необходимо значение B, но чтобы вычислить B, необходимо значение А. Поэтому, невозможно получить значения этих функций, и генерируется данная ошибка.


220 "Cannot anchor a global exit."

"Невозможно прикрепить общий выход" К ценовым данным бара, на котором был размещен ордер входа в позицию, можно обратиться от выхода из позиции, используя At$. Это возможно только тогда, когда ордер входа имеет метку и если выход связан с входом. Ошибка будет генерироваться, если вход не помечен или если выход не определяет, какой вход он должен закрывать. Например, следующий выход вызовет данную ошибку:
If Condition1 Then
Buy ("MyEntry") This Bar on Close;
ExitLong At$ Low - 1 Stop;
так как выход не определяет соответствующего название входа соответствия. Правильный синтаксис:
If Condition1 Then
Buy ("MyEntry") This Bar on Close;
ExitLong From Entry ("MyEntry") At$ Low - 1 Stop;


223 "A simple function cannot call itself."

"Простая функция не может вызвать себя" Исторические значения простых функций недоступны EasyLanguage, так что обращаться к своим предыдущим значениям в вычислениях не позволяется. Если это необходимо, измените функцию на серийную.
MyFunction = MyFunction [1] + Volume;
Например, если MyFunction - простая функция, вышеуказанная ссылка на значение MyFunction один бар назад не позволяется в этом вычислении.


224 "Signal name already used."
"Имя сигнала уже используется" PowerEditor не позволяет многократное использование названия в двух различных ордерах. Это обязательное условие, что все ордера имеют различные названия. Следующая инструкция Sell генерирует данную ошибку:
If Condition1 Then
Buy ("MySignal") Next Bar at Market;
If Condition2 Then
Sell ("MySignal") Next Bar at Market;
потому что оба ордера не могут иметь одно и тоже название.


226 "Next bar's prices can only be used in a signal."
"Следующий бар может использоваться только в сигнале" На Open, Date и Time следующего бара можно сослаться только от сигнала; никакой другой анализ не имеет доступа к этой информации.


227 "Default expected here."
"Значение по умолчанию ожидается здесь" При объявлении константы в любой методике анализа, Вы должны включить значение по умолчанию в круглые скобки. Данная ошибка будет отображаться всякий раз, когда не указано никакое значение по умолчанию (круглые скобки пусты). Например, ниже - правильный синтаксис того, как объявить константу со значением по умолчанию 15:
Input: MyInput(15);

yInput(15);


229 "Invalid initial value."

"Недопустимое начальное значение" Начальное значение должно быть определено при объявлении переменной или массива. Это начальное значение должно быть включено в круглые скобки и используется:
1) определяет тип переменной или массива (числовая, истинно-ложная или текстовая строка);
2) назначает начальное значение переменной или массива на первом баре.
Правильный синтаксис при объявлении переменной:
Variable: MyVariable(10);
где начальное значение, назначенное на эту переменную - 10, которое является числовым значением.


230 "Initial value expected here."

"Начальное значение ожидается здесь"
Начальное значение должно быть определено при объявлении переменной или массива. Это начальное значение должно быть включено в круглые скобки и используется:
1) определяет тип переменной или массива (числовая, истинно-ложная или текстовая строка);
2) назначает начальное значение переменной или массива на первом баре.
Правильный синтаксис при объявлении переменной:
Variable: MyVariable(10);
где начальное значение, назначенное на эту переменную - 10, которое является числовым значением.


231 "Function has no inputs. Parenthesis not needed."
"Функция не имеет входов. Лишняя круглая скобка" Эту ошибку показывает PowerEditor, когда круглые скобки используются для функции, которая не имеет входов. Например, функции Range EasyLanguage не имеет никаких входов, так следующая инструкция:
Value1 = Range ( 10);
отображает сообщение об ошибке и подсвечивает первую круглую скобку перед параметром.


232 "Matching left comment brace'{' is missing."
"Соответствующая поставленной скобе комментария '{' скобка отсутствует" PowerEditor отображает эту ошибку всякий раз, когда находит правую скобу комментария "}" без соответствующей левой скобки комментария. Чтобы исправить эту ошибку, найдите начало текста комментария и разместите левую скобу комментария. Если нет никакого комментария в вашей методике анализа, то удалите правую скобу комментария.


233 "Extra right parenthesis."
"Дополнительная правая круглая скобка" При записи любого типа выражения или инструкции, которые требуют круглых скобок, необходимо иметь согласованные левые и правые круглые скобки. Данная ошибка отображается, если есть лишние правые круглые скобки в оцениваемом выражении. Например:
Value1 = (Close + Open) ) /2


234 "END found without matching BEGIN."

"END найдено без соответствующего BEGIN" Эта ошибка отображается всякий раз, когда блочная инструкция содержит End, не согласованный с Begin.


237 "Position Information function not allowed in a study."
"Функция информации позиции не позволена в изучении" Информационные слова позиции стратегии могут использоваться только в сигналах и функциях. Эта ошибка будет сгенерирована, если любое из таких слов найдено в чем-нибудь другом, чем сигнал или функция.


238 "Performance Information function not allowed in a study."
"Выполнение информационной функции не позволено в изучении" Информационные слова выполнения стратегии могут использоваться только в сигналах и функциях. Эта ошибка будет сгенерирована, если любое из таких слов найдено в чем-либо другом, чем сигнал или функция.


239 "Array name too long."

"Имя массива слишком длинное" Имена массивов могут иметь до 20 символов. Сообщение об ошибке будет отображено, если название массива, используемое в инструкции объявления имеет больше чем 20 символов.


240 "This signal name does not exist."
"Это имя сигнала не существует" Эта ошибка отображается при связи выхода с несуществующим названием входа. Например, следующий сигнал производит эту ошибку:
Buy ("Break") Next Bar at Highest (High, 10) Stop;
ExitLong From Entry ( "BreakOut" ) Next Bar at Low Stop;
потому что выход неправильно обращается к входу, маркированному как "BreakOut", которое не существует в этом сигнале. Изменение названия входа на, "Break" исправит эту ошибку.


241 "Cannot exit from an exit signal."

"Невозможно выйти из сигнала выхода" Эта ошибка отображается, когда сигнал выхода по ошибке связан с другим сигналом выхода. Сигналы выхода могут быть связаны только с входом с помощью команды from Entry ("entry name"). Например, следующие инструкции генерируют данную ошибку:
If Condition1 Then
Buy ("MyEntry") This Bar at Close;
If Condition2 Then
ExitLong ("MyExit") This Bar at Close;
ExitLong from Entry ("MyExit") Next Bar at Lowest(Low,10) Stop;
Однако, следующие инструкции правильны:
If Condition1 Then
Buy ("MyEntry") This Bar at Close;
If Condition2 Then
ExitLong ("MyExit") This Bar at Close;
ExitLong From Entry ("MyEntry") Next Bar at Lowest(Low,10)
Stop;


242 "Cannot exitshort from a buy signal."

"Не может быть exitshort от сигнала покупки" Эта ошибка будет отображена, когда сигнал выхода из короткой позиций связан по ошибке с сигналом входа в длинную позицию. Сигналы выхода из короткой позиции могут быть привязаны к входу только в короткую позицию, с помощью команды from Entry ("entry name "). Например, следующие инструкции генерируют эту ошибку:
If Condition1 Then
Buy ("MyEntry") This Bar at Close;
ExitShort From Entry ("MyEntry") Next Bar at Lowest (Low, 10)
Stop;
В этом случае ошибка может быть исправлена использованием соответствующей команды выхода, ExitLong:
If Condition1 Then
Buy ("MyEntry") This Bar at Close;
ExitLong From Entry ("MyEntry") Next Bar at Lowest (Low, 10)
Stop;


243 "Cannot exitlong from a sell signal."

"Не может быть exitlong от сигнала продажи" Эта ошибка будет отображена, когда сигнал выхода из длинной позиции связан по ошибке с сигналом входа в короткую позицию. Сигналы выхода из длинной позиции могут быть привязаны к входу в только длинную позицию с помощью команды from Entry ("entry name "). Например, следующие инструкции генерируют данную ошибку:
If Condition1 Then
Sell ("MyEntry") This Bar at Close;
ExitLong from Entry ("MyEntry") Next Bar at Low Stop;
В этом случае ошибка может быть исправлена использованием соответствующей команды выхода, ExitShort:
If Condition1 Then
Sell ("MyEntry") This Bar at Close;
ExitShort from Entry ("MyEntry") Next Bar at Low Stop;


244 "At$ cannot be used after the word TOTAL."
"At$ не может использоваться после слова TOTAL" EasyLanguage не позволяет зарезервированному слову Total , которое будет связано с информацией бара входа, использовать команду AT$. Например, следующая инструкция генерирует данную ошибку:
ExitLong 20 Shares Total From Entry ("MyEntry") At$ Low Stop;


247 "References to previous values are not allowed in simple functions."

"Ссылка на предыдущие значениям не позволяется в простых функциях" На предшествующие значения простых функций, простых переменных или простых выражений нельзя сослаться изнутри простой функции. Если это необходимо для вычисления функции, то тогда функция должна быть установлена как серийная, а не простоя. Далее неправильный пример:
MyFunction = MyFunction[1] + Close;
генерирует ошибку, если MyFunction - простая функция со ссылкой на свои предыдущие значениям. Установка в Properties функции на "Series" исправит данную ошибку.


248 "Either PUT, CALL, ASSETTYPE, or FUTURETYPE expected here."
"или PUT, CALL, ASSETTYPE или FUTURETYPE ожидается здесь" Эта ошибка отображается, когда создается элемент позиции в Поиске стратегии с помощью ключевого слова CreateLeg без определения соответствующего типа элемента. Надлежащий синтаксис для этой инструкции:
CreateLeg (5, Call);
который создает элемент, состоящий из покупки 5 коллов.


250 "Cannot reference a previous value of a simple input."

"Нельзя ссылаться на предыдущее значение простой константы" Исторические значения простых констант в функциях не сохраняются EasyLanguage, т.о. обращение к их предыдущим значениям не разрешается. Например, в следующем примере:
Input: MyVal(NumericSimple);
MyFunction = MyVal[5];
значение MyVal[5] не разрешено в этой функции, так как оно включает ссылку на значение константы пять баров назад, но объявлено как константа NumericSimple. Если ссылка на предыдущие значения необходима, измените тип константы на серийный.


251 "Variables and arrays not allowed here."

"Переменные и массивы не разрешены здесь" В предыдущих версиях программы, до 2000i, эта ошибка отображалась при попытке передать переменные или массивы в серийную функцию.
Value2 = Average (Close, Value1);


253 "Cannot reference a previous value of this input."

"Нельзя ссылаться на предыдущее значение этой константы" Исторические значения простых констант в функциях не сохраняются EasyLanguage, т.о. обращаться к их предыдущим значениям не позволяется. Например, в следующем примере:
Input: MyVal(NumericSimple);
MyFunction = MyVal[5];
значение MyVal [5] не разрешено в этой функции, так как оно включает ссылку на значение константы пять баров назад, но было объявлено как константа NumericSimple. Если ссылка на предыдущие значения необходима, измените тип константы на серийный.


258 "Variables, arrays and inputs not allowed here."

"Переменные, массивы и константы не позволены здесь" Эта ошибка отображается, когда переменная, массив или константа используются как инициализатор для входного значения, типа:
Vars: MyVar(3);
Input: MyInput (MyVar);


259 "This number is too big."
"Это число слишком большое" PowerEditor отображает эту ошибку всякий раз, когда обнаруживает число, который находится вне поддерживаемого диапазона (число, который является слишком большим). Следующая инструкция производит данную ошибку:
Value1 = 99999999999999999999 ;


260 " 'Next Bar’ can only be applied to 'OPEN', 'DATE' and ’TIME'."

" 'Next Bar’ может быть применен только для 'OPEN', 'DATE' and ’TIME' " Единственные данные, доступные от следующего бара, которые могут читаться в сигнале, являются Open, Date и Time. Ко всем другим данным от следующего бара нельзя обратиться.


261 "The word 'BAR' expected here."

"Слово 'BAR' ожидается здесь " Эту ошибка показывается при записи ордера в сигнале, где слово Bar пропущено в выражения. Например, следующее выражение:
Buy Next on the Close;
генерирует ошибку, потому что слово Bar отсутствует. Правильный синтаксис:
Buy Next Bar on the Close;


262 "At market order can only be placed for the next bar."
"Рыночный приказ может быть помещен только на следующем бара" Все методики анализа читаются и выполнены в конце каждого бара. Из-за этого рыночные приказы могут быть размещены для следующего бара. Ошибка будет сгенерирована всякий раз, когда рыночный приказ помещен, чтобы быть заполненным на этом баре, типа:
Buy This Bar at Market;


263 "Stop and limit orders can only be placed for the next bar."
"Стоповые и лимитированные приказы могут быть помещены только для следующего бара" Эта ошибка отображается при попытке записать стоповый или лимитированный приказ для текущего бара. Например, следующие выражение:
Buy This Bar at Low - Range Limit;
неверно, потому что Limit ордер не может быть помещен в This Bar. Чтобы быть правильным, Limit ордер должен быть на Next Bar:
Buy Next Bar at Low - Range Limit;


264 "On close order must be placed for this bar."

"Ордер на закрытии должен быть помещен на текущем баре" Учитывая, что все команды читаются в момент закрытия каждого бара, единственные типы ордеров, которые могут быть помещены в текущий бар - это ордера на закрытии бара. Всякий раз, когда This Bar включен как часть ордера, ордер может обращаться только к цене Close. Правильный синтаксис для ордеров на текущем баре (This Bar):
Buy This Bar at Close;


266 "Library name within double quotes expected here."
"Библиотечное имя в пределах двойных кавычек ожидается здесь" PowerEditor отображает эту ошибку при определении внешней функции DLL, если имя DLL отсутствует или неправильное. Первый элемент списка параметров в инструкции DefineDLLFunc должен быть именем DLL библиотеки в пределах двойных кавычек. Следующая инструкция генерирует данную ошибку:
DefineDLLFunc: int, "MyFunc", int;
Правильный синтаксис для этой инструкции:
DefineDLLFunc: "MyDLL", int, "MyFunc", int;


267 "DLL function name within double quotes expected here."
"Имя функции DLL в пределах двойных кавычек ожидается здесь" При определении функции DLL, название DLL должно быть включено в двойные кавычки. Например, следующее выражение - надлежащий пример такого определения функции, потому что он включает имя функции "user.dll", сопровождаемое типом возвращения DLL и параметрами:
DefineDLLFunc: "user.dll", int, "beep";


274 "Return type of this DLL function must be specified."
"Тип возвращения этой функции DLL должен быть определен" При объявлении функции DLL, типом возвращения функции должен быть второй перечисленный параметр. Следующее выражение - правильная инструкция объявления функции DLL с типом int после имени DLL
DefineDLLFunc: "MyDLL.DLL", int, "MyFunction", int;


276 "DLL name cannot be longer than 60 characters."

"Имя DLL не может быть более 60 символов" Название DLL, используемое для определения любой функции через инструкцию DefineDLLFunc, не может превышать 60 символов.


277 "DLL function name cannot be longer than 65 characters."

"Имя DLL функции не может быть более чем 65 символов" Название определенной функции, использующей инструкцию DefineDLLFunc не может превышать 65 символов.


278 "A variable expected here."

"Переменная ожидается здесь" Всякий раз, когда PowerEditor ожидает переменную, а находит другое зарезервированное или определяемое пользователем слово, он подсвечивает неожиданное слово и выдает данное сообщение. Например, когда функция ожидает переменную как один из параметров (потому что она ожидает получить переменную ссылкой).


279 "An array expected here."

"Массив ожидается здесь" Функции могут теперь получать массивы как параметры. Если функция ожидает массив, а вместо этого PowerEditor находит переменную, константу или другое зарезервированное слово (отличное от массива), он отображает данную ошибку. В следующем примере функция Average_a() вычисляет среднее число специфического массива, так что следующее выражение генерирует синтаксическую ошибку:
Variable: MyVar(0);
Value1 = Average_a (MyVar, 10);
Чтобы исправить эту проблему, Вы должны объявить MyVar как массив вместо целого числа. Должно быть написано:
Array: MyArray[20] (0 );
Value1 = Average_a(MyArray, 10);


280 "TrueFalse expression expected here."

"Выражение TrueFalse ожидается здесь" Эта ошибка отображается, когда PowerEditor ожидает выражение true/false, а находит числовое или текстовое строковое выражение вместо этого. Например:
Condition1 = High ;


281 "Mixing data types (NUMERIC, TrueFalse, String) not allowed."
"Смешанные типы данных (NUMERIC, TrueFalse, String) не позволены" Эта ошибка появляется, когда несовместимые типы данных объединены в отдельном выражении. В следующем примере:
Value1 = 100 + "12" ;
текстовая строка "12" не может быть непосредственно объединена с числовым значением. Для решения такой проблемы используйте соответствующее зарезервированное слово EasyLanguage , чтобы конвертировать данные к совместимому типу.
Например, используйте функцию StrToNum, чтобы конвертировать текстовую строку в числовое значение:
Value1 = 100 + StrToNum ("12");


283 "Signal has no inputs. Comma not needed."
"Сигнал не имеет констант. Запятая не нужна"
Когда включается сигнал через ключевое слово IncludeSignal, должен быть подан список констант, и каждая константа должна быть отделена запятой. Данная ошибка отображается, если сигнал не имеет никаких констант или константа по ошибке включена в инструкцию.
Следующее выражение - правильный синтаксис инструкции IncludeSignal сигнала без констант:
IncludeSignal: "My Trailing LX";


284 "There is no such signal."
"Нет такого сигнала" Эта ошибка отображается PowerEditor всякий раз, когда название сигнала, которое упоминает инструкция IncludeSignal, не существует в библиотеке сигнала.


285 "Strategy circular reference found."
"Найдена циклическая зависимость стратегии" Циклическая зависимость определяется как две формулы, которые обращаются к значению другой на текущем баре в своих вычислениях. Такой тип формулы не может быть решен EasyLanguage, поэтому, всякий раз, когда найдена циклическая зависимость, отображается данная ошибка.


286 "Cannot divide by zero."
"Нельзя делить на ноль" Эта ошибка будет отображаться при делении любого числового выражения на константу 0. Так, когда написано следующее выражение:
Value1 = Close / 0;
PowerEditor генерирует синтаксическую ошибку, потому что деление на ноль - математическая неопределенность и не может быть решено.


287 "File name expected here."
"Имя файла ожидается здесь" Эта ошибка отображается при использовании инструкции Print, чтобы послать информацию на принтер и используется недопустимое имя для названия файла. Имя файла должно быть определено как текст между двойными кавычками. Обратите внимание, что текстовое строковое выражение не будет принято как имя файла в инструкции Print. Например, PowerEditor отобразит данную ошибку при оценке следующей инструкции:
Print (File (Value1), Date, Time, Close);
Имя файла должно быть текстом, включенным в двойные кавычки; например:
Print (File ("c:\tradestation\test.txt"), Date, Time, Close);


288 "A file or directory name must be <260 characters and may not contain "/:*?<> |"."

"Файл или имя директории должен быть <260 символов и не может содержать "/: *? <> | " " Некоторые команды, подобные инструкции Print() и FileAppend(), требуют имени файла. Имя файла должно быть длиной менее 260 символов и не может иметь ни одного из символов, перечисленных в метке ошибки. Например, данная ошибка будет отображена при записи:
Print(File( "c: \data?.txt" , Date, Time, Close);
так как символ '?' - недопустимый символ и не может использоваться как часть имени файла.


291 "The word 'OVER' or 'UNDER' expected here."

"Слово 'OVER' или 'UNDER' ожидается здесь" Эта ошибка отображается при использовании слова Cross без Over или Under при записи истинно-ложного выражения. Например, следующее выражение произведет данную ошибку:
Condition1 = Close Crosses Open;
Правильный синтаксис был бы:
Condition1 = Close Crosses Over Open;


292 "Two constants cannot cross over each other."

"Две константы не могут пересечь друг друга" PowerEditor отображает эту ошибку всякий раз, когда логические операторы Crosses Over или Crosses Under используются для сравнения двух констант. Так как они - константы, то они никогда не будут пересекать друг друга, и инструкция отобразит ошибку, как в:
Condition1 = 10 Crosses Over 15;


293 "This plot has been defined using a different name."

"Этот график был определен с использованием другого имени" Значение графику может быть назначено более чем один раз в пределах методики анализа, но на него нужно всегда ссылаться, используя то же самое название. Например, следующая инструкция вызовет данную ошибку:
Plot1 ( Volume, "Vol");
If Volume > 1000000 Then
Plot1 (Volume, "V", Red) ;
потому что графику было назначено второе имя "V". Правильный синтаксис этой инструкцию:
Plot1 (Volume, "Vol" );
If Volume > 1000000 Then
Plot1 (Volume, "Vol", Red);


295 "This plot name has never been defined."

"Эти графические имена никогда не определялись" Эта ошибка отображается всякий раз, когда присутствует ссылка на график с названием, отличным от ранее определенного, или на график, который не существует. Например, следующие инструкции вызовут эту ошибку:
Plot1 (High, "H");
Value1 = Plot1 + Plot2 ;
так как Plot2 не был определен. PowerEditor подсвечивает второй образец команды Plot, чтобы указать, где произошла ошибка .


296 "This plot has never been assigned a value."

"На этот график никогда не назначалось значение" Эта ошибка генерируется при обращении к значению графика, который не был предварительно определен в методике анализа. Например, следующие инструкции произведут данную ошибку:
Plot1 (Average (Close, 10));
If Plot1 Crosses Over Plot2 Then
Alert;
потому что Plot2 не был определен


297 "Server field name too long; cannot be more than 30 characters."

"Имя поля сервера слишком длинное; не может быть более чем 30 символов" Поля сервера данных могут быть длиной до 30. Данная ошибка будет сгенерирована всякий раз, когда используется поле сервера с названием, которое имеет больше чем 30 символов, .


298 "Strategy Information (for plots) function not allowed in a strategy."

"Функция информации стратегии (для графиков) не позволена в стратегии" Ни одно из слов "Информации Стратегии для графиков" не может использоваться в пределах стратегии. Эти слова разработаны, чтобы использоваться в других методиках анализа, чтобы обращаться к общим данным стратегии. Однако есть определенные слова, которые могут использоваться из стратегии для обращения к этим данным.
Эти слова:
I_AvgEntryPrice
I_ClosedEquity
I_CurrentContracts
I_MarketPosition
I_OpenEquity


299 "Strategy Information function not allowed in a study."
"Функция информации стратегии не позволена в изучении" Слова информации стратегии (другие, чем информация стратегии для графиков) могут использоваться только в торговых сигналах и функциях. Эти слова, которые перечислены в Словаре EasyLanguage в разделах Strategy Performance и Strategy Position, могут использоваться только при записи торговых сигналов и функций.


300 "This plot has been defined with a different type."

"Эти графики различных типов" Значение на график может быть назначено не один раз, но оно должно всегда иметь один и тот же самый тип. Графические инструкции могут отобразить числовые, истинно-ложные и строковые выражения, но они не могут изменить тип данных в пределах методики анализа. Например, следующая пара инструкций Plot не разрешена в методике анализа, потому что они включают различные типы данных, а именно: первый график - текстовая строка, а второй - истинно-ложное значение:
Plot1( "This is a text string");
If Condition1 Then
Plot1 (Conditionl);


302 "Different number of dimensions specified in the array than the parameter."

"Число измерений массива отлично от указанного параметра" Эту ошибку показывается, когда массив передают в функцию с неправильным числом измерений. Например, эта ошибка будет сгенерирована, если функция ожидает единственное измерение, а посылается массив с двумя измерениями.
303 "Extraneous text is not allowed after the array-type parameter"
"Посторонний текст не позволен после параметра типа массива" При передаче массива в функцию должно использоваться только название массива. Данная ошибка отображается всякий раз, когда любой текст, слова или фигурные скобки добавлены после названия массива, который передают к функции. Например:
Array: MyArray[10](0);
Value1 = Average_a(MyArray[0], 10);
знак [ будет подсвечен, потому что индекс массива появляется после имени массива. Правильный синтаксис был бы:
Array: MyArray[10](0);
Value1 = Average_a(MyArray, 10);


304 "Numeric-Array Parameter expected here."
"Параметр числового массива ожидается здесь" Функции могут получать массивы как параметры. Если функция ожидает массив, любой другой тип параметра (переменная, константа или зарезервированное слово) отобразят эту ошибку. В следующем примере:
Variable: MyVar(0);
Value1 = Average_a(MyVar, 10);
функция Average_a () требует массив, чтобы вычислить среднее число и отображает данную, потому что MyVar - не массив.
Вместо этого, Вы можете записать:
Array: MyArray[20] (0 );
Value1 = Average_a(MyArray, 10);


305 "TrueFalse-Array Parameter expected here."

"Параметр TrueFalse-массива ожидается здесь" Функции могут теперь получать массивы как параметры. Если функция ожидает истинно-ложный массив а, вместо этого, PowerEditor находит переменную, константу или другое зарезервированное слово (отличное от истинно-ложного массива), то он отображает эту ошибку. Например, функция MyTrueFalse_a(), которая правильно использует истинно-ложные массивы, была бы написана следующим образом:
Array: MyArray[20](False);
Variable: MyTF (False);
MyTF = MyTruefalse_a (MyArray, 10);


306 "String Array Parameter expected here."
"Параметр строкового массива ожидается здесь" Функции могут теперь получать массивы как параметры. Если функция ожидает массив текстовых строк а, вместо этого, PowerEditor находит переменную, константу или другое зарезервированное слово (отличное от массива текстовых строк), то он отобразит эту ошибку. Например, функция Average_a(), которая объединяет все текстовые строки, которые находятся в массиве, в один, должна использоваться следующим образом:
Array: MyArray[20](" ");
Variable: MyText(" ");
MyText = Average_a(MyArray, 10);


307 "The word 'Cancel' must be followed by 'Alert'."
"Слово ' Cancel 'должен сопровождаться словом 'Alert' " При отмене предварительно включенного (допущенного) предупреждения, должна использоваться инструкция Cancel Alert. Данная ошибка отображается при использовании слова Cancel без слова Alert.


308 "A data alias (POSITION) was expected here."
"Псевдоним данных (POSITION) ожидается здесь" При работе с методами анализа OptionStation и обращении к небольшому количеству данных или выражению, относящегося к позиции, необходимо определить, что эти данные относятся к позиции. Чтобы исправить данную ошибку, прибавьте спецификатор of Position к используемому выражению.


309 "This word not allowed in a Search Strategy."
"Это слово не позволено в Поиске стратегии" Слово, подсвеченное PowerEditor, не позволяется в Поиске стратегии. Слова, подобные Plot1, Buy, Sell и т.п., не разрешены в Поиске Стратегий.


310 "This word not allowed in a Pricing Model."
"Это слово не позволено в Ценовой Модели" Слово, подсвеченное PowerEditor, не позволяется в Ценовой Модели. Слова, подобные Plot1, Buy, Sell и т.п., не разрешены в Ценовых Моделях.


311 "The words 'Future' or 'Option' may not be numbered in a Pricing Model."

"Слово 'Future' или 'Option' не может употребляться в Ценовой Модели" Слова Future(n) и Option(n) не могут использоваться в Ценовой Модели. Эти слова могут использоваться во всех других OptionStation-связанных методиках анализа.


312 "This word not allowed in a Volatility Model."

"Это слово не позволено в Модели Волатильности" Слово, подсвеченное PowerEditor, не позволяется в Модели Волатильности. Слова, подобные Buy, Sell и т.п. не разрешены в Модели Волатильности.


313 "This word not allowed in a Bid/Ask Model."
"Это слово не позволено в Модели Bid/Ask" Слову, подсвеченному PowerEditor, не позволяется входить в Модель Bid/Ask. Слова, подобные Plot1, Buy, Sell и т.п., не разрешены в этой методике анализа.


314 "This word is only allowed in ActivityBar studies."

"Это слово позволено только в изучениях ActivityBar" Слова, которые используются, чтобы установить свойства и отобразить ActivityBars, разрешены только в ActivityBars и не позволяются ни в каком другом изучении или стратегии.


315 "This value can only be assigned in a Volatility Model."

"Это значение может быть назначено только в Модели Волатильности" Значение, подсвеченное PowerEditor, может быть назначено только в Модели Волатильности. Обычно это относится к волатильности. Например, назначение значения волатильности в модели bid-ask произведет эту ошибку.


316 "This value can only be assinged in a Bid/Ask Model."
"Это значение может быть назначено только в модели Bid/Ask" Значение, подсвеченное PowerEditor, может быть назначено только в модели Bid-Ask. Обычно это относится к смоделированному значению предложения или спроса. Например, назначение значения смоделированного предложения в Ценовой Модели произведет данную ошибку.

шибку.


317 "This value can only be assigned in a Pricing Model."

"Это значение может быть назначен только в Ценовой Модели" Значение, подсвеченное PowerEditor, может быть назначено только в Ценовой Модели. Обычно это относится к теоретической цене или любому из греков. Например, назначение значения delta в модели Волатильности произведет данную ошибку.


318 "A data alias (POSITION or MODELPOSITION) expected here"
"Псевдоним данных (POSITION или MODELPOSITION) ожидается здесь" При работе с методиками анализа OptionStation и обращении к небольшому количеству информации или выражению, относящемуся к позиции или смоделированной позиции, необходимо определить, что передаются данные от позиции или смоделированной позиции. Чтобы исправить эту ошибку, прибавьте спецификатор of Position или of ModelPosition к используемому выражению.


319 "A data alias (OPTION or LEG) expected here"

"Псевдоним данных (OPTION или LEG) ожидается здесь" При работе с методиками анализа OptionStation и с небольшим количеством данных, относящихся к опциону или элементу позиции, необходимо определить, к какому опциону или элементу Вы обращаетесь. Это делается добавлением спецификатора ofOption (n) или ofLeg (n) к выражению, подсвеченному PowerEditor.


320 "A data alias (ASSET or LEG) expected here"

"Псевдоним данных (ASSET или LEG) ожидается здесь" При работе с методиками анализа OptionStation и обращением к данным, необходимо определить то, к чему методика анализа обращается: актив или элемент позиции. Чтобы исправлять эту ошибку, добавьтесь спецификатор квалифицированный of Asset или of Leg() к используемому выражению.


321 "A data alias (OPTION) expected here"
"Псевдоним данных (OPTION) ожидается здесь" При работе с методиками анализа OptionStation и с небольшим количеством информации, относящейся к опциону, необходимо определить, к какому опциону или элементу Вы обращаетесь, прибавляя спецификатор ofOption (n) к выражению, подсвеченному PowerEditor.


322 "A data alias (ASSET) expected here"
"Псевдоним данных (ASSET), ожидается здесь" При работе с методиками анализа OptionStation и с небольшим количеством информации, относящей к основному активу, необходимо определенно заявить, что информация передана актива. Чтобы исправить эту ошибку, прибавьте спецификатор of Asset к подсвеченному выражению, когда отображается данная ошибка .


323 " ’Value-type inputs' may not be passed into 'reference-type inputs'."
" ’Константы типа значения’ нельзя передать в 'константы типа ссылки’ " Функции могут получить массивы и переменные параметры ссылкой или значением. Однако, если функция получает переменную или массив значением, то невозможно передать параметр для второй функции ссылкой. Если вход функции нужно передать другой функции, она должна также быть объявлена как вход ссылки.


324 "A data alias (LEG) expected here"
"Псевдоним данных (LEG) ожидается здесь" При работе с методиками анализа OptionStation и с небольшим количеством информации, относящей к определенному элементу, необходимо определить, какой элемент позиции должен использоваться. Чтобы исправлять данную ошибку, прибавьте спецификатор ofLeg (n) к подсвеченному выражению.


325 "Only an array, variable, or reference-input is allowed here"
"Только массив, переменная или константа ссылкой позволены здесь" Функции могут получать массивы как параметры. Если функция ожидает массив, любой другой тип параметра (переменная, константа или зарезервированное слово) отобразят данную ошибку. В следующем примере:
Variable: MyVar(0);
Value1 = Average_a(MyVar, 10);
функция Average_a() требует массив, чтобы вычислить среднее число и отображает эту ошибку, потому что MyVar - не массив.
Вместо этого, Вы можете записать:
Array: MyArray[20](0);
Value1 = Average_a(MyArray, 10);


340 "This word is only allowed when defining array-type inputs."

"Это слово позволено только при определении входа типа массив" Эта ошибка отображается при создании входа функции с использованием любого типа входа (типа NumericArray, NumericArrayref), полностью не квалифицируя вход фигурными скобками. Например, следующее выражение создает ошибку:
Input: MyInput(StringArrayRef);
потому что это не включает параметр размерности массива в скобки после названия массива. Правильный синтаксис был бы:
Input: MyInput[n] (StringArrayRef);


341 "An array input word (NUMERICARRAY, STRINGARRAY, TRUEFALSEARRAY, NUMERICARRAYREF, STRINGARRAYREF, TRUEFALSEARRAYREF) was expected here."

"Слово входа массива (NUMERICARRAY, STRINGARRAY, TRUEFALSEARRAY, NUMERICARRAYREF, STRINGARRAYREF, TRUEFALSEARRAYREF) ожидается здесь" Когда объявляются входы, которые предназначены, чтобы получить массив, ожидается одно из вышеупомянутых слов как тип входа. Например, данная ошибка будет отображена при объявлении входа для функции, при использовании следующей инструкции:
Input: MyArray[M,N] (Numeric);
так как зарезервированное слово Numeric недопустимо для того, чтобы объявить массивы. Однако, следующее выражение будет проверено успешно:
Input: MyArray[M,N](NumericArray);


342 "This word can only be used in a PaintBar study."
"Это слово может использоваться только в изучении PaintBar" Эта ошибка происходит, когда Вы используете зарезервированное слово PlotPaintBar при записи чего-нибудь другого, но не изучения PaintBar.


396 "This statement cannot specify an odd number of plots."
"Эта инструкция не может определить нечетное число графиков" Эта ошибка отображается при использовании инструкции PlotPaintBar и определении нечетного числа графиков. Есть два возможных использования для этой инструкции: определить только максимальное и минимальное значения, или определить маркеры high, low, open и close . Правильный синтаксис для инструкции PlotPaintBar::
PlotPaintBar(High, Low, "PB");
или
PlotPaintBar(High, Low, Open, Close, "PB");


403 "Cannot implicitly convert String to Numerical"
"Невозможно неявно конвертировать Строку в Число" Всякий раз, когда PowerEditor ожидает числовое выражение, а, вместо этого, находит текстовое строковое выражение, он подсветит текстовое строковое выражение и отобразит данное сообщение.
Например, следующая инструкция произведет эту ошибку:
Variable: MyNumber("55");
Value1 = Close +MyNumber;
Вместо этого, следующее выражение достигает ожидаемого результата, потому что оно сначала использует ключевое слово StrToNum(), чтобы конвертировать текстовое строковое выражение к числовому значению:
Variable: MyNumber("55");
Value1 = Close + StrToNum (MyNumber);


404 "Cannot implicitly convert String to TrueFalse"

"Невозможно неявно конвертировать Строку в TrueFalse" Всякий раз, когда PowerEditor ожидает истинно-ложное выражение и, вместо этого, находит текстовое строковое выражение, он подсветит текстовое строковое выражение и отобразит данное сообщение.
Например, следующая инструкция произведет ошибку:
Input: ("Yes"), Text2("No");
Condition1 = ;
потому что константа " " был объявлена как текстовое значение и не может быть назначена на истинно-ложную переменную Condition1. Вместо этого, следующая инструкция правильна:
Input: ("Yes"), Text2("No");
Condition1 = ( = Text2);
Обратите внимание, что в то время, как и и Text2 - строковые значения, результат сравнения - истинно-ложное значение, которое должным образом назначено на истинно-ложную переменную.


405 "Cannot implicitly convert TrueFalse to String"

"Невозможно неявно конвертировать True/False в Строку" Всякий раз, когда PowerEditor ожидает текстовое строковое выражение и, вместо этого, находит истинно-ложное выражение, он подсветит истинно-ложное выражение и отобразит это сообщение. В следующем примере, Condition1 - истинно-ложная переменная и не может быть непосредственно объединена со строкой:
FileAppend ("Output.txt", "This is a text string" + Condition1);
Вместо этого, следующее выражение исправляет проблему, создавая строковое значение, основанное на том, является ли Condition1 истинным или ложным:
Variable: txt(" ");
If Condition1 Then
txt = "true"
Else
txt = "false";
FileAppend("Output.txt", "This is a text string" + txt);


406 "Cannot implicitly convert Numerical to String"

"Невозможно неявно конвертировать Число в Строку" Всякий раз, когда PowerEditor ожидает текстовое строковое выражение и, вместо этого, находит числовое выражение, он подсветит числовое выражение и отобразит это сообщение.
Например:
FileAppend ("Output.txt", "This is text" + Value1);
отображает ошибку, когда найдено числовое выражение. Вместо этого, следующее выражение достигнет ожидаемых результатов, потому что оно использует ключевое слово NumToString(), чтобы конвертировать числовое выражение в строковое:
FileAppend ("Output.txt", "This is text" + NumoStr (Value1, 2));


407 "Cannot implicitly convert TrueFalse to Numerical"

"Невозможно неявно конвертировать TrueFalse в Число" Всякий раз, когда PowerEditor ожидает числовое значение и, вместо этого, находит истинно-ложное выражение, он подсветит выражение и отобразит это сообщение.
Например, следующая инструкция произведет эту ошибку, потому что значение Condition1 - истинно-ложная переменная и не может быть назначено на числовую переменную Value1:
Value1 = Condition1;


408 "Cannot implicitly convert Numerical to TrueFalse"

"Невозможно неявно конвертировать Число в TrueFalse" Всякий раз, когда PowerEditor ожидает выражение true/false и, вместо этого, находит числовое выражение, он подсветит числовое выражение и отобразит это сообщение. Например, следующая инструкция производит ошибку, потому что зарезервированное слово Open - числовое значение, а не выражение true/false:
Condition1 = Open ;
Вместо этого, назначьте числовое значение Open на числовую переменную Value1:
Value1 = Open ;
Или, замените инструкцию, например:
Condition1 = Open > Close;
Обратите внимание, что, в то время как и Open и Close - числовые значения, результат сравнения - истинное/ложное значение, которое должным образом назначено на истинную/ложную переменную.


409 "String expression expected here"

"Строковое выражение ожидается здесь" Эта ошибка отображается всякий раз, когда PowerEditor ожидает строковое выражение и, вместо этого, это находит числовое или истинно-ложное выражение. Например, эта ошибка будет отображена при записи информации в файл с инструкцией FileAppend:
FileAppend ("file.txt", Value1);
потому что включает числовое выражение Value1 вместо текстовой строки. Числовые выражения могут быть преобразованными в строковые с использованием ключевого слова NumToStr(). Например:
FileAppend ("file.txt", NumToStr (Value1, 2));


569 "Buy or Sell name within double quotes expected here."

"Имена Buy или Sell в пределах двойных кавычек ожидаются здесь" При определении названия торгового сигнала, может использоваться только буквальная текстовая строка, и ее нельзя заменить переменной или константой. Следующие инструкции генерируют данную ошибку:
Variable: txt("MySignal");
Buy(txt) Next Bar at Market;
в то время как правильный способ назначить название сигнала состоит в том, чтобы использовать буквальную строку, типа:
Buy("Signal Name") Next Bar at Market;

EasyLanguage - Приложение B - Цвета, размеры и коды

Цвета При работе с методиками анализа или текстовым объектом с использованием цвета, Вы можете определить любой из нижеупомянутых (включая-1) 17 цветов, используя название, слово EasyLanguage или числовой эквивалент:

Размеры Вы можете определить толщину графика в EasyLanguage, используя числовое значение от 0 до 6, где 0 представляет самую тонкую линию, а 6 самую толстую. Также Вы можете использовать -1, чтобы методика анализа использовала значение, указанное на вкладке Properties диалогового окна Format. Коды Ошибок, возвращаемые Trendline и Текстовыми Объектами
Когда операция с текстом или trendline была успешна, то возвращается ноль (0).

EasyLanguage - Приложение С - Список зарезервированных слов

Список зарезервированных слов Список зарезервированных слов с примерами использования: