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

4. Envelope індикатор.

Створіть індикатор, що малює ковзну 9 барів High і ковзну 9 барів Low. Використовуйте константу для визначення кількості барів, що будуть використовуватися при розрахунку ковзних. Напишіть сигнальні критерії так, щоб вони реагували коли Close вище чим ковзна High чи нижче чим ковзна Low.

Цей індикатор буде виглядати як ціновий канал на графіку. Не забудьте в Properties установити Enable Alert для того, щоб Ваш сигнал працював.

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

Контрольні запитання:

  1. За допомогою якої функції побудувати графік?

  2. Як визначити властивості індикатора?

  3. Які арифметичні дії використовуються при написанні індикаторів?

  4. Яким чином можна мати доступ до даних з попереднього періоду?

  5. Як і для чого використовуються змінні в мові EasyLanguage?

  6. Які категорії функцій ви знаєте в EasyLanguage?

  7. Яким чином додати функцію до формули?

  8. Як використовуються константи при побудові індикатора? ЯК встановити їх значення?

  9. Як застосовуються сигнали? Які умови їх спрацювання

  10. Які реляційні оператори ви знаєте?

ЛАБОРАТОРНА РОБОТА № 8

Тема.

Написання ShowMe і PaintBar досліджень та торгових систем

Мета.

Навчитись проводити ShowMe і PaintBar дослідження та тестування торгових систем.

План.

  1. Побудувати ShowMe і PaintBar дослідження

  2. Побудувати торгівельну систему

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

Написання ShowMe і PaintBar досліджень.

ShowMe дослідження використовуються, щоб розмістити знаки тільки в ті елементи bars у графічному вікні, що виконують визначені умови. Інструкції EasyLanguage для TradeStation роблять пошук деяких критеріїв, типу простих цінових чи зв'язків більш складних критеріїв, і поміщають знак у ті елементи bars, на яких критерії є істинними. Іншими словами, якщо який-небудь вираз на досліджуваному барі є щирим, то на цей бар розміщається знак ShowMe.

При написанні ShowMe досліджень ми будемо використовувати процедуру IF-THEN. Згадаємо синтаксис написання процедури:

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

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

Давайте напишемо приклад, що реалізує ShowMe дослідження, що назвемо 3UpCloses. Дослідження буде відслідковувати третє послідовне закриття (Close).

If Close > Close [1] and Close [1] > Close [2] and Close [2] > Close [3]

Then Plot1 ( High, “3UpCloses” );

Як видно з тіла процедури IF-THEN для реалізації Plot необхідно, щоб усі три вираження були істинними. Якщо усі вираження істинні, то процедура Plot розміщає знак у значення High.

Ми можемо також додати сигнальні критерії до ShowMe дослідження. У даному випадку це б виглядало так: система давала би сигнал, коли третє значення Close було послідовно вище, ніж два попередніх.

Коли ми хочемо писати більш ніж одну Дію в тілі процедури IF-THEN необхідне застосування блокової структури типу Begin-End. У даному випадку синтаксис буде наступний:

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

Begin

Дія;

Дія;

End;

У випадку написання 3UpCloses ShowMe дослідження ця конструкція виглядає в такий спосіб:

If Close > Close [1] and Close [1] > Close [2] and Close [2] > Close [3]

Then

Begin

Plot1 ( High, “3UpCloses” );

Alert = True;

End;

Між словами Begin і End можна вставити необмежену кількість різних дій.

На Рис. 1 представлений результат роботи 3UpCloses ShowMe дослідження.

Рис. 1 Результат роботи 3UpCloses ShowMe дослідження

Тепер давайте напишемо ще одне ShowMe дослідження і назвемо його HighVolume. Це дослідження буде допомагати нам ідентифікувати ті ділянки, у яких обсяг буде вище чим значення середнього обсягу.

Input: Length(10), Factor(1.25);

Vars: AvgVol(0);

AvgVol = Average ( Volume, Length );

If Volume > AvgVol * Factor

Then

Begin

Plot1 ( Low, “HighVol” );

Alert = True;

End;

Перед тим як перейти до практичного заняття напишемо ще одне ShowMe дослідження: WeakBar. Знак буде розміщений у той бар, де Low буде найнижче з 10 останніх Low чи Close буде найнижче з 5 останніх Close. Коли одна з цих умов буде виконуватися також буде включений сигнал.

Inputs: LowBars (10), ClosBars (5);

If Low < Lowest (Low, LowBars)[1] or Close < Lowest (Close, ClosBars)[1]

Then

Begin

Plot1 (Low + (Range / 2), “WeakBar”);

Alert = True;

End;

