На прошлой неделеУправление рисками VaRПри этом риск портфеля не равен риску отдельных активов, а связан с их ценовой корреляцией. Приведем пример двух активов, если их положительная корреляция очень сильна, то есть они одинаково падут, то рассредоточенные инвестиции не снижают риска, а если отрицательная корреляция сильна, рассредоточенные инвестиции могут значительно снизить риск. Естественный вопрос заключается в том, как максимизировать прибыль при определенном уровне риска при инвестировании в портфель.
Модернная портфельная теория (MPT), выдвинутая Гарри Маковицем в 1952 году, является математической структурой выбора портфеля, которая направлена на максимальное увеличение ожидаемой прибыли путем выбора различных портфелей рискованных активов при одновременном контроле риска. Основная идея заключается в том, что неполные синхронные изменения цен между активами могут снизить общий инвестиционный риск путем диверсификации расположения активов.
Ожидаемые доходыЭто ожидаемый доход инвестора, владеющего активом или инвестиционным портфелем, который обычно прогнозируется на основе исторических данных о доходах.
$E(R_p) = \sum_{i=1}^{n} w_i E(R_i) $
В этом случае $E ((R_p) $ - это ожидаемая доходность портфеля, $w_i$ - это взвешивание первого $i$ в портфеле, $E ((R_i) $ - это ожидаемая доходность первого $i$.
Риск (волатильность или стандартный дисбаланс): используется для измерения неопределенности или волатильности инвестиций;
$\sigma_p = \sqrt{\sum_{i=1}^{n} \sum_{j=1}^{n} w_i w_j \sigma_{ij}}$
$\sigma_p$ - это общий риск портфеля, $\sigma_{ij}$ - это коэффициент расхождения активов $i$ и $j$, который измеряет взаимосвязь между изменениями цены этих активов.
Различие сторонПоказатель: измеряет взаимосвязь между изменениями цен двух активов.
$\sigma_{ij} = \rho_{ij} \sigma_i \sigma_j$
$\rho_{ij}$ является коэффициентом относительности активов $i$ и $j$, $\sigma_i$ и $\sigma_j$ являются стандартными отклонениями активов $i$ и $j$.
Эффективные границыВ системе координат риск-прибыль эффективная граница - это совокупность портфелей, которые могут обеспечить наибольшую ожидаемую прибыль при данном уровне риска.
На рисунке выше приведена схема эффективных границ, где каждая точка представляет собой портфель с различным весом, горизонтальные координаты - уровень риска, а горизонтальные - уровень прибыли. Очевидно, мы обращаем внимание на верхнюю часть рисунка, которая получает наибольшую прибыль при таком же уровне риска.
Применение этих принципов в количественном управлении сделками и портфелями требует статистического анализа исторических данных, использования математических моделей для оценки ожидаемой прибыли, стандартных расхождений и соотношений различных активов. Затем применяются методы оптимизации для поиска оптимального перераспределения активов. Этот процесс обычно включает в себя сложные математические операции и большое количество компьютерных обработок, и именно поэтому количественный анализ стал очень важным в современной финансовой сфере.
Вычисление оптимальной комбинации Маковича - это многоэтапный процесс, включающий в себя несколько ключевых шагов, таких как подготовка данных, моделирование портфеля, вычисление показателей.https://plotly.com/python/v3/ipython-notebooks/markowitz-portfolio-optimization/
Доступ к данным рынка:
get_data
Функции, получающие данные о исторических ценах выбранной цифровой валюты. Это данные, необходимые для расчета доходности и риска, которые используются для построения портфелей и расчета Sharpe's ratio.Расчет доходности и риска:
calculate_returns_risk
Функция рассчитывает годовые доходы и годовые риски ("стандартный отклонение") каждой цифровой валюты. Это позволяет количественно оценить историческую производительность каждого актива для использования в оптимальной комбинации.Вычислить оптимальную комбинацию Маковиц:
calculate_optimal_portfolio
Функции, имитирующие несколько портфелей. В каждой имитации произвольно генерируются весы активов, которые затем рассчитывают ожидаемый доход и риск портфеля в соответствии с этими весями.Целью всего процесса является поиск портфеля, который дает наилучшие ожидаемые доходы при данном уровне риска. Моделируя несколько возможных комбинаций, инвесторы могут лучше понять, как будут работать различные конфигурации, и выбрать комбинацию, которая наиболее подходит для их инвестиционных целей и рискованности. Этот подход помогает оптимизировать инвестиционные решения и сделать инвестиции более эффективными.
import numpy as np
import pandas as pd
import requests
import matplotlib.pyplot as plt
# 获取行情数据
def get_data(symbols):
data = []
for symbol in symbols:
url = 'https://api.binance.com/api/v3/klines?symbol=%s&interval=%s&limit=1000'%(symbol,'1d')
res = requests.get(url)
data.append([float(line[4]) for line in res.json()])
return data
def calculate_returns_risk(data):
returns = []
risks = []
for d in data:
daily_returns = np.diff(d) / d[:-1]
annualized_return = np.mean(daily_returns) * 365
annualized_volatility = np.std(daily_returns) * np.sqrt(365)
returns.append(annualized_return)
risks.append(annualized_volatility)
return np.array(returns), np.array(risks)
# 计算马科维茨最优组合
def calculate_optimal_portfolio(returns, risks):
n_assets = len(returns)
num_portfolios = 3000
results = np.zeros((4, num_portfolios), dtype=object)
for i in range(num_portfolios):
weights = np.random.random(n_assets)
weights /= np.sum(weights)
portfolio_return = np.sum(returns * weights)
portfolio_risk = np.sqrt(np.dot(weights.T, np.dot(np.cov(returns, rowvar=False), weights)))
results[0, i] = portfolio_return
results[1, i] = portfolio_risk
results[2, i] = portfolio_return / portfolio_risk
results[3, i] = list(weights) # 将权重转换为列表
return results
symbols = ['BTCUSDT','ETHUSDT', 'BNBUSDT','LINKUSDT','BCHUSDT','LTCUSDT']
data = get_data(symbols)
returns, risks = calculate_returns_risk(data)
optimal_portfolios = calculate_optimal_portfolio(returns, risks)
max_sharpe_idx = np.argmax(optimal_portfolios[2])
optimal_return = optimal_portfolios[0, max_sharpe_idx]
optimal_risk = optimal_portfolios[1, max_sharpe_idx]
optimal_weights = optimal_portfolios[3, max_sharpe_idx]
# 输出结果
print("最优组合:")
for i in range(len(symbols)):
print(f"{symbols[i]}权重: {optimal_weights[i]:.4f}")
print(f"预期收益率: {optimal_return:.4f}")
print(f"预期风险(标准差): {optimal_risk:.4f}")
print(f"夏普比率: {optimal_return / optimal_risk:.4f}")
# 可视化投资组合
plt.figure(figsize=(10, 5))
plt.scatter(optimal_portfolios[1], optimal_portfolios[0], c=optimal_portfolios[2], marker='o', s=3)
plt.title('portfolio')
plt.xlabel('std')
plt.ylabel('return')
plt.colorbar(label='sharp')
plt.show()
В конце концов, результат: Лучшая комбинация: Вес BTCUSDT: 0.0721 Вес ETHUSDT: 0.2704 Вес BNBUSDT: 0.3646 Вес LINKUSDT: 0.1892 Вес BCHUSDT: 0.0829 Вес LTCUSDT: 0.0209 Ожидаемая доходность: 0.4195 Ожидаемый риск (стандартная погрешность): 0.1219 Отношение к Sharp: 3.4403