Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Labs_Metodi4ka.doc
Скачиваний:
10
Добавлен:
20.11.2018
Размер:
2.52 Mб
Скачать

Лабораторна робота №7

Тема.

ППС Trade Station : Написання та застосування індикаторів.

Мета.

Ознайомитись з ППС Trade Station, навчитись будувати власні індикатори за допомогою макромови EasyLanguage.

План.

    1. Ознайомитись з інтерфейсом ППС Trade Station

    2. Освоїти основні правила мови EasyLanguage

    3. Будувати індикатори і застосовувати їх на графіках

Теоретичні відомості

Нижче приведене написання процедури PLOT реалізує приклад індикатора, а саме обсяг.

PLOT1 ( Volume, “Vol” );

Також Ви можете задати вхідні параметри для індикатора, для цього необхідно натиснути кнопку Properties. На рисунку 1 представлене діалогове вікно Properties.

Рис.1. Діалогове вікно «Властивості індикатора»

Параметри, що ми встановлюємо будуть використовуватися за замовчуванням системою TradeStation, коли користувач буде створювати Ваш індикатор на графіку.

Коли відкривається діалогове вікно Properties Ви попадаєте в розділ Style. Для зміни параметрів виберіть той номер процедури PLOT, що Ви хотіли б змінити і потім встановіть необхідні тип лінії (Type), її колір (Color), стиль (Style) і товщину (Weight). Після цього Ви натискаєте кнопку OK або переходите в наступні розділи Scaling (вибір шкали) і Properties (властивості).

У розділі Scaling ми вибираємо шкалу і місце відображення індикатора. Screen означає побудова індикатора нижче самого графіка, а Same as Price Data на графіку (у цьому випадку числове значення індикатора повинне бути порівняне з ціновим значенням). На рисунку 2 представлена побудова двох індикаторів The Close і The Volume.

Рис. 2 Індикатори The Close і The Volume

Ми можемо також створювати індикатори, що обчислюються з декількох цінових значень і/чи простих чисел. Коли Ви дивилися структуру процедури PLOT, то бачили що перший параметр це «Числове значення». Воно може бути розраховане з декількох цінових значень. Наприклад, якщо ми хочемо побудувати індикатор, що обчислює «довжину тіла» періоду часу в Японських свічниках (CandleSticks), то «Числове значення» повинне виглядати в такий спосіб: Close – Open. Відповідно процедура, що обчислює і відображає цей індикатор на графіку буде виглядати в такий спосіб:

PLOT1 ( Close – Open, “LengthBody” );

Тому що в даному індикаторі результат буде виражений і позитивними і негативними значеннями, то було б непогано мати горизонтальну нульову лінію. Для цього ми просто додаємо ще одну процедуру PLOT у вихідний текст нашого індикатора:

PLOT1 ( Close – Open, “LengthBody” );

PLOT2 ( 0, “Doji” );

Ми маркірували створену лінію ім'ям “Doji”, тому що на графіку CandleStick вони означають, що Open і Close рівно, тобто результат дорівнює нулю. Результат роботи даного індикатора представлений на рисунку 3.

Рис. 3 Індикатор CandleSticks

Перед тим як перейти до написання Pivot (“Основний”) індикатора давайте розглянемо ще один приклад. Ми уже використовували дві ціни (Open, Close) з визначеного періоду часу (Bar) і потім розглянули методику аналізу, що використовує ці дві ціни використовуючи арифметичну операцію віднімання. На додаток до віднімання ми можемо використовувати додавання (+), множення (*) і розподіл (/) в обчисленні значення індикатора.

Оператор

Дія

*

Множення

/

Ділення

+

Додавання

-

Віднімання

Усякий раз коли Ви використовуєте оператори упевніться в тому, що правильно застосовуєте послідовність, у якій Easy Language виконує числові, реляційні і логічні порівняння.

Порядок дій

Круглі дужки

Множення / Ділення

Додавання / Віднімання

Реляційні оператори

І / АБО

Easy Language оцінює вираз зліва направо. Наприклад, ми хочемо побудувати індикатор, який би будував середнє значення за обрані проміжки часу. Процедура PLOT буде виглядати в такий спосіб:

PLOT1 ( ( High + Low ) / 2, “MidPrice” );

Цей вираз складає High і Low і потім результат ділиться на два.

Для того, чтоб цей індикатор був більш наочним ми в параметрах у становим Scaling у Same as Price Data. Результат побудови відображений на рисунку 4.

Рис. 4 Індикатор MidPrice

Побудова індикаторів

1) Pivot індикатор.

При розрахунку індикатора Pivot використовуються усереднені значення High, Low і Close за обраний проміжок часу, тобто сумуються ці три цінових значення, а потім діляться на три. Лінія, що виходить на графіку за цими значеннями і є наш індикатор.

Багато трейдерів обчислюють цей індикатор на обраному проміжку часу і використовують його як точний датчик обчислення кожної сесії. При торгівлі вище індикатора Pivot передбачається стійка сесія і навпаки.

Дотепер ми посилалися на поточні дані сьогодення періоду часу, але ми також можемо в розрахунку індикатора використовувати дані попередніх періодів часу.

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

Open [8];

Щоб написати індикатор, що обчислює в процентному відношенні зміну поточного періоду Close стосовно Close періоду рівному 10 необхідно процедуру PLOT написати в такий спосіб:

PLOT1 ( 100 * ( Close – Close [10] ) / Close [10], “%Change”);

На рисунку 5 зображений результат роботи цього індикатора.

Рис.5 Pivot індикатор

Наступний індикатор, названий Bands, будує дві лінії інтервалу навколо нашого графіка. Верхній і нижній інтервали базуються на поточному відрізку Open і попередньому відрізку High і Low. Вихідний код цього індикатора виглядає в такий спосіб:

PLOT1 ( Open + ( High [1] – Low [1] ) * 0.5, “HighBand”);

PLOT2 ( Open - ( High [1] – Low [1] ) * 0.5, “LowBand”);

Ви також можете відформатувати цей індикатор за допомогою Properties.

2) VolDirect індикатор.

Кожне значення, що буде складати цей індикатор є середньою зміною цін кожного періоду. Обсяг складає одну з частин інформації, що є доступною з кожного цінового періоду часу і зміна його може бути розрахована за допомогою вирахування Close поточного Bara з Close попереднього Bara.

Цей індикатор дає нам фігуру об”єму, що прораховується чистою зміною по кожному барі (закриття попереднього бара мінус закриття поточного бара = чиста зміна). Високий обсяг барів вказує на ріст ціни, негативний обсяг характерний для зниження ціни.

При обробці цього індикатора буде також корисно мати горизонтальну лінію на рівні 0.

Для реалізації індикатор VolDirect буде необхідна наявність двох процедур PLOT: одна для VolDirect, інша для нульової лінії.

При застосуванні цього індикатора до графіка Ви можете експериментувати з ним, змінюючи лінію на гістограму, що дозволяє іноді більш уважно спостерігати за індикатором.

Змінні роблять наші методи аналізу в Easy Language більш гнучкими. Змінній присвоюється ім'я, потім призначається визначена формула, що буде розраховувати значення для кожного бара. Змінні використовуються для того, щоб покращити “читаємість” програми, зменшити наявність помилок і загальну кількість рядків вихідного коду. Якщо ми призначили за змінною визначену формулу в одному індикаторі, то використовувати її в іншому індикаторі під цією формулою не вийде, тобто кожна змінна під своїм значенням може використовуватися тільки всередині індикатора.

Наприклад, давайте перепишемо індикатор MidPrice за допомогою змінних. Спочатку він виглядав так:

PLOT1 ( ( High + Low ) / 2, “MidPrice” );

Коли ми додамо змінну, то вихідний текст буде виглядати у такий спосіб:

Value1 = ( High + Low ) / 2;

PLOT1 ( Value1, “MidPrice”);

Тепер у будь-якім місці даної програми ми можемо використовувати цю змінну Value1. В імені змінної можуть бути присутнім символи буквені і чисельні. Для зручності використання змінних у програмі вони як правило називаються в такий спосіб Value1, ..., Value99.

Давайте ще як приклад визначимо перемінну в індикаторі Percent Change (PIVOT).

Value1 = 100 * ( Close – Close [10] ) / Close [10];

PLOT1 ( Value1, “%Change” );

3) RealBody індикатор.

Технічні аналитики, що використовують при аналізі японські свічки знають, що різниця між Close і Open є Реальним Тілом (RealBody). Якщо Close вище Open, то значення нашого індикатора буде позитивним, якщо Close нижче Open то навпаки – негативним. Цей індикатор дає нам розходження, розглядаючи ті самі розрахунки в створенні японських свічок.

При аналізі створюваного нами індикатора буде також корисно мати горизонтальну нульову лінію.

Замість того, щоб присвоювати ім'я Value нашим змінної, ми можемо давати їм будь-які імена, які ми хочемо. Щоб зробити це ми повинні спочатку оголосити ці назви в розділі опису змінних, а потім їх можна використовувати.

Наприклад перепишемо Bands індикатор за допомогою змінних. Нагадуємо його процедури:

PLOT1 ( Open + ( High [1] – Low [1] ) * 0.5, “HighBand”);

PLOT2 ( Open - ( High [1] – Low [1] ) * 0.5, “LowBand”);

Тепер, призначимо змінним HighBand і LowBand формули, що присутні в даному індикаторі:

HighBand = Open + ( High [1] – Low [1] ) * 0.5;

LowBand = Open - ( High [1] – Low [1] ) * 0.5;

PLOT1 ( HighBand, “HighBand );

PLOT2 ( LowBand, “LowBand );

Однак, у вищезгаданому твердженні PowerEditor не знає що таке слова HighBand і LowBand, отже ми повинні повідомити йому, що вони є змінними. Для цього необхідно використовувати слово Vars:

Vars: HighBand (0), LowBand (0);

HighBand = Open + ( High [1] – Low [1] ) * 0.5;

LowBand = Open - ( High [1] – Low [1] ) * 0.5;

PLOT1 ( HighBand, “HighBand );

PLOT2 ( LowBand, “LowBand );

Тепер PowerEditor знає, що слова HighBand і LowBand – змінні і їхнє початкове значення дорівнює 0. Але як тільки ми присвоюємо нові значення, то за словами HighBand і LowBand будуть стояти не нулі, а розрахунок наших функцій. Змінні Value1…Value99, які ми використовували раніше вже описані в PowerEditor як змінні і їхнє початкове значення дорівнює 0.

4) Перезапис VolDirect індикатора.

Давайте перепишемо один з наших індикаторів, що ми назвали VolDirect індикатор. У цьому процесі ми залишимо всі значення, що є присутнім у розрахунку цього індикатора, але введемо змінну VolDir і призначимо їй формулу.

Давайте напишемо інший індикатор і назвемо його Vol&Average (об’єм і ковзна середня об’єму). Для цього необхідно розрахувати середнє число останніх, наприклад, 10 барів, тобто скласти 10 останніх об’ємів і розділити на 10 (а якщо 20, 30 і т.д.).

Однак для зручності PowerEditor обладнаний Function Wizard, що містить сотні функцій, що Ви можете використовувати. Ці функції виконують які-небудь стандартні обчислення. Так, наприклад, у Function Wizard є функція Average, що вважає середнє значення за обраний проміжок часу, тобто, у нашому випадку для того, щоб не писати довгий рядок формули обчислення середнього значення обсягу достатньо використовувати дану функцію.

Для того, щоб додати функцію необхідно стати курсором на місце, де повинна бути розташовані функція і натиснути кнопку Function Wizard. Після цього Ви попадаєте в однойменне меню (Рис. 6), де і вибираєте необхідну функцію. Після вибору функції необхідно натиснути на кнопку Paste і функція розміститься в тому місці, де Ви вибрали.

Рис. 6 Діалогове вікно Function Wizard

Після додавання функції індикатор повинний виглядати в такий спосіб:

Vars: AvgVol (0);

AvgVol = Average ( Volume, 10 );

PLOT1 ( Volume, “Vol”);

PLOT2 ( AvgVol, “ AvgVol ”);

На Рис.7 видний результат роботи даного індикатора (помітьте, що Volume зображено гістограмою).

Рис.7 VolDirect індикатор

Використання функцій дає нам можливість включати загальновідомі і складні обчислення в наші методи аналізу. Давайте напишемо ще один індикатор, використовуючи функції. Цей індикатор буде складатись з двох ліній: одна є найвищою серед High за період рівний 5, а інша найнижчою серед Low за період рівний 5.

Vars: HighLine (0), LowLine (0);

HighLine = Highest ( High, 5 ) [1];

LowLine = Lowest ( Low, 5 ) [1];

PLOT1 ( HighLine, “5BarHigh” );

PLOT2 ( LowLine, “5BarLow” );

Якщо Ви помітили, наприкінці кожної функції стоять 1 у квадратних дужках. Це викликано тим, що функції Highest і Lowest розраховують значення за останні 5 періодів, включаючи поточний. Для торговців як правило поточний момент не цікавий, а необхідний розрахунок п'яти періодів починаючи з попереднього значення. У квадратних дужках ми вказуємо через яку кількість значень починати звіт періодів розрахунку функції.

На рис. 8 зображений результат роботи даного індикатора (помітьте, що індикатор повинний бути розташований на графіку).

Рис. 8 Результат роботи індикатора VolDirect

5) ADX Average індикатор.

Технічні аналитики використовують ADX, щоб виміряти якість чи сталість тенденції. Усереднене значення ADX може далі вирівнювати зображення, що цей індикатор малює.

PowerEditor містить функції для ADX і для усередненого значення (Average). Вони можуть друкуватися безпосередньо в PowerEditor при написанні індикатора або їх можна вставити, використовуючи Function Wizard.

При аналізі індикаторів буде також корисно мати дві горизонтальні лінії зі значеннями 20 і 40.

Давайте розглянемо ще один елемент, використовуваний у EasyLanguage, називаний константа (input). За ім'ям константи закріплюється визначене значення, що надалі використовується. Використання констант дозволяє нам змінювати їхнє значення в процесі форматування роботи індикатора, а також у процесі оптимізації торгових систем.

Для того, щоб розглянути на практиці використання констант давайте перепишемо індикатор HighLowPlot ще раз:

Input: XBars (5);

Vars: HighLine (0), LowLine (0);

HighLine = Highest ( High, XBars ) [1];

LowLine = Lowest ( Low, XBars ) [1];

PLOT1 ( HighLine, “5BarHigh” );

PLOT2 ( LowLine, “5BarLow” );

Як видно в цьому прикладі ми ввели нову константу, названу XBars, і спочатку присвоїли їй значення рівне 5. Константа використовувалася функціями Highest і Lowest, а значить надалі, якщо необхідно поміняти період розрахунку цих функцій, досить один раз поміняти значення константи (у вихідному тексті або при побудові індикатора в TradeStation) замість того, щоб змінювати значення в кожній функції і причому обов'язково в PowerEditor.

Давайте напишемо ще один індикатор, що буде малювати двох ліній – одну швидку ковзну середню, а іншу – повільну. Назвемо індикатор 2LineMA.

Input: FastLen (9), SlowLen (18);

Vars: FastMA (0), SlowMA (0);

SlowMA = Average ( Close, SlowLen );

FastMA = Average ( Close, FastLen );

PLOT1 ( SlowMA, “SlowMA” );

PLOT2 ( FastMA, “FastMA” );

Необхідно також змінити настройки й установити масштаб у Same as price data.

На Рис. 9 представлене вікно Format Indicator у який користувач може змінювати значення констант FastLen і SlowLen.

Рис. 9 Вікно Format Indicator

На рис. 10 представлений результат роботи індикатора з обраними значеннями констант.

Рис. 10 ADX Average індикатор

Перепишемо також ще Vol&Average індикатор:

Input: Length (10);

Vars: AvgVol (0);

AvgVol = Average ( Volume, Length );

PLOT1 ( Volume, “Vol”);

PLOT2 ( AvgVol, “ AvgVol ”);

6) MovAvg&Bands індикатор.

Одні з найбільш корисних можливостей TradeStation – здатність сигналізувати, у випадку коли деякі критерії виконані, наприклад, коли ціни рухаються вище чи нижче рівня, що ми визначили. Ми можемо писати умови в PowerEditor, при яких система буде подавати сигнали. Щоб писати умови для сигналів ми повинні використовувати інше твердження (процедуру):

IF Істина/Неправда THEN Дія

При роботі цієї процедури, якщо вираз, що стоїть між IF і THEN істина, то виконується Дія, що стоїть після THEN. У цій процедурі ми можемо порівнювати числа. Щоб виконувати порівняння ми повинні використовувати спеціальні оператори, називані реляційними операторами. Вони представлені в цій таблиці:

Реляційний оператор

Виконуване порівняння

>

Більше

<

Менше

=

Дорівнює

<>

Не дорівнює

>=

Більше чи дорівнює

<=

Менше чи дорівнює

Crosses over (above)

Більше чим поточний бар, але менше чи дорівнює попередньому

Crosses under (below)

Менше ніж поточний бар, але більше чи дорівнює попередньому

Давайте використовуємо сигнальне твердження в індикаторі, котрий ми вже написали (Vol&Average):

Input: Length (10);

Vars: AvgVol (0);

AvgVol = Average ( Volume, Length );

PLOT1 ( Volume, “Vol”);

PLOT2 ( AvgVol, “ AvgVol ”);

IF Volume > AvgVol THEN

Alert = True

Не забудьте, що сигнали можуть використовувати тільки в останньому барі.

Напишемо ще один індикатор – NCO (Net Change Oscillator). Ми порівняємо поточне значення Close з Close декількома періодами назад. Також будемо використовувати константи, для того, щоб мати можливість їхній змінювати в TradeStation.

Input: NCOLen (10);

Vars: NCO (0);

NCO = Close – Close [NCOLen];

PLOT1 ( NCO, “NetChangeOsc” );

PLOT2 ( 0, “Zero” );

IF NCO crosses over 0 or NCO crosses under 0 THEN

Alert = True;

Помітьте, що ми використовували слово OR у процедурі IF-THEN. Це означає, що якщо будь-яка частина вираження буде істина, те і усе вираження є щирим.

На Рис. 11 зображене вікно Format Indicator і те місце де необхідне ініціалізувати написаний сигнал (alert).

Рис. 11 Format Indicator

На Рис. 12 зображений результат роботи індикатора NCO.

Рис.12 Результат роботи індикатора NCO

ХІД РОБОТИ:

1. RealBody індикатор. Створіть індикатор, який буде складатись з двох ліній: одна є найвищою серед High за період рівний 7, а інша найнижчою серед Low за період рівний 7.

Лістинг та результати роботи дослідження занесіть у звіт.

2. ADX Average індикатор. Створіть індикатор, що малює ADX 14 барів і ковзну середню 10 періодів цього ADX. Оголосіть і призначте змінні для обох функцій.

Лістинг та результати роботи дослідження занесіть у звіт.

3. MovAvg&Bands індикатор. Створіть індикатор, що містить 3 графіка: ковзна середня, ковзна середня плюс одне середньоквадратичне відхилення і ковзна середня мінус одне середньоквадратичне відхилення. У розрахунку ковзної середньої використовуйте період рівний 18. Цей індикатор буде показувати цінові канали на графіку.

Лістинг та результати роботи дослідження занесіть у звіт.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]