Прогнозирование акций в python

Прогнозирование цен на акции с помощью Python

Дата публикации Nov 9, 2018

Раньше для инвестирования в фондовый рынок требовалась тонна капитала и брокер, который бы сократил ваши доходы. Затем Robinhood разрушил отрасль, позволив вам инвестировать всего лишь 1 доллар и вообще избегать брокера. Robinhood и приложения, подобные ему, открыли возможность инвестирования для всех, у кого есть подключенное устройство, и дали неинвесторам возможность получить прибыль от новейшего технологического стартапа.

Прогнозирование акций в python

Тысячи компаний используют программное обеспечение для прогнозирования движения на фондовом рынке, чтобы помочь им принять инвестиционные решения. Средний пользователь Robinhood не имеет этого доступного для них. Примитивные алгоритмы прогнозирования, такие как линейная регрессия временного ряда, могут быть выполнены с помощью прогнозирования временных рядов путем использования таких пакетов Python, какscikit учитьсяа такжеiexfinnance,

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

Настроить

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

Если у вас еще нет некоторых из этих пакетов, вы можете установить их через pip install PACKAGE или путем клонирования репозитория git.

Вот пример установки numpy с помощью pip

Теперь откройте ваш любимый текстовый редактор и создайте новый файл Python. Начните с импорта следующих пакетов

Примечание: пакеты datetime, time и smtplib поставляются с python

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

Получение акций

Используя пакет Selenium, мы можем очистить скрининг акций Yahoo от тикеров акций.

В функции создайте свой драйвер Chrome, затем используйте driver.get(url) чтобы получить нужную веб-страницу. Мы будем ориентироваться наhttps://finance.yahoo.com/screener/predefined/aggressive_small_caps?offset=0&count=202который покажет 200 акций, перечисленных в категории «агрессивные маленькие заглавные буквы». Если вы идете вhttps://finance.yahoo.com/screenerвы увидите список всех категорий экранов, которые предоставляет Yahoo. Затем вы можете изменить URL-адрес по своему вкусу.

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

Далее нам нужно найти XPath для элементов тикера, чтобы мы могли их очистить. Перейдите по URL-адресу экрана и откройте инструменты разработчика в своем веб-браузере (Command + Option + I/Control + Shift + IилиF12для Windows).

Нажмите кнопку «Выбрать элемент»

Прогнозирование акций в python

Нажмите на тикер и проверьте его атрибуты

Прогнозирование акций в python

Наконец, скопируйте XPath первого тикера, HTML-элемент должен выглядеть примерно так

Прогнозирование акций в python

XPath должен выглядеть примерно так

Если вы проверите атрибуты тикера ниже первого, вы заметите, что XPath точно такой же, за исключением выделенного жирным шрифтом 1 в приведенном выше коде с шагом 1 для каждого тикера. Таким образом, значение XPath для 57-го тикера

использование driver.quit() выйти из веб-браузера. Теперь у нас есть все значения тикера и мы готовы прогнозировать акции.

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

Обрабатывайте код с помощью блока try and кроме (на случай, если наш пакет акций не распознает значение тикера).

Прогнозирование акций

Затем экспортируйте исторические данные в CSV-файл, создать новый виртуальный столбец для прогноза и установить forecast_time = int(days)

Затем используйте numpy для манипулирования массивом, предварительной обработки значений и создания обучающих и тестовых значений X и Y. Для этого прогноза мы будем использовать test_size 0.5 это значение дало мне наиболее точные результаты.

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

Отправка сообщения

Создать функцию sendMessage это занимает output в качестве параметра. Для отправки SMS-сообщения мы будем использовать smtplib пакет делает это, чтобы мы могли отправлять текстовые сообщения через нашу электронную почту.

Сохраните имя пользователя электронной почты, пароль и номер получателя в качестве переменных. Мой сотовый оператор Verizon, поэтому я использую домен @vtext, вот несколько популярных расширений телефонных компаний, благодаря этомуВеб-сайт,

Используйте следующие строки, чтобы отправить SMS с соответствующим сообщением

Запуск программы

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

Вывод

При прогнозировании только 10 акций средняя процентная ошибка между фактической ценой за 1 день и прогнозной ценой за 1 день составила9,02%где 5-дневная процентная ошибка была неожиданной5,90%выкл. Это означает, что в среднем 5-дневный прогноз$ 0,14от фактической цены.

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

Источник

Прогноз акций в Python

Дата публикации Jan 19, 2018

Сделать (и потерять) фальшивые состояния, изучая настоящий Python

Прогнозирование акций в python

Прогнозирование акций в python

В то время как третий вариант является лучшим выбором на индивидуальном и общественном уровне, для его реализации требуется наибольшее мужество. Я могу выборочно выбирать диапазоны, когда моя модель приносит солидную прибыль, или я могу выбросить ее и притвориться, что никогда не тратил на это часы. Это кажется довольно наивным! Мы продвигаемся, постоянно терпя неудачу и учась, а не только продвигая наш успех. Более того, код Python, написанный для сложной задачи, не является кодом Python, написанным напрасно!

В этом посте описаны возможности прогнозирования Stocker, инструмента «биржевого анализа акций», который я разработал в Python.В предыдущей статьеЯ показал, как использовать Stocker для анализа, иполный код доступен на GitHubдля тех, кто хочет использовать его самостоятельно или внести свой вклад в проект.

Stocker для прогноза

Класс теперь доступен в нашей сессии. Мы создаем объект класса Stocker, передавая ему любой допустимый тикер (смелыйвыводится):

Точно так же у нас есть 20 лет ежедневных данных об акциях Amazon для изучения! Stocker построен на основе финансовой библиотеки Quandl и содержит более 3000 акций. Мы можем сделать простой график истории акций, используя plot_stock метод:

Прогнозирование акций в python

Аналитические возможности Stocker можно использовать для нахождения общих тенденций и моделей в данных, но мы сосредоточимся на прогнозировании будущей цены. Предсказания в Стокерсделано с использованием аддитивной моделикоторый рассматривает временные ряды как комбинацию общей тенденции вместе с сезонностями в различных временных масштабах, таких как ежедневный, еженедельный и ежемесячный. Stocker использует пакет пророка, разработанный Facebook для аддитивного моделирования. Создание модели и прогнозирование можно выполнить с помощью Stocker в одну строку:

Прогнозирование акций в python

Обратите внимание, что зеленая линия прогноза содержит доверительный интервал. Это отражает неопределенность модели в прогнозе. В этом случае ширина доверительного интервала устанавливается равной 80%, что означает, что мы ожидаем, что этот диапазон будет содержать фактическое значение 80% времени. Доверительный интервал увеличивается во времени, потому что оценка имеет большую неопределенность, поскольку она удаляется от данных. Каждый раз, когда мы делаем прогноз, мы должны включать доверительный интервал. Хотя большинство людей стремятся получить простой ответ о будущем, наш прогноз должен отражать, что мы живем в неопределенном мире!

Любой может делать прогнозы по акциям: просто выберите число, и это ваша оценка (я могу ошибаться, но я уверен, что это делают все люди с Уолл-стрит). Чтобы доверять нашей модели, мы должны оценить ее на предмет точности. В Stocker существует ряд методов оценки точности модели.

Оценка прогнозов

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

Прогнозирование акций в python

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

Предварительный выбор точки изменения

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

Прогнозирование акций в python

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

Теперь, когда у нас есть представление о влиянии предыдущего, мы можем численно оценить различные значения, используя набор для обучения и проверки:

Здесь мы должны быть осторожны, чтобы наши данные проверки не совпадали с нашими данными тестирования. Если бы это было так, мы бы создали лучшую модель для тестовых данных, но тогда мы просто переоснастили бы тестовые данные, и наша модель не смогла бы преобразоваться в данные реального мира. В целом, как это обычно делается в науке о данных, мы используем три различных набора данных: обучающий набор (2013–2015 годы), набор для проверки (2016 год) и набор для тестирования (2017 год).

Мы оценили четыре априора с четырьмя показателями: ошибка обучения, диапазон обучения (доверительный интервал), ошибка тестирования и диапазон тестирования (доверительный интервал) со всеми значениями в долларах. Как мы видели на графике, чем выше предварительное значение, тем ниже ошибка обучения и тем ниже погрешность данных обучения. Мы также видим, что более высокий априор уменьшает нашу ошибку тестирования, подкрепляя нашу интуицию тем, что точная подгонка к данным является хорошей идеей для акций. В обмен на большую точность тестового набора мы получаем больший диапазон неопределенности в тестовых данных с повышенным

Предварительная проверка Stocker также отображает два графика, иллюстрирующие эти моменты:

Прогнозирование акций в python

Прогнозирование акций в python

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

Прогнозирование акций в python

Ошибка набора тестов сводится к минимуму до 0,5. Мы установим предшествующий атрибут changepoint объекта Stocker соответствующим образом.

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

Оценка уточненной модели

Теперь, когда наша модель оптимизирована, мы можем снова оценить ее:

Прогнозирование акций в python

Это выглядит лучше! Это показывает важностьоптимизация модели, Использование значений по умолчанию дает разумное первое предположение, но мы должны быть уверены, что используем правильные «настройки» модели, точно так же, как мы пытаемся оптимизировать звучание стереозвука, регулируя баланс и затухание (извините за устаревшие ссылки).

Игра на фондовом рынке

Правила нашей стратегии просты:

Мы играем это каждый день в течение всего периода оценки, который в нашем случае равен 2017 году. Чтобы играть, добавьте количество долей к вызову метода. Стокер расскажет нам, как стратегия разыгрывается в цифрах и графиках:

Прогнозирование акций в python

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

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

Прогнозирование акций в python

Я знал, что наша модель может сделать это! Тем не менее, наша модель выиграла у рынка только тогда, когда мы имели возможность задним числом выбрать тестовый период.

Предсказания на будущее

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

Прогнозирование акций в python

Прогнозирование акций в python

Модель на Амазоне в целом бычья, как ибольшинство «профессионалов».Кроме того, неопределенность увеличивается по мере того, как мы делаем оценки, как и ожидалось. В действительности, если бы мы использовали эту модель для активной торговли, мы бы тренировали новую модель каждый день и делали прогнозы на максимум один день в будущем.

Хотя мы не можем разбогатеть на инструменте Stocker, выгода заключается в разработке, а не в конечных результатах! Мы не можем знать, можем ли мы решить проблему, пока не попробуем, ноЛучше попробовать и потерпеть неудачу, чем никогда не пытаться вообще!Для тех, кто заинтересован в проверке кода или использовании Stocker самостоятельно, этодоступно на GitHub,

Как всегда, мне нравятся отзывы и конструктивная критика. Со мной можно связаться в твиттере@koehrsen_will,

Источник

Анализ данных на Python — построение модели фондового рынка со Stocker

Прогнозирование акций в python

Введение

В этой статье будет показано, как использовать Stocker, инструмент для анализа и прогнозирования рынка, реализованный в виде класса Python. Название было изначально произвольным, но потом оказалось, что оно хорошо подходит для «исследователя рынка» («stock» (англ.) = «акция», прим.). Несколько раз я пытался одолеть классы, основу объектно-ориентированного программирования на Python, но, как и большинство разделов программирования, они не имели смысла, пока я только читал книги. Только когда я погрузился в реальный проект, в котором возникла проблема, которую я раньше не решал, лишний раз убедился, что практика > теория! Помимо рассмотрения Stocker, мы затронем некоторые важные темы, включая основы классов Python и аддитивных моделей. Для тех, кто хочет использовать Stocker, весь код можно найти в GitHub вместе с документацией. Программа специально разрабатывалась так, чтобы быть простой в использовании (даже для тех, кто не знаком с Python), и я рекомендую всем читающим статью опробовать ее.

Перейдем к возможностям Stocker!

Прогнозирование акций в python

Начало работы со Stocker

После установки необходимых библиотек первое, что нужно сделать — импортировать класс Stocker в сессию Python. Сделать это можно из интерактивного режима, или же в Jupyter Notebook, запущенного в каталоге со скриптом.

Преимущества Python

Прогнозирование акций в pythonДанные по акциям Microsoft

Преимущество класса Python заключается в том, что функции и данные, на которые они действуют, связаны с одним и тем же объектом. Мы можем использовать функцию объекта Stocker для построения всей истории курса:

Прогнозирование акций в python

По умолчанию значение, которое рисуется — это скорректированная цена закрытия, т.к. акции могут разделить («Stock split». Например, акция начнет стоит 1/2 от предыдущей цены, но и количество акций удвоится. Это делается, чтобы акции стали доступны для мелких инвесторов ).

Это довольно простой график, который мы легко бы нашли самостоятельно в поиске Google, но так приятно сделать это самому несколькими строками на Python! Функция plot_stock имеет ряд необязательных аргументов. По умолчанию этот метод отображает скорректированную цену закрытия за весь доступный промежуток времени, можно задавать диапазон дат, желаемую статистику для графика и тип графика. Например, если мы хотим сравнить ежедневное изменение цены со скорректированным объемом (количеством акций), то укажите их в вызове функции.

Прогнозирование акций в python

Обратите внимание, что ось y измеряется в процентах относительно среднего значения для статистики. Эта шкала необходима, потому что ежедневный объем торговли акциями находится в диапазоне в сотнен миллионов, а ежедневное изменение цены обычно составляет несколько долларов!

Ежедневное изменение цены предсказать невозможно

Преобразовав в процентное изменение, мы можем посмотреть на оба набора данных в аналогичном масштабе. На графике показано, что нет никакой корреляции между объемом торгов и ежедневным изменением цены. Это удивительно, поскольку мы могли ожидать, что больше акций будет продаваться в дни с большими изменениями цен, поскольку люди спешат воспользоваться преимуществами колебаний. Тем не менее, единственной тенденцией, по-видимому, является то, что объем торговли с течением времени уменьшается. 4 декабря 2017 года также произошло значительное снижение цены, и мы могли бы попытаться соотнести с новостями о Microsoft. Быстрый поиск новостей за 3 декабря выдает следующее:

Прогнозирование акций в pythonНадежность этих источников вызывает вопросы

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

Построим графики на любой вкус

Давайте притворимся, что однажды у нас хватило ума инвестировать в 100 акций Microsoft при первоначальном публичном размещении (IPO) компании. Насколько стали бы мы богаче?

Прогнозирование акций в python

Использование этих результатов позволит планировать наши «перемещения» во времени назад, чтобы максимизировать прибыль.

Изменим временной промежуток и сравним полученный результат:

Удивительно, но на фондовом рынке можно потерять деньги!

Аддитивные модели

Аддитивные модели — мощный инструмент анализа и предсказания временных рядов, одного из наиболее распространенных типов данных. Концепция проста: временные ряды представляют как комбинацию некоторых шаблонов в разных временных масштабах и общий тренд. Мы знаем, что тренд для акций Microsoft — постоянный рост, но также могут быть закономерности на ежегодной или ежедневной основе, такие как рост каждый вторник, что выгодно знать инвестору. Prophet — потрясающая библиотека разработанная Facebook, для анализа временных рядов с ежедневными наблюдениями (например, цены акций) ( “prophet” (англ.) = “пророк”, прим. ). Stocker делает моделирование с Prophet под капотом, остается вызвать метод для создания и проверки модели:

Прогнозирование акций в python

Аддитивная модель сглаживает шум в данных, поэтому смоделированная линия не совпадает с наблюдениями. Модели Prophet также вычисляют неопределенность, естественную часть моделирования, поскольку никогда нельзя быть уверенным в прогнозах при работе с колебаниями реальных процессов в жизни. Prophet модель способна делать прогнозы на будущее, но пока мы больше озабочены прошлым. Обратите внимание, что этот вызов метода возвратил два объекта, модель и некоторые данные, которые мы присвоили переменным. Используем эти переменные для построения временных рядов.

Прогнозирование акций в python

Значение по умолчанию для weekly_seasonality — False, но мы изменили значение, чтобы включить «недельную сезонность» в нашу модель. Затем сделаем еще один вызов create_prophet_model и отобразим полученные компоненты. Ниже приведена зависимость новой модели.

Прогнозирование акций в pythonУ меня не получилось заставить график выглядеть хорошо

Контрольные точки

Прогнозирование акций в python

Прогнозирование акций в python

Помимо графического отображения относительной частоты поиска, Stocker отображает близкие связанные и набирающие популярность для диапазона дат графика запросы. На графике ось y нормализуется между 0 и 1, деля значения по их максимумам, позволяя сравнивать две переменные с разными шкалами. Из рисунка, похоже, следует, что корреляции между поисками «прибыль Microsoft» и ценой акций Microsoft нет.

Зависимость: прямая, обратная или случайная?

Прогнозирование акций в pythonданных Python и Stocker» width=»570″ height=»386″ data-mce-src=»https://neurohive.io/wp-content/uploads/2018/08/1_6aJKZOdBN7Fs3EYTxU3LjA-570×386.png» >

Похоже, что уменьшение количества поисковых запросов «Microsoft Office» приводит к росту цен на акции. Кто-то должен сказать Microsoft об этом.

Предсказания цены акций на Python

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

Прогнозирование акций в python

Больше статей о машинном обучении на Python:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *