主页 > imtoken支持bcc > 2022年数学竞赛C题:股票投资策略

2022年数学竞赛C题:股票投资策略

imtoken支持bcc 2023-03-29 05:36:37

一、准备工作 1.1 选题背景

市场交易者经常买卖波动较大的资产,以实现总回报最大化。 每次买卖通常都会收取佣金。 两种这样的资产是黄金和比特币。

1

图 1:每金衡盎司美元每日黄金价格。资料来源:LBMA,2021 年 9 月 11 日

1

图 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(免费在线使用,推荐)

二、思路分析

首先我们先整理一下数据,因为比特币每天开盘,黄金有开盘时间和收盘时间,将它们整理成时间线对齐,用缺失值表示收盘日和很快。

我们可以根据对未来趋势的预测,对这三种交易活动(买入或卖出或保留)做出决策。 因此,我们可以对黄金和比特币进行时间序列预测,根据今天的数据或过去的数据预测明天的价格走势,做出更好的决策。

然后,对于第一天,根据明天的预测价格,构建一个目标计划,目的是实现第二天的价格已知,并且只有当投资能够最大化当前交易日的价格时,交易的真实收益可以根据预测价格实施的投资策略后,根据第二天的真实价格计算该投资策略当天的收益,然后重复这个过程,直到持有量丢失或5年交易期结束,循环停止。

接下来,对模型中出现的超参数进行敏感性分析。 比如初始黄金持有量设置为500个,如果调整这个比例,投资金额是否会平稳波动?

3.解题流程图

1

4. 详细解题步骤 4.1 详细解题步骤step1:数据合并

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

1

检查合并数据的实际值。 可以看到gold有缺失值,缺失了571个值。 这是因为比特币每天都可以交易,而黄金只有开市当天交易。

1

step2:训练模型并进行时间序列预测

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

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

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

2. 业界统计模型多采用机器学习解决时间序列问题,如lstm、xgboost等,常见的方法有两种,一种是求解单序列,将单序列转化为多序列回归,另一种就是构建特征工程买比特币的流程,直接研究回归问题。

这里我们使用行业模型,即机器学习时间序列预测。 在此之前,我们需要了解一种数据处理方式——时序数据滑动窗口转换。

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

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

可以使用spsspro数据处理的时间序列数据滑动窗口转换来实现

1

SPSSPRO-数据处理

1

时序数据滑动窗口变换

我这里也写了代码实现,但是效率会差一些。 数据集,look_back

1

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

可以使用SPSSPRO的随机森林回归,比较好用,输出的结果和图表也比较漂亮。 这里建议大家多跑几个算法比较一下效果。 推荐使用 XGBooST、LGBM 和随机森林回归。

1

这里我以代码使用随机森林训练比特币的时间序列数据为例。 结果如下。 可以看出R2为0.994,拟合效果比较好。

1

同理,得到黄金的预测模型,注意需要去除黄金数据的缺失值,而不是原始数据。

1

接下来,反复建立训练模型,用第一天的黄金和比特币数据预测第二天的黄金和比特币,用第一天和第二天的黄金和比特币数据预测第二天的黄金和比特币。第三天。 第1、2、3天的黄金和比特币数据预测第4天的黄金和比特币,以此类推。

获取每天的预测数据,同时与真实数据进行合并,整理出如下表格。

1

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

经过预测,我们需要得到一个买-卖-留的交易策略,其中黄金只在开盘交易,也就是说在周末或节假日,交易状态必须是持有,可以分别保留黄金和比特币使用币种常用交易日数据进行分析。 假设黄金-比特币同时买卖,主要设计的是收益率等时间序列数据。 比如我们可以在任意一天买入,我们可以用(预测某一天的黄金价格/买入黄金的实际价格-1)来得到收益率,当涨幅达到一定值时,建议出售。

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

制定一个简单的目标计划:

假设 t 是从买入到卖出的时间

1

由于买卖正在进行,我们需要创建一个循环来运行。

为了达到更完美的结果,更符合实际,我们可以加入财务风险分析,类似VaR、CVaR,或者信息熵的使用。 建立完善的投资模型后,我们可以利用它来优化算法,对权重进行优化,如粒子群优化、遗传算法、免疫算法等。

即:我们需要设定目标函数,即每日收入最大化,设置相关约束,求解规划求解结果,推导出规划求解方程。

我们设置以下变量

1

变量设置

而我们的目标是根据预测模型和一些有限的约束得到最好的每日投资策略买比特币的流程,然后重复这个过程直到2021年9月10日。最初的1000美元可以收获的投资价值是多少?

可以简单的建立一个规划模型: 其中,如果黄金和比特币都开放,目标函数为:

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

1

约束是:

1

约束一:当天黄金和比特币的交易数量不得超过总持仓量

1

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

1

约束 3:只有当税收高于费用时才进行交易

您可以自己添加其他约束。

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

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

1

step4:使用遗传算法求解

单日最优解遗传算法解法

1

设置初始参数

1

第一个目标函数的求解结果

1

第二个目标函数的求解结果

step5:每天迭代重复优化投入

1

SPSSPRO-笔记本

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

1

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

当然我的值比较低,因为跟投资受限有关。 这里我简单列出容易建模的约束。 您可以自己补充它们以获得更好的效果。

4.2 敏感性分析

1

敏感性分析

第三题的原理其实就是敏感性分析。 第一题和第二题,我们没有设置初始黄金持有量各500各一半。第三题是敏感性分析。 其实就是对这些手动设置的参数进行分析。 就像假设我一开始的黄金持有量是100,会不会影响最后的结果,所以我们可以看到图表的x轴是一开始的黄金持有量,y轴是结束的5年交易期总资产后,可以看到实际上是在6750附近上下波动,说明模型非常稳健,不会对总资产的最终结果产生非常敏感的影响。

5代码获取

以上,所有的代码和题材都可以通过以下方式免费获取,关注SPSSPRO社区账号【关注欢欢玩数字模拟】:

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

1

1

作者创作不易。 如果觉得有用,请点赞、收藏、关注三联。