Донецкий техникум промышленной автоматики

Як отримати якісні котирування для тестера MetaTrader 4

  1. Типи історичних даних
  2. Тимчасові масштаби даних
  3. вибір таймфрейма
  4. Якість історичних даних
  5. Якими, на мій погляд, повинні бути якісні історичні дані?
  6. Аналіз дірок на історії котирувань
  7. Доведення якості котирувань до 100%
  8. Висновок
  9. Завантажити набір необхідних скриптів

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

Як правило, у більшості брокерів якість котирувань коливається в районі від 90 до 96%. Термінал MT4 і так не надто точний інструмент, тому додавати ще 4-10% зайвої неточності - не наш варіант. Наш вибір - котирування 100% якості. Де і яким чином їх взяти, як обробити і отримати гарантовано якісний результат - в нашому сьогоднішньому матеріалі.

Типи історичних даних

Типи історичних даних

Основний тип історичних даних, без якого просто не вийде провести тестування - це, природно, дані за цінами. Історичні цінові дані можуть бути отримані для різних періодів і з різних джерел. Найбільш поширені - для денних, хвилинних і тикових графіків. Як правило, найглибше історія саме для денних графіків - її можна отримати, починаючи з 1971 року (більш тривалу історію не підтримує термінал MetaTrader ). Хвилинні дані, як правило, йдуть максимум з 1999 - 1998 роки, а тики в основному не раніше, ніж з 2004 - 2007 року.

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

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

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

Тимчасові масштаби даних

Тимчасові масштаби даних

Дані можна використовувати в своїх природних тимчасових рамках, або ж перерахувати їх в інший часовий масштаб. Залежно від стратегії вам можуть знадобитися різні таймфрейме, від М1 або навіть тиків, до D1 або MN1. З даних коротких таймфреймів можна легко зробити дані більш довгих, але ніяк не навпаки. Наприклад, з даних періоду М1 ми легко можемо отримати і М5, і Н1, і D1. Саме тому важливо мати якісну базу даних саме М1 котирувань.

Але М1 - не самий дрібний масштаб, адже є ще і тиків дані. Тік - це не постійна одиниця часу, іноді тики бувають дуже частими, особливо під час виходу новин , А іноді, наприклад, вночі, мають великі тимчасові проміжки один між одним. Тик історія в основному необхідна для тестування новинних радників, hft стратегій (використання яких взагалі неможливо на платформі МТ4 або МТ5 ), А також для радників, які використовують різні розрахунки всередині свічок .

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

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

Скільки потрібно даних? Чим більше тим краще. Справа в тому, що чим більше угод в тесті, тим менше ризик «підгонки», тим більше статистично вагомий результат і тим більша ймовірність того, що ваша система продовжить працювати так же в майбутньому, як працювала в минулому. Тому дуже бажано використовувати всю доступну історію.

вибір таймфрейма

вибір таймфрейма

Що стосується таймфрейма , Використовуваного для роботи, то тут справа смаку. При роботі на низьких періодах на кшталт М5 або М15, йде багато часу на тести, до того ж такі системи дуже вимогливі до якості котирувань, сильно брокерозавісіми і на кінцевий результат пристойно впливають витрати, такі як спред , свопи , прослизання , Комісії.

З іншого боку, торгівля за допомогою подібних систем більш динамічна, адже вони можуть здійснювати десятки угод на день. Через відносно коротких стопів можна обійтися депозитом всього в 100 доларів. Як наслідок, приріст депозиту, як правило, більш стрімкий, ніж у довгострокових систем. Хоча і найчастіше більш короткий - чим нижче період роботи системи, тим вона виходить, як правило, менш стабільною.

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

Ще одна проблема - для довгострокових систем необхідно досить велика кількість історичних даних. Плюс на тих же денних графіках стопи навіть розміром в два ATR виходять часом досить великими, і щоб дотримуватися правильний мані менеджмент може не вистачити і 2 000 доларів. Крім того, при роботі на високих таймфреймах, як правило, використовують портфелі систем , Щоб згладити криву прибутковості. Проте, витримувати психологічно десятки відкритих угод, що бовтаються то в плюс, то в мінус цілими тижнями - досить нелегко.

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

Якість історичних даних

Однією з поширених причин отримання недостовірних результатів при тестуванні радника в тестері стратегій терміналу MetaTrader 4 є проблеми з цілісністю історичних котирувань Однією з поширених причин отримання недостовірних результатів при тестуванні радника в тестері стратегій терміналу MetaTrader 4 є проблеми з цілісністю історичних котирувань. В силу різних причин в історії цін, що є в наявності в терміналі, можуть бути присутніми «дірки», які призводять до розривів в ціновому потоці, які не мають нічого спільного з реальністю. Чи треба говорити, що тестувати радник з таким котируванням не має великого сенсу?

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

Помилки в даних можуть приймати кілька різних форм. Досить часто при торгівлі трапляються тики з явно помилковими цінами, просто неможливими. Наприклад, ціна на секунду злітає до небес, а потім, в наступну секунду, повертається назад. Це так звана « шпилька », Якими ще буквально кілька років тому грішили майже всі брокери. Така помилка може привести до угоди з величезною прибутком або збитком. А якщо таких «шпильок» в даних багато, то тест будь-якої системи буде далекий від реальності. Особливо це стосується тестів різних сіткових стратегій, де «шпилька» - це гарантований слив депозиту, і, як наслідок, тест не проходить фільтр.

Більш поширені і менш помітні звичайні невеликі помилки в рівнях цін. Наприклад, замість ціни закриття 1.4378 у нас є ціна 1,4387. Природно, таку помилку помітити складно, особливо якщо вона на високому таймфрейме. Благо, найчастіше вони не сильно впливають на результати тестів, хоча бувають і винятки. Тому варто звіряти котирування від декількох різних постачальників, щоб отримати максимально достовірні ціни.

Ну і найпоширеніша помилка - це пропуск даних. Просто з якихось причин певний відрізок часу в базу не записується, утворюючи розриви котирувань. Найчастіше така проблема зустрічається в свята, на Новий Рік і в нічні періоди. Чим «діряві» графік, тим менше реальності в тестах. Ця проблема також вирішується заповненням прогалин з інших джерел.

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

Якими, на мій погляд, повинні бути якісні історичні дані?

Якими, на мій погляд, повинні бути якісні історичні дані

Якісні історичні дані формуються з барів періоду М1. Все, що вище, далі відсуває нас від точності відтворення поведінки радника. При формуванні історії котирувань найкраще використовувати котирування М1. Більш того, в ідеалі тестування радників найкраще проводити за котируваннями М1. При цьому необхідно переконатися, що в самому коді радника жорстко задані періоди, а не виставлено період за замовчуванням (Period ()), інакше ви отримаєте зовсім не ті результати, на які розраховували, адже алгоритм буде працювати не так, як планувалося.

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

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

Такі котирування не мають пропусків одиничних або кількох барів. В ідеалі потрібно мати стовідсоткову повноту котирувань (не плутати з якістю моделювання). 100% повнота історії хвилинних котирувань, на мій погляд, необхідна тому, що з хвилини формуються наступні таймфрейме і відсутність деяких хвилинних барів, в кінцевому підсумку, породжує «криві» бари вищих таймфреймів.

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

Аналіз дірок на історії котирувань

Аналіз дірок на історії котирувань

Дізнатися якість графіка допоможе скрипт history_data_analysis.

Цей код виявляє в даних історії відсутні бари ( «дірки») і розриви (великі діри), визначає їх розмір, тривалість і   геп Цей код виявляє в даних історії відсутні бари ( «дірки») і розриви (великі діри), визначає їх розмір, тривалість і геп . Працює на всіх інструментах і призначений для внутредневних графіків, тому таймфрейм обмежений періодом H4.

При аналізі враховуються тільки вихідні дні (субота та неділя - 48 годин), інші моменти код вважає дірами або розривами. Для зручності роботи на графіку в коді передбачений фільтр, де можна задати кількість відсутніх барів на таймфреймах (M1,5,15,30), які код буде ігнорувати як діри, кількість відсутніх барів (мінімальне значення), яке код вважав би розривом (по замовчуванням 20 барів), а також кількість відсутніх пипсов, які код буде ігнорувати як геп. Після запуску скрипта і закінчення його роботи ви побачите повідомлення:

Для прикладу я провів тестування якості котирувань пари EURUSD   Alpari   : Для прикладу я провів тестування якості котирувань пари EURUSD Alpari :

Ну і для прикладу зробимо такий же тест для котирувань Dukascopy EURUSD M1: Ну і для прикладу зробимо такий же тест для котирувань Dukascopy EURUSD M1:

Як ви можете переконатися, використовувати для тестування найкраще дані від Dukascopy - загальна якість котирувань тут знаходиться в районі 99,55% Як ви можете переконатися, використовувати для тестування найкраще дані від Dukascopy - загальна якість котирувань тут знаходиться в районі 99,55%. Всього 0,45% пропусків і розривів, дуже непоганий результат. Проте, у нас як і раніше 4662 розриву - не вистачає майже двадцять тисяч барів і цілих 39740 пунктів. А тому - для максимально достовірних тестів цю проблему доведеться усувати.

Доведення якості котирувань до 100%

1 1. Я рекомендую для базової історії котирувань використовувати дані від Ducaskopy, в них мало всього дірок і їх потім менше доведеться «латати». Для цього можна скористатися будь-допоміжної програмою, яка завантажує тики Ducaskopy. Я рекомендую Tickstory Lite .

2. Після закачування тиків в програмі Tickstory Lite, натисніть правою кнопкою миші на цікавить вас валютній парі і виберіть пункт «Експорт в файл»:

3 3. Заповніть поля з настройками:

4 4. Відкрийте каталог даних:

5 5. У каталозі даних знаходимо папку history, потім знаходимо потрібну папку за назвою нашого сервера:

6 6. Видаляємо все hst файли потрібної валютної пари.

7. Експортуйте викачані котирування в термінал, натиснувши F2, вибравши потрібну валютну пару, період М1 і натиснувши кнопку «Імпорт»:

8 8. Відкрийте графік валютної пари періоду М1.

9. Проведіть тест якості за допомогою скрипта history_data_analysis. За отриманим в результаті тестування текстового файлу потрібно знайти найбільш критичні місця. Потім ці критичні місця видаляються. Їх ми будемо пізніше заповнювати котируваннями з інших джерел (ставити так звані «заплатки»).

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

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

10. Звідки брати сировину для латочок - ми вже обговорювали в цій статті. Вам знадобиться один, може, два джерела - все залежить від конкретного випадку.

11. Перш за все ваші дані для латочок потрібно привести до формату csv, якщо вони у вас в hst форматі, і в цьому допоможе скрипт hst2csv.

12. Потім ці дані з інших джерел потрібно привести до правильного часу, а саме виставити для них той же GMTOffset , Що і у вашого брокера, і у коректованих котирувань. Не варто випускати з уваги, так це інформацію про те, який точно зрушення щодо GMT у конкретного джерела котирувань, змінювався чи він коли-небудь і чи використовувався переклад на зимовий / літній час. Наприклад, котирування Alpari до 2011 року мали GMT + 2, а після 2011 - GMT + 3.

Щоб це зробити, вам буде потрібно окремий термінал. У нього потрібно по черзі завантажувати котирування кожного з джерел, змінювати час GMT за допомогою скрипта GMTconverter, який я написав, коли виявив, що з якоїсь причини в мережі подібних скриптів немає. Скрипт ви зможете знайти / завантажити в кінці статті. Також ви можете при імпорті викачаних котирувань в окремий термінал вказати потрібний GMT, але іноді це не працює. Для того, щоб вказати потрібний GMT при імпорті котирувань, потрібно вказати «Зрушення» в годиннику. Потім ці котирування потрібно експортувати, натиснувши кнопку експорт. Таким чином, котирування збережуться в потрібному форматі і з потрібним вам GMT.

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