Зверніть увагу, що ми не розміщали знак ні в Open, ні в High, ні в Low, ні в Close. Ми інструктували TradeStation, щоб розмістити знак у середину поточного бара. Функція Range повертає діапазон поточного бара. Ми можемо розміщати знак де завгодно на барах. На Рис. 2 представлений результат роботи ShowMe WaekBar.

Рис. 2 Результат роботи ShowMe WaekBar

Написання PaintBar досліджень

PaintBar дослідження використовуються, щоб змінити кольору тільки тих елементів bars у графічному вікні, що виконують визначені умови. Подібно дослідженням ShowMe, інструкції EasyLanguage для аналізу PaintBar під TradeStation роблять пошук деяких критеріїв, типу простих цінових зв'язків чи більш складних критеріїв, і поміщають знак у ті елементы bars, на яких критерії є істинними.

При написанні PaintBar досліджень також використовується процедурна конструкція IF-THEN, але трохи по іншому. Там де ShowMe ставить знак, PaintBar фарбує іншим кольором частина бара чи весь бар. Отже ми будемо використовувати по дві процедури PLOT: перша вказує початок промальовування, наприклад High, а друга кінець ділянки зміни кольору, наприклад Low. Конструкція написання має наступний вид:

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

Begin

Plot1 ( Числове значення, «Ім'я»);

Plot2 ( Числове значення, «Ім'я»);

End;

Знаючи конструкцію ми можемо приступити до написання PaintBar дослідження. Назвемо його BullAvgs. Вихідний текст буде виглядати у такий спосіб:

Value1 = Average ( Close, 9);

Value2 = Average ( Close, 18);

If Value1 > Value2 Then

Begin

Plot1 ( High, “BarHigh”);

Plot2 ( Low, “BarLow”);

Alert = True;

End;

На Рис. 3 представлений результат роботи цього PaintBar дослідження.

Рис. 3 Результат роботи PaintBar дослідження

Давайте напишемо наступне PaintBar дослідження: Bull Stochastics.

Це дослідження допоможе нам ідентифікувати ті ділянки, на яких стохастик має особливо низьке значення. Візьмемо за початкове низьке значення – 25, а період індикатора – 14. Також необхідно написати, що коли стохастик буде мати значення нижче 25 система дасть нам сигнал. Function Wizard містить функцію Slow, що розраховує значення стохастика.

Input: OSBand (25), Length (14);

If SlowK (Length) < OSBand Then

Begin

Plot1 (High, “BarHigh”);

Plot2 (Low, “BarLow”);

Alert = True;

End;

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

If Date <> Date [1] Then

Begin

Plot1 (High, “PBHigh”);

Plot2 (Low, “PBLow”);

End;

Це PaintBar дослідження порівнює дату поточного бара з датою попереднього бара і якщо вони різні зафарбовує поточний бар.

Торгові системи.

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

При написанні Торгових Систем використовуються ще додатково деякі твердження, що дозволяють нам повідомляти TradeStation коли купувати і продавати.

BUY – входження в довгу позицію. Якщо до цього була коротка позиція, то при цьому твердженні відбувається покупка достатня для входження в довгу позицію (закриття короткої і відкриття довгої).

SELL – входження в коротку позицію. Якщо до цього була довга позиція, то при цьому твердженні відбувається продаж достатній для входження в коротку позицію (закриття довгої і відкриття короткої).

EXITLONG – закриття довгої позиції. При цьому твердженні відбувається покупка достатня для виходу з довгої позиції (загальна кількість усіх позицій однаково).

EXITSHORT – закриття короткої позиції. При цьому твердженні відбувається продаж достатній для виходу з короткої позиції (загальна кількість усіх позицій однаково).

Давайте почнемо писати Торгову систему. Назвемо її MACross чи Перетинання Ковзних Середніх. Система буде входити в довгі позиції, коли повільна ковзна середня перетинає швидку знизу і входити в короткі позиції, коли повільна ковзна середня перетинає швидку зверху. Нижче приведений вихідний текст даної системи:

Input: BSE (8), PROF (1000), ShortLen (9), LongLen (18);

Vars: ShortMA (0), LongMA (0);

ShortMA = Average (Close, ShortLen);

LongMA = Average (Close, LongLen);

If ShortMA crosses over LongMA Then

Buy this bar on close;

If ShortMA crosses under LongMA Then

Sell this bar on close;

If BarsSinceEntry > BSE and PositionProfit < 1000 Then

Begin

ExitLong this bar on close;

ExitShort this bar on close;

End;

Ви напевно помітили, що в тексті програми використовуються дві нові процедури: BarsSinceEntry і PositionProfit. Якщо досліджуваний бар є більш ніж восьмим після відкриття позиції і наш прибуток по поточній позиції більше чим 1000, то система буде закривати короткі чи довгі позиції. На Рис. 4 зображений результат роботи даної торгової системи.

Рис. 4 Результат роботи торгової системи

До цього часу ми вивчали змінні, котрі містили числові значення, але в EasyLanguage існують також булеві змінні, котрі можуть бути або істина, або неправда. Без опису можуть використовувати перемінні Condition0... Condition99.

Давайте перепишемо нашу MACross торгову систему так, щоб вона містила в собі булеві змінні.

Input: BSE (8), PROF (1000), ShortLen (9), LongLen (18);

Vars: ShortMA (0), LongMA (0);

ShortMA = Average (Close, ShortLen);

LongMA = Average (Close, LongLen);

Condition1 = ShortMA crosses over LongMA;

Condition2 = ShortMA crosses under LongMA;

If Condition1 Then

Buy this bar on close;

If Condition2 Then

Sell this bar on close;

If BarsSinceEntry > BSE and PositionProfit < 1000 Then

Begin

ExitLong this bar on close;

ExitShort this bar on close;

End;

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

Приступимо до написання наступної торгової системи, що назвемо BreakOut. Вона буде купувати якщо четвертий High вище трьох попередніх і продавати якщо четвертої Low нижче трьох попередніх.

Input: BarsHiLo (4);

Vars: BuyPrice (0), SellPrice (0);

BuyPrice = Highest (High, BarsHiLo);

SellPrice = Lowest (Low, BarsHiLo);

Buy next bar at BuyPrice + 2 points Stop;

Sell next bar at SellPrice – 2 points Stop;

Помітьте, що ця торгова система використовує стоп-накази. Стоп ордер на покупку розміщається на рівні BuyPrice плюс два пункти, а стоп ордер на продаж розміщається на рівні SellPrice мінус два пункти. Пунктом вважається мінімальне коливання ціни. На Рис. 5 зображений результат роботи даної торгової системи.

Рис.5 Результат роботи торгової системи

Зверніть увагу, що з'являється діалогове вікно ATTENTION, указуючи що нові ордери повинні розміститися. Також майте на увазі, що ми використовували константи. У той час як вони зручні в будь-якій методиці аналізу, вони особливо корисні в торгових системах, тому що в такому випадку Ви можете оптимізувати систему.

Давайте напишемо наступну торгову систему, що назвемо XBarHighLow:

Input: Len1 (8), StopLen (6);

Condition1 = High > Highest (High, Len1) [1];

Condition2 = Close > Close [1];

Condition3 = Low < Lowest (Low, Len1) [1];

Condition4 = Close < Close [1];

If Condition1 and Condition2 Then

Buy next bar at market;

If Condition3 and Condition4 Then

Sell next bar at market;

ExitLong at Lowest (Low, StopLen) Stop;

ExitShort at Highest (High, StopLen) Stop;

Зверніть увагу, що ми використовували різні варіанти замовлень у цій торговій системі. На додаток до покупки і продажу по ринковим (market) цінах ми використовували стоп-накази.

Приступимо до розгляду наступної торгової системи. Вона містить інший тип замовлення і використовує назви сигналів. Цю систему назвемо Momentum (імпульс) System, тому що вона вимірює «силу імпульсу». Для виміру імпульсу ми будемо використовувати різницю між поточним Close і Close декількома періодами раніше, у даному випадку 5. Коли імпульс позитивний – система буде купувати, а коли негативний – продавати. Вихідний текст програми має наступний вид:

Input: MomLen (5), Xbars (8);

Value1 = Close – Close [MomLen];

If Value1 crosses over 0 Then

Buy (“BullSig”) Next Bar at Close – 2 points Limit;

If Value1 crosses under 0 Then

Sell (“BearSig”) Next Bar at Low + 2 points Limit;

If BarsSinceEntry = Xbars Then

Begin

ExitLong (“LiqLong”) This Bar on Close;

ExitShort (“CoverShort”) This Bar on Close;

End;

Зверніть увагу на новий тип ордера – Limit, а також на використання назв сигналів. Ці назви присутні в System Report: Trade by Trade. Це дає нам можливість знати який з ордерів позитивний, а який негативний, а також оцінити кожну угоду індивідуально.

Огляд термінології Торгових Систем

При написанні Торгових Систем використовуються ще додатково деякі твердження, що дозволяє нам повідомляти TradeStation коли купувати і продавати.

BUY – входження в довгу позицію. Якщо до цього була коротка позиція, то при цьому твердженні відбувається покупка достатня для входження в довгу позицію (закриття короткої і відкриття довгої).

SELL – входження в коротку позицію. Якщо до цього була довга позиція, то при цьому твердженні відбувається продаж достатній для входження в коротку позицію (закриття довгої і відкриття короткої).

EXITLONG – закриття довгої позиції. При цьому твердженні відбувається покупка достатня для виходу з довгої позиції (загальна кількість усіх позицій однаково).

EXITSHORT – закриття короткої позиції. При цьому твердженні відбувається продаж достатній для виходу з короткої позиції (загальна кількість усіх позицій однаково).

Ці чотири утвердження можуть використовуватися з наступними ордерами:

  • this bar on close

  • this bar at market

  • next bar at x price stop

  • next bar at x price limit

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

If Date <> Date [1] Then

Begin

Value1 = UpTicks;

Value2 = Ticks;

End

Else

Begin

Value1 = Value1 + UpTicks;

Value2 = Value2 + Ticks;

End;

Plot1 (Value1/Value2*100, “UpTickRatio”);

Тепер давайте перейдемо до ShowMe дослідження. Тут ми будемо використовувати посилання на час бара, а не тільки дату. Дане ShowMe буде виконуватись, коли стохастик буде менше визначеного значення у визначений час дня. Знову таки це дослідження можна застосовувати тільки на денній інформації.

Input: OSBand (25), TOD (1000);

Value1 = SlowK (14);

If Value1 < OSBand and Time > TOD Then

Plot1 (Low, “OS”);

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

Рис. 6 Графік MSFT денний і MSFT тижневий

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

Input: BSE (8), PROF (1000), ShortLen (9), LongLen (18);

Vars: ShortMA (0), LongMA (0);

ShortMA = Average (Close of Data2, ShortLen);

LongMA = Average (Close of Data2, LongLen);

If ShortMA crosses over LongMA Then

Buy this bar on close;

If ShortMA crosses under LongMA Then

Sell this bar on close;

If BarsSinceEntry > BSE and PositionProfit < 1000 Then

Begin

ExitLong this bar on close;

ExitShort this bar on close;

End;

Тепер давайте розглянемо ще один графік, що використовує мульти-дані. Цей графік має два цінових потоки даних, Intel і Microsoft. Період в обох дорівнює дню. На Рис.7 представлений цей графік.

Рис.7 Графіки Intel і Microsoft

На цьому графіку ми можемо вимірювати відносну силу одних даних до інших. Давайте подивимося як це можна реалізувати за допомогою PowerEditor:

Input: Nbars (12);

If Close [Nbars] Data1 <> 0 and Close [Nbars] Data2 <> 0 Then

Begin

Value1 = (Close Data1 – Close [Nbars] Data1) / Close [Nbars] Data1;

Value2 = (Close Data2 – Close [Nbars] Data2) / Close [Nbars] Data2;

If Value2 <> 0 Then Value3 = Value1 / Value2;

End;

Plot1 (Value3, “RS%Chg”);

Plot2 (0, “Equal”);

Цей індикатор перевіряє також відсутність нульового значення в Value2 для того, щоб виключити помилку ділення на 0.

ХІД РОБОТИ:

1. Close і Volume ShowMe Дослідження

Створіть ShowMe дослідження, що ідентифікує ті бари, на яких поточний Volume більше в 1.25 рази чим Volume попереднього бара і поточний Close більше, чим High попередніх 5 барів чи менше ніж Low попередніх 5 барів. Напишіть також сигнальні критерії, якщо ці умови будуть виконані.

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

2. DayOfWeek PaintBar дослідження.

Створіть PaintBar дослідження, яке б ідентифікувало специфічні дні тижня. Напишіть також сигнальні критерії так, щоб система попереджала нас коли поточний бар і є той день.

Дні тижня пронумеровані з 1 до 7 з понеділка по неділю. Кожен бар містить інформацію, що може бути перетворена в день тижня. Мається функція для цього, називана DayOfWeek.

Використовуйте константу номера дня тижня, для можливості вибору необхідного дня. У такий спосіб можна на одному графіку зафарбувати всі п'ятниці, а на іншому - всі понеділки.

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

3. KeyReversal System.

Напишіть торгову систему, що купувала б на закритті реверсивного ключа зверху і продавала б на закритті реверсивного ключа знизу.

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

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

Контрольні запитання:

  1. Що таке ShowMe і для чого воно використовується?

  2. Яка процедура використовується при ShowMe дослідженні?

  3. Як ідентифікувати сигнали, які видавал б система при настанні певної умови?

  4. Що таке PaintBar дослідження і коли воно використовується?

  5. Яка процедура використовується при ShowMe дослідженні?

  6. В чому різниця між PaintBar та ShowMe дослідженнями?

  7. Яке призначення торгових систем?

  8. На основі яких тверджень система приймає рішення?

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