Статистичні рецепти для трейдера - Гіпотези - Статті з MQL5
Будь-який трейдер, який має бажання створити свою торгову систему, рано чи пізно перетворюється на аналітика. Він намагається знайти закономірності на ринку та перевірити ту чи іншу торгову ідею. Тестування ідеї може ґрунтуватися на різних підходах, починаючи від звичайного пошуку найкращих значень параметрів у режимі оптимізації Тестеру стратегій, закінчуючи науковими (а іноді псевдонауковими) дослідженнями ринкових даних.
У цій статті я пропоную розглянути такий інструмент статистичного аналізу для дослідження та перевірки висновків, як статистична гіпотеза. Спробуємо на прикладах протестувати різноманітні гіпотези за допомогою пакету Statistica та портованої бібліотеки чисельного аналізу ALGLIB MQL5.
1. Гіпотеза, поняття
Є кілька визначень поняття "статистична гіпотеза". Деякі з них просто стосуються припущення про статистичні властивості об'єкта, що вивчається, або явища.
Статистична гіпотеза – це ймовірне судження про імовірнісні закономірності, яким підпорядковується явище, що вивчається.
Інші вказують, що ці властивості мають бути пов'язані з розподілом деякої випадкової величини або параметрами цього розподілу.
Статистична гіпотеза – це припущення щодо параметрів статистичного розподілу чи закону розподілу випадкової величини.
У профільній літературі з математичної статистики поняття "гіпотеза" найчастіше трактується за другим варіантом. Тоді бувають:
- Параметрична гіпотеза(гіпотеза про значення параметрів розподілу або про порівняльну величину параметрів двох розподілів);
- Непараметрична гіпотеза(гіпотеза про вид розподілу випадковоївеличини).
У наступному розділі познайомимося із методикою перевірки гіпотез.
2. Перевірка гіпотез, теорія
Гіпотеза, яку слід перевірити, називається нульовою (Н0). Для неї підбирають альтернативу – конкуруючу гіпотезу (Н1). Вона є зворотною стороною медалі для Н0, тобто. логічно заперечує нульову гіпотезу
Уявіть, що є сукупність даних по стоп-лосс певної торгової системи. Сформуємо кілька гіпотез, що утворюють базис для перевірки.
Н0 - середнє значення стоп-лосса дорівнює 30 пунктів;
Н1 – середнє значення стоп-лосса не дорівнює 30 пунктів.
Варіанти прийняття-відкидання гіпотез:
- вірна Н0, і вона приймається;
- не вірна Н0 і вона відкидається на користь Н1;
- правильна Н0, але вона відкидається на користь Н1;
- не вірна Н0, але приймається.
Останні два варіанти пов'язані з помилками.
Тепер потрібно вибрати значення рівня значущості. Це ймовірність того, що буде прийнято альтернативну гіпотезу, тоді як вірною виявиться нульова (третій варіант). Природно, що цю можливість бажано мінімізувати.
У нашому прикладі така помилка трапиться, якщо порахуємо, що стоп-лосс в середньому не дорівнює 30 пп за умови, що він дійсно дорівнює цій кількості пунктів.
Як правило, значення рівня значущості (?) дорівнює 0,05. Тобто, не більше ніж у 5 випадках зі 100 допускається попадання значення критерію перевірки нульової гіпотези до критичної області.
У нашому прикладі оцінюватимемо критерій за хрестоматійним графіком (рис.1).

Рис.1. Розподіл критерію за нормальним законом
Щоб нульова гіпотеза була прийнята, критерій не повинен потрапити до червоних зон. Для цілей прикладу припустимо, що сам критерійрозподілено нормально.
До кожного статистичного тесту є своя формула, якою розраховується критерій.
Варіант 4 передбачає, що є помилка другого роду (β). У нашому прикладі така помилка трапиться, якщо порахуємо, що стоп-лосс в середньому дорівнює 30 пп за умови, що він дійсно не дорівнює цій кількості пунктів.
3. Перевірка гіпотез, приклади
Усі вихідні дані, які використовуються для прикладів, знаходяться у файліData.xls.
3.1. Перевірка залежних вибірок
Уявимо таку ситуацію. Допустимо, є торгова система, яка генерує деяку сукупність торгових угод. Складемо вибірку із прибуткових угод обсягом 100 одиниць. Вихідні дані перебувають у аркуші"Profits".
Описова статистика вибіркиProfitsпісля видалення викидів представлена у табл.1:
Табл.1. Статистика вибірки Profits
Гістограма вибірки виглядає так (рис.2).

