O recurso está a ser carregado... Carregamento...

A medida do risco e do retorno. Introdução à Teoria de Tom Markowitz.

Autora:Ervas daninhas, Criado: 2023-11-10 15:44:53, Atualizado: 2023-11-13 19:50:57

img

Na semana passada,Gestão de Riscos VaRO risco de um portfólio não é igual ao risco de cada um dos ativos, e está relacionado à sua correlação de preços. Se dois ativos, por exemplo, tiverem uma correlação positiva muito forte, ou seja, se caírem em uma mesma posição, então diversificar para mais investimentos não reduzirá o risco. Se a correlação negativa for forte, o investimento diversificado pode reduzir significativamente o risco. A questão natural é como maximizar o retorno em um determinado nível de risco ao investir em um portfólio.

A Teoria Moderna do Portfólio (MPT), proposta por Harry Markowitz em 1952, é um quadro matemático de seleção de portfólios que visa maximizar os retornos esperados, enquanto controla o risco, através da seleção de diferentes portfólios de ativos de risco. A ideia central é que as variações de preços não totalmente sincronizadas entre ativos podem reduzir o risco de investimento geral através da diversificação da distribuição de ativos.

Os conceitos-chave da teoria de Markowitz

  1. Retorno esperadoÉ o rendimento esperado que um investidor pode obter com um ativo ou um portfólio, geralmente baseado em dados de rendimento histórico.

    $E(R_p) = \sum_{i=1}^{n} w_i E(R_i) $

    Dentre eles, $E ((R_p) $ é a taxa de retorno esperada do portfólio, $w_i$ é o peso do $i$ no portfólio e $E ((R_i) $ é a taxa de retorno esperada do $i$.

  2. Risco (volatilidade ou desvio padrão)O método de avaliação do investimento é o seguinte: é usado para medir a incerteza do retorno do investimento ou a volatilidade do investimento.

    $\sigma_p = \sqrt{\sum_{i=1}^{n} \sum_{j=1}^{n} w_i w_j \sigma_{ij}}$

    Dentre eles, $\sigma_p$ é o risco total do portfólio, $\sigma_{ij}$ é o diferencial de coeficientes entre os ativos $i$ e $j$, que mede a relação entre as mudanças de preço dos dois ativos.

  3. Diferença de parceriaA relação entre as variações de preços de dois ativos.

    $\sigma_{ij} = \rho_{ij} \sigma_i \sigma_j$

    Dentre eles, $\rho_{ij}$ é o coeficiente correlato do ativo $i$ e do ativo $j$, e $\sigma_i$ e $\sigma_j$ são respectivamente o diferencial padrão do ativo $i$ e do ativo $j$.

  4. Fronteiras eficazes: No sistema de coordenadas risco-benefício, o limite eficaz é o conjunto de portfólios que podem oferecer o maior retorno esperado em um determinado nível de risco.

img

O gráfico acima é um diagrama de fronteiras eficazes, onde cada ponto representa um portfólio de diferentes ponderações, com os pontos horizontais representando os níveis de risco e os pontos verticais representando os níveis de retorno. Obviamente, estamos focados na parte superior do gráfico, que obtém o maior retorno com o mesmo nível de risco.

Na gestão de quantificação de transações e portfólios, a aplicação desses princípios requer a análise estatística de dados históricos, o uso de modelos matemáticos para estimar os retornos esperados, desvios padrão e desvios de correlação de vários ativos. Em seguida, técnicas de otimização são aplicadas para encontrar a melhor realocação de ativos. Este processo geralmente envolve complexas operações matemáticas e um grande número de processamentos com computadores, e é por isso que a análise quantitativa se tornou tão importante no campo financeiro moderno.

Exemplos de código Python para obter a combinação ideal usando o método analógico

Calcular o melhor conjunto de Markowitz é um processo de várias etapas, envolvendo vários passos cruciais, como preparação de dados, portfólio de simulação, cálculo de indicadores e outros.https://plotly.com/python/v3/ipython-notebooks/markowitz-portfolio-optimization/

  1. Obtenção de dados de mercado

    • Aprovaçãoget_dataFunções que obtêm dados de preços históricos de uma moeda digital selecionada. Estes dados são necessários para calcular o rendimento e o risco, e são usados para construir portfólios e calcular o índice de Sharpe.
  2. Calcular os retornos e os riscos

    • Utilizaçãocalculate_returns_riskA função calcula o rendimento anual e o risco anual ("desvio padrão") de cada moeda digital. Isso é para quantificar o desempenho histórico de cada ativo para uso em combinações ideais.
  3. Calcule a combinação óptima de Markowitz

    • Utilizaçãocalculate_optimal_portfolioFunção que simula vários portfólios. Em cada simulação, são gerados pesos de ativos aleatórios e, com base nesses pesos, são calculados os retornos e riscos esperados do portfólio.
    • Ao gerar combinações de diferentes ponderações aleatoriamente, é possível explorar vários portfólios possíveis para encontrar o melhor. Esta é uma das idéias centrais do raciocínio do portfólio de Markowitz.

O objetivo de todo o processo é encontrar um portfólio que obtenha o melhor retorno esperado em um determinado nível de risco. Ao simular várias combinações possíveis, os investidores podem entender melhor o desempenho das diferentes configurações e escolher a combinação mais adequada para seus objetivos de investimento e capacidade de aceitar riscos.

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()

O resultado final é: A melhor combinação: Pesos do BTCUSDT: 0.0721 ETHUSDT peso: 0.2704 BNBUSDT peso: 0.3646 LINKUSDT peso: 0.1892 BCHUSDT peso: 0.0829 Peso LTCUSDT: 0.0209 Renda esperada: 0.4195 Risco esperado (desvio padrão): 0.1219 Percentagem de Sharp: 3.4403img


Mais.