Прогнозирование биржевых котировок в R
Продолжаем изучение удивительного пакета для статистической обработки данных R. В прошлый раз мы рассмотрели вопросы применения функции ARIMA из пакета forecast для предсказания курса валютной пары на Forex. А сегодня рассмотрим простую, но весьма эффективную стратегию прогнозирования на основе отклонения от трендовой полиномиальной линии.
Для разнообразия возьмем не валютные котировки, а котировки акций. Какая у вас любимая фирма? Не слышу! Что? Микрософт? Давайте для примера возьмем дневные цены закрытия на акции Microsoft (MSFT) с 2009 года и до конца 2014. А потом возьмем цены за январь 2015-го и сравним с прогнозом.
getSymbols("MSFT")
m <- MSFT["2009-01-01::2014-12-31"]
Строим график:
chartSeries(m$MSFT.Close)
Ну, что мы видим?
Видим, что несмотря на частые в среде линуксоидов разговоры о близком и неминуемом виндекапце, Microsoft на тот свет отнюдь не собирается, даже наоборот. Казалось бы, контора стабильно перестала выдавать инновации, народ силой сгоняют с Windows XP, слезать с Windows 7 вообще никто не желает, а финансовая мощь MS стабильно растет. Парадокс? Корпорация продает высокие технологии, технологии оказываются не такими уж высокими, но это никак не отражается на все растущей прибыли. И знаете почему? Контора доросла до таких размеров, что запросто может вообще ничего не производить и все равно будет с каждым годом все больше и больше зарабатывать, делая деньги на инвестициях и патентном терроризме. Чтобы подтвердить свой вывод, приведу пример: только Samsung платит Microsoft $1 млрд в год за... внимание... Андроид! Какое этот бизнес имеет отношение к высоким технологиям? Но не будем отклоняться от темы.
Котировки акций загрузились в продвинутом формате для хранения временных рядов — xts (extensible time-series). Преобразуем все в ts, а пустые места (дни, когда не было торговли) исключим (na.omit), либо проставим средние значения по соседям (na.approx):
na.omit(ts(m$MSFT.Close))
Для полученного временного ряда построим полиномиальную линию тренда и посмотрим, что получилось:
Что мы видим? Цена «отскакивает» от линии, а потом к ней возвращается. Сама собой приходит на ум стратегия:
- Если цена растет, но текущее значение расположено ниже линии тренда, надо покупать.
- Если цена растет, но текущее значение расположено выше линии тренда, не надо ничего делать.
- Если цена падает, но текущее значение расположено выше линии тренда, надо продавать.
- Если цена падает и текущее значение находится ниже линии тренда, не надо ничего делать.
Заметьте, что цена может развернуться и пойти в противоположную прогнозу сторону, но все равно рано или поздно возвращается к линии.
Чтобы было удобнее искать сигналы на покупку/продажу, построим еще один график, который будет показывать отклонение цены от тренда.
Текущее отклонение от тренда я обозначил красным пунктиром. Можно увидеть, что цена часто отскакивала именно от этого значения (когда цена акции падала на 4 доллара, то почти всегда следовал отскок, как минимум на 4 доллара). По нашей стратегии самое время запасаться ценными бумагами MSFT. Напомню, на календаре 31 декабря 2014 года. Так, купили. Теперь смотрим, сбылся ли прогноз:
t[length(t)]
[1] 46.45
summary(na.omit(ts(MSFT["2014-01-01::2015-02-18"]$MSFT.Close)))
MSFT.Close
Min. :34.98
1st Qu.:39.83
Median :42.43
Mean :42.67
3rd Qu.:46.16
Max. :49.61
В период с 1 января по 18 февраля 2015 года максимальная цена акций MSFT достигала 49 долларов 61 цента, тогда как мы «покупали» по $46.45. Максимальная прибыль составляла в один прекрасный момент $3,16 на акцию, но это не имеет значения, так как мы установили Take Profit на уровне $50,45. Значит ли это, что мы проиграли? Нет, если ждать дольше, то высока вероятность того, что цена преодолеет отметку в $50,45. Откуда такая уверенность? Ну так цена росла последние 5 лет и вряд ли разворот произойдет именно в тот месяц, когда мы решили прикупить свою порцию акций для спекуляции.
На этом месте я прощаюсь с тупыми читателями, а для умных будет еще загадка.
Загадка
Этот вопрос является своеобразным тестом на IQ и позволит читателю определить, дебил ли он или математический гений, финансовый самородок и акула капитализма в одном лице. Итак, вопрос: стратегия имеет огромный изъян, делающий ее малопригодной для использования на фондовом рынке (не говорю уже о валютном), особенно на средних и коротких отрезках времени. О каком очевидном изъяне идет речь?
Купила акции по $15 в 2009 году, продала по $50 в 2014
А на чем основана стратегия?
Стратегия основана на предположении, что существует «объективная» цена, которая не всегда совпадает с текущей рыночной. Текущая цена стремится к «объективной», иногда сравнивается с ней, но редко совпадает продолжительное время (иначе биржевая торговля потеряла бы смысл). Научившись примерно оценивать «объективную» цену можно понять, когда акции продаются дешевле, чем могли были бы продаваться, а когда дороже. Исходя из этого, можно делать предположения о направлении изменения цены в будущем.
Комментарии
Чингачгук
8 января, 2016 - 14:35
А все команды от начала и до конца не моли бы расписать?
Чингачгук
9 июля, 2018 - 20:27
хрен выдержиш просадки строком в несколько месяцев))) в несколько часов порой трудновато. Стратегия старинькая но гипотетически в толковых и везучих руках может и сработает, но я б не стал таким методом торговать. Оффтор как всегда огонь-мужик.
pomodor
11 июля, 2018 - 12:06
Так специалисты рекомендуют заливать не меньше 5 штук зелени, а торговцы с плечом больше 1:10 могут сразу застрелиться. Другое дело, что лично я уже давно понял, что торговля на Форексе в режиме минимального риска будет давать тебе 15-20% год. Есть более интересные и удобные способы вложить бабки и получить сравнимую или большую доходность.
Комментировать