Рис.2. Гістограма для вибірки Profits
Середнє значення вибірки дорівнює 83,4 пп, медіана – 83 пп.
Що якщо трохи змінити точку входу на ринок на кілька пунктів? Наприклад, після появи торгового сигналу можна виставляти лімітний ордер, що покращує ціну входу.
Як зміниться результати? На це питання можна відповісти за допомогою статистичних гіпотез.
У пакеті Statistica формально перевіряємо, чи не вилучені вибірки з однієї генеральної сукупності:
Змінимо ціну входу на 15 пунктів, отримаємо вибіркуNewProfits. В ідеалі має вийти така картинка (рис.3).

Рис.3. Графік для вибірок Profits та NewProfits
Висока ймовірність, що буде прийнято альтернативну гіпотезу, т.к. медіани вибірок відрізняються.
Але такукартину навряд чи пощастить отримати, т.к. ринок може не дати найкращі ціни. У моєму випадку, за зміни ціни входу, у другу вибірку потрапило 84 угоди. А інші 15 угод просто не було здійснено. Назвемо цю скориговану вибіркуNewProfitsReal.
На графіку типу "ящик з вусами" немає ніякої різниці між вибірками.

Рис.4. Графік для вибірок Profits та NewProfitsReal
Проведемо непараметричний тест за критерієм Вілкоксона для зв'язкових вибірок.
Результати представлені у табл.2:
табл.2. Результати тесту за критерієм Вілкоксону для вибірок Profits, NewProfitsReal
Рівень значущості дуже високий, що свідчить на користь нульової гіпотези.
Таким чином, можна зробити висновок про те, що зміна точки входу не вплинула на прибутковість системи. Це у відносному сенсі. В абсолютному вираженні, через пропущені точки входу, система виявилася менш прибутковою.
Цікаво, що в MQL5 програмним чином також можна провести тест Вілкоксона. Щоправда він порівнює медіану розподілу із заданим значенням m. Але ця відмінність непринципова.
У бібліотеці ALGLIB є така процедура: CAlglib::WilcoxonSignedRankTest(). Вона відразу ж дає результат для 3 видів тесту: двостороннього, лівостороннього та правостороннього.
У скрипті test_profits.mq5 є приклад розрахунку. У журналі "Експерти" побачимо наступні результати для вибіркиNewProfitsReal:
Лівосторонній тест має форму:
Тут перевіряємо альтернативу, що медіана вибіркиNewProfitsRealможе бути більшою або дорівнює 83. Імовірність помилки при відкиданні H0 дорівнює 0,63. Тому H0 приймається.
Правосторонній тест має форму:
Тут перевіряємо альтернативу, щомедіана вибіркиNewProfitsRealможе бути меншою або дорівнює 83. Імовірність помилки при відкидання H0 дорівнює 0,37. Тому H0 приймається.
3.2. Перевірка незалежних вибірок
Припустимо, що потрібно перевірити, як швидко обробляються торгові накази у різних брокерів, і чи є відмінність між брокерами щодо виконання торгового наказу.
Отже, з метою аналізу було створено 2 вибірки вихідних даних. У кожній вибірці спочатку було 50 спостережень. Після видалення викидів у першій вибірці (брокер А) залишилося 48 спостережень, у другій (брокер B) – 49 спостережень. Дані перебувають у аркуші"ExecutionTime".
Візуалізуємо показники вибірок (Рис.5). Судячи з графіку, значення медіан хоч і несильно, але відрізняються.

