Скачать MetaTrader 5

Статистические рецепты для трейдера - Гипотезы

2 декабря 2014, 09:42
Dennis Kirichenko
6
4 488

Введение

Любой трейдер, у которого есть желание создать свою торговую систему, рано или поздно превращается в аналитика. Он пытается найти закономерности на рынке и проверить ту или иную торговую идею. Тестирование идеи может основываться на разных подходах, начиная от обычного поиска лучших значений параметров в режиме оптимизации Тестера стратегий, заканчивая научными (а иногда и псевдонаучными) исследованиями рыночных данных.

В данной статье я предлагаю рассмотреть такой инструмент статистического анализа для исследования и проверки выводов, как статистическая гипотеза. Попробуем на примерах протестировать различные гипотезы с помощью пакета Statistica и портированной библиотеки численного анализа ALGLIB MQL5.


1. Гипотеза, понятие

Есть несколько определений понятия "статистическая гипотеза". Некоторые из них просто касаются предположения о статистических свойствах изучаемого объекта или явления.

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

Другие указывают, что эти свойства должны быть связаны с распределением некоторой случайной величины или параметрами этого распределения.

Статистическая гипотеза – это предположение относительно параметров статистического распределения или закона распределения случайной величины.

В профильной литературе по математической статистике понятие "гипотеза" чаще всего трактуется по второму варианту. Тогда бывают:

  1. Параметрическая гипотеза (гипотеза о значениях параметров распределения или о сравнительной величине параметров двух распределений);
  2. Непараметрическая гипотеза (гипотеза о виде распределения случайной величины).

В следующем разделе познакомимся с методикой проверки гипотез.


2. Проверка гипотез, теория

Гипотеза, которую нужно проверить, называется нулевой (Н0). Для нее подбирают альтернативу – конкурирующую гипотезу (Н1). Она является обратной стороной медали для Н0, т.е. логически отрицает нулевую гипотезу.

Представьте, что имеется совокупность данных по стоп-лоссам некоторой торговой системы. Сформируем пару гипотез, образующих базис для проверки.

Н0 – среднее значение стоп-лосса равно 30 пунктов;

Н1 – среднее значение стоп-лосса не равно 30 пунктов.

Варианты принятия-отвержения гипотез:

  1. верна Н0, и она принимается;
  2. не верна Н0, и она отвергается в пользу Н1;
  3. верна Н0, но она отвергается в пользу Н1;
  4. не верна Н0, но она принимается.

Последние 2 варианта связаны с ошибками.

Теперь нужно выбрать значение уровня значимости. Это вероятность того, что будет принята альтернативная гипотеза, тогда как верной окажется нулевая (третий вариант). Естественно, что эту вероятность желательно минимизировать.

В нашем примере такая ошибка случится, если сочтем, что стоп-лосс в среднем не равен 30 пп при условии, что он действительно равен этому числу пунктов.

Как правило, значение уровня значимости (α) равно 0,05. То есть, не более чем в 5 случаях из 100 допускается попадание значение критерия проверки нулевой гипотезы в критическую область.

В нашем примере оценивать критерий будем по хрестоматийному графику (рис.1).

Рис.1 Распределение критерия по нормальному закону

Рис.1. Распределение критерия по нормальному закону

Чтобы нулевая гипотеза была принята, критерий не должен попасть в красные зоны. Для целей примера допустим, что сам критерий распределен нормально.

Для каждого статистического теста есть своя формула, по которой рассчитывается критерий.

Вариант 4 подразумевает, что имеет место ошибка второго рода (β). В нашем примере такая ошибка случится, если сочтем, что стоп-лосс в среднем равен 30 пп при условии, что он действительно не равен этому числу пунктов.


3. Проверка гипотез, примеры

Все исходные данные, используемые для примеров, находятся в файле Data.xls.

3.1. Проверка зависимых выборок

Представим следующую ситуацию. Допустим, есть торговая система, которая генерирует некоторую совокупность торговых сделок. Составим выборку из прибыльных сделок объемом 100 единиц. Исходные данные находятся в листе "Profits".

Описательная статистика выборки Profits после удаления выбросов представлена в табл.1:

Табл.1. Статистика выборки Profits

Гистограмма выборки выглядит следующим образом (рис.2).

Рис.2 Гистограмма для выборки

Рис.2. Гистограмма для выборки Profits

Среднее значение выборки равно 83,4 пп, медиана – 83 пп.

Что если немного изменить точку входа в рынок на несколько пунктов? Например после появления торгового сигнала можно выставлять лимитный ордер, улучшающий цену входа.

Как поменяются результаты? На этот вопрос можно ответить с помощью статистических гипотез.

В пакете Statistica формально проверяем, не извлечены ли выборки из одной генеральной совокупности:

Изменим цену входа на 15 пунктов, получим выборку NewProfits. В идеале должна получиться такая картинка (рис.3).

Рис.3 График для выборок Profits и NewProfits

Рис.3. График для выборок Profits и NewProfits

Высока вероятность, что будет принята альтернативная гипотеза, т.к. медианы выборок отличаются.

Но такую картину вряд ли удастся получить, т.к. рынок может не дать лучшие цены. В моем случае, при изменении цены входа, во вторую выборку попало 84 сделки. А другие 15 сделок просто не были совершены. Назовем эту скорректированную выборку NewProfitsReal.

На графике типа "ящик с усами" нет практически никакой разницы между выборками.

Рис.4 График для выборок Profits и NewProfitsReal

Рис.4. График для выборок Profits и NewProfitsReal

Проведем непараметрический тест по критерию Уилкоксона для связных выборок.

Результаты представлены в табл.2:

Табл.2. Результаты теста по критерию Уилкоксона для выборок Profits, NewProfitsReal

Уровень значимости очень высокий, что свидетельствует в пользу принятия нулевой гипотезы.

Таким образом, можно сделать вывод о том, что изменение точки входа не повлияло на доходность системы. Это в относительном смысле. В абсолютном же выражении, из-за пропущенных точек входа, система оказалась менее прибыльной.

Интересно, что в MQL5 программным образом тоже можно провести тест Уилкоксона. Правда он сравнивает медиану распределения с заданным значением m. Но это отличие непринципиальное.

Формально проверяем:

В библиотеке ALGLIB есть такая процедура: CAlglib::WilcoxonSignedRankTest(). Она сразу же дает результат для 3 видов теста: двухстороннего, левостороннего и правостороннего.

В скрипте test_profits.mq5 есть пример расчета. В журнале "Эксперты" увидим следующие результаты для выборки NewProfitsReal:

OO      0       12:04:08.814    test_profits (EURUSD.e,H1)      p-значение для двухстороннего теста: 0.7472
HD      0       12:04:08.814    test_profits (EURUSD.e,H1)      p-значение для левостороннего теста: 0.6285
CM      0       12:04:08.814    test_profits (EURUSD.e,H1)      p-значение для правостороннего теста: 0.3736

Левосторонний тест имеет форму:


Здесь проверяем альтернативу, что медиана выборки NewProfitsReal может быть больше или равна 83. Вероятность ошибки при отвержении H0 равна 0,63. Поэтому H0 принимается.

Правосторонний тест имеет форму:


Здесь проверяем альтернативу, что медиана выборки NewProfitsReal может быть меньше или равна 83. Вероятность ошибки при отвержении H0 равна 0,37. Поэтому H0 принимается.


3.2. Проверка независимых выборок

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

Итак, для целей анализа были созданы 2 выборки исходных данных. В каждой выборке изначально находилось 50 наблюдений. После удаления выбросов в первой выборке (брокер А) осталось 48 наблюдений, во второй (брокер B) – 49 наблюдений. Данные находятся в листе "ExecutionTime".

Формально проверяем:


Визуализируем показатели выборок (Рис.5). Судя по графику, значения медиан хотя и несильно, но отличаются.

Рис.5 График для выборок данных брокера A и B

Рис.5. График для выборок данных брокера A и B


Поскольку мы априори не знаем, к какому распределению относится каждая выборка, то обратимся к непараметрическим тестам для сравнения.

Например, воспользуемся U-критерием Манна-Уитни (табл.3). Среди непараметрических он считается одним из самых мощных.

Табл.3. Результаты теста по U-критерию Манна-Уитни для выборок данных брокера A и B

Вывод – есть отличие по тестам, нулевая гипотеза о равенстве выборок отвергается в пользу Н1.

