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

Учебник по языку программирования Easy Language
Управляющие структуры EasyLanguage

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

В EasyLanguage, три основных управляющих структуры:

  • IF-THEN statement
  • While loop
  • For loop

    Каждая из них описана ниже.


    IF-THEN Инструкция

    Инструкция IF-THEN позволяет определять операции, которые будут исполнены только тогда, когда некоторое условие истинно.
    Синтаксис:

    If Condition1 Then
    
    {EasyLanguage instruction};
    

    Condition1 - любое выражение типа true/false, а {EasyLanguage instruction} - любая инструкция EasyLanguage.

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

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

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

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

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

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

    Если внешний бар найден, помещается специальная метка в области максимальной цены бара на графике.

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

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

    Инструкция Alert не включена как часть инструкции IF-THEN, и поэтому выполняется на каждом баре. Вы можете, однако, включить более чем одну инструкцию в инструкцию IF-THEN. Чтобы сделать так, используйте Блочную инструкцию IF-THEN.


    Блочная Инструкция IF-THEN

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

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

    Все инструкции в пределах блока Begin - End должны завершаться точкой с запятой. Вы можете вставить в пределах блока столько инструкций, сколько Вам необходимо.


    Инструкция IF-THEN Else

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

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

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

    Комбинирование Блочной IF-THEN и IF-THEN Else Инструкций

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

    1. Блочная IF-THEN с Else
      If Condition1 Then Begin
      
      {EasyLanguage instruction};
      
      End
      
      Else
      
      {EasyLanguage instruction};
      
    2. Блочная IF-THEN с Блочным Else
      If Condition1 Then Begin
      
      {EasyLanguage instruction(s)};
      
      End
      
      Else Begin
      
      {EasyLanguage instruction(s)};
      
      End;
      
    3. IF-THEN с Блочным Else
      If Condition1 Then
      
      {EasyLanguage instruction};
      
      Else Begin
      
      {EasyLanguage instruction(s)};
      
      End;
      

    Вложенные Инструкции IF-THEN

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

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

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

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

    Обратите внимание: чтобы вложить инструкцию IF-THEN, мы используем блок Begin - End.


    While Loop

    While loop (Цикл с условием продолжения) повторяет назначенные команды, пока выражение управления имеет значение "ИСТИННО". Когда рыночные условия изменяются, и выражение управления становятся Ложными - цикл завершается.

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


    Синтаксис:

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

    Condition1 - любое выражение true/false; называется выражением управления. {EasyLanguage instruction(s)} - любое количество правильных инструкций EasyLanguage.

    Например, следующий While loop используется, чтобы сосчитать количество баров, генерирующих суммарно объем в 1 000 000 акций:

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

    Сначала мы объявляем две переменные: SumVolume и Counter. Хотя мы инициализируем переменные с ноля (0) при их объявлении, мы также принудительно сбрасываем переменные, чтобы обнуление происходило на каждом новом цикле. Цикл заканчивается, как только назначенный суммарный объем будет достигнут, процедура перемещается в следующий бар, значения сбрасываются и цикл запускается снова.

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


    Бесконечные Циклы

    При использовании While loop есть вероятность, что выражение управления никогда не примет значение Ложь, приводя к бесконечному циклу (то есть, который никогда не заканчивается). Чтобы избежать этого, когда цикл выполняет итерации в течение более чем 5 секунд, TradeStation, генерирует ошибку выполнения программы и торговая стратегию или методика анализа выключается.

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

    Используя вышеупомянутый пример снова, мы изменим выражение управления так, чтобы оно вычислялось как False после рассмотрения 20 баров, таким образом принуждая цикл завершиться, или когда объем достигает целевого числа или когда 20 баров будут рассмотрены:

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


    For Loop

    Цикл For дает возможность Вам повторить команды указанное число раз.

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


    Синтаксис:

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

    Value1 - любая числовая переменная или несколько числовых выражений, а {EasyLanguage instruction(s)} - одна или более правильных инструкций EasyLanguage.

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

    Значение переменной управления установлено как N при первом вычислении инструкция, и затем это значение увеличивается или уменьшается автоматически на каждой итерации. Если слово To используется в синтаксисе, то переменная увеличивается на единицу на каждой итерации. Если используется слово Downto , то переменная уменьшается на каждой итерации.

    Внутри - выражение, которое вычисляется каждый раз при запуске цикла на выполнение, а именно: инструкция Value1 <= М, когда используется слово To, и Value1> =M, когда используется Downto . Поэтому, если цикл For увеличивает переменную управления и она становится больше чем М, команды в цикле не будут выполняться. Аналогично, если цикл уменьшает переменную управления и она меньше чем М, команды не выполняются.

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

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

    Value1 начнется с 1 для первой итерации, затем 2, 3, 4, и 5 и на шестой итерации цикл завершится, так как Value1 будет больше чем 5.

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

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

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

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

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

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




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




    На правах рекламы: