Инвестирование

Стратегия управления рисками активов - Максимальные просадки

Реализация стратегии анализа рисков фондового рынка на Python

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

Вступление

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

Определение

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

Формула

Предпочтительна низкая максимальная просадка, поскольку это указывает на то, что потери от инвестиций были небольшими. Если инвестиция никогда не теряет ни цента, максимальная просадка будет равна нулю. Наихудшая возможная максимальная просадка будет 100%, что означает, что вложения совершенно бесполезны. [1]

Реализация кода

Давайте перейдем к реализации того же самого на Python. Вы можете продолжить, просмотрев мой блокнот, где я провел более подробный анализ этой стратегии. Для этого упражнения я использую набор данных French Fama, в котором есть файл CSV для ежемесячной доходности акций с 1926 по 2018 год. Впечатляет! Вы можете найти данные здесь.

Предварительная обработка данных

Начните с импорта необходимых библиотек и прочтите данные.

# Data Analysis
import numpy as np 
import pandas as pd
# Data Visualisation 
import matplotlib.pyplot as plt 
import seaborn as sns
monthly_data = pd.read_csv('Portfolios_Formed_on_ME_monthly_EW.csv',
                           header=0, index_col=0, parse_dates=True,                             na_values=-99.99)
print(monthly_data.shape)
monthly_data.head()

Форма фрейма данных - (1110, 19), а голова выглядит как

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

# Extract the data
returns = monthly_data[['Lo 10', 'Hi 10']]
returns.columns = ['SmallCap', 'LargeCap']
returns.head()

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

# Convert Returns to percentages 
returns = returns/100
returns

Мы можем быстро построить график, используя встроенные функции pandas.

# Make a line plot of the returns
returns.plot.line()

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

Новый график также имеет больше смысла с индексами DateTime.

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

# Get the data in the year 1960 
returns['1960']

Вычислить просадки

Этот процесс состоит из трех этапов.

  1. Вычислить индекс благосостояния
  2. Вычислить предыдущие пики
  3. Вычислить просадки

Шаг 1. Рассчитайте индекс благосостояния

Индекс благосостояния - это в основном совокупный продукт всех ежемесячных доходов с 1926 по 2018 год. Он рассчитывает, как наши инвестиции складываются по каждой ежемесячной прибыли. Допустим, мы начнем с 1000 долларов. Я начну с акций LargeCap.

# Compute the wealth index by starting with 1000 dollars
# The starting value won't matter with drawdowns

wealth_index = 1000 * (1+returns['LargeCap']).cumprod()
print(wealth_index.head())

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

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

# Plot the wealth index over time 
wealth_index.plot.line()

Шаг 2. Рассчитайте предыдущие пики

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

# Compute the previous peaks 
previous_peaks = wealth_index.cummax()
# Plot the previous peaks
previous_peaks.plot.line()

Шаг 3. Рассчитайте просадку

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

# Calculate the drawdown in percentage
drawdown = (wealth_index - previous_peaks)/previous_peaks
# Plot the drawdown 
drawdown.plot.line()

При просадке учитывается отрицательная доходность, поэтому она составляет от 0 до -1. Мы видим, что крах 1929 года был намного хуже, чем кризис 2000 или 2008 года, когда люди потеряли более 80% своего богатства. Это было разрушительно. Давайте посмотрим на некоторые важные ценности.

# Get the worst drawdown and the date it happened 
print(drawdown.min())
print(drawdown.idxmin()) 
Output:
-0.8400375277943123
Period('1932-05', 'M')

Наихудшая просадка составляла примерно 84%, и это было в 1932–05 годах. Что касается временных рядов, есть много других операций, которые мы можем выполнять с этими данными.

# Get the worst drawdown since 1975
print(f"The worst drawdown since 1975 was {drawdown['1975':].min()} on {drawdown['1975':].idxmin()}")
Output: 
The worst drawdown since 1975 was -0.5280945042309304 on 2009-02. 

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

# Combine Plots 
plt.figure(figsize=
wealth_index.plot.line()
previous_peaks.plot.line()

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

Мы можем получить тот же DataFrame для акций smallcap следующим образом.

# Get the data for small cap stocks 
small_cap_drawdowns = compute_drawdown(returns[‘SmallCap’])
small_cap_drawdowns

График просадки для акций с малой капитализацией приводит к следующему графику.

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

Этот метод наиболее полезен при сравнении различных акций и их данных. Более подробный анализ можно найти в этой тетради.

Ограничения

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

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

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

  1. Инвестопедия
  2. Бизнес-школа EDHEC