Блог им. egenui

R. Как искать закономерности на рынке

Для начала небольшое вступление. Как-то Тимофей написал пост, с вопросом о том каким образом искать закономерности на рынке http://smart-lab.ru/blog/286459.php, на что я ответил что закономерности на рынке искать надо метододами DataMining'а и пытаться отыскать на графике цен что-то глазами это пустая трата времени, и этой дествительно так.

В числовом ряде искать закономерности глазами это чистое безумие, Сегодня будет пара примеров того как эти самые закономерности можно искать, в частности поговорим о закономерностях типа «в последнюю неделю квартала последний час торговли зеленый чаще чем красный», подобную закономерность заметить глазами невозможно, но найдя что-то подобное можно построить примитивную, а следователно идеальную не ограниченную степенями свободы систему. И так.

Для начала нам понадобяться сами данные. 
getSymbols('MICEX', from='2009-01-01', src='Finam', period='hour')
Давайте разберем несколько выдумманых гипотез относительно доходностей рынка в определенный период.
Первая гипотеза звучит так «В пятницу рынки обычно растут»

Проверим данное утверждение:
Преобразуем часовые данные в дневные и посчитаем доходность за каждый день
MICEX_DAYILY <- to.daily(MICEX_HOUR)
MICEX_DAYILY$Return <- dailyReturn(MICEX_DAYILY)
Далее среди всех дней выберем пятницы и построим гистограмму доходности а так же добавим на гистограмму такие показатели как среднее и стандартное отклонение
hist(MICEX_DAYILY[weekdays(index(MICEX_DAYILY)) %in% 'пятница']$Return *100, col='lightblue', border = "blue", main='MICEX Friday return 2009-2015 г.', xlab = 'Return %')
 
abline(v = sd(MICEX_DAYILY[weekdays(index(MICEX_DAYILY)) %in% 'пятница']$Return *100) , col='green')
abline(v = sd(MICEX_DAYILY[weekdays(index(MICEX_DAYILY)) %in% 'пятница']$Return *100) *-1, col='red')
abline(v = mean(MICEX_DAYILY[weekdays(index(MICEX_DAYILY)) %in% 'пятница']$Return *100), col='black')
R. Как искать закономерности на рынке
Ну как видите утверждение о том что в пятницу рынок растет ложно.

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

Принято считать что связанно это с тем что управляющие хотят показать положительную доходность. И так, у нас уже есть данные, найдем в наших данных последний день квартала, и проделаем тоже самое построим гистограмму. 
hist(MICEX_DAYILY[endpoints(MICEX_DAYILY, on = 'quarters')]$Return *100,col = 'lightblue' , border = 'blue' ,breaks = 10, main = 'Last quarter day return 2009-2015', xlab = 'Return &')

R. Как искать закономерности на рынке
ну по сути тоже ничего особенного хотя и есть небольшой перевес в положительную сторону, давайте посмотрим сколько бы вы заработали если покупали на открытии последнего дня квартала и продавали на закрытии того же дня.
R. Как искать закономерности на рынке
результат 6%.

Ну и последняя гипотеза «в последнюю неделю квартала последний час торговли зеленый чаще чем красный»

Для начала подготовим данные.
> temp <- MICEX_HOUR[endpoints(MICEX_HOUR, on = 'quarters')]
> temp[.indexhour(temp) %in% c(18)]
Так как оказалось что данные с Финама по последним часам квартала за 2012-2013 год битые, брал данные только за 2014-2015
temp$Return <- Delt(temp$MICEX.Open, temp$MICEX.Close)
temp <- temp['2014/2015']

Даных немного, вот они
                    MICEX.Open MICEX.High MICEX.Low MICEX.Close MICEX.Volume        Return
2014-03-31 18:00:00    1359.89    1369.29   1359.70     1369.29   9358593897  0.0069123238
2014-06-30 18:00:00    1469.20    1476.38   1468.19     1476.38   4875800860  0.0048870133
2014-09-30 18:00:00    1415.32    1417.44   1411.07     1411.07   4106077578 -0.0030028545
2014-12-30 18:00:00    1393.77    1401.16   1392.30     1396.61   3107614804  0.0020376389
2015-03-31 18:00:00    1620.70    1626.18   1618.25     1626.18   2849980040  0.0033812550
2015-06-30 18:00:00    1644.90    1655.24   1644.90     1654.55   6319242715  0.0058666180
2015-09-30 18:00:00    1643.58    1644.27   1634.07     1642.97   4327525815 -0.0003711410
2015-11-13 18:00:00    1729.27    1731.09   1723.63     1728.17   5590636195 -0.0006361066
Данных для гистограммы слишком мало, поэтому просто выведу текстом
Средный выигрыш — 0.2%
Стандартное отклонение -0.3%
Доходность по стратегии купить на открытии последней часовой свечи квартала и продать на закрытии — 2% при 8 сделках, что в общем-то неплохо.

Доходность такой стратегии
R. Как искать закономерности на рынке
Вывод: В общем количество идеи ограниченно только вашей фантазией, R это очень мощный инструмент для анализа данных, то что проделали выше делается за несколько минут. Можно кончно все делать руками, искать нужные дни, выписывать в excel данные по этому дню и считать все руками. Но кому как…
Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
1.6К | ★63
18 комментариев
Аффтор читай мой пост выше. Ты на правильном пути, только слегка заплутал:) Я придумал это ещё 8 лет назад:) Вот решил поделится, потому что сделал вывод что хрень вечная как у Ларри Вильямса и профит от неё зависит от умения быстро думать, а не от максимальной формализации. Но ты автор ударился в формализацию и это ошибка:)
уважаю труд
I-Am, для этих целей надо покупать рыночные данные вместе с историей стакана, протестировать можно все.
avatar
I-Am, а откуда вы знаете что в данный тик в стакане есть нужный вам объем по необходимой цене? Для таких низкочастотных стратегий наверно не совсем корректно тестить систему без истории стакана, но я в этом плохо разбираюсь. Ну если конечно у вас работает и так то и вправду нафиг тестить ). Да и статья же не об этом )
avatar
I-Am, а что в твоём понимании тик?
avatar
I-Am, по-моему тик это изменение стакана
avatar
ты бы написал, что нужно пользовать rusquant это раз. Второе у меня на первой же строчке ошибка для getSymbols. 

Error in data.frame(names, res, markets) :
arguments imply differing number of rows: 13006, 13008

 
Илья Гаврилов, попробуй использовать меньший период, например не с 2009 года а с 2011
avatar
evgen000, Да нет это не поможет… Финам в очередной раз изменил формат данных. Вот отсюда вопрос, либо ты давно уже написал эту статью, либо сам пофиксил rusquant. :) Так сделал бы доброе дело и залил на шару… А так статья не очень интересная в плане полезности. Конечно на голову лучше, чем весь тот шлак что встречается на смартлабе, но… Было бы гораздо интереснее если бы ты продемонстрировал эффект от какого-нибудь Parabolic SAR ну и данных нужно поболее. 10 кейсов это вобще не о чем, даже 1000 кейсов мало.
Илья Гаврилов, Странно. Я только что проверил, все работает.
install.packages(«rusquant», repos='http://R-Forge.R-project.org', type=«source»)
library(rusquant)
getSymbols('SBER', from='2015-01-01', src='Finam')
avatar
evgen000, Спасибо! Да, сейчас заработало. Не с первого раза, но после перезапуска RStudio без проблем... 
Можете порекомендовать хорошую книгу по R? Для начинающего? 
Илья Гаврилов, http://ashipunov.info/shipunov/school/books/rbook.pdf

r.psylab.info/library/
avatar
А почему такая маленькая выборка данных? Хотя бы 500 или 1000 объектов… а то кварталы и последние дни… лол… что то более частое, нет?
avatar
INTELLEKTTRADE, так напишите сами, я в качестве примера )
avatar
Ради интереса. А вообще получается находить закономерности? И какой у них срок службы бывает?
avatar
Андрей К, у таких закономерностей срок жизни совсем небольшой
avatar
если сильно хочется искать закономерности, то лучше уже с выставлением ордеров на истор данных…
avatar
Отличная статья, спасибо! Пытаюсь перейти с велса на R — для меня отличный наглядный пример.
Нижеприведённый код сработал только после написания 'пятница' с заглавной буквы)
 hist(MICEX_DAYILY[weekdays(index(MICEX_DAYILY)) %in% 'пятница']$Return *100, col='lightblue', border = "blue", main='MICEX Friday return 2009-2015 г.', xlab = 'Return %')
avatar

Читайте на SMART-LAB:
Фото
С Днём России!
Россия — наша огромная страна, в которой живут представители десятков национальностей, культур и традиций. Несмотря на различия, всех...
Фото
Итоги первичных размещений ВДО и некоторых розничных выпусков на 11 июня 2026 г.
Следите за нашими новостями в удобном формате: Telegram , Youtube , RuTube, Smart-lab , ВКонтакте , Сайт
Фото
Новые фьючерсы на Мосбирже: TSMC, SAP SE, Sony, ASML
На Мосбирже начались торги расчетными фьючерсными контрактами на американские депозитарные расписки (АДР) восьми крупнейших международных...
Фото
Интер РАО. МСФО Q1 2026г. Капекс растёт, рентабельность снижается…
Компания Интер РАО опубликовала финансовые результаты за Q1 2026г. по МСФО: 👉Выручка — 523,3 млрд руб. (+18,6% г/г) 👉Операционные...

теги блога evgen000

....все тэги



UPDONW
Новый дизайн