第三届中青杯数模本科组问题一———股票选择和投资组合方案(excel、python-Mar。。。
第三届中青杯数模本科组问题⼀———股票选择和投资组合⽅案(excel、
python-Mar。。。
完整代码:后期上传⾄github
数据集:资源库
高考成绩公布
问题⼀:投资者购买⽬标指数中的资产,如果购买全部,从理论上讲能够完美跟踪指数,但是当指数成分股较多时,购买所有资产的成本过于⾼昂,同时也需要很⾼的管理成本,在实际中⼀般不可⾏。
(1)在附件数据的分析和处理的过程中,请对缺损数据进⾏补全。
(2)投资者购买成分股时,过多过少都不太合理。对于附件的成分股数据,请您通过建⽴模型,给出合理选股⽅案和投资组合⽅案。⼀、题⽬分析
1.第⼀⼩问,经分析各指标与成交量之间不存在线性回归关系,若使⽤回归分析可能会导致结果相差较⼤。⽽数据中⼜包含时间因素,因此采取时间序列模型进⾏预测。
2.第⼆⼩问,由于衡量如何进⾏合理选股和投资组合的标准是其收益性和风险性。本⽂引⽤Markowitz模型以及夏普⽐率模型从这两个⾓度进⾏合理建模分析。
(以下可视化分析均以股票abc001为例)
⼆、第⼀⼩问求解
⼯具:Excel
(⼀)建⽴模型
在本次分析中,由开盘、最⾼价、最低价、收盘与成交量之间散点图可知,各因⼦之间不存在线性关系;因此建⽴指数平滑曲线,取
α=0.8时,指数平滑曲线重合度较⾼。
(⼆)预测结果
根据指数平滑公式推导, 2020/3/26号成交量预测值为:
三、第⼆⼩问求解
⼯具:Python
(⼀)股票收益及风险分析
> 股票收益率
股票收益率(stock yield),是指投资于股票所获得的收益总额与原始投资额的⽐率。股票得到了投资者的青睐,因为购买股票所带来的收益。
1. 股票⽇收益率
股票⽇收益率计算公式如下:元宵节短信祝福
开家政服务公司
其中p_t表⽰股票在t时刻的收盘价,p_(t-1)表⽰股票在t-1时刻的收盘价。
2. ⽇收益率时间序列图
3. ⽇收益率箱型图
冰箱什么牌子的好4. 累积⽇收益率
5. 模型分析
在股票风险性⼀定的情况下:
图2,图3可以看出,各股票的⽇均收益率⼤致为0,但abc003、abc006、abc007这三⽀股票波动较⼤。
图4中,我们需要在投资时尽量避免左侧尾巴上的异常值,因为他们代表了较⼤的亏损,⽽分布在右侧尾巴上的异常值通常是件好事,它代表较⼤的盈利。
股票风险性
6. 极差、四分位差、平均差、⽅差、标准差和离散系数
平均差:能全⾯准确的反应⼀组数据的离散状况,平均差越⼤,说明数据离散程度越⼤,反之,离散程度越⼩。
plot_distribution(Stock_acc, cols=2, width=20, height=50, hspace=0.45, wspace=0.5)
earn_rate_range=np.max(StockReturns)-np.min(StockReturns)
earn_rate_interquartile_range=StockReturns.quantile(0.75)-StockReturns.quantile(0.25)
earn_rate_var=np.var(StockReturns)
earn_rate_std=np.std(StockReturns)
earn_rate_coefficient=np.std(StockReturns)/np.mean(StockReturns)
print("⽇收益率极差:",earn_rate_range)
print("⽇收益率四分位差: ",earn_rate_interquartile_range)
print("⽇收益率⽅差: ",earn_rate_var)
print("⽇收益率标准差: ",earn_rate_std)
print("⽇收益率离散系数: ",earn_rate_coefficient)
⽅差:⽅差是各变量与平均值的差的平⽅和除以总数n-1,对数据离散程度的度量。
7. 偏度
偏度衡量随机变量概率分布的不对称性,是相对于平均值下对称程度的度量。偏度为零表⽰数值相对均匀的分布在平均值的两侧,但不⼀定意味着⼀定是对称分布。
from scipy import stats
# 计算收益分布的偏度
earn_rate_skew=stats.skew(StockReturns)
print("⽇收益率偏度:",earn_rate_skew)
print("⽇收益率偏度:",StockReturns.skew())
在本次股票模型中,更倾向于正的偏度,因为这意味着⾼盈利的概率更⼤。
杨幂爱的供养走音波动率
股票的波动率衡量了股票在特定时间内收益率的变化。⼀般来说,波动率越⾼,该股票的投资风险更⼤,导致⼈们选择投资其他股票。
青海 旅游plt.figure(figsize =(20,20))
# 定义最⼩周期
min_periods =75
# 计算波动率
vol = lling(min_periods).std()* np.sqrt(min_periods)
# 绘制波动率曲线
vol.plot(grid=True)
# 显⽰绘图结果
plt.show()
模型分析

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。