2022年美国大学生数学建模竞赛C题贸易策略解题全过程文档及程序

news2024/11/19 1:22:39

2022年美国大学生数学建模竞赛

C题 贸易策略

原题再现:

  背景:
  市场贸易者经常购买和销售股票,目标是最大化他们的总回报。针对每次购买和销售,经常会存在回报提成。两个案例是金子和比特币。
在这里插入图片描述
  要求:
  你们团队被贸易者要求建立一个数学模型,只使用过去每天的价格,来确定贸易者是否应该购买,持有,或者销售他们的股票。
  2016年11月9日,首先你有1000美元,你将有五年的贸易期,从2016年11月9日到2021年10月9日。在每天贸易期,贸易者将有一个账户,包含现金,金子,比特币。初始状态是[1000,0,0],每次贸易(购买或者销售)的成本是贸易金额的a%, 其中,假设金子和比特币的 a%分别是 1%和2%。持有股票不需要花费成本。
  注意,比特币每天都可以交易,但是金子只能在市场开放的时候交易。相关数据反映在附件的两个csv文件中。你们的模型应该考虑到这样的贸易计划。
  为了建立你们的模型,你们只能使用附件的两个csv 文件中的数据:LBMA-GOLD.csvandBCHAIN-MKPRU.csv.
   • 建立一个数学模型,基于截止到那天的价格数据,给出每天贸易的最佳策略。使用你们的模型和策略,如果是初始有1000美元投资,那么在2021年10月9日值多少钱?
  • 给出证据,说明你们的数学模型可以提供最佳的贸易策略。
  • 确定你们的策略受到交易价格的灵敏度,交易价格是如何影响到你们的策略和结果?
  • 在两页的篇幅内,和贸易者交流你们的策略,模型和结果。

整体求解过程概述(摘要)

  面对传统类型的黄金投资和新型的比特币投资,制定科学的投资策略以获得最大的收益是许多人的梦想。在本文中,我们以预测模型和计划交易模型为主要主题,探讨了投资者在五年内初始资本为1,000 美元可以获得的最大回报,以及每日交易概况和交易价格对模型的影响。

  我们首先进行数据预处理,分析每日交易状况,并标注黄金在交易日是否可以买卖。为了提高预测模型的准确性,使用小波降噪技术对数据进行处理。然后构建线性回归预测模型、灰度预测模型和循环神经网络预测模型,利用交易日前的历史数据预测第二天的数据。其中,循环神经网络使用基于LSTM模型的GRU模型的改进版本,使计算速度更快。为了使预测更加合理,符合劳逸规律,我们以30天为周期进行预测。在对三种模型进行详细对比和分析后,我们最终在短期预测的情况下使用灰度预测模型,在长期预测的情况下使用GRU模型。

  然后,我们建立一个计划交易模型,将自己置于真实投资者的位置,并详细分析投资者当天可以采取的所有策略,得出投资情况只能是全部现金或所有比特币或所有黄金的结论。然后,我们使用贪婪算法和迭代计划的思想来不断更新投资金额,从而可以每天以最佳选择进行交易。从2016年11月9日到2021年12月9日,在模拟真实交易场景中,我们的总资产较初始大幅增加$1,000,最终为$230,31703.09。

  我们推断我们的模型是已知单日预测的最佳解决方案,并可视化了每年、每月和每天的最终交易场景。在敏感性分析方面,我们分别从交易本金的变化和交易价格的变化方面分析了对最终资产的影响,并从黄金交易和比特币交易之间得出了一些结论。最终,我们从经济学和投资最大化的角度向交易者传达了我们的结果、模型和技术。

  我们编写了大量的代码,这些代码都是开源的,对于后续投资者预测其他金融产品的价格变化和规划复杂的交易将更具启发性。

模型假设:

