Тест серий (runs test)

Тест серий (runs test, Wald–Wolfowitz test) используется для проверки того, является ли случайной последовательность, состоящая из двух возможных значений, например, 0 и 1.

Являются ли котировки валют случайными: пример на языке R

Выполним несложный скрипт на языке R (при необходимости следует установить пакеты quantmod и tseries):

library(quantmod) # Для загрузки котировок.
library(tseries)  # Для теста серий.

# Загрузим цены закрытия валютной пары GBP/USD за 250 последних дней:
stock = getSymbols("GBP/USD", src="oanda", from=Sys.Date()-250, auto.assign=F)
colnames(stock) = c("Close") # Имя столбца.
ret = 100*diff(log(Cl(stock))) #  Разность логарифмов цен закрытия.
ret = ret[-1] # Убрали первую строку, т.к. для неё нет предыдущей.
retf = factor(ret > 0) # Получили вектор факторов (цена возрастала или нет).
runs.test(retf, alternative = "two.sided") # Тест серий, альтернативная гипотеза - неслучайность.

Получим результат: p-value = 0.006813. Это значит, что при уровне значимости 0,007 = 0,7% мы должны отвергнуть гипотезу о случайности приращений логарифмов цен закрытия валютной пары GBP/USD.

Для проверки применим этот же тест к случайной последовательности:

# Сгенерируем 249 случайных чисел с нормальным законом распределения,
# имеющим те же параметры, что и приращения логарифмов цен закрытия:
ret2 = 100*rnorm(249, mean=mean(ret), sd=sd(ret))
retf2 = factor(ret2 > 0)
runs.test(retf2, alternative = "two.sided")

Получим: p-value = 0.3708, т.е. нет оснований отвергать гипотезу о случайности (что и следовало ожидать).

Являются ли котировки валют случайными: графический подход

Теперь построим гистограмму частотности серий из одинаковых значений и сравним её с аналогичной гистограммой для нормального распределения:

runs = rle(as.numeric(retf)) # Подсчёт длин серий.
runs1 = -runs$lengths[runs$values == 1] # Серии убывания цен - отрицательные длины.
runs2 = runs$lengths[runs$values == 2]  # Серии возрастания цен - положительные длины.
runs3 = c(runs1, runs2, recursive = TRUE) # Соединили оба вектора

# Повторяем то же самое для случайной последовательности:
rand = rnorm(1000, mean=mean(ret), sd=sd(ret))
rretf = factor(rand > 0)
rruns = rle(as.numeric(rretf))
rruns1 = -rruns$lengths[rruns$values == 1]
rruns2 = rruns$lengths[rruns$values == 2]
rruns3 = c(rruns1, rruns2, recursive = TRUE)

library(plotrix) # Для построения нескольких гистограмм на одном графике.
multhist( list(runs3, rruns3),      # Обе последовательности длин серий.
          breaks=seq(-16.5,16.5,1), # Границы для построения столбиков гистограмм.
          freq=F,                   # Относительные частоты, а не счётчики числа повторений.
          legend.text=c("GBP/USD","Случайные числа") )      # Заголовки.

Получим график, показанный на рис. 1.

../../_images/RunsTest-01.png

Рис. 1. Гистограммы распределения длин монотонных серий в последовательности дневных цен закрытия валютной пары GBP/USD и распределения длин серий в случайной последовательности

Тёмные столбики показывают, сколько раз встретилась серия данной длины в последовательности приращений логарифмов дневных цен закрытия (что соответствует монотонным участкам только возрастания или только убывания в последовательности самих цен). Например, столбик, помеченный значением 4, показывает, сколько раз цены возрастали четыре дня подряд; -4 – сколько раз цены падали четыре дня подряд. Светлые столбики соответствуют случайному распределению.

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

Данный результат можно объяснить тем, что спекулятивные участники рынка, распознав начало движения (возможно, случайное), присоединяются к нему, открывая позиции в ту же сторону, тем самым, поддерживая зарождающийся тренд.

Вывод

Биржевые котировки не являются случайными (во всяком случае, с точки зрения рассмотренного здесь критерия).

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

Список литературы

Ссылки



Комментарии

Комментариев пока нет.

* Обязательные поля
(Не публикуется)
 
Жирный Курсив Подчеркнутый Перечеркнутый Степень Индекс Код PHP Код Кавычки Вставить линию Вставить маркированный список Вставить нумерованный список Вставить ссылку Вставить e-mail Вставить изображение Вставить видео
 
Улыбка Печаль Удивление Смех Злость Язык Возмущение Ухмылка Подмигнуть Испуг Круто Скука Смущение Несерьёзно Шокирован
 
1000
Captcha
Refresh
 
Введите код:
 
Запомнить информацию введенную в поля формы.