В MQL5 программным образом тоже можно провести тест Манна-Уитни. В библиотеке ALGLIB есть процедура CAlglib:: MannWhitneyUTest(). Она сразу же дает результат для 3 видов теста: двухстороннего, левостороннего и правостороннего.

В скрипте test_time_execution.mq5 есть пример расчета. В журнале "Эксперты" увидим следующие результаты для сравнения выборок:

MR      0       12:55:08.577    test_time_execution (EURUSD.e,H1)       p-значение для двухстороннего теста: 0.0001
QF      0       12:55:08.577    test_time_execution (EURUSD.e,H1)       p-значение для левостороннего теста: 1.0000
PF      0       12:55:08.577    test_time_execution (EURUSD.e,H1)       p-значение для правостороннего теста: 0.0001

Левосторонний тест имеет форму:


Нулевая гипотеза - медиана выборки данных брокера 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

Рис.6. Диаграмма рассеяния для выборок Stops1, Stops2

Результаты проверки связи между выборками Stops1-Stops3 приведены в табл.5:

Табл.5 Результаты теста ранговой корреляции Спирмена для выборок Stops1, Stops3

Здесь нулевую гипотезу можно отвергнуть – слишком низкая вероятность ошибки.

Значит, принимается альтернатива о наличии связи. Визуально зависимость выглядит так (рис.7).

Рис.7 Диаграмма рассеяния для выборок Stops1, Stops3

Рис.7. Диаграмма рассеяния для выборок Stops1, Stops3

Подтвердим результаты кодом в MQL5. В скрипте test_correlation.mq5.есть пример расчета.

В самой библиотеке ALGLIB имеется процедура CAlglib::SpearmanRankCorrelationSignificance(), которая реализует тест на значимость коэффициента ранговой корреляции Спирмена

В журнале появятся такие записи:

OO      0       12:57:43.545    test_correlation (EURUSD.e,H1)  ---===Выборки Stops1 и Stops2===---
GO      0       12:57:43.545    test_correlation (EURUSD.e,H1)  p-значение для двухстороннего теста: 0.9840
KK      0       12:57:43.545    test_correlation (EURUSD.e,H1)  p-значение для левостороннего теста: 0.4920
JJ      0       12:57:43.545    test_correlation (EURUSD.e,H1)  p-значение для правостороннего теста: 0.5080
DM      0       12:57:43.545    test_correlation (EURUSD.e,H1)  
HJ      0       12:57:43.545    test_correlation (EURUSD.e,H1)  ---===Выборки Stops1 и Stops3===---
NS      0       12:57:43.545    test_correlation (EURUSD.e,H1)  p-значение для двухстороннего теста: 0.0002
RO      0       12:57:43.545    test_correlation (EURUSD.e,H1)  p-значение для левостороннего теста: 0.9999
FG      0       12:57:43.545    test_correlation (EURUSD.e,H1)  p-значение для правостороннего теста: 0.0001

Левосторонний тест имеет форму:

Здесь проверяется нулевая гипотеза о том, что между переменными имеется неотрицательная корреляция (т.е. либо нулевая корреляция, либо положительная).

Для пары выборок Stops1-Stops2 левосторонний тест показал, что нулевая гипотеза принимается. Для пары выборок Stops1-Stops3 левосторонний тест показал, что нулевая гипотеза тоже принимается. Почему так, если между выборками Stops1-Stops2 связи нет, а между выборками Stops1-Stops3 связь есть? Причина в том, что проверяется утверждение "больше или равно нулю". В первом случае на стороне H0 играет "равно нулю", а во втором – "больше".

Правосторонний тест имеет форму:

Здесь проверяется нулевая гипотеза о том, что есть отрицательная корреляция.

Для пары выборок Stops1-Stops2 правосторонний тест показал, что нулевая гипотеза принимается. Для пары выборок Stops1-Stops3 правосторонний тест показал, что нулевая гипотеза отвергается.

И еще одно замечание. В ходе теста было выявлено, что между выборками Stops1-Stops3 есть положительная вероятностная связь. Но сила этой связи носит скорее средний характер. Поэтому решение об отказе от стратегии 1 или 3 в портфеле остается за трейдером.


Заключение

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

Файлы библиотеки ALGLIB нужно скачать отдельно.


