Статья, опубликованная в Scientific Reports в 2009 году, называлась «Количественная оценка торгового поведения на финансовых рынках с использованием Google Trends». Основываясь на частоте определенных слов в поиске Google, можно ли предсказать эффективные торговые стратегии?

В рамках процесса сбора и анализа данных авторы прошли ряд интересных этапов. Чтобы изучить закономерности поиска финансовой информации, они разработали набор финансовых ключевых слов на основе веб-сайта Financial Times.

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

Можете ли вы сказать мне, каков был их вывод? Похоже, это очень хороший способ обойти случайные инвестиции в индекс S&P 500. По поводу этого результата ведутся споры, но сам процесс интересен. В этом примере исторические данные поступают из нескольких источников, а затем используется статистический анализ, чтобы определить, стоит ли инвестировать в портфель на основе данных из другого источника.

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

Ниже приведены темы, которые мы подробно обсудим:

  • В этой статье описывается, как Google Trends можно использовать для количественной оценки торгового поведения на финансовых рынках.
  • Использование Google Trends для получения данных о тенденциях
  • Данные Quandl для индекса Доу-Джонса
  • Заказ сделок
  • Расчет результатов инвестирования
  • Последние мысли

Настройка блокнота

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

Количественная оценка торгового поведения на финансовых рынках с помощью Google Trends

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

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

За период с 1 января 2004 г. по 28 февраля 2011 г. авторы собрали данные из Google Trends и промышленного индекса Доу-Джонса (DJIA). Финансовые условия (в частности, термин «долг») могут привести к предвзятости в отношении финансовых результатов, когда они включены в процесс. Используя наборы Google, они рекомендуют дополнительные условия поиска на основе исходных условий, основанных на исходном наборе условий. Выбирается 98 различных поисковых терминов, и торговые решения принимаются на основе объема поиска по каждому термину.

Значение закрытия DJIA используется в понедельник или вторник в зависимости от дня недели. С воскресенья по субботу — это отчетный интервал для данных Google Trends.

По словам авторов, поисковые термины в Google коррелируют с движениями DJIA, чтобы проиллюстрировать взаимосвязь между поисковым поведением и движениями рынка. По мнению авторов, фондовый рынок должен вырасти, если после трехнедельного окна количество поисковых запросов в Google увеличилось, а на следующей неделе последовал подъем. Поэтому трейдер должен открыть длинную позицию и перевести в нее все текущие активы. Учитывая прогнозируемый рост рынка недвижимости, прибыль будет получена в течение этого недельного периода по мере увеличения стоимости инвестиций.

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

Также представлен анализ производительности. Основываясь на их стратегии, их позиция увеличилась по поисковому запросу «долг». Сплошная синяя линия представляет их производство в размере 326 процентов на следующем графике:

На основе моделирования 10 000 реализаций случайной стратегии пунктирные линии представляют собой стандартное отклонение кумулятивной доходности.

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

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

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

Сбор данных

В этом исследовании мы создадим DataFrame, содержащий данные DJIA и Google Trends, предоставленные авторами, а также динамически собранные веб-данные для каждого из них. Наши данные будут сравниваться с тем, что они собрали, а затем мы будем использовать их алгоритм для моделирования сделок.

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

Мы также можем столкнуться с проблемами при сборе данных, но в реальном мире это не редкость. Класс панд DataReader больше не поддерживает данные DJIA, поэтому мы не можем получить их с помощью Yahoo! Веб-сервис под названием Quandl будет использоваться для преодоления Yahoo! Отсутствие у Finance данных данных DJIA также является хорошим введением для читателя.

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

Кроме того, доступ к данным Google Trends затруднен. Наши данные будут динамически загружены из файла .csv, который я предоставлю.

Данные из бумаги

Есть онлайн-копии данных из статьи, но я также включил их в примеры кода. Используя следующую команду, его можно загрузить в Pandas:

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

Чтобы извлечь цену и дату закрытия DJIA для каждой строки, нам нужно извлечь значения долга, дату окончания недели Google Trends и дату окончания недели Google Trends. Вот код pandas, который нам нужен для этого:

Данные из Google Trends были нормализованы относительно всех поисковых запросов, сгенерированных газетой. Когда мы получим эти данные самостоятельно, мы сможем увидеть необработанные значения. Такие данные имеют значение не из-за их ценности, а из-за того, как они меняются со временем, что можно использовать для обозначения относительных изменений в объемах поиска.

Использование Quandl для сбора собственных данных DJIA

Данные DJIA можно получить с помощью класса pandas DataReader из Yahoo! Финансы в прошлом. В связи с прекращением Yahoo! данных DJIA, нам нужна замена. Данные можно получить из Quandl (http://www.quandl.com/). Наборы данных для количественного анализа предоставлены Quandl. Их API обеспечивает доступ к своим данным на основе API, а учетные записи можно создавать бесплатно. Кроме того, они предоставляют клиентские библиотеки Python, Java и C#. Мы будем использовать эту команду в этом обсуждении:

Пакет кода для текста включает в себя файл, содержащий следующие данные:

Следующая команда отображает полученные данные. В указанные даты он показывает следующие ежедневные переменные DJIA:

Эти данные содержат значения Close, которые мы хотели бы объединить с нашим DataFrame. Столбец DJIADate предоставит нам данные, необходимые для согласования наших дат. Кроме того, мы хотели бы удалить все дни с несогласованными данными. Используя слияние pandas, мы можем легко это сделать. Для выполнения этой операции необходимо извлечь значения Close из индекса и переместить их в столбец:

Используя столбцы DJIADate и Date из двух объектов DataFrame, мы создадим новый объект DataFrame с двумя объединенными наборами данных (мы отказываемся от DJIADate, поскольку он избыточен, и устанавливаем Date в качестве индекса) следующим образом:

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

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

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

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

Соотношение идеальное. Обобщая наши данные таким образом, мы можем быть уверены, что они были подготовлены правильно.

Статистика из Google Trends

Данные Google Trends по термину «долг» были предоставлены авторами. Это удобно, но нам нужны собственные данные Google Trends. Похоже, что API-доступ к этим данным в настоящее время недоступен. Тем не менее, у нас есть несколько вариантов его получения. Автоматизация веб-сканирования может быть достигнута с помощью механизированной структуры. Кроме того, мы можем загрузить необходимые нам данные в формате CSV с помощью веб-портала.

http://www.google.com/trends/ позволяет выполнять поиск по любому термину и получать данные о тенденциях, связанные с этим термином. Поиск термина долг приводит к следующей команде:

Мы не можем использовать это в нашем приложении Pandas, потому что оно слишком красивое. На следующем снимке экрана показано, что, если мы нажмем кнопку параметров, мы сможем загрузить данные в виде файла CSV:

Вот ссылка для скачивания. Также предоставляется папка данных для образцов. Trends_report_debt.csv — это имя файла. Несколько строк файла показаны в следующей команде:

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

Поиски не учитываются по этим числам. Чтобы понять, как объем меняется с течением времени, вы можете сравнить его с другими периодами в наборе данных, предоставленном Google. К сожалению, они хранят хорошие данные при себе, но мы все еще можем использовать эту информацию.

В качестве первого шага мы можем объединить эти данные в наш набор данных и проверить их соответствие. Будет выполнена та же процедура, и снова будет использован pd.merge(). Слева мы присоединимся к столбцу GoogleWE, а справа — к столбцу Week. Слияние, переименование столбцов долга и перемещение индексов можно выполнить с помощью следующей команды:

Чтобы проверить, насколько близко наши данные о тенденциях коррелируют с тенденциями, используемыми в документе, мы можем создать новый DataFrame с нормализованными данными о тенденциях из обеих статей (индексированных GoogleWE):

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

Взглянув на корреляцию между этими двумя, мы увидим, что они очень тесно связаны:

Генерация сигналов ордеров

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

Первый шаг — переместить даты GoogleWE в индекс, чтобы реорганизовать наши данные. Эти даты окончания недели будут использоваться в качестве основы для наших торговых решений, поскольку они представляют собой цену закрытия в начале следующей недели. Столбец DJIAClose также опущен из-за его дублирования с Close:

Чтобы рассчитать скользящее среднее, мы должны взять трехнедельное среднее за каждую неделю в предыдущие три недели. Используя pandas, мы можем рассчитать как скользящую среднюю, представленную в документе, так и скользящую среднюю, полученную из данных Google Trends:

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

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

В результате разницы в нормализации данных торговые сигналы, основанные на наших данных, очень похожи.

Вычисление доходности

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

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

Мы просто умножаем значение сигнала на процентное изменение для расчета недельной доходности (оба сигнала будут умножены для обоих наборов трендов):

Результаты стратегии и совокупная доходность

Основываясь на нашей стратегии, теперь у нас есть все еженедельные доходы. Применение кумулятивного произведения 1 + base.ret0 (еженедельный доход) и вычитание 1 из кумулятивного произведения позволяет нам рассчитать чистую процентную доходность инвестиций в конце:

Эта стратегия приносила нам деньги в ходе нашего пробега. Основываясь на данных в статье, мы строим доходность следующим образом:

Следовательно, мы достигаем результатов, очень похожих на результаты, опубликованные в статье, путем реализации стратегии. Однако кривая почти точно следует той же траектории, что и у них, но мы добились увеличения стоимости только на 271 процент. В итоге можно сделать вывод, что наша стратегия работает аналогично их, хотя некоторые расчеты некоторых решений могут незначительно отличаться. Панды научили вас многим концепциям, и это самая важная часть.

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

Наши данные о тенденциях из Google следовали очень схожим путям, но когда мы изучили сигналы ордеров, были обнаружены небольшие различия, которые могли уменьшить прибыль. В результате доходы растут не так быстро, как если бы общее изменение объема поискового запроса было очень близко к 0, но стратегия по-прежнему выполняется в любом случае. Цель этого анализа состоит не в том, чтобы оценить точность их результатов, а в том, чтобы определить, можно ли использовать панды для воспроизведения процесса и принятия решений.

Краткое содержание

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

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

Также важно отметить, что мы не охватили все.

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

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

оригинал опубликован на:

Делаем прибыльную торговлю с помощью Google Trends. https://onepagecode.substack.com/p/making-profitable-trade-using-google