Учебник по языку программирования EasyLanguage для Omega Research Prosuite
Эта книга - полный справочник для EasyLanguage. В ней подробно объясняются возможности языка и его структура с использованием примеров для иллюстрации концепций и синтаксиса.
Эта книга охватывает главные базисные элементы EasyLanguage для приложений Omega Research Prosuite - TradeStation, RadarScreen, и OptionStation.
Эта книга раскрывает концепции EasyLanguage в контексте приложений, но не обеспечивает процедурную информацию относительно использования EasyLanguage PowerEditor или приложений TradeStation. Все процедурные команды описаны в Интерактивном Пользовательском Руководстве.
Приложения в конце книги содержат два полезных справочника: справочник зарезервированных слов и синтаксические ошибки EasyLanguage. Справочник зарезервированных слов представляет собой полный список зарезервированных слов EasyLanguage, перечисленных в алфавитном порядке. Список синтаксических ошибок - полный список синтаксических ошибок, генерируемых PowerEditor, перечисленных в соответствии с номером ошибки. Этот справочник будет полезен Вам при улаживании конфликтов 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.
Buy 100 Shares on the Next Bar at 100 Stop;
Зарезервированные слова Основной словарь EasyLanguage состоит из набора предопределенных слов, которые мы называем зарезервированными словами. Каждое из зарезервированных слов имеет определенное значение или цель; например, отобразить значения или создать объекты в окне, исполнить торговое действие или оценить и управлять данными. При прохождении каждой темы мы будем вводить и описывать зарезервированные слова, необходимые для практического использования EasyLanguage. Операторы Операторы - символы, которые представляют операцию. Например, знак "плюс" - оператор, представляющий суммирование двух значений. Есть много различных видов операторов, доступных для использования в EasyLanguage: математических, относительных, строковых и логических. Они описаны подробно в, "Выражения и Операторы, " на странице 12. Знаки препинания Есть множество знаков препинания, которые Вы будете часто использовать в записях EasyLanguage для обработки инструкции, определения параметров, разграничения слов и установления структурного порядка. Например, EasyLanguage использует точку с запятой (;) для того, чтобы отмечать окончание каждой инструкции. Знаки препинания считаются зарезервированными словами, потому что они - часть структуры языка. Следующие знаки препинания применяются в EasyLanguage:


If the Close > High of 1 Bar Ago Then Buy at Market;
Эта простая инструкция дает команду EasyLanguage сравнивать цену закрытия одного бара с максимальной ценой предыдущего, и генерировать ордер на покупку на открытии следующего бара, когда закрытие больше предшествующий максимум. Это сравнение производится по цене закрытия каждого текущего бара на диаграмме каждый раз по отношению к максимальной цене предыдущего бара. Предположим, что Вы включили вышеупомянутый торговый сигнал в торговую стратегию, которую Вы применили к диаграмме. Даже притом, что ваша торговая стратегия применена к диаграмме, заполненной многими различными барами, информация, которая оценивается для каждого бара - всегда одна и та же (то есть, цена закрытия, объем, максимальная цена, и т.д.). Помните, диаграмма - визуальное представление некоторого периода торговли в хронологическом порядке, где индивидуальные бары представляют дискретные интервалы торговли. Чтобы оценить диаграмму, EasyLanguage просчитывает ценовые данные в направлении от самого первого бара в диаграмме к самому последнему бару на диаграмме. В терминах вашего торгового сигнала, методики анализа, или функции, оцениваемый бар рассматривается (считается) текущим баром (таким образом, в некоторый момент, каждый бар на диаграмме является текущим баром). Инструкции EasyLanguage в вашей процедуре всегда рассчитываются относительно текущего бара. Допустим, что на диаграмме один бар и нет никаких предыдущих баров, так что вычисление в примере выше не может быть выполнено. Таким образом, торговая стратегия должна была бы ждать до второго бара диаграммы, чтобы корректно исполнить вычисление. Это называют "максимальным количеством баров, необходимых для вычислений" или MaxBarsBack. Это понятие подробно обсуждено на странице 18. Когда все вычисления по вашей инструкции сделаны для текущего бара, EasyLanguage выполняет один шаг вперед к следующему бару на диаграмме, делая это бар текущим, и снова выполняет на нем все вычисления по вашей инструкции. Как правило, торговый сигнал, методика анализа или функция включают множество команд, каждая из которых может привести к активному действию; например, индикатор отобразит некоторое значение, и торговый сигнал сгенерирует ордер на покупку или продажу. Как только все команды EasyLanguage обработаны для текущего бара, читаются ценовые данные следующего бара, и все команды выполняются на основании новых цен. Это происходит вдоль диаграммы слева направо, пока все бары диаграммы не просчитаны и проанализированы.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 в одно. Есть два логических оператора:

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. Поэтому, чтобы записать торговый сигнал, метод анализа или функцию максимально эффективно, размещают в выражении вначале критерий, накладывающий наибольшие ограничения на выражение.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.
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;
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, потому что там может и не быть исторических данных, сохраненных для переменной, или храниться не столько данных, сколько желательно сторонним разработчикам. В этом случае Вы можете принудительно объявить переменную как переменную ряда, ссылаясь на предыдущее значение переменной в торговом сигнале, методике анализа или функции (то есть, используя 'фиктивную' инструкцию). Или, Вы можете хотеть рассмотреть работу с функциями; Вы можете вынудить функцию быть функцией ряда. См. раздел настоящей главы, "Понимание Пользовательских Функций"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);
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 с ElseIf Condition1 Then Begin {EasyLanguage instruction}; End Else {EasyLanguage instruction};
2. Блочная IF-THEN с Блочным ElseIf Condition1 Then Begin {EasyLanguage instruction(s)}; End Else Begin {EasyLanguage instruction(s)}; End;
3. IF-THEN с Блочным ElseIf 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.
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;


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 для получения дополнительной информации.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. Этот выбор отображает поток данных, к которому индикатор в настоящее время применен.
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.
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);
Ниже - таблица, которая показывает первые восемь баров диаграммы.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.
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 изменяется (в этом случае значение добавляется к массиву и сортируется по "пузырьковой" методике).
Commentary ("This is commentary "); Commentary ("written in one line");
Commentary("The 10-bar avg of the close", NewLine); Commentary("is:", Average (Close, 10));
Также, Вы можете создать связи в вашем тексте Commentary с Windows Media Player (чтобы запустить аудио клип) и к определениям Интерактивное Пользовательское Руководство. Связи - это слова в вашем Комментарии, которые появляются в отличном (от других) цвете и если произвести клик, то запускается аудио клип или появится указанное определение Интерактивного Пользовательского Руководства. Эти слова упоминаются как слова перехода. Чтобы создать слово перехода, которое запускает музыкальный (.WAV) файл, включают полное имя и путь к звуковому файлу, используя следующий синтаксис: \wbCommentary ("This links to a file: \wbc:\ding.wav\we");
Чтобы создать слово перехода, которое открывает существующее определение Интерактивного Пользовательского Руководства, включают слово, используя следующий синтаксис: \pbCommentaryCL ("The close of today is:", Close); CommentaryCL ("The 10-day average of the close is:"); Average (Close,10));

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("
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("
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, который конвертирует числа в текстовые строковые выражения.

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:
Value1 = Text_GetFirst(1); Value2 = Text_Delete (Value1);
Обратите внимание: Когда самый старый (первый) текстовый объект удален, следующий самый старый (второй) текстовый объект становится первым, прорисованным на ценовой диаграмме, и так далее. Text_GetHStyle Текстовый объект всегда прикрепляется к определенному бару. Из-за этого есть три возможных пути горизонтально выровнять текстовый объект: налево от бара, к которому он прикреплен, направо, или центрировано. Это зарезервированное слово возвращает числовое значение, указывающее горизонтальное выравнивание текстового объекта. Синтаксис:Value1 = Text_GetHStyle(Text_ID)
Параметры: Text_ID - числовое выражение, представляющее номер ID текстового объекта, значение горизонтальное выравнивания которого Вы хотите получить. Примечания: Value1 - любая числовая переменная или массив, который содержит информацию о горизонтальном выравнивании рассматриваемого текстового объекта. Зарезервированное слово может возвратить одно из этих трех значений:
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:
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 может быть любая числовая переменная или массив, содержит ценовое значение, в котором указанный объект прикреплен. Это зарезервированное слово возвращает одно из трех значений:
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 - числовые выражения, представляющие горизонтальное и вертикальное выравнивание текстового объекта, соответственно.
Value1 = Text_SetStyle(3, 1, 1) ;

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. Это зарезервированное слово возвращает одно из этих трех значений:
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:
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:
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. Ниже - возможные возвращаемые значения и их числовые эквиваленты:
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. Вы можете определить одно из этих трех значений:
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. Возможные стили:
Value1 = TL_SetStyle (10, Tool_dotted);


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.Buy 100 Shares Next Bar at Market;
Инструкции, используемые в создаваемом Торговом Сигнале, имеют две части, по своей структуре похожие на язык, который Вы используете, чтобы связаться с вашим брокером. Первая часть инструкции - торговый ордер, который является описанием действия, которое Вы хотите исполнить; например, купить 100 акций. Вторая часть инструкции - метод выполнения, который точно объясняет как (когда и по какой цене) ордер должен быть выполнен; например, на следующем баре по рынку. Есть четыре зарезервированных слова, которые Вы можете использовать, чтобы выразить ваши торговые идеи при записи Торговых Сигналов. Обращаем Ваше внимание на эти слова как торговля приказы, и они:









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.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:
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
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) показывают, сколько акций в вашей текущей позиции.


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:
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;
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 не используются, то стоп оценивается на основании позиции.

PlotN(Expression, "
PlotN(Expression [,"
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) о доступности вашего индикатора. Под доступным мы подразумеваем, что индикатор будет в библиотеке индикаторов, когда Вы выбираете индикатор для вставки в приложение. Для получения информации относительно определения приложений, для которых ваш индикатор является доступным, обратитесь к Интерактивному Руководству Пользователя
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 [,"
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.
NoPlot (Num)
Параметры: Num - числовое выражение, представляющее номер графика для удаления. Примечания: Это зарезервированное слово полезно при обработке данных, получаемых в реальном масштабе времени/отсроченном, и если Вы выбрали флажок Update Every Tick для изучения PaintBar. Если условие PaintBar становится истинным в течение бара, но не верно в конце бара, то график удаляется из этого бара. Если Вы не используете это зарезервированное слово и бар был окрашен, когда условие стало истинным, то он остается окрашенным, даже когда условие становится ложным. Пример: Следующее изучение PaintBar окрашивает бары, цена закрытия которых меньше среднего значения за 10 предыдущих периодов, но удаляет график из текущего бара, если это условие больше не истинно:
If Close < Average (Close, 10) Then
PlotPaintBar (High, Low, "Price



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);
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);

PlotN (Expression [,"
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);


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;

PlotNum( Expression [, "
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);



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 - Нормальное Стандартное Кумулятивное вычисление Плотности (напряженности, концентрации).CreateLeg(Contracts, LegType)
Параметры: Contracts - количество контрактов LegType - Call, Put или AssetType. Примечания: Contracts - количество контрактов (или акций), с которым этот элемент будет создан. Если используется положительное количество, то элемент купит указанное количество контрактов; если используется отрицательное количество, то элемент продаст (или запишет) указанное количество контрактов. LegType может быть Call, Put или AssetType, и определяет какой инструмент использовать для определенного элемента. Call и Put очевидны; AssetType определяет использование акций/контрактов основного актива. Рисунок 5-9. Показана таблица с комбинацией возможных альтернатив при работе с зарезервированным словом CreateLeg:
CreateLeg (1, Call); Condition1 = (Strike of leg(1) < Close of asset); PositionStatus (Condition1);


PlotNum(Expression[,"
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".

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;
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: Фундаментальные типы данных:

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 из этой папкой, чтобы установить документацию.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);
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;
