Создание стратегии для S & P500 с использованием соотношения пут-колл в Python.
Анализ настроений - обширная и многообещающая область анализа данных и торговли. Это быстро развивающийся тип анализа, который использует текущий импульс и ощущение рынка, чтобы определить, что участники намерены делать или какие позиции они занимают.
Представьте, что вы планируете пойти в кино и хотите предугадать, будет ли этот фильм хорошим или нет, поэтому вы спрашиваете многих своих друзей, которые уже видели этот фильм, их мнения. Предполагая, что 75% сказали, что фильм хороший, у вас будет определенный уровень уверенности, что он вам понравится, потому что настроение вокруг этого фильма в основном хорошее (игнорируя вкусы и предпочтения). Та же аналогия может быть применена к финансовым рынкам многими способами, как количественными, так и качественными.
Иногда индикаторы классифицируются по нескольким типам, что означает, что технический индикатор также может быть индикатором настроения (например, Балансовый объем). И способ анализа также может быть техническим (например, рисование линий поддержки и сопротивления) или количественным (например, возврат к среднему).
В этой статье будет обсуждаться знаменитый коэффициент пут-колл и его использование для прогнозирования направления движения индекса S & P500. Для этого исследования мы будем использовать качество сигнала в качестве оценки.
Я только что опубликовал новую книгу после успеха Новые технические индикаторы в Python. Он содержит более полное описание и добавление сложных торговых стратегий со страницей Github, посвященной постоянно обновляемому коду. Если вы считаете, что это вас заинтересует, не стесняйтесь перейти по приведенной ниже ссылке или, если вы предпочитаете версию в формате PDF, вы можете связаться со мной в Linkedin.
Введение в анализ настроений
Анализ настроений - это тип прогнозной аналитики, который работает с альтернативными данными, отличными от базовой ценовой структуры OHLC. Обычно он основан на субъективных опросах и оценках, но может также основываться на более количественных показателях, таких как ожидаемое хеджирование через силу или слабость рынка. Одним из известных индикаторов объективного анализа настроений является отчет «Обязательства трейдеров».
В этой статье речь пойдет об индикаторе Put-Call Ratio, временном ряду, предоставляемом CBOE на ежедневной основе. Сами по себе данные содержат чрезвычайно ценную информацию, когда дело касается фондовых индексов и торговли. Мы увидим, как загрузить исторические данные по S & P500, а также коэффициент пут-колл, затем разработаем торговую стратегию и оценим ее с помощью показателя качества сигнала.
Если вас также интересуют другие технические индикаторы и использование Python для создания стратегий, то мой бестселлер по техническим индикаторам может вас заинтересовать:
Опционы и соотношение пут-колл
Опцион колл - это право купить определенный актив в будущем по заранее определенной цене, а опцион пут - это право продать определенный актив в будущем по заранее определенной цене.
Следовательно, когда вы покупаете колл, вы можете купить что-то позже, а когда вы покупаете пут, вы можете что-то продать позже. Каждая транзакция имеет две стороны, поэтому, когда вы покупаете колл или пут, кто-то другой продает их вам. Это дает две другие позиции, которые могут быть открыты по опционам: продажа колл и продажа пут. Индикатор пут-колл работает с покупателями опционов и измеряет количество покупателей пут-опционов, разделенное на количество покупателей опционов. Это дает нам представление о настроениях участников рынка в отношении указанного капитала (в нашем случае это будет фондовый рынок США).
более высокое соотношение пут / колл означает, что есть больше покупателей пут (трейдеры делают ставку на снижение актива), а более низкое соотношение пут / колл означает больше колл. покупатели (трейдеры делают ставку на рост актива). Известный способ использования этого коэффициента при анализе настроений рынка - оценка следующих сценариев:
- Рост коэффициента означает медвежье настроение. Профессионалы «чувствуют», что рынок пойдет ниже.
- Падение коэффициента означает бычье настроение. Профессионалы «чувствуют», что рынок пойдет вверх.
Есть два типа соотношений: общий коэффициент пут-колл и соотношение пут-колл собственного капитала. В этом исследовании мы будем придерживаться исследования капитала, поскольку оно лучше отражает спекулятивную толпу.
Загрузка данных и разработка стратегии
К сожалению, актуальные данные соотношения пут-колл по какой-то причине больше не публикуются бесплатно на сайте CBOE. Поэтому нам нужно найти другие способы загрузки данных из нескольких источников и создания бесплатных пробных версий, чтобы иметь возможность получать данные. Мне удалось получить последние 1000 данных параллельно со значениями S & P500 по состоянию на август 2021 года. Если вы хотите получить дополнительную информацию, вам, возможно, придется заплатить сторонним поставщикам данных. В любом случае, по этой ссылке на GitHub вы можете получить некоторые исторические данные, которые я получил законным путем.
Первая часть - загрузить данные EQPCR.xlsx на ваш компьютер, а затем перейти в интерпретатор Python и переключить источник на то, где находится файл Excel. Теперь нам нужно импортировать его и структурировать.
import pandas as pd import matplotlib.pyplot as plt import numpy as np # Defining Primordial Functions def adder(Data, times): for i in range(1, times + 1): new = np.zeros((len(Data), 1), dtype = float) Data = np.append(Data, new, axis = 1) return Data def deleter(Data, index, times): for i in range(1, times + 1): Data = np.delete(Data, index, axis = 1) return Data def jump(Data, jump): Data = Data[jump:, ] return Data def indicator_plot_double(Data, first_panel, second_panel, window = 250): fig, ax = plt.subplots(2, figsize = (10, 5)) ax[0].plot(Data[-window:, first_panel], color = 'black', linewidth = 1) ax[0].grid() ax[1].plot(Data[-window:, second_panel], color = 'brown', linewidth = 1) ax[1].grid() ax[1].legend() my_data = pd.read_excel('EQPCR.xlsx') my_data = np.array(my_data)
Теперь у нас должен быть массив под названием my_data с историческими данными S & P500 и коэффициентом пут-колл.
Субъективно мы можем установить барьеры на уровне 0,80 и 0,35, поскольку они выглядят как ограничивающие соотношение. Это будут наши торговые триггеры. Конечно, здесь присутствует некоторая предвзятость, но идея состоит не в том, чтобы сформулировать прошлую торговую стратегию, а в том, чтобы посмотреть, будут ли препятствия работать в будущем.
Следуя интуиции, мы можем иметь следующие торговые правила:
- Покупайте (покупайте), когда коэффициент достигает 0,80 или превышает его.
- Продавать (продавать), когда коэффициент достигает 0,35 или превышает его.
def signal(Data, pcr, buy, sell): Data = adder(Data, 2) for i in range(len(Data)): if Data[i, pcr] >= 0.85 and Data[i - 1, buy] == 0 and Data[i - 2, buy] == 0 and Data[i - 3, buy] == 0: Data[i, buy] = 1 elif Data[i, pcr] <= 0.35 and Data[i - 1, sell] == 0 and Data[i - 2, sell] == 0 and Data[i - 3, sell] == 0: Data[i, sell] = -1 return Data my_data = signal(my_data, 0, 2, 3)
def signal_chart_ohlc_color(Data, what_bull, window = 1000): Plottable = Data[-window:, ] fig, ax = plt.subplots(figsize = (10, 5)) plt.plot(Data[-window:, 1], color = 'black', linewidth = 1) for i in range(len(Plottable)): if Plottable[i, 2] == 1: x = i y = Plottable[i, 1] ax.annotate(' ', xy = (x, y), arrowprops = dict(width = 9, headlength = 11, headwidth = 11, facecolor = 'green', color = 'green')) elif Plottable[i, 3] == -1: x = i y = Plottable[i, 1] ax.annotate(' ', xy = (x, y), arrowprops = dict(width = 9, headlength = -11, headwidth = -11, facecolor = 'red', color = 'red')) ax.set_facecolor((0.95, 0.95, 0.95)) plt.legend() plt.grid() signal_chart_ohlc_color(my_data, 1, window = 1000)
Приведенный выше код дает нам сигналы, показанные на графике. Соотношение пут-колл, являющееся индикатором времени падения, может потребовать некоторой настройки для улучшения сигналов. Давайте оценим это, используя один показатель для простоты - качество сигнала.
Качество сигнала - это показатель, напоминающий стратегию фиксированного периода удержания. Это просто реакция рынка через определенный период времени после сигнала. Как правило, при торговле мы склонны использовать переменный период, когда мы открываем позиции и закрываем их, когда получаем сигнал в другом направлении или когда мы останавливаемся (положительно или отрицательно). Иногда мы закрываемся в случайные периоды времени. Следовательно, качество сигнала - это очень простая мера, которая предполагает фиксированный период удержания, а затем проверяет рыночный уровень в этот момент времени, чтобы сравнить его с начальным уровнем. Другими словами, он измеряет время рынка, проверяя реакцию рынка.
# Choosing an example of 21 periods period = 21 def signal_quality(Data, closing, buy, sell, period, where): Data = adder(Data, 1) for i in range(len(Data)): try: if Data[i, buy] == 1: Data[i + period, where] = Data[i + period, closing] - Data[i, closing] if Data[i, sell] == -1: Data[i + period, where] = Data[i, closing] - Data[i + period, closing] except IndexError: pass return Data # Using 21 Periods as a Window of signal Quality Check my_data = signal_quality(my_data, 1, 2, 3, period, 4) positives = my_data[my_data[:, 4] > 0] negatives = my_data[my_data[:, 4] < 0] # Calculating Signal Quality signal_quality = len(positives) / (len(negatives) + len(positives)) print('Signal Quality = ', round(signal_quality * 100, 2), '%')
Качество сигнала 52,94% означает, что на 100 сделках мы склонны видеть в 53 случаях прибыльный результат, если мы будем действовать в соответствии с ним, без учета транзакционных издержек. Конечно, совершенство - самое редкое слово в финансах, и этот метод иногда может давать ложные сигналы, как и любая стратегия. Если вы хотите увидеть больше технических индикаторов и тестов на истории, ознакомьтесь со статьей ниже:
Заключение
Не забывайте всегда проводить тесты на исторических данных. Вы всегда должны верить, что другие люди неправы. Мои индикаторы и стиль торговли могут работать на меня, но может не на вас.
Я твердо убежден, что нельзя кормить с ложечки. Я научился на практике, а не копируя. Вы должны понять идею, функцию, интуицию, условия стратегии, а затем разработать (даже лучше) одну из них самостоятельно, чтобы вы протестировали и улучшили ее, прежде чем принимать решение о том, чтобы воплотить ее в жизнь или отказаться от нее.
Подводя итог, можно ли сказать, что стратегии, которые я предлагаю, реалистичны? Да, но только путем оптимизации среды (надежный алгоритм, низкие затраты, честный брокер, надлежащее управление рисками и управление заказами). Предусмотрены ли стратегии исключительно для торговли? Нет, это нужно для стимулирования мозгового штурма и получения новых торговых идей, поскольку мы все устали слышать о перепроданности RSI как о причине для открытия короткой позиции или о преодолении сопротивления как о причине идти долго. Я пытаюсь представить новую область под названием «Объективный технический анализ», в которой мы используем достоверные данные для оценки наших методов, а не полагаемся на устаревшие классические методы.