Могу ли я сделать ставку не только на направление рынка?
Вы когда-нибудь видели быка и медведя вместе в дикой природе? Я уверен, что нет! (Если у вас есть, пожалуйста, обратитесь к нам с доказательством). Так что, если они не проворачивают это в дикой природе, зачем им бросать руки на рынке? Через несколько дней после того, как я обнулил свой первый счет с помощью направленных ставок и «Радуйся, Мария», я снова сидел в подвале своего друга, снова работая брокером. Какого цвета был мой Бугатти? Ах да, у меня Форд Эксплорер начала 2000-х, темно-синий. Как и в любой истории успеха, мы взяли съедобное и сели смотреть Вселенную Стивена Хокинга по телевизору (никому не советую это пробовать :P). После этапа «Я этого не чувствую» меня захлестнули мысли, которые в то время казались хорошими. Одним из них была мысль выше! Я понял, что в то время как я делал ставку на направление, крупные игроки тщательно создавали портфели с прекрасным управлением рисками. Что быки и медведи редко дерутся. Они живут в гармонии (я думаю). С этого и началось мое изучение рыночного нейтралитета и статистического арбитража. Поскольку я не мог получать прибыль от комиссионных сборов инвесторов за предоставление услуги с конфликтом интересов, мне пришлось узнать, что я могу сделать, чтобы выиграть. Я решил изучить действия тех, кто находится в том положении, в котором я хотел быть. Зачем мне учиться у кого-то, кто никогда не делал того, что я хочу делать. Я много лет говорил об этом своим родителям, поскольку едва избегал провалов в школе. Это не работает. Это все равно, что сказать своей второй половинке успокоиться, когда она злится.
Двое в паре
Если вы еще этого не сделали, выбросьте свой технический анализ и индикаторы. Вы можете вернуть их позже, если вам нужно. Большинство людей занимается направленной торговлей. Это означает, что вы делаете ставку на длинную или короткую позицию и выбираете направление. Проблема в том, что большинству из нас это не удается, и мы позволяем даже нашим автоматическим стратегиям быть испорченными предвзятостью, жадностью и страхом. Пришло время представить идею парной торговли. Это включает в себя открытие длинной и короткой позиции по разным инструментам. Сумасшедший я знаю! Думайте о парной торговле как об отношениях. Мы все знаем, что если у нас есть хороший партнер, он может сделать вашу жизнь намного лучше. Итак, мы должны выбрать хорошего партнера, который позволит нам расти, а не токсичного! Мы собираемся рассказать, как выбрать хорошего партнера в виде двух активов. (Я не могу помочь вам с отношениями, извините.) Если вам нравится смотреть больше, вы можете перейти к нашему видео на YouTube.
Подъехать к заправочной станции
Надеюсь, мы все знакомы с идеей стационарности. В парной торговле эта концепция — ваше топливо! Чтобы что-то было стационарным, его статистические свойства, такие как среднее значение и дисперсия, не меняются со временем. Давайте рассмотрим два примера.
Как вы можете видеть выше, у нас есть явно стационарный пример в первой строке и нестационарный пример во второй строке. Мы делаем временной ряд стационарным путем его разности или частичной разности. Не стесняйтесь заглянуть в нашу первую статью о дробных разностях. Наличие стационарных данных обычно является важным и необходимым требованием для работы с моделированием временных рядов. Часто данные временных рядов не являются стационарными по умолчанию. Те немногие вещи, которые сразу стационарны, обычно вращаются вокруг какого-то экономического/сезонного фактора. Товары, валюты и курсы имеют потенциал, но вы должны быть осторожны, чтобы не принять что-то за стационарное, когда это не так. Итак, как мы можем сказать, что что-то стационарно? Для этого можно использовать тест ADF. Мы использовали его раньше в дробном дифференцировании.
Если приведенное выше выглядит как каша, просто знайте, что мы проверяем единичный корень, чтобы увидеть, является ли временной ряд стационарным. В приведенном выше примере мю — константа, дельта — временной тренд, фи — коэффициент авторегрессии, а эпсилон — член ошибки. Тест ADF хочет проверить, равны ли коэффициенты авторегрессии ‹ 0 против нуля, что они равны 0. По сути, мы проверяем, существует ли единичный корень. Если да, то запаздывающий уровень yt-1 не дает никакой соответствующей информации для yt, кроме изменений в запаздывании. Если нет единичного корня, мы видим возврат к среднему. Это означает, что запаздывающий уровень действительно предоставляет соответствующую информацию.
Вы до сих пор не показали нам пары
Успокойте фальшивую аудиторию в моей голове! Мы приближаемся! Так нетерпелив! Итак, как говорилось ранее, довольно редко мы просто натыкаемся на один актив, который дает нам настоящие стационарные вибрации. Если мы это сделаем, скорее всего, вы упустите красные флажки. Опять же, точно так же, как вы упустили из виду тот случай, когда у вашей девушки был лучший друг-натурал, которого ей нравилось видеть больше, чем вас. Больше не упускайте их из виду! Итак, в идеальной ситуации у нас было бы что-то вроде синусоиды выше. Будет среднее значение, которое не сильно изменится (надеюсь, вообще) с течением времени. Затем мы открывали короткую позицию, если она превышала среднее значение на одно или два стандартных отклонения, и покупали, когда она превышала это же расстояние. Если бы это было так просто, мы все были бы богаты! Навсегда свободен от хватки матрицы. К сожалению, мы не получаем результатов в гору, спускаясь вниз! Вот тут и приходит на помощь наша знакомая коинтеграция! Во-первых, давайте сделаем перерыв и обсудим, реальна ли эта картина.
Извините, у меня короткая продолжительность концентрации внимания. Чувствовал, что мы должны прервать это интеллектуальным спором о важных вещах.
Совместная интеграция
Звучит пикантно, не правда ли? Это потому, что это так. По сути, это эквивалент активов, занимающихся любовью на рынке. Итак, что же это такое? Именно когда у нас есть два или более инструментов, портфель становится стационарным! Заметьте, я не сказал актив. Мы стремимся сделать все портфолио стационарным! Я собираюсь заявить об этом в неформальной форме:
спред = актив_1 - (коэффициент хеджирования * актив_2)
Мы хотим получить спред, взяв актив_1, вычесть вес, умноженный на второй актив. Наша цель — сделать спред стабильным! Если это так, мы можем получить прибыль, когда спред вернется к своему среднему значению! Как мы можем это сделать? Что ж, воспользуемся нашим удобным денди Линейная регрессия. Пожалуйста, найдите минутку, чтобы прочитать эту статью, если вы ее не понимаете. Цель состоит в том, чтобы использовать линейную регрессию, чтобы найти связь между двумя активами или портфелями. Как только мы узнаем взаимосвязь, мы можем построить спред, взяв временной ряд одного актива, вычтенный на коэффициент из линейной регрессии, умноженный на временной ряд второго актива. Этот коэффициент становится нашим коэффициентом хеджирования. Затем мы проверяем спред, используя нашу надежную статистику ADF, чтобы увидеть, является ли он стационарным. Если это так, мы можем построить сделку, которая получит прибыль от среднего возврата нашего спреда. Ниже я приведу пример кода.
import pandas as pd import numpy as np import matplotlib.pyplot as plt import statsmodels as sm from statsmodels.tsa.stattools import adfuller class PairsTrade: def __init__(self, df, ticker_list, thresh = '5%', max_lag = 1): ''' df: dataframe asset prices ticker_list: list(strings) tickers thresh: string threshold for adf test max_lag: int lag for adf test ''' self.df = df self.ticker_list = ticker_list self.thresh = thresh self.max_lag = max_lag self.spread_calc() self.check_stationary() # Calculate the spread of the pairs def spread_calc(self): # Use linear regression to get the coefficients model = sm.regression.linear_model.OLS(self.df[self.ticker_list[0]], self.df[self.ticker_list[1]]) model = model.fit() # Hedge ratio for coefficient hedge_ratio = model.params[0] # This is the beta coefficient # Add spread to dataframe self.df['spread'] = self.df[self.ticker_list[0]] - model.params[0] * self.df[self.ticker_list[1]] return hedge_ratio # Method to plot (plot_price ture if you want to see the prices) def plot_spread(self, plot_price = False): if plot_price == True: fig,ax = plt.subplots(nrows = 2, figsize=(18,10)) ax[0].plot(self.df.spread) ax[1].plot(self.df[self.ticker_list[0]], label = self.ticker_list[0]) ax[1].plot(self.df[self.ticker_list[1]], label = self.ticker_list[1]) ax[1].legend() else: self.df.spread.plot(figsize=(18,10)) plt.ylabel('SPREAD') plt.show() # Let us know if the spread is stationary using ADF def check_stationary(self): adf = adfuller(self.df.spread, maxlag = self.max_lag) test_stat = adf[0] t_stat = adf[4][self.thresh] if test_stat < t_stat: return True else: return False
Итак, теперь, когда у вас есть код, пришло время увидеть, как он работает! Я объясню некоторые дополнительные соображения, которые вам нужно знать, после того, как покажу вам простой пример того, как он используется! Я проверю, как это работает на SPY и QQQ. Они оба имеют сильную корреляцию своих доходностей и оба являются индексами. Вы можете искать акции в одном секторе или портфели акций друг против друга. Это только для демонстрации!
import yfinance as yf # Download data from yfinance spy = yf.download('SPY') qqq = yf.download('QQQ') # Make Dataframe df = pd.DataFrame() df['SPY'] = spy.Close df['QQQ'] = qqq.Close df = df.dropna() # Do not intentionally isolate timeframe where you prove yourself correct # This is simply done for example df = df[-720:] # Create Instance of Class spy_qqq = PairsTrade(df, ['SPY','QQQ']) # Plot with prices as well spy_qqq.plot_spread(plot_price = True) # print if stationary print(spy_qqq.check_stationary()) # Returns False
Когда мы проверяем, стационарно ли это, оказывается, что это не так! Во время описанного выше процесса я ограничил временные рамки для простоты. Вы должны быть осторожны, чтобы не делать этого, чтобы получить результаты, которые вы планируете использовать. Я оставлю это на ваше усмотрение, ребята, чтобы определить пары, которые работают! В завершение я хотел бы кратко остановиться на некоторых важных аспектах и улучшениях в парной торговле!
Это действительно так просто?
К сожалению, как и в большинстве случаев в трейдинге, это не так! Выше приведен очень простой пример на одном таймфрейме (дневные данные). Он предназначен для того, чтобы донести основную мысль. При этом необходимо учитывать множество соображений. Каждый из них, скорее всего, появится в статьях о фьючерсах. Было бы слишком много всего, чтобы уместиться в одной статье, если бы я рассмотрел их все с требуемыми подробностями.
- Если мы планируем масштабировать это, мы должны учитывать веса активов и/или секторов.
- При построении стратегии на основе этого важно соблюдать меры предосторожности при переоснащении. Очень легко навязать свою волю стратегии и заставить работать что-то, что на самом деле не работает.
- В зависимости от вашего выбора актива, вы должны принять во внимание тот факт, что иногда теоретически вам нужно продавать дробные акции. На практике это работает не так хорошо. Вы также должны учитывать маржу, сборы и другие расходы.
- Исполнение сделок при открытии и закрытии может быть очень сложным. Хотя исполнение может показаться простым, вам необходимо учитывать, как бы вы реализовали сделку. Вы не сможете всегда заполнять прямо на открытии или закрытии.
- Вы должны отправить тест. Даже создавайте смоделированные пути, которые следуют SDE активов или портфелей. Вы хотите увидеть, что это работает даже при случайности в будущем, чтобы помочь подтвердить, что вы нашли преимущество вместо переобучения. См. наше стохастическое исчисление статья один, два и три.
- Старайтесь избегать систематической ошибки периода обучения. Используйте несколько таймфреймов. Предложите свою стратегию как можно большему количеству реалистичных условий. Единственный человек, которого вы обманете, — это вы сами, если избежите этого.
Мы надеемся, что вышеизложенное укажет вам правильное направление. Мы подробно расскажем об этом и многом другом в следующих статьях!
Заключение
Если вы хотите разбогатеть, вы должны делать то, что делают богатые! Будь то поиск преимуществ в торговле волатильностью или в парной торговле. Крупные игроки любят рыночный нейтралитет. Большинство крупных игроков, делающих ставку на направление, зарабатывают деньги другими способами. Поскольку вам, как хедж-фонду, скорее всего, не платят 2/20, в ваших интересах разумно управлять рисками. Зарабатывайте деньги независимо от того, куда идет рынок. Это не так захватывающе, как YOLO, который может вас обжечь, но, безусловно, приятно, когда он действительно побеждает. Хотя приведенное выше является простой демонстрацией темы парного трейдинга, ее можно усложнить. Вы можете торговать портфелями друг с другом и находить уникальные способы решить, какие продукты движутся вместе по определенной причине. Вы не ограничены одним активом против другого. На самом деле рекомендуется выйти за рамки этого. Вряд ли это последний раз, когда мы обсуждаем парный трейдинг. В следующий раз мы нырнем немного глубже! Надеюсь, это поможет вам получить толчок к некоторым идеям. Если вы хотите подарить нашему YouTube часы. Это больше касается кодирования. Идите в пару, заработайте немного денег и, возможно, даже используйте эти концепции, чтобы сохранить хорошие отношения.
Если вы нашли этот или любой другой наш контент ценным, рассмотрите возможность купить нам кофе.
Получите полный доступ ко всем нашим статьям, став участником Medium!
** ЭТО СОДЕРЖАНИЕ НЕ ЯВЛЯЕТСЯ ФИНАНСОВОЙ КОНСУЛЬТАЦИЕЙ. ЭТО СТРОГО ОБРАЗОВАТЕЛЬНЫЙ **