Прикрепленные файлы |
test_profits.mq5 (1.82 KB)
Data.zip (12.04 KB)
Dennis Kirichenko
Dennis Kirichenko | 2 дек 2014 в 14:18
Reshetov:
  1. "Парадокс" Блека: проводим несколько экспериментов и вычисляем для каждого вероятность нулевой гипотезы. Несмотря на то, что все статистические результаты отдельных экспериментов оказались "успешными", т.е. нулевая гипотеза для каждого из них была отвергнута с вероятностью p < n, после метаанализа получаем противоположный результат: p > n.

Интересный парадокс. Где можно об этом узнать поподробнее?

2. Прежде, чем применять статистику в той или иной области, необходимо заведомо убедиться, что имеем дело с эргодичной средой. А иначе получиться игра в цифири с умной рожей на лице.
Уточните, что подразумеваете под эргодичной средой.
СанСаныч Фоменко
СанСаныч Фоменко | 2 дек 2014 в 14:37
denkir:

Интересный парадокс. Где можно об этом узнать поподробнее?

Уточните, что подразумеваете под эргодичной средой.

От Вашей статьи двоякое впечатление.

Плюс. На данном форуме очень важной является сама по себе постановка вопроса о гипотетичной оценке результатов. На форуме полно людей, которые рисуют машку и считают, что это так и есть, а не машка в интервале.

Минус.

Полностью согласен с Решетовым. Все, что Вы рассказали - это относится к стационарным рядам или близким к ним - т.е. рядам, у которых с течением времени мало меняется мо и дисперсия. А таких рядов на финансовых рынках не бывает и все применение статитстики на финансовых рынках вертится вокруг стационарности временных рядов. Наиболее известные примеры: ARIMA, ARCH и все остальное.

Ваш случайный ряд, гистограмма которого приведена на рис.2, говорит о том, что ряд имеет слабое отношение к стационарному, он скошен и имеет существенно разные хвосты. Особенно это хорошо видно по отношению к нарисованной Вами идеально нормальной кривой. В силу этого все Ваши рассуждения ВООБЩЕ не применимы к Вашему примеру.  Этот как раз является иллюстрацией мыслей Решетова.

ПС. Самое опасно и подлое понятие в статистике - это корреляция. Лучше вообще ее не упоминать. 

Dennis Kirichenko
Dennis Kirichenko | 2 дек 2014 в 14:53
faa1947:
...Все, что Вы рассказали - это относится к стационарным рядам или близким к ним - т.е. рядам, у которых с течением времени мало меняется мо и дисперсия. А таких рядов на финансовых рынках не бывает и все применение статитстики на финансовых рынках вертится вокруг стационарности временных рядов. Наиболее известные примеры: ARIMA, ARCH и все остальное.

Ваш случайный ряд, гистограмма которого приведена на рис.2, говорит о том, что ряд имеет слабое отношение к стационарному, он скошен и имеет существенно разные хвосты. Особенно это хорошо видно по отношению к нарисованной Вами идеально нормальной кривой. В силу этого все Ваши рассуждения ВООБЩЕ не применимы к Вашему примеру.  Этот как раз является иллюстрацией мыслей Решетова.

Спасибо за мнение!

Приведу свои контраргументы.

Стационарность - это характеристика временного ряда. На рис.2 вариационный ряд. О временных рядах речь в статье не идёт! Хотя согласен с тем, что время - это полезная характеристика... 

Насколько понимаю, под эргодичностью подразумевается некоторая стабильность изучаемой системы...

Так вот, хотелось бы заметить важный момент. Если система, пусть говорим о временном финансовом ряде, не является стационарной, всё равно с помощью эконометрики можем подобрать устойчивую модель (например GARCH), описывающую поведение модели. И в этом вижу постоянство системы - поведение согласно модели... но с условием, что есть какая-то вероятность, что система "поломает" модель...

СанСаныч Фоменко
СанСаныч Фоменко | 2 дек 2014 в 15:26
denkir:

Спасибо за мнение!

Приведу свои контраргументы.

Стационарность - это характеристика временного ряда. На рис.2 вариационный ряд. О временных рядах речь в статье не идёт! Хотя согласен с тем, что время - это полезная характеристика... 

Насколько понимаю, под эргодичностью подразумевается некоторая стабильность изучаемой системы...