Рис.5. Графік для вибірок даних брокера A та B
Оскільки ми апріорі не знаємо, до якого розподілу відноситься кожна вибірка, то звернемося до непараметричних тестів для порівняння.
Наприклад, скористаємося U-критерієм Манна-Уітні (табл.3). Серед непараметричних він вважається одним із найпотужніших.
табл.3. Результати тесту за U-критерієм Манна-Уітні для вибірок даних брокера A і B
Висновок - є відмінність за тестами, нульова гіпотеза про рівність вибірок відкидається на користь Н1.
У MQL5 програмним чином також можна провести тест Манна-Уітні. У бібліотеці ALGLIB є процедура CAlglib: MannWhitneyUTest() . Вона відразу ж дає результат для 3 видів тесту: двостороннього, лівостороннього та правостороннього.
У скрипті test_time_execution.mq5 є приклад розрахунку. У журналі "Експерти" побачимо такі результати для порівняння вибірок:
Лівосторонній тест має форму:
Нульова гіпотеза -медіана вибірки даних брокера A може бути більшою або дорівнює медіані вибірки даних брокера B. Альтернатива – її заперечення. Імовірність помилки при отвержении H0 дорівнює 1,0. Тому H0 приймається.
Правосторонній тест має форму:
Нульова гіпотеза - медіана вибірки даних брокера A може бути меншою або дорівнює медіані вибірки даних брокера B. Альтернатива – її заперечення.
Імовірність помилки при отвержении H0 дорівнює 0,0. Тому H0 відкидається на користь Н1.
3.3. Перевірка кореляції
Уявіть, що є певний портфель стратегій. Завдання полягає в тому, щоб скоротити кількість цих стратегій у портфелі.
Критерій для вирішення може бути таким: якщо при порівнянні серій стоп-лоссів дві стратегії виявляться однаковими, то одну стратегію з портфеля прибираємо. Для дослідження візьмемо дві вибірки, що представляють дані щодо стоп-лосс двох різних торгових систем. Допущення: системи однаково реагують на вхід у ринок, але по-різному реагують на вихід із нього.
Скористаємося тестом рангової кореляції Спірмена. У файлі даних, лист"Correlation", є 3 вибірки.
Формально перевіряємо, чи дорівнює нулю значення коефіцієнта кореляції:
Якщо порівняти пару вибірокStops1-Stops2, отримаємо такі результати (табл.4).
Табл.4. Результати тесту рангової кореляції Спірмена для вибірок Stops1, Stops2
Тут нульову гіпотезу про відсутність зв'язку між елементами вибірок на користь альтернативи не можна відкинути. Виходить, вона приймається.
На графіці (рис.6) можна побачити, що дані утворюють якусь помітну конфігурацію. Вони швидше розпорошені по всій площині графіка.

Рис.6. Діаграма розсіювання для вибірок Stops1, Stops2
Результатиперевірки зв'язку між вибіркамиStops1-Stops3наведені в табл.5:
Табл.5 Результати тесту рангової кореляції Спірмена для вибірок Stops1, Stops3
Тут нульову гіпотезу можна відкинути - дуже низька ймовірність помилки.
Отже, приймається альтернатива наявності зв'язку. Візуально залежність має такий вигляд (рис.7).

Рис.7. Діаграма розсіювання для вибірок Stops1, Stops3
Підтвердимо результати кодом MQL5. У скрипті test_correlation.mq5 є приклад розрахунку.
У самій бібліотеці ALGLIB є процедура CAlglib::SpearmanRankCorrelationSignificance() , яка реалізує тест на значущість коефіцієнта рангової кореляції Спірмена
У журналі з'являться такі записи:
Лівосторонній тест має форму:
Тут перевіряється нульова гіпотеза у тому, що з змінними є неотрицательная кореляція (тобто. або нульова кореляція, або позитивна).
Для кількох вибірокStops1-Stops2лівосторонній тест показав, що нульова гіпотеза приймається. Для кількох вибірокStops1-Stops3лівосторонній тест показав, що нульова гіпотеза теж приймається. Чому так, якщо між вибіркамиStops1-Stops2зв'язку немає, а між вибіркамиStops1-Stops3зв'язок є? Причина в тому, що перевіряється затвердження "більше або дорівнює нулю". У першому випадку на боці H0 грає "рівно нулю", а в другому - "більше".
Правосторонній тест має форму:
Тут перевіряється нульова гіпотеза у тому, що є негативна кореляція.
Для кількох вибірокStops1-Stops2правосторонній тест показав, що нульова гіпотеза приймається. Для кількох вибірокStops1-Stops3правосторонній тест показав, що нульова гіпотеза відкидається.
І ще одне зауваження. В ходітесту було виявлено, що між вибіркамиStops1-Stops3є позитивний імовірнісний зв'язок. Але сила зв'язку носить швидше середній характер. Тому рішення про відмову від стратегії 1 чи 3 у портфелі залишається за трейдером.
Висновок
У своїй статті я спробував на прикладах показати, що можна міркувати та робити висновки про кількісні параметри з використанням апарату математичної статистики. Сподіваюся, матеріал статті буде корисний для розробників-початківців своїх майбутніх, а головне, осмислених торгових систем. Також сподіваюся, що серію статей про використання методів математичної статистики буде продовжено.
Файли бібліотеки ALGLIB потрібно завантажити окремо.