《计算金融与Python实践》习题库_第1页
《计算金融与Python实践》习题库_第2页
《计算金融与Python实践》习题库_第3页
《计算金融与Python实践》习题库_第4页
《计算金融与Python实践》习题库_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

模块一:金融市场投资理论基础(对应方案中教学内容第1部分)简答题简述证券市场的功能以及一级市场和二级市场的区别与联系。参考答案:证券市场是股票、债券等有价证券发行和交易的场所,具有筹资、投资、资本定价和资源配置等功能。一级市场是发行市场,是证券从发行人手中转移到初始投资者手中的过程;二级市场是流通市场,是投资者之间进行证券买卖的场所。一级市场是二级市场的基础,二级市场为一级市场发行的证券提供了流动性,是证券发行成功的重要保障。解释投资组合理论中的“有效前沿”概念。参考答案:有效前沿是指在给定风险水平下,能够提供最高预期收益的投资组合集合;或者是在给定预期收益水平下,风险最低的投资组合集合。它由一系列最优投资组合构成,位于投资可行集的左上方边界,是风险厌恶投资者的最优选择范围。什么是资本资产定价模型(CAPM)中的贝塔系数(β)?它如何衡量风险?参考答案:贝塔系数(β)是衡量单个资产或投资组合相对于整个市场(市场组合)的系统性风险的指标。它反映了资产收益对市场收益变动的敏感程度。β=1,资产风险与市场一致;β>1,资产风险大于市场;β<1,资产风险小于市场。在CAPM中,只有系统风险(β风险)才能获得风险溢价。有效市场假说(EMH)的三个层次是什么?参考答案:弱式有效市场假说认为证券价格已充分反映了历史交易信息(如价格、成交量),技术分析无效。半强式有效市场假说认为证券价格已充分反映了所有公开信息(如公司财报、新闻),基本面分析无效。强式有效市场假说认为证券价格已充分反映了所有信息(包括内幕信息),任何投资者都无法获得超额收益。行为金融理论从哪几个方面对有效市场假说提出了质疑?参考答案:1.投资者非完全理性,存在认知偏差(如过度自信、损失厌恶)。2.投资者的非理性行为并非随机,而是具有系统性,如羊群效应。3.套利存在限制,由于噪声交易者风险、交易成本等因素,理性套利者可能无法纠正价格偏差。简述布莱克-斯科尔斯期权定价模型(BSM)的五个关键输入变量。参考答案:BSM模型用于欧式期权定价,其关键输入变量包括:1.标的资产的当前价格(S);2.期权的行权价格(X);3.距离期权到期日的时间(T);4.无风险利率(r);5.标的资产收益率的波动率(σ)。其中,波动率是最关键且最不确定的变量。解释风险价值(VaR)的含义,并说明计算VaR常用的三种方法。参考答案:VaR是指在一定的持有期和给定的置信水平下,某一金融资产或投资组合可能遭受到的最大潜在损失。常用的计算方法有:1.参数法(正态分布法),假设收益率服从正态分布;2.历史模拟法,基于历史收益数据的分位数进行估计;3.蒙特卡洛模拟法,通过模拟大量未来价格路径来构建收益分布。什么是市场风险中的系统风险和非系统风险?参考答案:系统风险是由宏观经济因素(如利率、通货膨胀、战争)引起的、影响整个市场所有资产的风险,无法通过分散投资消除。非系统风险是由特定公司或行业特有因素(如诉讼、新产品失败)引起的风险,可以通过构建多样化的投资组合来分散或消除。简述资本资产定价模型(CAPM)中证券市场线(SML)和资本市场线(CML)的主要区别。参考答案:CML(资本市场线)描述的是有效投资组合(由无风险资产和市场组合构成)的期望收益与总风险(标准差)之间的关系。SML(证券市场线)描述的是所有资产(包括单个资产和无效组合)的期望收益与系统风险(β系数)之间的关系。CML仅适用于有效组合,而SML适用于所有资产。什么是行为金融学中的“期望理论”?其价值函数有何特点?参考答案:期望理论由卡尼曼和特沃斯基提出,用于描述人们在不确定性下的决策行为,认为人们对损失和收益的感知是不同的。其价值函数的特点是:1.定义在相对于某个参照点的偏离上;2.在收益区域是凹函数(风险规避),在损失区域是凸函数(风险偏好);3.损失区域曲线比收益区域曲线更陡峭,即损失带来的痛苦大于同等收益带来的快乐(损失厌恶)。模块二:Python编程与数据处理基础(对应方案中教学内容第2部分)编程实践题题目:定义一个函数

