October 12

ПАРНАЯ ТОРГОВЛЯ

I.ВВЕДЕНИЕ

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

II. ОПИСАНИЕ ДАННЫХ И МЕТОДОЛОГИЯ

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

Для анализа применялись методы графической визуализации данных, проверка на нормальность распределения, а также коинтеграционный тест Джоансена и тест Дики-Фуллера. Эти методы позволили определить наличие долгосрочной взаимосвязи между активами, однако только одна из исследованных пар продемонстрировала наличие стационарности, но не коинтеграции (описание значений ниже).

График данных четырех криптовалют, которые, за исключением ZK, обладают схожими характеристиками: ликвидностью, капитализацией, временем выхода на рынок и, самое главное, похожей динамикой ценовых движений, что хорошо заметно на представленном графике

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

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

III. АНАЛИЗ ВЫБРАННЫХ ПАР

1) НОРМАЛЬНОЕ РАСПРЕДЕЛЕНИЕ

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

Проверка спреда на нормальное распределение в парном трейдинге важна по нескольким причинам:

  1. Предсказуемость и реверсия к среднему: Если распределение спреда близко к нормальному, это означает, что его отклонения от среднего распределяются предсказуемо. Это ключевой фактор для стратегий, основанных на возврате к среднему значению.
  2. Оценка риска и волатильности: Нормальное распределение позволяет использовать стандартные методы оценки рисков, что критически важно для управления позициями.
  3. Моделирование уровней открытия и закрытия позиций: Зная параметры распределения, трейдеры могут более точно определять оптимальные точки входа и выхода из позиций.
  4. Проверка корректности модели и гипотез: Отклонение от нормальности может указывать на необходимость пересмотра используемой модели или поиска других подходящих активов для торговли.

Графический анализ на нормальное распределение

STRK/ENA

Пример кода

# Вычисляем соотношение цен закрытия
price_ratio_strk_ena = strk_df["close"] / ena_df["close"]

# Убираем строки с NaN
price_ratio_strk_ena = price_ratio_strk_ena.dropna()

# Строим график соотношения цен
price_ratio_strk_ena.plot(figsize=(15,7))

# Добавляем горизонтальную линию, соответствующую среднему значению
plt.axhline(price_ratio_strk_ena.mean(), color='black')

# Добавляем метки к осям и легенду
plt.xlabel('Days')
plt.legend(['STRK/ENA price ratio', 'average price ratio'])

# Отображаем график
plt.show()

# Выводим среднее соотношение
print(f"average price ratio {price_ratio_strk_ena.mean():.4f}")

Пример кода

# Создаем графики
fig, axes = plt.subplots(2, 1, figsize=(16, 9), sharex=True)
box = axes[0].boxplot(price_ratio_strk_ena, vert=False)

# Получаем статистику для аннотаций
quartiles = np.percentile(price_ratio_strk_ena, [25, 50, 75])
median = quartiles[1]
q1 = quartiles[0]
q3 = quartiles[2]
iqr = q3 - q1
lower_whisker = q1 - 1.5 * iqr
upper_whisker = q3 + 1.5 * iqr

# Указываем данные на графике с более высоким положением аннотаций
axes[0].annotate(f'Q1: {q1:.2f}', xy=(q1, 1), xytext=(q1, 1.1),
                 arrowprops=dict(facecolor='black', arrowstyle='->'),
                 fontsize=10, ha='center')
axes[0].annotate(f'Median: {median:.2f}', xy=(median, 1), xytext=(median, 1.1),
                 
                 fontsize=10, ha='center')
axes[0].annotate(f'Q3: {q3:.2f}', xy=(q3, 1), xytext=(q3, 1.1),
                 arrowprops=dict(facecolor='black', arrowstyle='->'),
                 fontsize=10, ha='center')
axes[0].annotate(f'Lower whisker: {lower_whisker:.2f}', xy=(lower_whisker, 1), xytext=(lower_whisker, 1.1),
                 arrowprops=dict(facecolor='black', arrowstyle='->'),
                 fontsize=10, ha='center')
axes[0].annotate(f'Upper whisker: {upper_whisker:.2f}', xy=(upper_whisker, 1), xytext=(upper_whisker, 1.1),
                 arrowprops=dict(facecolor='black', arrowstyle='->'),
                 fontsize=10, ha='center')

# Отображаем выбросы на графике
outliers = price_ratio_strk_ena[(price_ratio_strk_ena < lower_whisker) | (price_ratio_strk_ena > upper_whisker)]
for outlier in outliers:
    axes[0].text(outlier, 1.05, f'{outlier:.2f}', fontsize=8, rotation=45, ha='center')

# Построение гистограммы на втором графике
axes[1].hist(price_ratio_strk_ena, bins=50)
axes[0].set_title("Boxplot of a Normal Distribution for STRK/ENA")
axes[1].set_title("Histogram of STRK/ENA Price Ratio")

plt.tight_layout()
plt.show()
# Q-Q plot of normally-distributed sample
import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats

# Предположим, что price_ratio_strk_ena - это ваш набор данных
price_ratio_strk_ena = np.random.normal(loc=0, scale=1, size=1000)  # Пример данных

# Создаем Q-Q plot
plt.figure(figsize=(10, 10))
plt.axis('equal')
stats.probplot(price_ratio_strk_ena, dist='norm', plot=plt)

# Рассчитываем статистические показатели
mean = np.mean(price_ratio_strk_ena)
std_dev = np.std(price_ratio_strk_ena)
plt.axhline(mean, color='g', linestyle='--', label=f'Mean: {mean:.2f}')
plt.axhline(mean + std_dev, color='b', linestyle='--', label=f'Mean + 1 Std Dev: {mean + std_dev:.2f}')
plt.axhline(mean - std_dev, color='b', linestyle='--', label=f'Mean - 1 Std Dev: {mean - std_dev:.2f}')

# Добавляем легенду для аннотаций
plt.legend(loc='upper left')

# Подпись графика
plt.title('Q-Q Plot with Annotations for Normal Distribution')
plt.show()

Анализ пары STRK/ENA показывает интересную картину. Boxplot демонстрирует, что большинство значений сконцентрировано в относительно узком диапазоне, но присутствуют и выбросы, указывающие на периодические резкие отклонения. Гистограмма подтверждает наличие асимметрии в распределении, а Q-Q plot показывает, что в целом распределение близко к нормальному, но с отклонениями на концах.

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

STRK/ZK

Анализ данных о соотношении цен STRK/ZK показывает, что, в целом, цены этой пары стремятся возвращаться к среднему значению. Это означает, что большая часть времени разница в ценах между STRK и ZK колеблется около некоторой средней точки, что создает предсказуемость в их движении, что и было отмечено нами при анализа спреда этой пары в прошлой статье.

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

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

STRK/W

Эта пара оказалась наиболее стабильной и близкой к нормальному распределению. Большая часть значений на Q-Q plot расположена вдоль прямой линии, указывая на нормальность в центральной части распределения. Boxplot и гистограмма показывают узкий межквартильный диапазон и отсутствие значительных выбросов. Такая характеристика делает пару STRK/W хорошим кандидатом для дальнейшего анализа в рамках парного трейдинга, так как цены имеют тенденцию к возвращению к среднему значению, а вероятность неожиданных скачков ниже.

Математическое тестирование на нормальность распределения

Для более точной оценки нормальности распределения были применены тесты Шапиро-Уилка и Колмогорова-Смирнова. Эти тесты позволяют количественно оценить, насколько распределение наших данных соответствует нормальному.

Тест Шапиро-Уилка

Нулевая гипотеза предполагает, что распределение данных является нормальным. Если p-значение больше выбранного уровня значимости (p-уровня), мы предполагаем, что распределение нормальное. В противном случае делаем вывод, что распределение не является нормальным.

Тест Колмогорова-Смирнова

Этот тест сравнивает распределение данных с теоретическим распределением. Мы выберем нормальное распределение ('norm') в качестве теоретического и зададим среднее и стандартное отклонение для этого распределения. Среднее и стандартное отклонение теоретической нормы будут равны среднему и стандартному отклонению фактического распределения данных.

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

Мы проанализировали три криптовалютные пары (STRK/ZK, STRK/ENA и STRK/W) с целью оценки их потенциала для увеличения количества монет в парном трейдинге. Использовались тесты Шапиро-Уилка, Колмогорова-Смирнова и графический анализ.

  1. STRK/ZK: Высокий риск для накопления
    * Значительное отклонение от нормального распределения, высокая волатильность.
    * Вывод: Не рекомендуется для стратегии накопления из-за высокого риска потерь.
  2. STRK/ENA: Умеренный потенциал с повышенным риском
    * Умеренные отклонения от нормального распределения.
    * Вывод: Возможно использование с осторожностью. Требует тщательного анализа каждой сделки.
  3. STRK/W: Оптимальный выбор для накопления
    * Распределение близко к нормальному, высокая стабильность.
    * Вывод: Наилучшие условия для реализации стратегии накопления монет с минимальным риском.

Общее заключение:

  1. Степень соответствия нормальному распределению критически важна для эффективного накопления монет.
  2. Пары с сильным отклонением (STRK/ZK) лучше избегать.
  3. Пары с умеренным отклонением (STRK/ENA) требуют повышенной осторожности.
  4. Пары, близкие к нормальному распределению (STRK/W), оптимальны для стабильного накопления.
  5. Выбор пар должен учитывать долгосрочные статистические характеристики ценовых соотношений.

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

2) СТАЦИОНАРНОСТЬ СПРЕДА

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

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

Основные признаки стационарности:

  • Неизменное среднее значение
  • Постоянная волатильность
  • Отсутствие долгосрочного тренда

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

Стационарный vs Нестационарный спред:
Стационарный спред:

  • Колеблется вокруг среднего значения
  • Предсказуемо возвращается к этому значению
  • Указывает на долгосрочную связь между активами

Нестационарный спред:

  • Может иметь долгосрочный тренд роста или падения
  • Не имеет тенденции возврата к определенному уровню
  • Говорит об отсутствии устойчивой связи между активами

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

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

Как мы проверяем стационарность?
Мы используем расширенный тест Дики-Фуллера (ADF). Этот тест определяет, есть ли в ряде "единичный корень" - признак нестационарности. Если тест отвергает наличие единичного корня, мы считаем ряд стационарным.

Augmented Dickey-Fuller Test

def is_spread_stationary(spread, p_level=0.05):
    """
    spread: obtained from linear combination of two series with a hedge ratio
    
    p_level: level of significance required to reject null hypothesis of non-stationarity
    
    returns:
        True if spread can be considered stationary
        False otherwise
    """
    
    # Убираем NaN и бесконечные значения из спреда
    spread = spread.replace([np.inf, -np.inf], np.nan).dropna()
    
    # Используем adfuller для проверки стационарности
    adf_result = adfuller(spread, maxlag=None, regression='c', autolag='AIC', store=False, regresults=False)
    
    # Получаем p-value
    pvalue = adf_result[1]
    
    print(f"pvalue {pvalue:.4f}")
    if pvalue <= p_level:
        print(f"pvalue is <= {p_level}, assume spread is stationary")
        return True
    else:
        print(f"pvalue is > {p_level}, assume spread is not stationary")
        return False

Вывод

На основе результатов расширенного теста Дики-Фуллера (ADF) для спредов наших криптовалютных пар, мы можем сделать следующий вывод:

  • Только спред пары STRK/W демонстрирует признаки стационарности (p-value = 0.0124 < 0.05) и подходит для парного трейдинга.
  • Умеренное значение p-value указывает на необходимость осторожного подхода при использовании этой пары.
  • Спреды пар STRK/ZK и STRK/ENA не проявляют признаков стационарности и не рекомендуются для классических стратегий парного трейдинга.

Этот результат подчеркивает важность тщательного статистического анализа при выборе пар для торговли и необходимость регулярного пересмотра их характеристик.

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

3) КОИНТЕГРАЦИЯ СПРЕДА: Новый уровень анализа взаимосвязи активов

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

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

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

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

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

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

Отличие коинтеграционного спреда от стационарного спреда

  1. Стационарный спред:
    • Колеблется вокруг фиксированного среднего значения.
    • Не имеет тренда, и его статистические свойства, такие как среднее и дисперсия, остаются неизменными со временем.
    • Пример: Представьте, что два актива торгуются в узком горизонтальном Расширить заключение, включив краткое резюме ключевых точек из каждого раздела.
      Добавить больше конкретных рекомендаций для читателей, желающих применить эти методы.канале. Их спред — это постоянная разница в ценах, которая всегда возвращается к одному и тому же уровню. Независимо от рыночных колебаний, спред всегда стремится вернуться к своей средней величине.
  2. Коинтеграционный спред:
    • Может колебаться вокруг изменяющегося среднего, но сохраняет стабильную взаимосвязь между активами. Даже если тренды в ценах каждого актива идут вверх или вниз, их связь остаётся постоянной.
    • Пример: Представьте два актива, которые торгуются в восходящем или нисходящем канале. Они могут иметь общий тренд роста или падения, но при этом сохраняют постоянное соотношение цен. Даже если они отклоняются друг от друга на поворотах рынка, их взаимосвязь остаётся стабильной, и их спред возвращается к среднему уровню, скорректированному на тренд.

Ключевые различия между стационарным и коинтеграционным спредом:

  1. Учет тренда:
    • Стационарный спред предполагает отсутствие тренда. Среднее значение остаётся постоянным, и активы всегда возвращаются к нему в краткосрочной перспективе.
    • Коинтеграционный спред учитывает возможность общего тренда. Например, если два актива торгуются в восходящем тренде, их цены могут расти, но при этом сохранять стабильное соотношение, что позволяет спреду оставаться коинтегрированным.
  2. Гибкость в отношениях между рядами:
    • Стационарный спред строго привязан к фиксированному среднему значению.
    • Коинтеграционный спред допускает более гибкие отношения между активами, позволяя им иметь различное поведение в краткосрочной перспективе, но сохранять долгосрочную связь.
  3. Применимость к нестационарным рядам:
    • Стационарный спред требует, чтобы ряды были стационарными или могли быть сделаны стационарными путём дифференцирования.
    • Коинтеграция применима к нестационарным рядам, которые могут иметь тренды, но сохраняют долгосрочные равновесные отношения.
  4. Долгосрочная vs краткосрочная динамика:
    • Стационарный спред больше фокусируется на краткосрочных отклонениях от среднего значения.
    • Коинтеграция выявляет долгосрочные отношения между активами, допуская краткосрочные отклонения, но ожидая, что они вернутся к долгосрочному тренду.

Тест Йохансена: Инструмент для анализа коинтеграции

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

Тест Йохансена имеет несколько ключевых преимуществ:

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

В отличие от анализа стационарности спреда с его простым определением спреда как отношение цен двух активов (например, price_STRK/price_ENA), тест Йохансена рассматривает все возможные линейные комбинации исследуемых временных рядов. Примером таких комбинаций может быть разница между активами, отношение их цен или более сложные формы, такие как w1×price_STRK+ w2*price_ENA, где w1 и w2​ — это веса, которые вычисляет тест. Это позволяет нам выявить более сложные взаимосвязи между активами, которые могут быть неочевидны при простом визуальном анализе или при использовании более простых методов.

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

Практическое применение теста Йохансена

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

from statsmodels.tsa.vector_ar.vecm import coint_johansen

# Шаг 1: Заполнение пропусков методом линейной интерполяции и удаление оставшихся NaN
combined_df = combined_df.interpolate(method='linear').dropna()

# Шаг 2: Проведение теста Джоансена
# det_order = 1 означает, что учитывается линейный тренд.
result = coint_johansen(combined_df_STRK_W[['STRK', 'W']], det_order=0, k_ar_diff=1)

# Шаг 2.1: Проверка на коинтеграцию с использованием статистики следа (trace statistic)
# Сравниваем статистику следа с критическими значениями для различных уровней значимости
trace_statistic = result.lr1[0]  # Статистика следа для гипотезы о 0 коинтеграционных векторах
critical_values = result.cvt[0]   # Критические значения для 90%, 95% и 99%

print(f"Статистика следа: {trace_statistic}")
print(f"Критические значения (90%, 95%, 99%): {critical_values}")

if trace_statistic > critical_values[1]:  # Сравниваем с 95% критическим значением
    print("Существует хотя бы один коинтегрированный вектор. Активы коинтегрированы.")
else:
    print("Нет доказательств коинтеграции. Активы не коинтегрированы.")

# Шаг 3: Извлекаем коинтеграционный вектор (первый вектор с наибольшей значимостью)
cointegration_vector = result.evec[:, 0]
w1, w2 = cointegration_vector

# Нормализация весов (делаем так, чтобы сумма весов была равна 1)
w1, w2 = (
    w1 / np.sum(np.abs(cointegration_vector)),
    w2 / np.sum(np.abs(cointegration_vector))
)

print(f"Вес для STRK: {w1}, Вес для W: {w2}")

# Шаг 4: Рассчитываем спред на основе весов
spread_df = (
    w1 * combined_df_STRK_W['STRK'] +
    w2 * combined_df_STRK_W['W'] 
)

# Рассчитываем среднее значение спреда
mean_spread = spread_df.mean()

# Получаем текущее значение спреда (последнее в ряду)
current_spread = spread_df.iloc[-1]

# Шаг 5: Построение графика спреда с отметками
plt.figure(figsize=(12, 6))
plt.plot(spread_df, label='Спред', color='black')
plt.axhline(mean_spread, color='red', linestyle='-', label='Среднее значение спреда')
plt.scatter(combined_df_STRK_W.index[-1], current_spread, color='blue', label=f'Текущее значение: {current_spread:.4f}', zorder=5)

# Добавляем аннотации на график
plt.annotate(f'Среднее: {mean_spread:.4f}', xy=(combined_df_STRK_W.index[len(combined_df_STRK_W) // 2], mean_spread), xycoords='data',
             xytext=(-50, 10), textcoords='offset points', arrowprops=dict(arrowstyle='->', lw=1))
plt.annotate(f'Текущее значение: {current_spread:.4f}', xy=(combined_df_STRK_W.index[-1], current_spread),
             xytext=(-80, 20), textcoords='offset points', arrowprops=dict(arrowstyle='->', lw=1))

# Настройки графика
plt.title('Спред для STRK/W')
plt.xlabel('Дата')
plt.ylabel('Значение спреда')
plt.grid(True)
plt.legend(loc='best')
plt.tight_layout()

# Показываем график
plt.show()

# Шаг 6: Торговая рекомендация на основе спреда
if current_spread > mean_spread:
    print("Спред выше среднего. Рекомендация: Продаем активы с положительным весом, покупаем с отрицательным.")
else:
    print("Спред ниже среднего. Рекомендация: Покупаем активы с положительным весом, продаем с отрицательным.")

Далее уже без кода, который идентичен тому, что выше, выложу графики спредов и результаты теста относительно других пар.

Как мы видим из результатов теста Йохансена парный спред STRK/W, единственный который был у нас стационарным, оказался не коинтегрированным (веса, которые мы получили: w1 = 0.4423 w2=-0.5576).

Эти веса (w1 = 0.4423 и w2 = -0.5576) представляют собой коэффициенты линейной комбинации временных рядов, которая потенциально могла бы быть стационарной, если бы существовала коинтеграция. В данном случае, несмотря на то, что веса имеют разные знаки (что обычно является хорошим признаком), их абсолютные значения близки друг к другу. Это указывает на то, что линейная комбинация этих рядов не создает стационарный процесс, который был бы значительно более стационарным, чем сами исходные ряды.

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

Коинтеграция трех и четырех активов также не подвредилась.

Интерпретация результатов

Несмотря на наши ожидания, тест Йохансена не выявил статистически значимой коинтеграции ни для для пары STRK/W, ни для одной из прочих рассмотренных комбинаций активов. Это говорит о том, что:

  1. Долгосрочные равновесные отношения между исследуемыми криптовалютами отсутствуют или слишком слабы для статистического подтверждения.
  2. Цены на эти активы движутся более независимо друг от друга, чем мы предполагали изначально.
  3. Краткосрочные корреляции, которые мы могли наблюдать визуально, не переходят в устойчивые долгосрочные взаимосвязи.

Выводы и рекомендации

  1. Отсутствие коинтеграции не означает, что парный трейдинг невозможен, но указывает на повышенные риски и необходимость более короткосрочных стратегий.
  2. Для нашей цели накопления монет это означает, что мы не можем полагаться на долгосрочное восстановление "справедливого" соотношения цен между активами.
  3. Необходимо регулярно пересматривать и адаптировать наши торговые стратегии, учитывая изменчивый характер взаимосвязей между криптовалютами.

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

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

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

IV. ЗАКЛЮЧЕНИЕ: Фундамент для стратегий парной торговли

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

Основные изученные методы

  1. Анализ нормальности распределения: Мы узнали, как оценивать характер распределения ценовых спредов, что важно для понимания рисков и потенциальных возможностей в парной торговле.
  2. Тестирование стационарности: Применение теста Дики-Фуллера позволило нам лучше понять динамику временных рядов и выявить пары, потенциально подходящие для стратегий возврата к среднему.
  3. Анализ коинтеграции: Использование теста Йохансена показало нам, как выявлять долгосрочные равновесные отношения между активами, что критически важно для стратегий, нацеленных на долгосрочный перелив ликвидности.

Практическое применение

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

Путь к совершенствованию стратегии

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

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

Заключительные мысли

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

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

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

Удачи в ваших торговых начинаниях!