🔴
入学要求
💯
能力测试
🛣️
课程安排
🕹️
研究资源

练习

习题 1: 轮盘赌模拟

轮盘赌桌有38个口袋:1至36,0和00。押注偶数号码的赔率为1:1。落在0和00视为输局。

你拥有100美元本金,押注偶数号码。

a. 全押策略

通过运行1000次模拟,计算一次性押注全部100美元在单轮后的平均收益和标准差。

universes = 1000
evens = 19
total = 38
payout = 100
rounds = 1
results = np.zeros(universes)

# 你的代码在此处

b. 分注策略

通过运行1000次模拟,计算每次押注1美元并玩100轮后的平均收益和标准差。

universes = 1000
evens = 19
total = 38
payout = 1
rounds = 100
results = np.zeros(universes)

# 你的代码在此处

习题 2: 投资组合多样化

a. 单一资产

使用以下定价数据,计算AMZN在2015年下半年的收益标准差,并绘制价格时间序列。

import yfinance as yf

time_start = '2015-01-01'
time_halfway = '2015-07-01'
time_end = '2016-01-01'

# 获取AMZN数据
amzn = yf.download('AMZN', start=time_start, end=time_end)
AMZN_r = amzn['Close'].pct_change().dropna()

# 分割后半段数据
half_mask = (AMZN_r.index >= time_halfway) & (AMZN_r.index < time_end)
second_half_returns = AMZN_r[half_mask]

# 你的代码在此处

b. 等权重组合

创建以下10只股票的等权重组合,计算组合收益标准差,并与AMZN的收益进行对比绘制。

symbol_list = ['BEN', 'SYMC', 'IP', 'SWKS', 'IVZ', 'MJN', 'WMB', 'LB', 'TWX', 'NFX', 'PFE', 'LLY', 'HP', 'JPM', 'CXO', 'TJX', 'CAG', 'BBT', 'ATVI', 'NFLX']

# 获取组合数据
prices = yf.download(symbol_list, start=time_start, end=time_end)['Adj Close']
returns = prices.pct_change().dropna()

# 构造等权重
eweights = np.array([1/len(symbol_list)]*len(symbol_list))

# 你的代码在此处

c. 市值加权组合

创建相同资产的市值加权组合,计算组合收益标准差,并与前两个结果对比绘制。

# 假设已通过其他方式获取市值数据(此处需自定义实现)
market_caps = [...]  # 市值数据列表

# 计算市值权重
mweights = market_caps / np.sum(market_caps)

# 你的代码在此处

d. 马科维茨组合

使用get_markowitz_weights辅助函数创建均值-方差优化组合,使用2015年前半年的数据校准权重,绘制后半年的组合收益。

# 计算历史收益率和协方差矩阵
mu = returns.loc[:time_halfway].mean().values
sigma = returns.loc[:time_halfway].cov().values

# 获取优化权重
mkweights = get_markowitz_weights(mu, sigma)

# 你的代码在此处
注意:协方差矩阵具有时变性,历史数据可能无法有效预测未来波动