首页IT科技数模美赛m奖概率(真题解析 | 2022数模美赛C题:股票投资策略)

数模美赛m奖概率(真题解析 | 2022数模美赛C题:股票投资策略)

时间2025-07-30 20:37:20分类IT科技浏览8779
导读:1、准备工作 1.1 题目背景...

1                   、准备工作

1.1 题目背景

市场交易者频繁买卖波动性资产                   ,目标是最大化其总回报                   。每次买卖通常都会有佣金                        。 两种这样的资产是黄金和比特币         。

图 1:黄金每日价格                        ,每金衡盎司美元               。 资料来源:伦敦金银市场协会         ,2021 年 9 月 11 日

图 2:比特币每日价格               ,每比特币美元                         。 资料来源:纳斯达克                         ,2021 年 9 月 11 日

要求

一位交易员要求您开发一个模型             ,该模型仅使用迄今为止的每日价格流来确定交 易员每天是否应该购买                        、持有或出售其投资组合中的资产             。

2016 年 9 月 11 日          ,您将从 1000 美元开始          。 您将使用五年交易期                          ,从2016 年 9 月 11 日至 2021 年 9 月 10 日                          。 在每个交易日                 ,交易者将拥有一个由现金组成的投资组合     ,黄金和比特币 [C, G, B] 分别以美元         、金衡盎司和比特币表示                 。 最初的状态为 [1000, 0, 0]     。 每笔交易(购买或销售)的佣金成本为交易金额                           。 假设 αgold = 1% 和 αbitcoin = 2%                     。 持有资产没有成本。

请注意                           ,比特币可以每天交易                     ,但黄金仅在市场开放日交易,定价数据文件反映 LBMA-GOLD.csv 和 BCHAIN-MKPRU.csv 这两点                       ,你的模型应该考虑这个交易时间表                       。

要开发模型                         ,您只能使用提供的两个电子表格中的数据:LBMA-GOLD.csv 和 BCHAIN-MKPRU.csv                         。(官网提供下载)

• 开发一个模型     ,该模型仅根据当天的价格数据提供每日的最佳交易策略                   ,使用你的模型和策略                        ,在 2021 年 9 月 10 日         ,初始 1000 美元能收获的投资价值多少?

• 提供证据证明您的模型提供了最佳策略     。

• 确定策略对交易成本的敏感程度                   。 交易成本如何影响策略和结果?

• 最多以一份备忘录(两页)的形式将您的策略               、模型和结果传达给交易者

1.2 解题使用工具

语言:python3.8

编译器:SPSSPRO Notebook

下载链接:SPSSPRO Notebook(免费在线使用               ,推荐使用)

2                         、思路分析

首先                         ,我们先整理和数据             ,因为比特币每天都开市          ,黄金有时间开市                          ,有时间闭市                 ,把他们整理成时间线对齐     ,可以用缺失值代表闭市日等等                        。

我们可以根据预测未来走势来对(买入或者出售或保持)这三种交易活动进行决策                           ,因此                     ,接着我们可以针对黄金             、比特币进行时序预测,基于当天数据或以往数据去预测明天的价格走势                       ,进而更好地做决策         。

然后先针对第一天                         ,基于预测的明天价格     ,构建一个目标规划                   ,目的是实现已经知道第二日的价格后                        ,如果投入才能实现当前交易日价格的最大化         ,其中交易的真实利益可以根据基于预测价格实施的投资策略后               ,通过真实第二天价格计算当天投资策略的盈利                         ,然后重复这个过程             ,直到持有金额败光或者5年交易期结束          ,停止循环               。

接着                          ,对模型中出现的超参数进行灵敏度分析                 ,例如设置了初始黄金的持有量是各500     ,如果调整这个比例                           ,那么投资额度是否波动平稳?

3          、解题流程框图

4                          、详细解题步骤

4.1 详细求解步骤

step1:数据合并

首先先把比特币和黄金的交易数据合并起来                     ,通过简单的观察,以Date字段为关联字段                       ,合并数据                         ,采用merge连接     ,可以得到以下数据                   ,可以看到                        ,一共有1826行样本                         。

将合并后数据进行查看确实值         ,可以看到               ,黄金存在缺失值                         ,且缺失了571个数值             ,这是因为比特币可以每天交易          ,但黄金仅在开市日交易导致的

step2:训练模型                          ,进行时序预测

根据题目要求                 ,开发一个模型     ,该模型仅根据当天的价格数据提供每日的最佳交易策略                           ,因此                     ,我们需要训练一个能基于当天数据预测第二天数据的时序模型             。

对于时间序列问题,目前业界有两种求法:

1                 、学术界常用计量统计模型                       ,如arima模型     、灰色预测模型                           、指数平滑等等                         ,这类需要进行非常严格的模型检验

2                     、工业界统计模型     ,大多采用机器学习进行时间序列问题求解                   ,例如lstm                        ,xgboost等         ,通常做法也是2种               ,一种是单序列求解                         ,将单序列转为多序列回归             ,另外就是构建特征工程          ,直接研究回归问题          。

这里我们采用工业界模型                          ,也就是机器学习时序预测                 ,在这之前     ,我们需要了解一个数据处理的方法——时序数据滑窗转换                          。

时序数据滑窗转换用于将时间序列数据转为回归数据                           ,简单地说                     ,就是把一个单序列的数据变为X->Y的回归数据                 。步阶为2代表2个X(步阶多少就有多少个X),一个Y(这个不会变的)                       ,

简单地说                         ,就是用第1     ,2天的数据预测第3天                   ,用第2                        ,3天的数据预测第4天         ,以此类推     。

