Тестування експертів на нестандартних таймфреймах - Статті з MQL4
Ціна на ринку змінюється з досить великою частотою, щоб для технічного аналізу було зручно користуватися графіком безпосередньої зміни ціни, так званого тикового графіка. Для спрощення сприйняття змін ціни та забезпечення можливості використання в аналізі більші інтервали часу використовується відображення графіків у вигляді барів або свічок. Кожен бар показує значення ціни на початок певного періоду часу, його закінчення, максимальну та мінімальну ціни за цей проміжок часу. Традиційно прийнято використовувати такі періоди або таймфрейми: 1 хвилина, 5 хвилин, 15 хвилин, 30 хвилин, година, 4 години, доба, тиждень, місяць, що можна бачити на панелі інструментів терміналу MetaTrader4.

Незважаючи на існування загальноприйнятих періодів, що вже стали стандартними, теоретично ніщо не заважає використовувати будь-які інші періоди для відображення змін ціни. Так само і практично - в комплекті з терміналом є скрипт period_converter, що дозволяє користувачеві терміналу створювати графіки нестандартних періодів, наприклад, 2 хвилини, 7 хвилин, 45 хвилин, 2 години, практичні будь-які і прикріплювати і ним індикатори. Однак у тестері терміналу є можливість вибрати для тестування лише стандартний період.
Як кажуть - "око бачить, та зуб неймет", створити графік нестандартного періоду є можливість, а "спробувати" його, протестувати на ньому експертів - ніяк. Насправді ситуація набагато краща, ніж здається, - можливість тестування експертів на нестандартних таймфреймах існує! Для цього лише достатньо замінити дані стандартного таймфрейму даними нестандартного таймфрейму. Більше того, можливо навіть тестувати експертів,що користуються даними кількох нестандартних періодів.
Основна частина
План дій такий:
- Підготовка додаткового терміналу для роботи в offline режимі, щоб нові дані стандартних таймфреймів не додавалися до графіків нестандартних періодів.
- Підготовка даних нестандартних таймфреймів за допомогою скрипта period_converter у терміналі, що має достатній архів хвилинних даних.
- Імпорт підготовлених даних до терміналу, підготовленого для тестування.
Тепер докладніше:
1. Підготовляємо термінал для тестування на нестандартних таймфреймах.
Встановлюємо додатковий термінал. Запускаємо термінал, відкриваємо демо-рахунок, чекаємо появи списку символів у вікні огляду ринку:

Відключаємо збереження особистої інформації: клацаємо лівою кнопкою на індикаторі "Стан з'єднання" розташованому в правому нижньому кутку терміналу і вибираємо команду "Логін", у вікні знімаємо галку "Зберігати особисту інформацію", натискаємо кнопку "Логін" і чекаємо, коли термінал рахунку.

Це необхідно для того, щоб на запуску термінал не підключався до рахунку автоматично, і до архіву історії не додавалися нові дані. Закриваємо термінал.
У каталозі history відкриваємо каталог з ім'ям, що відповідає назві дилінгового центру, де відкривався демо-рахунок, і видаляємо з нього всі файли *.hst.

2. Підготовляємо дані нестандартних таймфреймів.
У якомусь іншому терміналі, в якому є достатня кількість даних М1 потрібного символу, наприклад EURUSD, за допомогою скрипту period_converter (входить до комплекту терміналу MetaTrader 4) створюємо нестандартні таймфрейми, наприклад, М2 і М7. Дляцього відкриваємо графік EURUSD M1, запускаємо на ньому скрипт period_converter, на запуску скрипта, у його вікні властивостей ставимо значення ExtPeriodMultiplier рівним 2. Після того, як скрипт конвертує дані, у вкладці "Експерти" вікна Термінал" має з'явитися повідомлення про кількість записів зроблених у файл, наприклад:
"2009.03.19 18:28:09 period_converter EURUSD,M1: 25378 record(s) written"
Після цього скрипт можна видалити з графіка (клацнути на графіку, на якому був запущений скрипт, правою кнопкою, вибрати команду "Видалити скрипт"). Відкриваємо отриманий графік: Головне меню – Файл – Відкрити автономно (у колонці "Історичні дані" шукаємо запис EURUSD, M2). Аналогічно створюємо таймфрейм М7 (при запуску скрипта period_converter ставимо значення ExtPeriodMultiplier 7).
Пишемо скрипт для збереження даних із графіка у файл *.csv (файл s_ExportChartToCSV_v1.mq4 програми):
Виконуємо скрипт на графіках нестандартних таймфреймів. В результаті роботи скрипта в каталозі experts/filies отримуємо стандартні файли *.csv із даними нестандартних таймфреймів.