is_prime(n),判断一个整数

n

是否为质数(素数),如果是返回

True,否则返回

False。并在主程序中调用该函数,打印出1到100之间的所有质数。参考思路:使用循环和分支结构,判断从2到sqrt(n)是否有能整除n的数。题目:给定一个列表

lst=[1,2,3,4,5,6,7,8,9],请使用列表推导式实现以下操作:

a)生成一个包含原列表所有元素平方的新列表。

b)生成一个只包含原列表偶数的平方的新列表。参考代码:pythonlst=[1,2,3,4,5,6,7,8,9]squares=[x**2forxinlst]even_squares=[x**2forxinlstifx%2==0]print(squares)print(even_squares)题目:创建一个形状为(3,4)的NumPy数组,元素为从0到11的整数。然后:

a)提取第二行。

b)提取第三列。

c)提取所有大于5的元素。

d)将数组的形状改为(2,6)。参考代码:pythonimportnumpyasnparr=np.arange(12).reshape(3,4)print(arr[1,:])#a)print(arr[:,2])#b)print(arr[arr>5])#c)arr=arr.reshape(2,6)#d)print(arr)题目:创建一个形状为(3,4)的随机整数数组A(范围0-9)和一个形状为(3,1)的数组B(范围0-4)。请演示NumPy的广播机制,计算A与B的和,并解释广播是如何发生的。参考代码:pythonimportnumpyasnpA=np.random.randint(0,10,size=(3,4))B=np.random.randint(0,5,size=(3,1))C=A+Bprint("A:\n",A)print("B:\n",B)print("A+B:\n",C)解释:B的形状是(3,1),A的形状是(3,4)。NumPy将B在第二个维度(列)上复制4次,使其形状变为(3,4),然后进行逐元素相加。题目:使用Pandas读取一个CSV文件(例如,下载的股票数据),并完成以下数据清洗工作:

a)检查数据是否有缺失值,并用合适的方法(如均值填充或向前填充)处理。

b)检查数据是否有重复行,并进行删除。

c)将某一列(如“日期”)转换为时间戳类型,并设置为索引。参考思路:使用df.isnull().sum()检查缺失值;用df.fillna(method='ffill')或df.fillna(df.mean())填充;用df.drop_duplicates()删除重复行;用pd.to_datetime()转换日期列,并用df.set_index()设置索引。题目:利用Pandas对某只股票的历史数据(包含开盘、收盘、最高、最低价)进行如下分析:

a)计算每日收益率。

b)计算20日均线(收盘价的20日移动平均)。

c)找出所有成交量超过当日5日均量(成交量5日移动平均)的日期。参考思路:使用df['close'].pct_change()计算收益率;使用df['close'].rolling(window=20).mean()计算均线;使用df['volume'].rolling(5).mean()计算5日均量,然后用布尔索引df[df['volume']>ma_5_volume]筛选。题目:创建一个包含学生信息(姓名、数学成绩、英语成绩)的DataFrame。请使用groupby和agg方法,按学生姓名分组,计算每个学生的总分和平均分。参考代码:pythonimportpandasaspddata={'姓名':['张三','李四','张三','李四'],'科目':['数学','数学','英语','英语'],'成绩':[90,85,88,92]}df=pd.DataFrame(data)#透视后分组pivot_df=df.pivot(index='姓名',columns='科目',values='成绩')pivot_df['总分']=pivot_df.sum(axis=1)pivot_df['平均分']=pivot_df[['数学','英语']].mean(axis=1)print(pivot_df)题目:使用Matplotlib绘制一张图表,显示某只股票在过去一段时间内(如2023年)的收盘价走势(折线图)和成交量(柱状图),并添加图表标题、坐标轴标签和图例。成交量需绘制在同一个x轴但不同的y轴刻度上。参考思路:使用plt.subplots()创建一个图形和一个轴对象。使用ax1.plot()绘制收盘价折线图,使用ax1.set_ylabel()设置左侧标签。使用ax2=ax1.twinx()创建共享x轴的右侧轴,用ax2.bar()绘制成交量柱状图,并设置右侧标签和颜色。题目:生成一组符合正态分布的随机数据(例如,均值=100,标准差=15,样本量=1000)。使用Matplotlib绘制该数据的直方图,并叠加其理论概率密度曲线(PDF)。同时,添加标题和网格。参考思路:使用np.random.normal()生成数据。使用plt.hist()绘制直方图,参数density=True使面积和为1。使用scipy.stats.norm获取均值和标准差,计算pdf值,并用plt.plot()绘制曲线。题目:简述NumPy中

reshape()

resize()

方法的主要区别。参考答案:reshape()

方法在不改变数组原始数据的情况下返回一个新的视图(如果可能)或副本,要求新形状的元素总数必须与原数组相同。resize()

