首页 > 其他分享 >COMP226市场微观结构及其对交易

COMP226市场微观结构及其对交易

时间:2024-03-22 14:33:41浏览次数:30  
标签:测试 微观 oid 订单 book COMP226 100 csv 及其

COMP226课业1持续评估数字
任务于2024年2月26日星期一发布截止日期:2024年3月22日星期五21:00提交模式将单个R文件“solution.R”提交到画布上的CodeGrade分配学习成果
评估了解市场微观结构及其对交易的影响。任务目标从订单信息中重建限额订单簿;计算数量基于限额订单簿标准截止日期前可见代码6个功能的正确性等级测试(70%);截止日期后对4个其他功能的CodeGrade测试(30%)必要的提交为了满足模块要求不逾期提交罚款标准UoL政策;在截止日期后重新提交可能不会考虑的。预计耗时约8-12小时
警告
提交的内容会自动通过剽窃和串通检测系统。学生被发现抄袭或串通的可能会被打零分。不要讨论或展示您的与他人合作,不要在网上搜索课业的解决方案。前几年,学生由于剽窃或串通,他们的学业被终止,没有学位。Rstudio的Rscript在这个分配中,我们使用Rscript(由R提供)来运行我们的代码,例如。,Rscript main。R模板。R输入/book_1.csv输入/pempty.txt在R studio中,您可以从“终端”选项卡(而不是“控制台”)调用Rscript。在Windows上,使用Rscript.exe而不是Rscript:Rscript.exe main。R模板。R输入/book_1.csv输入/pempty.txt分布式代码和样本输入输出数据作为第一步,请通过Canvas上的课业页面下载comp226_a1.zip。然后拉开拉链comp226_a1.zip,这将在目录comp226_a1中产生以下内容:comp226_a1简要总结
你有三个。R文件,两个完整,不应编辑:主要。R是您将通过指定几个命令行参数来运行的文件,例如使用Rscript如下所述(参见上面的示例);常见。R包含main使用的完整工作函数。R模板中的函数不完整。R和一个不完整的文件:模板。R是您将要编辑的文件——分布式版本包含空函数。它包含10个空函数。
如果您运行main。R使用模板。R是分布式的,它运行时没有错误,但不会产生期望的输出,因为前6个函数在模板中。R是空的。要获得70%,您需要正确完成这6项功能;如果你的答案只有一部分是正确的,你会得到低于70%的分数。如果您正确地完成了所有这6个函数,那么您就可以——而且只有在那时——获得4的分数“额外”功能,这些功能合计占标记的30%。您应该提交一个单独的R文件,其中包含这10个函数中的部分或全部的实现。你的提交的文件将通过广泛的自动化正确性测试进行标记,测试范围广泛案例,其中一些在测试时随机选择:前6个功能的测试将在提交时进行,最多可获得70%的分数并且在CodeGrade截止日期前完全可见(使CodeGrade改进的详细指南您的标记可以在本文档末尾找到);?最后3个功能的测试只会在截止日期后进行,并且只有当你在前6个功能。
您可以(如果需要,也应该)多次提交以重复使用CodeGrade截止日期前测试;对于正确的解决方案,CodeGrade将显示您通过了所有测试,从而达到了前70%标志。在您实现以下目标之前,对最后4个功能进行大量工作可能是没有意义的并提交了前6个函数的完全正确版本。除了CodeGrade上可见的截止日期前测试外,对于前6个函数,正确的样本输出是提供,以便您可以“离线”检查实现的正确性(无需提交CodeGrade),例如使用diff等工具(https://en.wikipedia.org/wiki/Diff)比较您的输出以正确的输出进行生产。一旦你设置好了离线测试,并且如果你匹配了所有离线的例子,那么你也有可能通过CodeGrade测试(但要确保检查此项以避免令人讨厌的意外)。样板R与溶液。R在本讲义的其余部分中,我们展示了不完整模板的示例输出。R也是如使用完整的解决方案文件“solution.R”,该文件包含所有功能的正确实现。显然,您没有得到文件解决方案。R、 您需要从模板创建它。R要实现的前6个功能前6个函数占70%的分数,分为两组。百分比方括号中显示了按功能划分的标记。
订单簿统计数据:
1.book.total_volume<-函数(book)[5%]2.book.best_prices<-函数(book)[5%]3.book.midprice<-函数(book)[5%]4.book.spread<-函数(book)[5%]前4个功能非常简单,目的是让你习惯书的格式。
接下来的两个功能更为复杂,涉及从初始书籍和消息的文件。正在重建限额订单簿:
5.book.reduce<-功能(书籍、消息)[15%]6.book.add<-功能(书籍、消息)[35%]正在运行主。R与模板。R
调用main的示例。R与模板。R如下。
Rscript main。R模板。R输入/book_1.csv输入/pempty.txt如本例所示,main。R将三个输入文件的路径(的顺序论点很重要):
1.一个带有functon实现的R文件(示例中为template.R)2.初始订单簿(示例中为input/book_1.csv)3.排序要处理的消息(示例中为input/empty.txt)让我们看看main的源代码。R及其产生的输出。
选项(警告=-1)
args<-commandArgs(trailingOnly=TRUE);nargs=长度(args)log<-(nargs4)#TRUE是指正好有4个参数arg_format<-“<--log>”
if(nargs<3||nargs>4)#检查是否有3个或4个参数stop(粘贴(“main.R有3个必需参数和1个可选标志:”,arg_format))if(nargs
4&&args[1]!=“--log”)#if 4检查--log是第一个stop(paste(“参数格式错误,应为:”,arg_format))solution_path<-args[nargs-2]book_path<-args[nargs-1]
messages_path<-args[nargs]if(!all(file.exists代 写COMP226(c(solution_path,book_path,messages_path)))stop(“提供的路径中不存在文件。”)
来源(solution_path);source(“common.R”)#源公共。来自pwd的Rbook<-book.load(book_path)book<-book.rebuild(data.load(messages_path),init=book,log=log)书.总结(书)
ret<-book.extra3(book)
cat('re',ret,'\n')
简而言之,主要。R检查命令行参数是否正常将它们分配给变量(分别为solution_path、data_path和book_path)?常见来源。R和solution_path处的文件;加载初始书本?根据信息重建书籍打印出生成的书籍;打印出书籍的统计数据让我们看看上面例子的输出:
$Rscript main。R模板。R输入/book_1.csv输入/pempty.txt问
oid价格大小
1 a 105 100
投标
oid价格大小
1 b 95 100
总体积:
最优惠价格:
中间价:
传播
现在,让我们看看正确实现的输出是什么样子的:
$Rscript main。R解决方案。R输入/book_1.csv输入/pempty.txt问
oid价格大小
1 a 105 100
投标
oid价格大小
1 b 95 100
总体积:100 100
最优惠价格:95 105
中价:100
排列:10
您将看到,现在订单簿统计数据已包含在输出中,因为四个相关的模板中为空的函数。R已在解决方案中实现。R
初始订单簿
以下是input/book_1.csv的内容,它是提供的3个初始书籍示例之一:oid、侧面、价格、尺寸
a、 S,105100
b、 b,95100
让我们对列进行调整,以帮助解析此输入:
oid侧面价格尺寸
一个S 105 100
b b 95 100
第一行是标题行。后面的每一行都包含一个限制顺序,由以下字段:oid(订单id)存储在账簿中,用于处理中出现的订单(部分)取消“减少”消息,如下所述;侧面识别这是出价(“B”表示买入)还是询价(“S”表示卖出);?价格和尺寸不言自明。现有的共同代码。R将读取一个类似input/book_1.csv的文件,并创建相应的两个(可能是空的)订单簿作为两个数据帧存储在列表簿中,其版本为传递给您需要实现的所有函数。请注意,如果我们现在将消息文件更改为非空文件,请使用template。R将产生相同的输出(因为它不使用消息;您需要为函数5和6编写代码来处理它们):$Rscript main。R模板。R输入/book_1.csv输入/message_a.txt在我们详细讨论消息格式和重建订单之前,让我们讨论前四个计算书籍统计数据的函数。
计算限额订单簿统计数据
实现计算限制订单簿统计数据所需的前四个函数可以是在完全不解析订单消息的情况下进行开发和测试。特别是,您可以开发和测试前四个函数使用一个空消息文件input/enpty.txt,如上面的第一个示例所示。四个函数的返回值应如下所示(其中,与R中的通常情况一样,单个数字为实际长度为1的数字矢量):
book.total_volumes应返回一个包含两个命名元素的列表,bid,bid中的总体积book-and-ask,ask书中的总卷数;
book.best_prices应返回一个包含两个命名元素的列表,即bid、最佳出价和ask,最佳要价;
book.midprice应返回该书的中间价;
book.spread应返回书籍的跨页。
检查上面的示例输出是否符合您的预期。从消息重建订单簿现在我们继续从输入消息文件中的消息重建订单簿。你知道不需要查看(完全实现的)函数book.reconstruction或book.handle的详细信息共同的R根据消息(但如果您愿意,也可以)。在下一节中,我们将描述两种类型的消息,“添加”消息和“减少”消息。全部的要完成分配,您需要知道输入文件中的消息是按顺序处理的,即。,逐行,“添加”息传递给book.Add,“减少”消息传递到book.Reduce,以及这两种情况下的当前书籍。消息格式消息文件每行包含一条消息(以换行符'\n'结尾),每条消息消息是由空格分隔的一系列字段。下面是一个示例,其中包含一条“添加”消息然后是一条“减少”消息:
A c S 97 36
R a 50
“添加”消息如下所示:
“A”oid侧面价格尺寸
?“A”:固定字符串,将其标识为“添加”消息;
?oid:后续“减少”消息使用的“订单id”;
?侧面:“B”表示买入订单(买入),“S”表示卖出订单(卖出);?价格:此订单的限价;
?大小:此订单的大小。
“减少”消息如下所示:
'R'oid大小
?'R':固定字符串,将其标识为“减少”消息;
?oid:“订单id”标识要减少的订单;
?大小:减少订单大小的数量(而不是新的大小);如果大小等于或大于超过现有尺寸,订单将从书本中删除。
正在处理消息
“减少”消息最多影响一个现有订单。“添加”消息将:?不要交叉排列,然后在账簿中添加一行(存储相同价格的订单单独保存其独特的“oid”);
?跨越价差,在这种情况下可能会影响账簿另一侧的任何数量的订单(以及可能会或可能不会导致剩余体积的剩余限制顺序)。
提供的示例消息文件分为包含十字架和不包含十字架的案例允许您逐步开发代码,并在不同难度的输入上进行测试。我们举了一个例子每个案例,一个接一个。在每个示例中,我们都从input/book_1.csv开始;我们只在中显示这本最初的书第一种情况。
处理reduce消息的示例
$Rscript main。R解决方案。R输入/book_1.csv输入/pempty.txt问
oid价格大小
1 a 105 100
投标
oid价格大小
1 b 95 100
总体积:100 100
最优惠价格:95 105
中价:100
排列:10
$cat输入/message_ex_reduce.txtR a 50
$Rscript main。R解决方案。R输入/book_1.csv输入/message_ex_reduce.txt问
oid价格大小
1 a 105 50
投标
oid价格大小
1 b 95 100
总体积:100 50
最优惠价格:95 105
中价:100
排列:10
处理添加(非交叉)消息的示例
$cat输入/message_ex_add.txtA c S 97 36
$Rscript main。R解决方案。R输入/book_1.csv输入/message_ex_add.txt问
oid价格大小
2 a 105 100
1 c 97 36
投标
oid价格大小
1 b 95 100
总体积:100 136
最优惠价格:95 97
中间价:96
排列:2
处理交叉添加消息的示例
$cat输入/message_ex_cross.txtA c B 106 101
$Rscript main。R解决方案。R输入/book_1.csv输入/message_ex_cross.txt问
[1] oid价格大小
<0行>(或长度为0的行.names)
投标
oid价格大小
1 c 106 1
2 b 95 100
总体积:101 0
最优惠价格:106 NA
中间价:不适用
扩散:NA
最后一个例子中的NA是当书的至少一面是
空,并且相应的数量未定义。
样本输出
我们提供了9种情况的样本输出,即3本初始书籍(book_1.csv,book_2.csv、book_3.csv)和3个消息文件,均位于input子目录中。这3个消息文件是打电话:
文件
messages_a.txt仅添加消息,即需要book.add而不需要book.reduce;对于所有三个最初的书,没有一条信息跨越了疯狂
messages_ar.txt添加和减少消息,但对于最初的book_3.csv,没有添加消息交叉排列
messages_arc.txt添加和减少消息,其中一些添加跨越了所有三个的排列初始账簿
这9个输出文件可以在comp226_a1目录的输出子目录中找到。输出
0个目录,9个文件
订单统计提示
对于book.spread和book.midprice,一个很好的实现将使用book.best_prices。book.add和book.reduce的提示
利用不同示例实现book.add和book.reduce的可能方法消息文件如下:
?首先,对book.add进行部分实现,即实现添加不交叉的消息。使用message_a.txt检查您的实现。
?接下来,执行book.reduce。检查您的book.add和book.reduce与message_ar.txt和book_3.csv(仅此组合与message_ar.txt没有交叉)。
?最后,完成book.add的实施,以处理交叉。检查您的实施情况使用message_arc.txt和任何初始书本,或使用message_ar.txt和book_1.csv,或book_2.csv。
book.sort上的提示
$Rscript main。R解决方案。R输入/book_1.csv输入/message_ex_same_price.txt问
oid价格大小
2 j 105 132
1 a 105 100
投标
oid价格大小
1 b 95 100
2 k 95 71
总体积:171 232
最优惠价格:95 105
中价:100
排列:10
请注意,前面的消息更接近书本的顶部。这是由于价格时间优先,执行命令的依据:
?最佳价格优先,但当两个订单的价格相同时,先执行较早的一个订单我们提供的book.sort尊重价格时间优先。它依赖于订单ID增加的事实如下所示:
a
其中<表示消息文件中的“位于前面”。
book.sort<-函数(book,sort_bid=T,sort_ask=T){如果(sort_ask&&nrow(book$ask)>=1){book$ask<-book$ask[订单(book$ask$price,nchar(book$ask$oid),
book$ask$oid,
递减=F),]
row.names(book$ask)<-1:nrow(book$quest)}
如果(sort_bid&&nrow(book$bid)>=1){book$bid<-book$bid[订单(-book$bid$price,nchar(book$bid$oid),
book$bid$oid,
递减=F),]
row.names(book$bid)<-1:nrow(book$bid)}

}
book.init<-function(){
书籍<-list(
ask=data.frame(矩阵(ncol=3,nrow=0)),bid=data.frame(矩阵(ncol=3,nrow=0)))
colnames(book$ask)<-c(“oid”、“price”、“size”)colnames(book$bid)<-c(“oid”、“price”、“size”)退货(书籍)
}
这种方法将确保限价订单首先按价格排序,其次按到达时间排序(因此以相同的价格订购,旧的更接近书的顶部)。我们鼓励您使用book.sort在您自己的实现中。特别是,通过使用它,您可以避免必须找到确切的位置在书中下订单。
关于在book.request中使用登录的提示
共同的R已将日志记录选项添加到book.request中:book.reconstruct<-函数(data,init=NULL,log=F){if(is.null(init))init<-book.int()if(nrow(data)0)return(init)book<-减少(
函数(b,i){
new_book<-book.handle(b,data[i,])if(log){
cat(“Step”,i,“\n\n”)
book.summary(new_book,with_stats=F)cat(“
==============\n\n”)}
新书(_B)
},
1:nrow(数据),init,
)
book.sort(书)
}
如果您想使用它进行调试,可以使用--log标志打开它,例如:Rscript main。R——对数解决方案。R输入/book_1.csv输入/message_arc.txt然后book.summarse用于在处理每条消息后提供中间输出。字符串提示AsFactors=FALSE
请注意,book.load(和data.load)中字符串AsFactors=FALSE的用法很常见。Rbook.load<-函数(路径){
df<-read.table(
path,fill=NA,stringsAsFactors=FALSE,header=TRUE,sep=',')
book.sort(列表(
ask=df[df$side
“S”,c(“oid”,“price”,“size”)],bid=df[df$side
“B”,c(“oid”,“price”,“size”)]))
}

额外问题4
book.extra4有两个参数,book(订单簿),k是一个非负数解释为百分比,例如,如果k=0.4,则k对应于0.4%。如果询问簿中没有订单,则函数应返回:0;否则购买量最大v使得大小为v的买入市场订单导致中间价上涨不超过k%(因此大小为v+1的订单要么会导致中间价上涨超过k%,要么不会留下任何要求在书中,这意味着中间价格是NA)。注意:返回值应该是一个介于0和书中总请求量之间的整数。提示:对于所有4个额外的问题,为了增加实现正确的机会,可以做一两个示例中,您手动计算正确的期望值,然后检查您的代码是否生成正确答案。屈服提交是通过画布上的CodeGrade。记住将您提交的文件称为“solution.R”,因为这是CodeGrade将接受的唯一内容:使用CodeGrade改进您的解决方案对于前70%的分数,在您提交测试后运行,然后:
(一)可以看见临时标志的;
2.您未通过的任何测试都可以在CodeGrade上看到,并可用于帮助您改进解决方案。例如,我编辑了book.best_prices的正确解决方案,给出了10%的错误答案随机时间,并作为测试学生提交。在等待所有测试运行一小段时间后,可以然后查看测试结果。以下是前4个功能的“订单簿统计数据”:book.best_prices不仅在某些测试中失败,book.spread和book.midprice也是如此,因为这些恰好在这个实现中使用book.best_prices。让我们点击book.best_prices检查单个测试:
请注意,如果您发现显示测试结果的界面区域太小,可能是因为您正在显示可以隐藏的量规(请参阅右下角的“隐藏量规”箭头屏幕截图):
让我们放大book.best_prices的一个失败测试,这将使我们能够看到哪些输入是习惯于在这种情况下,使用book_2.csv;每个类别中的前几项测试都使用您的示例书这使得调查这些失败的测试变得容易。当所有“订单簿统计”功能都正确并且所有测试都通过时,情况会是这样的:让我们再举一个例子,使用book.add,其中有一个消息输入和书籍:最后,还有第二种方法可以使测试失败。上述示例将故障显示为“红十字”,这意味着生成了输出,但与预期输出不匹配。测试的第二种方式fail带有一个“红色感叹号”:有两个选项卡,“结果”和“输出”。默认情况下,CodeGrade从使用的结果选项卡开始在上面的示例中,查看以红十字表示失败的测试的详细信息:要查看出现的任何错误消息,这与带有红色感叹号的测试失败有关,切换到输出选项卡:
最后,对截止日期后的测试发表评论。您将获得额外功能的类似测试输出,提供前6个函数完全正确,但只是在截止日期之后(这完全是故意的):测验
每个类别中的前几个测试有意使用book_1.csv、book_2.csv和book_3.csv,因此您可以很容易地调查测试是否失败(因为您有这些csv文件,并且可以使用空的消息文件或自己创建一个简单的消息文件进行测试)。
许多测试使用更复杂的csv文件,这些文件不能直接作为csv提供,但是如果你愿意,你可以创建csv。但在大多数情况下,这应该不是必要的,因为如果代码在示例输入/输出文件上工作,它应该通过CodeGrade上的所有测试。最后,请注意,有些测试是随机生成的。这是为了减少的吸引力硬编码答案(如果有少量非随机测试,学生可以直接硬编码预期的答案而不是解决一般问题)。这意味着您可能会经历当您重新提交相同的错误代码(正确的代码
每次都会得到满分)。如果您在课业方面需要帮助,我们希望您已提交给CodeGrade。那样我们两个都可以看看你的代码在测试中的表现,这将有助于我们帮助你,我们可以直接在上输入评论提交的源代码

标签:测试,微观,oid,订单,book,COMP226,100,csv,及其
From: https://www.cnblogs.com/rluanguae/p/18089405

相关文章

  • PCB布线的等长及其计算
    高速信号的等长近期在公司完成pcb绘制,接触到PSRAM,了解到要PCB绘制时要进行等长;大家的解释是为了信号的完整性(SI);但是等长,等长的要求范围是什么,没有同事讲的清楚,因此进行一番探索,对等长中的长度进行简单研究;高速信号高速信号的定义:当信号的上升时间大于等于6倍传输时延;信号的上升......
  • 芯片科技:从微观世界到现实应用的奇妙之旅
    引言:在当今数字化时代,芯片是现代科技发展的基石之一,几乎每个人都在日常生活中使用着芯片技术。无论是智能手机、电脑、汽车,还是家用电器,都离不开芯片的支持。本文将带您深入了解芯片的本质、制造工艺以及广泛应用的领域,以通俗易懂的方式揭示芯片背后的科学奥秘和技术挑战。......
  • 哈希表及其实现
    哈希概念        顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。顺序查找时间复杂度为O(N),平衡树中为树的高度,即O(log2N),搜索的效率取决于搜索过程中元素的比较次数。        哈希方法:可......
  • 创新性思维四方法及其应用案例
    在快速发展的现代社会中,创新性思维已成为个人和组织成功的关键因素。本文旨在探讨四种重要的创新性思维方法——逆向思维、六顶思考帽、头脑风暴和奔驰法(SCAMPER),并通过具体案例来展示这些方法在实际应用中的价值和效果。一、逆向思维逆向思维是一种打破常规、从相反或对立......
  • 在VMware虚拟机搭建Fedora系统及其基本配置
    Fedora是一个基于Linux的操作系统,由Fedora项目社区开发,并且得到了RedHat的支持。它是一个完全自由的、开放源代码的软件,旨在推动自由和开源软件的发展。1. 电脑环境win+r,打开cmd,输入dxdiag,查看电脑配置实验1要求2. 虚拟机-vmware3.Linux系统-fedora3.1......
  • C++ 编程入门指南:深入了解 C++ 语言及其应用领域
    C++简介什么是C++?C++是一种跨平台的编程语言,可用于创建高性能应用程序。C++是由BjarneStroustrup开发的,作为C语言的扩展。C++为程序员提供了对系统资源和内存的高级控制。该语言在2011年、2014年、2017年和2020年进行了4次重大更新,分别为C++11、C++14、C+......
  • POSIX标准及其一致性/功能/压力测试
    1POSIX标准POSIX:PortableOperatingSystemInterfaceofUnix.,可移植操作系统接口。X表示其是对UnixAPI的传承。POSIX标准由IEEE(电气和电子工程师协会)发布,定义了操作系统应该为应用程序提供的接口标准,是IEEE为要在各种UNIX操作系统上运行软件而定义的一系列API标准的总称。......
  • MySQL介绍及其语法
    1、MySQL的基本认识MySQL是关系型数据库的管理系统,关系型数据库的特点是,将数据存储在不同的表中,再将表放在不同的数据库中,而不是集中放在一个仓库里面,这样有助于快速查询信息和管理,访问以及管理数据库使用的标准化语言是SQL。2、SQL的基本介绍SQL:structure query lan......
  • Go: 泛型及其应用详解
    在软件开发的世界里,泛型是一个强大的工具,它允许我们编写灵活且可重用的代码。对于我们这些追求成为软件架构师和系统架构师的开发者来说,深入理解并有效应用泛型是提升我们代码设计能力的关键一步。Go语言自1.18版本起正式引入了泛型功能,这一变化无疑给Go语言带来了更广阔的......
  • 索引类型及其应用场景与作用
    索引是数据库管理系统中用于加快数据检索速度的一种数据结构。不同类型的索引适用于不同的应用场景,下面将详细介绍几种常见的索引类型及其作用。1.B树索引应用场景:当数据表的数据量较大时。对于经常需要进行等值比较的查询操作。作用:B树索引通过平衡树结构,减少数据检索......