14. Знаходимо кожен з проблемних відрізків в файлі для латочок і переносимо шматки в окремо відкритий файл Блокнота:

15 15. Якщо в одному з джерел не вистачає даних, пробуємо знайти в інших джерелах.

16. Далі зберігаємо підготовлений файл у форматі csv. Просто міняємо розширення файлу з txt на csv.

17. Імпортуємо в термінал до котирувань Ducascopy. Дистанційні ділянки автоматично відновляться з підготовленого нами файлу.

18. Після довгої та кропіткої роботи з імпорту латочок потрібно закрити термінал і відкрити його знову, аби залатати історія довантажити. Знову накидаємо скрипт history_data_analysis і дивимося на результат нашої роботи.

19. Тепер приходити черга іншого скрипта AllMinutes_Step1. Що ВІН робить? Справа в тому, что ті хвілінні бари, в якіх Нічого НЕ відбувалося и не Було ніякіх цен, термінал автоматично пропускає. Скрипт здійснює технічне наповнення пропущених барів для забезпечення в подальшому правильної генерації свічок вищих таймфреймів. Отже, кидаємо його на графік і включаємо вкладку «Експерти». Це вкладка нам потрібна, щоб побачити повідомлення про завершення роботи цього скрипта і його короткий звіт.

20. Як тільки з'явилося повідомлення про завершення роботи скрипта, потрібно відкрити автономний графік (Файл - Відкрити автономно - ALLEURUSD1):

21 21. Кидаємо на відкрився графік перший скрипт history_data_analysis. Отримуємо звіт, до якого ми повернемося трохи пізніше.

22. Далі в роботу запускаємо третій скрипт - hst2csv. Справа в тому, що попередній скрипт в процесі своєї роботи не просто заповнив на графіку в автономному режимі всі пропущені бари, але ще і сформував таку ж повну базу котирувань в форматі hst. Файл утворився в папці історії і має назву «ALLEURUSD1». Запускаємо на автономному графіку скрипт history_data_analysis. Тепер нам доведеться цей файл ALLEURUSD1.hst переформатувати в керований (з точки зору зрушень часу) формат .csv, що власне і буде робити скрипт hst2csv.

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

В принципі, це нескладно - в звіті в таблиці вказані конкретні координати цих перепусток. Тому робота дуже схожа на ту, що ми робили в пункті 14. Загалом, заходимо в папку «Файли». Відкриваємо «ALLEURUSD1.csv» за допомогою програми Блокнот. Використовуючи функцію «пошук», опиняємося в потрібної дати. Заповнюємо пропущені бари останньої відомої ціною, не забуваючи змінювати час барів.

24. Відкриваємо в терміналі архів котирувань (F2), видаляємо всю що зберігається в ньому історію формату hst, після чого завантажуємо цей новий сконвертовані файл. Знову закриваємо і відкриваємо термінал. Відкриваємо графік, в нашому випадку EURUSD M1 і робимо контрольний замір скриптом history_data_analysis на випадок, якщо ми щось упустили.

25. Справа залишилася за малим - за скриптом period_converter_ALL. З ним взагалі все просто - кидаємо на графік і дивимося в верхній лівий кут - поки там біжать цифри, скрипт ще працює. Як тільки рух в тому кутку припиниться, значить робота завершена. І в кінці послідовно перемикаємо все таймфрейме, щоб вони довантажити.

Висновок

Висновок

Ось і все - в нашому терміналі тепер котирування 100% якості. Можна отримати максимально точне тестування і хорошу гарантію достовірності результатів, якщо є допоміжні таймфрейме періоду М1, які на 100% покривають досліджуваний період.

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

Завантажити набір необхідних скриптів

Інструкція по установці скриптів в MT4 Інструкція по установці скриптів в MT4

Тема на форумі

З повагою, Дмитро аkа Silentspec
TradeLikeaPro.ru

ru

Скільки потрібно даних?
Чи треба говорити, що тестувати радник з таким котируванням не має великого сенсу?
Якими, на мій погляд, повинні бути якісні історичні дані?
1. Що ВІН робить?