方法可以直接修改原数组的形状,如果新形状的元素总数大于原数组,则会重复原数组的元素来填充;如果小于,则会截断原数组。模块三:金融数据分析与机器学习(对应方案中教学内容第3部分)简答题/编程实践题简答题:在进行机器学习建模之前,为什么通常需要对特征数据进行标准化(Standardization)或归一化(Normalization)?请举例说明哪些算法对特征尺度敏感。参考答案:很多机器学习算法的性能依赖于特征的尺度,例如,基于距离的算法(KNN、SVM、K-Means)和基于梯度的算法(线性回归、逻辑回归、神经网络)。如果特征尺度差异很大,尺度大的特征会主导距离计算或模型训练,导致模型性能下降或训练不稳定。标准化和归一化可以消除量纲影响,使所有特征处于同一数量级,从而提升模型性能和收敛速度。编程实践题:使用Scikit-learn的make_classification函数生成一个包含1000个样本、20个特征、2个类别的分类数据集。将数据集划分为训练集和测试集(比例70/30),然后使用逻辑回归模型进行训练,并输出模型在测试集上的准确率。参考代码:pythonfromsklearn.datasetsimportmake_classificationfromsklearn.model_selectionimporttrain_test_splitfromsklearn.linear_modelimportLogisticRegressionfromsklearn.metricsimportaccuracy_scoreX,y=make_classification(n_samples=1000,n_features=20,n_classes=2,random_state=42)X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=42)model=LogisticRegression()model.fit(X_train,y_train)y_pred=model.predict(X_test)print(f"Accuracy:{accuracy_score(y_test,y_pred):.4f}")简答题:解释什么是“过拟合”(Overfitting)?列举至少三种防止过拟合的常见方法。参考答案:过拟合是指模型在训练数据上表现极好,但在未见过的测试数据上表现很差的现象,即模型学习到了训练数据中的噪声和个别特征,而未能学到普遍规律。防止过拟合的方法包括:1.增加训练数据量;2.简化模型(如减少特征、降低树深度、减少神经网络层数);3.使用正则化技术(L1、L2正则化);4.集成学习(如Bagging、随机森林);5.早停法。编程实践题:加载Scikit-learn自带的Iris数据集。使用StandardScaler对特征进行标准化,然后使用PCA(主成分分析)将特征降维到2个主成分。最后,使用Matplotlib绘制降维后数据的散点图,并根据目标变量(鸢尾花类别)使用不同颜色标记。参考代码:pythonfromsklearn.datasetsimportload_irisfromsklearn.preprocessingimportStandardScalerfromsklearn.decompositionimportPCAimportmatplotlib.pyplotaspltiris=load_iris()X,y=iris.data,iris.targetX_scaled=StandardScaler().fit_transform(X)X_pca=PCA(n_components=2).fit_transform(X_scaled)plt.scatter(X_pca[:,0],X_pca[:,1],c=y,cmap='viridis',edgecolor='k')plt.xlabel('PC1')plt.ylabel('PC2')plt.title('PCAofIrisDataset')plt.show()简答题:解释混淆矩阵(ConfusionMatrix)中的TP、TN、FP、FN分别代表什么?并基于此解释精确率(Precision)和召回率(Recall)的计算公式。参考答案:TP(真正例):预测为正,实际为正;TN(真负例):预测为负,实际为负;FP(假正例):预测为正,实际为负;FN(假负例):预测为负,实际为正。精确率=TP/(TP+FP),衡量预测为正的样本中实际为正的比例。召回率=TP/(TP+FN),衡量实际为正的样本中被正确预测的比例。编程实践题:使用Scikit-learn的波士顿房价数据集(load_boston(),已弃用,可用fetch_california_housing()替代),分别使用线性回归和岭回归(Ridge)进行房价预测。通过5折交叉验证比较两种模型的均方误差(MSE),并得出结论。参考思路:导入数据,划分训练集和测试集。分别创建LinearRegression和Ridge模型。使用cross_val_score,scoring='neg_mean_squared_error'进行交叉验证,取平均值的绝对值进行比较。简答题:什么是集成学习?请简要介绍Bagging和Boosting两种集成学习范式的核心思想。参考答案:集成学习通过构建并结合多个学习器来完成学习任务,通常能获得比单一学习器更显著的泛化性能。Bagging(如随机森林)的核心思想是并行训练多个独立的基学习器,然后通过投票(分类)或平均(回归)来组合结果,旨在降低方差。Boosting(如AdaBoost、梯度提升)的核心思想是串行训练基学习器,每个新的学习器都重点关注前一个学习器分类错误的样本,旨在降低偏差。编程实践题:在上一题(第6题)的基础上,使用GridSearchCV对岭回归的alpha参数进行网格搜索,寻找最优的alpha值。并输出最佳参数和最佳模型在测试集上的R²分数。参考思路:定义一个参数网格param_grid={'alpha':[0.1,1.0,10.0,100.0]}。创建一个GridSearchCV对象,传入Ridge模型、参数网格、交叉验证次数(cv=5)和评分指标(scoring='r2')。fit训练后,使用best_params_和best_score_获取最佳参数和分数。最后用最佳模型预测测试集并计算R²。简答题:决策树模型容易过拟合,简述至少两种剪枝(Pruning)策略。参考答案:剪枝是防止决策树过拟合的常用方法。主要策略有:1.

预剪枝:在决策树生长过程中,提前停止树的生长。例如,设定树的最大深度(max_depth)、内部节点再划分所需的最小样本数(min_samples_split)或叶子节点的最小样本数(min_samples_leaf)。2.

后剪枝:先生成一颗完整的树,然后自底向上对非叶子节点进行考察,若将该节点对应的子树替换为叶节点能带来泛化性能的提升(如在验证集上表现更好),则进行剪枝。编程实践题:对“模块一”中关于VaR计算的理论,请编写Python代码实现参数法VaR的计算。输入参数为:投资组合初始价值(W0)、预期收益率(mu)、收益率波动率(sigma)、置信水平(alpha,如0.95)。函数返回VaR值。参考代码:pythonimportscipy.statsasstdefparametric_var(W0,mu,sigma,alpha=0.95):"""计算参数法VaR:paramW0:初始投资额:parammu:预期收益率:paramsigma:预期波动率:paramalpha:置信水平:return:VaR值(正数)"""#计算标准正态分布的分位数z=st.norm.ppf(1-alpha)#计算VaRVaR=W0*(sigma*z-mu)returnVaR#示例W0=1000000mu=0.1sigma=0.2alpha=0.95var_95=parametric_var(W0,mu,sigma,alpha)print(f"95%置信水平下的VaR为:{var_95:.2f}")模块四:综合案例实战(对应方案中教学内容第4部分)编程实践题题目:使用TusharePro(需要注册获取token)获取贵州茅台(股票代码:600519)从2023年1月1日到2023年12月31日的日线数据。将数据保存为CSV文件,并实现一个函数,能够从该CSV文件读取数据,并计算该股票在此期间的累计收益率,并以图表形式展示收盘价走势和累计收益率走势。参考思路:使用_bar获取数据。使用df.to_csv()保存。读取后,计算累计收益率:df['cum_return']=(1+df['pct_chg']/100).cumprod()。使用Matplotlib双y轴绘制收盘价和累计收益率。题目:选取5只不同行业的股票(例如,银行、消费、科技、医药、能源),下载其过去三年的日收盘价数据。使用Python实现马科维茨投资组合理论中的有效前沿计算。要求:

a)计算每只股票的年化收益率和年化波动率。

b)计算收益率的协方差矩阵。

c)模拟生成至少5000个随机权重组合(允许卖空),计算每个组合的年化收益率、年化波动率和夏普比率。

d)绘制出所有模拟组合的散点图(波动率为x轴,收益率为y轴,颜色表示夏普比率),并标注出最大夏普比率组合的位置。参考思路:使用pandas处理数据,计算对数收益率。使用numpy生成随机权重并归一化。使用np.dot计算组合收益和风险。使用matplotlib.scatter绘图。题目:基于上一题选定的5只股票数据,实现一个投资组合优化器。该优化器能够根据用户输入的目标年化收益率(如15%),在不允许卖空的条件下,通过二次规划求解最小化投资组合的风险(标准差),并返回最优的投资权重和该组合的风险。参考思路:使用scipy.optimize.minimize函数。目标函数是组合标准差。约束条件包括:1.权重之和为1(eq);2.组合收益率等于目标值(eq);3.所有权重大于等于0(通过bounds参数设置)。方法选择'SLSQP'。题目:编写一个Python类,名为EuropeanOptionPricer。该类初始化时需要传入标的资产当前价格S、行权价K、无风险利率r、到期时间T。类中包含以下方法:

a)

bsm_price(sigma,option_type):使用BSM公式计算看涨('call')或看跌('put')期权价格。

b)

binomial_price(sigma,N,option_type):使用二叉树模型计算期权价格,其中N是二叉树的步数。

c)

monte_carlo_price(sigma,num_simulations,option_type):使用蒙特卡洛模拟计算期权价格。参考思路:BSM实现参考教材公式。二叉树实现参考教材代码,需要构建价格树和期权价值树。蒙特卡洛模拟需要生成大量随机路径,计算到期收益并贴现平均。题目:使用历史模拟法计算某股票投资组合(权重自定义)的1日VaR(置信水平95%)。要求:

a)获取组合中所有股票过去一年的日收益率数据。

b)计算组合的日收益率序列。

c)从该收益率序列中找出第5个百分位数,即为VaR值。参考思路:获取数据后,使用np.dot(returns,weights)计算每日组合收益。使用np.percentile(portfolio_returns,5)获取VaR值(通常表示为损失,所以值为负,取绝对值)。题目:改进“模块三”中的KNN股价涨跌预测模型。加入成交量、换手率等新特征,并使用标准化后的马氏距离替代欧氏距离来衡量样本相似度,观察预测准确率是否有变化。参考思路:从Tushare获取除收盘价外的成交量、换手率数据。构建特征矩阵X,包括过去N天的收盘价涨跌幅、成交量涨跌幅等。计算马氏距离需要使用协方差矩阵的逆矩阵(np.linalg.inv(np.cov(X.T)))。KNN分类逻辑不变。题目:对某只股票的收盘价序列进行时间序列分析。使用statsmodels库完成以下任务:

a)对收盘价序列进行ADF检验,判断其平稳性。

b)如果非平稳,进行一阶差分,并再

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论