Так вот, хотелось бы заметить важный момент. Если система, пусть говорим о временном финансовом ряде, не является стационарной, всё равно с помощью эконометрики можем подобрать устойчивую модель (например GARCH), описывающую поведение модели. И в этом вижу постоянство системы - поведение согласно модели... но с условием, что есть какая-то вероятность, что система "поломает" модель...

Когда-то, несколько лет назад я опубликовал здесь на сайте статью, в которой обосновывал одну совершенно не приемлемую для большинства мысль. А именно.

Полно индикаторов. При этом все считают, что если индикатор нарисовать, то оно так и есть - ведь мы вот это самое и видим. При этом большинству не приходит в голову, что ТО, что мы видим в действительности может не существовать! Причина банальна. Если взять соответствующую индикатору регрессию, то запросто может оказаться, что несколько ее коэффициенты имеют столь широкие доверительные интервалы, что говорить о величине такого коэффициента вообще нельзя, а если выкинуть такой дефектный коэффициент, то рисунок индикатора будет совсем другой. Когда говорят: есть, правда, есть ложь, а есть статистика, то имеется ввиду именно это грустное и очень не привычное обстоятельство - ничему верить нельзя, включая доверительные интервалы.

Именно поэтому ушел из параметрических моделей и занялся моделями на базе машинного обучения. Там нет проблем со стационарностью, но проблемы с переобученностью во всей красе. 

Alexey Burnakov
Alexey Burnakov | 4 сен 2015 в 11:37

А мне статья понравилась.

Да, замечания Сан Саныча и Решетова законны - если сравниваемые системы (или система) поменяет свои параметры, то результаты теста будут бесполезны.

Но сама демонстрация применения методов радует. Для Форекса это редкость!

Я бы сказал еще кое-что, как человек, применяющий похожие методы именно для цен котировок. Можно заранее проверить, является ли среда гомогенной (на двух независимых больших по объему выборках), а затем уже с известной долей спокойствия довериться результатам проверки гипотезы. Это тоже возможно сделать благодаря тем же самым тестам.

Оптимизировать оптимизацию: несколько простых идей Оптимизировать оптимизацию: несколько простых идей

Процесс оптимизации может потребовать существенные ресурсы вашего компьютера или даже тестерных агентов MQL5 Cloud Network. В этой статье описываются некоторые несложные идеи, которые я использую на практике для облегчения работы или усовершенствования тестера стратегий платформы MetaTrader 5. Эти идеи я подчерпнул из прочитанной документации, форума и статей.

Третье поколение нейросетей: "Глубокие нейросети" Третье поколение нейросетей: "Глубокие нейросети"

Статья посвящена новому и очень перспективному направлению в машинном обучении — так называемому "глубокому обучению" и конкретней "глубоким нейросетям". Сделан краткий обзор нейросетей 2 поколения, их архитектуры связей и основных видов, методов и правил обучения и их основных недостатков. Далее рассмотрена история появления и развития нейросетей 3 поколения, их основные виды, особенности и методы обучения. Проведены практические эксперименты по построению и обучению на реальных данных глубокой нейросети, инициируемой весами накапливающего автоэнкодера. Рассмотрены все этапы от выбора исходных данных до получения метрик. В последней части статьи приведена программная реализация глубокой нейросети в виде индикатора-эксперта на MQL4/R.

Основы биржевого ценообразования на примере срочной секции Московской биржи Основы биржевого ценообразования на примере срочной секции Московской биржи

Статья описывает теорию биржевого ценообразования и специфику клиринговых расчетов срочной секции Московской биржи. Материал будет интересен как начинающим трейдерам, желающим получить свой первый биржевой опыт по торговле деривативами, так и опытным форекс-трейдерам, рассматривающих возможность переноса своей торговли на централизованную биржевую площадку.

Программируем режимы работы советника с помощью ООП Программируем режимы работы советника с помощью ООП

В статье рассматривается идея мультирежимного программирования торговых роботов на MQL5. Используется объектно-ориентированный подход для реализации каждого из режимов. Приводится пример иерархии режимных классов и пример классов для тестирования. Предполагается, что мультирежимное программирование торговых роботов полностью учитывает особенности каждого режима работы MQL5-советника. Для идентификации режимов создаются функции и перечисление.