3. Імпортуємо дані.
Відкриваємо термінал, підготовлений у п.1, відкриваємо Архів котирувань (Головне меню - Сервіс - Архів котирувань або клавіша F2), розгортаємо в списку зліва список таймфреймів символу, що імпортується, виділяємо рядок М1 (подвійне натискання кнопкою мишки на ній, з'явився відповідний текст):

У відкритому вікні архіву котирувань тиснемо кнопку "Імпорт", вибираємо створений у п. 2 файл EURUSD2.csv, тиснемо "ОК" і також у таймфрейм М5 імпортуємо дані з файлу EURUSD7.csv, закриваємо вікно "Архів котирувань". Все готово!
Відкриваємо графік EURUSD M1 та бачимо дані M2:

Аналогічно з графіком EURUSD M5 – замість даних М5 можна побачити дані М7.
Для тестування радника за даними М2 у тестері треба буде вибрати таймфрейм М1, і, відповідно, для тестування на М7 – у тестері вибрати М5. Для доступу до даних таймфрейму М7 в індикаторах, що викликаються з радника, що тестується, необхідно вказувати таймфрейм М5.
Використовуємо простий експерт, який відкриває та закриває ордери по перетину двох МА (файл 2МА.mq4 програми). Увага! Експерт призначений лише для роботи у тестері.
4.1. Експерт на одному нестандартному тайфмреймі.
Відкриваємо тестер (Головне меню – Вид – Тестер стратегій, або клавіші Ctrl+R). Вибираємо експерта 2МА, символ - EURUSD, період М1, відкриваємо вікно властивостей експерта (кнопкою "Властивості експерта" в тестері), у вікні властивостей ставимо значення змінної TimeFrame 1 або 0. Запускаємо тестування, після тестування відкриваємо графік (кнопка "Відкритий графік" в тестері) і переконуємось, що тестування проведено правильно.

4.2. Експерт на одному таймфреймі, який відрізняється від таймфрейму тестера.
У вікні властивостей експерта ставимо змінної TimeFrame значення 5, виконуємо тестування, відкриваємо графік, перемикаємо таймфрейм графіка на М5, встановлюємо на графік дві простих МА з періодами 13 і 21, за цінами закриття і переконуємося, що тестування виконано правильно.

4.3. Двотаймфреймовий експерт.
Використовується експерт, що відкриває ордери по перетині двох МА на одному таймфреймі з підтвердженням за становищем двох МА на більшому таймфреймі (файл 2МА2TF.mq4 додатка). Увага! Експерт призначений лише для роботи у тестері.
За замовчуванням стоять значення TimeFrame – 1, MA2TimeFrame – 5. У тестері вибираємо таймфрейм М1,виконуємо тестування, відкриваємо графік, далі за допомогою розміщення вертикальних ліній у місцях відкриття ордерів та перетину МА без відкриття ордерів та перемикання таймфрейму з М1 на М5 переконуємось, що тестування виконано правильно.


Висновок
Нескладні маніпуляції та величезне розширення можливостей з тестування експертів! Єдиний недолік – відсутність автоматичного оновлення даних. Періодичне, наприклад, раз на тиждень, повторення пунктів 1-3: видалення всіх даних з терміналу для тестування, експорт нестандартних таймфреймів та їх імпорт до терміналу для тестування не складе труднощів задля такого величезного розширення можливостей тестера.