大家可以用spsspro的数据处理的时序数据滑窗转换实现

SPSSPRO-数据处理

时序数据滑窗转换

我这里也写了一个代码实现               ,只不过效率会差些                           。dataset, look_back

其中                         ,dataset为数据集, look_back为步阶             ,如上图所示          ,为比特币步阶为1时的滑窗转换结果                     。

可以采用SPSSPRO的随机森林回归                          ,使用起来也更简单                 ,而且输出的结果和图表比较精美     ,这里建议大家多跑几个算法对比效果                           ,推荐XGBooST、LGBM                       、随机森林回归这三项。

这里我采用代码采用随机森林对比特币进行时序数据训练进行示例                     ,结果如下,可以看到                       ,R2为0.994                         ,拟合效果较为优秀                       。

同理     ,得到黄金的预测模型                   ,注意黄金数据需要剔除缺失值                        ,但是不要在原有数据上剔除                         。

接着         ,重复构建训练模型               ,用第1天的黄金                         、比特币数据预测第2天的黄金     、比特币                         ,用第1                   、2天的黄金                        、比特币数据预测第3天的黄金         、比特币               、用第1                         、2             、3天的黄金          、比特币数据预测第4天的黄金                          、比特币依次类推     。

得到每天的预测数据             ,同时与真实的数据进行合并          ,整理得到以下表格                   。

step3:构建最优化模型                          ,基于启发式算法寻优

在进行预测后                 ,我们需要得到买入-出售-保持这样的交易策略     ,其中                           ,黄金仅在开市日的交易                     ,这说明在周末或者节假日,交易状态一定是持有                       ,可以分别保留黄金和比特币的共同交易日数据来进行分析                        。假设黄金-比特币是同买同卖的                         ,主要设计到的是一个收益率这样一个时间序列数据     ,比如                   ,我们可以在任一一天进行买入                        ,我们可以用(预测某天金子的价格/购买金子的实际价格-1)来得到收益率         ,当涨幅达到某个值的               ,建议卖出         。

注意:初始状态为【1000                         ,0             ,0】          ,并且每笔交易(购买或出售)的交易成本为交易金额的a%                          ,其中黄金为1%                 ,比特币为2%     ,那么                           ,对于1000美金                     ,买入卖出两个步骤,我们实际进行的交易金额只有940美金               。

建立简单目标规划:

假设t是买入到卖出这段时间

由于买入-售出是在不断进行的                       ,我们需要建立循环来进行运行                         。

为达到更加完美的结果                         ,更贴合实际     ,可以添加金融风险性的分析                   ,类似VaR                 、CVaR     、又或者是信息熵的使用                        ,在建立完美的投资模型后         ,我们可以用来优化算法来对权重进行寻优               ,比如粒子群法                           、遗传算法                     、免疫算法等等             。

即:我们需要设定好目标函数                         ,也就是每日收益的最大化             ,设立相关约束条件          ,求解规划求解结果                          ,以及规划求解方程导出          。

我们设置以下变量

变量设置

而我们的目标就是根据预测模型与限定的一些约束条件中                 ,得到每天的最佳投资策略     ,然后重复这个过程                           ,直到在 2021 年 9 月 10 日                     ,初始 1000 美元能收获的投资价值多少?

可以简单设置一个规划模型:其中,如果是黄金和比特币都开市                       ,则目标函数为

每日收益=(第二天的黄金价格/今天的黄金价格)*(前一天的黄金持有数+当天的黄金交易数)+(第二天的比特币价格/今天的比特币价格)*(前一天的比特币持有数+当天的比特币交易数)

约束条件有:

约束1:当天的黄金、比特币交易数不得超过总持有量

约束2:当天的黄金                       、比特币交易数不得超过前一天各自的持有量

约束3:高于税费才交易

还有其他约束                         ,大家可以自行补充                          。

如果只有比特币开市     ,则目标函数为:

每日收益=前一天的黄金持有数+(第二天的比特币价格/今天的比特币价格)*(前一天的比特币持有数+当天的比特币交易数)

step4:使用遗传算法求解

单天最优解遗传算法求解

设置初始参数

第一个目标函数求解结果

第二个目标函数求解结果

step5:迭代每天重复进行最优化投资

SPSSPRO-Notebook

step6:1826天的最优策略下模拟结果

即最终持有投资额为7047.974988元                 。

当然我这个数值比较低是因为跟投资的约束条件有关                   ,这里我只是简单列一下容易模型化的约束条件                        ,大家可以自行进行补充         ,跑出更优秀的结果     。

4.2 灵敏度分析

灵敏性分析

第三题的原理其实就是灵敏度分析               ,前面第一二题我们不是设置了初始黄金的持有量是一半一半各500                         ,第三题灵敏度分析             ,它其实就是对这一些手动设置的参数进行分析          ,就像假设我黄金一开始持有量是100                          ,会不会影响到最终的结果                 ,所以我们可以看到那张图x轴是黄金开始的一个持有量     ,y轴就是经过5年交易期结束后的资产总额了                           ,可以看到                     ,他其实是再6750左右上下波动,说明模型的稳健性很强                       ,对最终的资产总额结果不会有很灵敏的影响                           。

5 代码获取

以上                         ,全部的代码                         、题目数据可以通过下面免费获取,关注SPSSPRO社区账号【跟着欢欢玩转数模】:

免费获取代码+题目+数据

作者创作不易     ,大家觉得有用的点赞收藏关注三连呗                     。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
全网多种方式英文翻译怎么写出来(全网多种方式解决The requested resource [/] is not available的错误) netty粘包产生的原因(透过现象看本质,我找到了Netty粘包与半包的这几种解决方案。)