为了简化我们的模型并消除复杂性,我们在本文中做出以下主要假设。

  1.假设附件中的价格是当天的唯一价格,无视开盘价和收盘价等股票市场规则。

  2.市场效率较弱,即影响只有投资产品的历史价格才能有效反映在其当前价格中。

  3.投资者根据价值投资的逻辑进行定量投资,即“投资产品的价格不会总是低于其内在价值,有效的市场竞争将自动消除所有超额回报”。

  4.社会现实在空间和时间方面的相对不变性的假设。也就是说,投资者心理现象和社会政策环境的发生、发展和变化具有内在的规律性和确定性,被认为对黄金和比特币的影响不大。

问题分析(在这里只展示部分):

  从真实投资的角度来看,我们能得到的数据并不是比特币和黄金的所有价格信息,而是截至当天的历史价格信息,所以我们的预测模型会随着时间的增长而不断更新。而且这个投资产品的价格是人为的,会遵循人类的栖息地,所以我们使用周期性的方法进行长期预测,使用30天作为我们预测的时间片。并且一些预测模型适用于短期预测,例如灰色预测和最小二乘。有些模型适用于长期预测,例如LSTM预测和GRU预测。我们将使用上述预测方法的组合并详细比较它们。

价格预测与最佳交易策略

  在这项任务中,我们的目标是根据来自前几天。然而,真正的投资行为是基于预期实施的接下来的几天。也就是说,在我们制定每日交易策略之前,我们需要分别对接下来几天的黄金和比特币进行价格预测。因此,此任务的解题需要由以下两个步骤组成:
  •步骤1:根据前几天的价格数据。
  由于黄金和比特币的价格波动本质上是时间序列的,我们决定使用基于时间序列的模型,分别预测黄金和比特币的价格。
  •第2步:使用投资策略,根据预测价格制定策略模型

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

程序代码:(代码和文档not free)

import pandas as pd
import csv

df=pd.read_csv("Cresult.csv")
height,weight=df.shape

# height=10

m=df.values

huangjin=[]

for i in range(0,height):
    if(m[i][2]==0):
        huangjin.append(m[i][3])



k=1 #k代表现在持有的是黄金还是比特币
n=0 #n代表的是现在持有的黄金

rateG=0.01
rateB=0.2

oldprice_G=0
oldprice_B=0
newprice_G=0
newprice_B=0
target=1000

res=[]

for i in range(1,height-1):
    res1=[]
    print("第%d天的资产为:%f"%(i,target))
    res1.append(m[i][0])
    res1.append(target)
    res.append(res1)
    #如果黄金不能交易
    if(m[i][2]==1):
        #持现
        if(k==0):
            oldprice_B=m[i][1]
            newprice_B=m[i+1][1]
            tmp=target /(1+rateB) * newprice_B / oldprice_B
            tmp=round(tmp,2)
            target1=max(target,tmp)
            if(target1==target):
                k1=0
            else:
                k1=1


        #持比特币
        if(k==1):
            oldprice_B = m[i][1]
            newprice_B = m[i + 1][1]
            tmp1=target*(newprice_B/oldprice_B)
            tmp1=round(tmp1,2)
            tmp2=target/(1+rateB)
            tmp2=round(tmp2,2)
            target1=max(tmp1,tmp2)
            if(target1==tmp2):
                k1=0
            else:
                k1=1


        #持黄金
        if(k==2):
            target1=target
            k1=2

        k=k1
        target=target1

    if(m[i][2]==0):
        oldprice_B = m[i][1]
        newprice_B = m[i + 1][1]
        oldprice_G=huangjin[n]
        newprice_G=huangjin[n+1]

        if(k==0):
            tmp1=target/(1+rateG)*newprice_G/oldprice_G
            tmp1=round(tmp1,2)
            tmp2=target/(1+rateB)*newprice_B/oldprice_B
            tmp2=round(tmp2,2)
            target1=max(tmp1,tmp2,target)
            if(target1==target):
                k1=0
            if(target1==tmp1):
                k1=2
            if(target1==tmp2):
                k1=1


        if(k==1):
            tmp1=target*newprice_B/oldprice_B
            # print(tmp1)
            tmp1=round(tmp1,2)
            tmp2=target/(1+rateB)
            tmp2=round(tmp2,2)
            tmp3=target/(1+rateB+rateG)*newprice_G/oldprice_G
            tmp3=round(tmp3,3)
            target1=max(tmp1,tmp2,tmp3)
            if(target1==tmp1):
                k1=1
            if(target1==tmp2):
                k1=0
            if(target1==tmp3):
                k1=2


        if(k==2):
            tmp1 = target * newprice_G / oldprice_G
            tmp1=round(tmp1, 2)
            tmp2 = target /(1+rateG)
            tmp2 = round(tmp2, 2)
            tmp3 = target /(1+rateB+rateG) * newprice_B / oldprice_B
            tmp3 = round(tmp3, 3)
            target1 = max(tmp1, tmp2, tmp3)
            if (target1 == tmp1):
                k1 = 2
            if (target1 == tmp2):
                k1 = 0
            if (target1 == tmp3):
                k1 = 1

        n=n+1
        k=k1
        target=target1
res1=[]
res1.append(m[height-1][0])
res1.append(target)
res.append(res1)
print("第%d天的资产为:%f"%(height-1,target))

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/517142.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Js中的微任务和宏任务

1.前言 任务可以分成两种,一种是同步任务(synchronous),另一种是异步(asynchronous),异步任务又分为宏任务和微任务。 同步任务:在主线程上排队执行的任务,只有前一个任…

C++11 -- 右值引用和移动语义

文章目录 基本概念左值和左值引用右值和右值引用 右值引用和移动语义的意义和使用场景左值引用与右值引用比较右值引用的特殊场景左值引用的短板右值引用和移动语义 完美转发模板中的&&万能引用完美转发在传参过程中保留原生类型属性完美转发实际中的使用场景 基本概念…

如何用ChatGPT分析品牌舆论传播概况,并给到处理建议?

该场景对应的关键词库(25个): 舆论传播、数据分析、主题、事件、时间段、媒体渠道、数据来源、情感分析、关键词提取、主题挖掘、大众集中讨论的话题、讨论关注程度、舆论关注倾向、关联类似事件、聚焦某一种情绪、人群范围、事件涉及群体、谁…

企业电子招标采购系统源码java 版本 Spring Cloud + Spring Boot

项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及…

程序员的职场,光有技术是不行的,送给每个即将工作的程序员

又是一年五月份,大批量学计算机的学生又要涌入职场了,牛皮的已经早早找到了工作,但不管你技术再牛,在程序员的职场,光有技术是不行的,你还要懂得一些职场的雷坑和上升技巧。 我做了二十多年程序员&#xf…

Stable diffusion教程 - 提示词汉化

1. 介绍 安装stable diffusion后,可能英语不熟悉,可能提示词不熟悉,写提示词就比较困难。 这款提示词汉化插件,配合中文词库输入中文就能提示相关提示词,用起来超级方便,示例如下: 输入“花”…

windows下搭建局域网的mysql.md

场景:公司的需要搭建一个局域网的mysql服务器,利用phpstudy傻瓜式安装后,用本机访问,提示 1130 - Host ‘DESKTOP-IRSGN4A’ is not allowed to connect to this MySQL server mysql 安装软件 1、命令行进入mysql 首先我们需要进…

Python基础入门编程代码练习(六)

一、模拟房产经纪人来管理房屋信息 编写业务实现 家具类:HouseItem 属性:名字 name,占地面积 area 方法:__init__ , __str__ 类名:房子类 House 属性:户型 name,总面积:total_are…

为什么编程都建议不要用拼音命名

一、场景 我们看看知乎答主举的搞笑例子,一句话全部都是shi,表达起来确实困难。 二、原因 上面这个回答,一句话全部都是“shi”,表达起来确实困难。并且让人误解 那么编程都建议不要用拼音命名,主要有以下原因&…

数据结构_栈、队列和数组

目录 1. 栈 1.1 栈的定义 1.2 栈的基本操作 1.3 栈的顺序存储结构 1.3.1 顺序栈 1.3.2 顺序栈的基本运算 1.3.3 共享栈 1.4 栈的链式存储 1.5 栈相关应用 2. 队列 2.1 队列的定义 2.2 队列的基本操作 2.3 队列的顺序存储 2.4 循环队列 2.4.1 循环队列的操作 2.…

2023年全国职业院校技能大赛-大数据应用开发-数据可视化

可视化题目与以往相同,做法类似,我这里展示得到语句后处理优化以后的代码,以函数式来写可视化,比以前400-500多行代码简洁到100多行。其他题目见本栏目,那里面的代码都是没有优化后的,这次主要以效率和精简…

提升曝光率!掌握Facebook帖子关键词采集技巧

如何提高Facebook帖子的曝光率成为了每个营销人员的关注焦点。掌握Facebook帖子关键词采集技巧,可以帮助你更好地定位受众,增加帖子的曝光和点击率。在本文中,我们将详细介绍一些有效的技巧和策略,让你成为Facebook帖子关键词的专…

不到1分钟,帮你剪完旅行vlog,火山引擎全新 AI「神器」真的这么绝?

旅行时,想在社交平台发布一支精美的旅行 vlog,拍摄剪辑需要花费多长时间? 20 分钟?一小时?半天? 在火山引擎算法工程师眼里,可能 1 分钟都用不了,因为会有 AI 替你完成。 没错&#…

安装-唯一客服系统文档中心

环境要求 Mysql > 5.6IIS/Apache/Nginx(只推荐nginx) 宝塔一键部署 前往 【软件商店】>【一键部署】>【导入项目】 客服项目本身不需要PHP环境,因此PHP版本那里,随意根据自己环境写上就可以 导入完成以后,点击一键部署,填…

matlab实验四插值与数据拟合

一、实验目的及要求 一、实验的目的与要求: 1、掌握 MATLAB的一维数据插值法 2、通过比较不同次数的多项式拟合效果,了解多项式拟合的原理 3、掌握 MATLAB的多项式拟合的特点和方法 4、掌握 MATLAB的多项式表示与运算 二、实验原理 1、Matlab中&#xff…

基于QEMU的RISC-V架构linux系统开发(一)——RISC-V交叉编译器的安装

基于RISC-V交叉编译器包括32bit和64bit两种类型,其中每种类型又包括裸机版本(newlib)和动态链接库版本(linux glibc)。不同类型、版本的gcc的安装仅在配置文件上存在差异,具体安装流程(以64bit …

以数据思维和技能提升数据应用测试实践 | 京东云技术团队

作者:京东零售 周雪梅 以数据思维和技能提高测试覆盖率和效率。数据应用测试,功能测试主要聚焦在数据流向(输入和输出)。 一、背景 数据质量组当前主要承接黄金眼和商智中的供应链模块,商智包括PC(品牌版…

Access、Foxpro、Foxbase,2023年找到完美代替,有Excel基础即可

你还记得上世纪80年代的Foxbase和Foxpro吗? 数据库软件作为基础软件是计算机系统稳定运行的基石。 像Foxbase和Foxpro,很多计算机专业的前辈都应该听说过,当时的风靡程度一点也不亚于现在的微软office。 FoxPro和Foxbase是诞生于1984年。具…

玩机搞机-----安卓全机型 ADB FAST 各种指令解析说明与操作【二】基础联机

安卓全机型 玩机 搞机 ADB FAST 各种指令解析说明与操作_adb线刷命令_安卓机器的博客-CSDN博客 今天对上个帖子不足的地方进行补正。方便友友进行基础的联机操作,很多时候我们用adb指令的时候会有各种奇奇怪怪的问题。例如同一个机型,同一个指令。有时候…

使用svg在元素直接绘制连线箭头

注意&#xff1a;svg的图形绘制的点位置坐标是基于画布的位置坐标&#xff0c;相当于从左上角的点为起点。 先来个简单示例&#xff1a; 在点与点之间绘制连线箭头 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">…