2022数模美赛C题:股票投资策略
数学建模 跟着欢欢玩转数模 · 1657浏览 · 2023-08-23 06:39
2022数模美赛C题:股票投资策略

1、准备工作

1.1 题目背景

市场交易者频繁买卖波动性资产,目标是最大化其总回报。每次买卖通常都会有佣金。 两种这样的资产是黄金和比特币。v2-848957805b34376128b0b2cc04822c3b_b.jpg图 1:黄金每日价格,每金衡盎司美元。 资料来源:伦敦金银市场协会,2021 年 9 月 11 日v2-79d4725c228ebb4f4d004ac4ed0b64d3_b.jpg图 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客户端

2、思路分析

我们可以根据预测未来走势来对(买入或者出售或保持)这三种交易活动进行决策。首先,对黄金的和比特币的价格进行预测,可以选择用各种机器学习回归来运算。这里,举例利用滑动窗口+xgboost进行预测,即用前5天的价格数据来预测后1天的价格。(以黄金价格预测为例)

3、解题流程框图

4、详细解题步骤

4.1 详细求解步骤

step1:数据合并首先先把比特币和黄金的交易数据合并起来,通过简单的观察,以Date字段为关联字段,合并数据,采用merge连接,可以得到以下数据,可以看到,一共有1826行样本。v2-b9a947072111ebda060a8c54aaa53e19_b.jpg将合并后数据进行查看确实值,可以看到,黄金存在缺失值,且缺失了571个数值,这是因为比特币可以每天交易,但黄金仅在开市日交易导致的v2-09d737ac1e8abc3c44666a39f9643e36_b.jpgstep2:训练模型,进行时序预测根据题目要求,开发一个模型,该模型仅根据当天的价格数据提供每日的最佳交易策略,因此,我们需要训练一个能基于当天数据预测第二天数据的时序模型。对于时间序列问题,目前业界有两种求法:1、学术界常用计量统计模型,如arima模型、灰色预测模型、指数平滑等等,这类需要进行非常严格的模型检验2、工业界统计模型,大多采用机器学习进行时间序列问题求解,例如lstm,xgboost等,通常做法也是2种,一种是单序列求解,将单序列转为多序列回归,另外就是构建特征工程,直接研究回归问题。这里我们采用工业界模型,也就是机器学习时序预测,在这之前,我们需要了解一个数据处理的方法——时序数据滑窗转换。时序数据滑窗转换用于将时间序列数据转为回归数据,简单地说,就是把一个单序列的数据变为X->Y的回归数据。步阶为2代表2个X(步阶多少就有多少个X),一个Y(这个不会变的),简单地说,就是用第1,2天的数据预测第3天,用第2,3天的数据预测第4天,以此类推。大家可以用spsspro的数据处理的时序数据滑窗转换实现v2-cc71e65c8dbeb6a7144421f5986440e8_b.jpgSPSSPRO-数据处理v2-66f19bdc6055b4c5ec1a4107651f34e1_b.jpg时序数据滑窗转换我这里也写了一个代码实现,只不过效率会差些。dataset, look_backv2-fea4f11712ac920e931da16a265c459a_b.jpg其中,dataset为数据集, look_back为步阶,如上图所示,为比特币步阶为1时的滑窗转换结果。可以采用SPSSPRO的随机森林回归,使用起来也更简单,而且输出的结果和图表比较精美,这里建议大家多跑几个算法对比效果,推荐XGBooST、LGBM、随机森林回归这三项。v2-592f8532c6133a6e8d0277425cbf712c_b.jpg这里我采用代码采用随机森林对比特币进行时序数据训练进行示例,结果如下,可以看到,R2为0.994,拟合效果较为优秀。v2-5ee6b67e9c8b787984f742e746010751_b.jpg同理,得到黄金的预测模型,注意黄金数据需要剔除缺失值,但是不要在原有数据上剔除。v2-0e99a533cf0b4696f51e1d63e1f2b5a5_b.jpg接着,重复构建训练模型,用第1天的黄金、比特币数据预测第2天的黄金、比特币,用第1、2天的黄金、比特币数据预测第3天的黄金、比特币、用第1、2、3天的黄金、比特币数据预测第4天的黄金、比特币依次类推。得到每天的预测数据,同时与真实的数据进行合并,整理得到以下表格。v2-914c164df6fdfe28d8d30ca36a95c793_b.jpgstep3:构建最优化模型,基于启发式算法寻优在进行预测后,我们需要得到买入-出售-保持这样的交易策略,其中,黄金仅在开市日的交易,这说明在周末或者节假日,交易状态一定是持有,可以分别保留黄金和比特币的共同交易日数据来进行分析。假设黄金-比特币是同买同卖的,主要设计到的是一个收益率这样一个时间序列数据,比如,我们可以在任一一天进行买入,我们可以用(预测某天金子的价格/购买金子的实际价格-1)来得到收益率,当涨幅达到某个值的,建议卖出。注意:初始状态为【1000,0,0】,并且每笔交易(购买或出售)的交易成本为交易金额的a%,其中黄金为1%,比特币为2%,那么,对于1000美金,买入卖出两个步骤,我们实际进行的交易金额只有940美金。建立简单目标规划:假设t是买入到卖出这段时间v2-4ebf5221ee3b3a91c9cffc693b7f070a_b.jpg由于买入-售出是在不断进行的,我们需要建立循环来进行运行。为达到更加完美的结果,更贴合实际,可以添加金融风险性的分析,类似VaR、CVaR、又或者是信息熵的使用,在建立完美的投资模型后,我们可以用来优化算法来对权重进行寻优,比如粒子群法、遗传算法、免疫算法等等。即:我们需要设定好目标函数,也就是每日收益的最大化,设立相关约束条件,求解规划求解结果,以及规划求解方程导出。我们设置以下变量v2-932b5155c62d9fc5e62a4f2118e41365_b.jpg变量设置而我们的目标就是根据预测模型与限定的一些约束条件中,得到每天的最佳投资策略,然后重复这个过程,直到在 2021 年 9 月 10 日,初始 1000 美元能收获的投资价值多少?可以简单设置一个规划模型:其中,如果是黄金和比特币都开市,则目标函数为:每日收益=(第二天的黄金价格/今天的黄金价格)(前一天的黄金持有数+当天的黄金交易数)+(第二天的比特币价格/今天的比特币价格)(前一天的比特币持有数+当天的比特币交易数)v2-91a7210427e808c9f34c830fdd26e597_b.jpg约束条件有:v2-92d8813226bcaa9a33b91e8dbf5d783a_b.jpg约束1:当天的黄金、比特币交易数不得超过总持有量v2-60e975477adac4469718148c155c409c_b.jpg约束2:当天的黄金、比特币交易数不得超过前一天各自的持有量v2-302a641b676c8bc806ab9d7fd142ca89_b.jpg约束3:高于税费才交易还有其他约束,大家可以自行补充。如果只有比特币开市,则目标函数为:每日收益=前一天的黄金持有数+(第二天的比特币价格/今天的比特币价格)*(前一天的比特币持有数+当天的比特币交易数)v2-75b774359f753a72fa3b1eacc7650c85_b.jpgstep4:使用遗传算法求解单天最优解遗传算法求解v2-5aabb2bd4b57349e230ca4066c4f1f19_b.jpg设置初始参数v2-ecb6be01a87d0fb3944e10b45daf9941_b.jpg第一个目标函数求解结果v2-83d10311042cacb6fe4e5aaa8fd0bb4d_b.jpg第二个目标函数求解结果step5:迭代每天重复进行最优化投资v2-63398221fb971c593967ca4b11285291_b.jpgSPSSPRO-Notebookstep6:1826天的最优策略下模拟结果v2-97cef6f37e0cec3fbc9708f01a0d72b1_b.jpg即最终持有投资额为7047.974988元。当然我这个数值比较低是因为跟投资的约束条件有关,这里我只是简单列一下容易模型化的约束条件,大家可以自行进行补充,跑出更优秀的结果。4.2 灵敏度分析v2-b2851ad02ea410a0900f306a883a7b10_b.jpg灵敏性分析第三题的原理其实就是灵敏度分析,前面第一二题我们不是设置了初始黄金的持有量是一半一半各500,第三题灵敏度分析,它其实就是对这一些手动设置的参数进行分析,就像假设我黄金一开始持有量是100,会不会影响到最终的结果,所以我们可以看到那张图x轴是黄金开始的一个持有量,y轴就是经过5年交易期结束后的资产总额了,可以看到,他其实是再6750左右上下波动,说明模型的稳健性很强,对最终的资产总额结果不会有很灵敏的影响。

相关推荐

使用教程 数据分析达人
第三届数据分析科普竞赛优秀协办单位及校园大使名单公布!

第三届数据分析科普竞赛优秀协办单位及校园大使名单公布!

知识竞赛 2024年第三届全国大学生数据分析实践赛组委会 · 472浏览 · 01-07 08:34
2024年全国大学生数据分析实践赛获奖名单(初稿)公示

# 2024年全国大学生数据分析实践赛获奖名单(初稿)公示 2024年全国大学生数据分析实践赛自2024年8月16日开启,共计吸引了来自

知识竞赛 原创 · 1937浏览 · 2024-09-04 08:07
2024数据分析实践赛A、B赛题公布!

**2024数据分析实践赛已于8月16日 18:00正式公布题目!** 完整题目、数据及论文提交格式下载方式: 一、直接通过赛氪网公告下

知识竞赛 原创 · 4398浏览 · 2024-08-16 10:07
0 条评论
    某人
    可输入 255
    SPSSPRO社区 扫码访问移动端