[量化投资]你的机器学习算法真的能准确预测股价吗?

我确信Alpha存在的空间非常小,而且很难长期驻留不变,导致金融市场数据的性质几乎就是被设计成用随机性来欺骗我们。

我也不相信一个人通过下载一些Python软件包并对公开可用的数据进行简单的分析就能在市场上取得成功。

有很多文章展示如何使用机器学习算法来预测股票价格,其中很多工作都表现出了共同的错误,这些错误表明作者在追求alpha方面并没有太多经验。其中有两个错误特别突出:

  1. 使用机器学习算法预测股票价格而不是累计收益回报;
  2. 使用未复权价格来计算这些回报。

第一个错误非常复杂,通常作者在文章中使用机器学习的度量指标评估算法的性能,而不是将其与一些合理的基准进行对比,这是非常不合理的。下面我们以天气预报的例子来解释其不合理性,假设我预测我家附近明天的温度将是 25度(事实上,25度是我家的年平均平均温度),在其他条件不变的情况下,这种预测是合理的。但是当气象局预测明天的温度是15度时,我的预测可能就是不合理的。因此如果没有参考基准,是不能判断我的预测误差(可能大约 10度)的有用性和精度。

在金融市场是一样的,一些机器学习算法用历史价格预测延后一天的价格,在这种情况下使用机器学习指标进行度量往往会导致过高估计自己模型的表现。下图是一个示例,使用前一天的收盘价在预测今天的收盘价,我们可以看到曲线几乎完全拟合上,我们使用的机器学习指标会告诉我们模型非常好,但是我们又会觉得好像存在不合理的地方。

在文章的下面部分,我会展示如何按照预测中常用的几个指标来衡量一个模型的性能。算法非常简单,只是使用纳斯达克100指数中每只股票的最后价格。我希望这将能成为一个有用的工具以筛选那些声称自己可以在预测股票方面表现的非常不错的算法。

在我们继续之前,有几个注意事项:

调整后的收盘价

在比较不同时间记录的价格时,我们应该使用 "复权价格",因为这些价格完全包含了公司的任何拆分、股息、分拆和其他分配。如果没有这一点,2:1的股票拆分将在一夜之间产生-50%的回报,而实际上任何交易者都不会经历这种情况。它仅仅是对每股面值的重新编号(从技术上讲,它是向所有注册持有人发行额外的股票,而没有任何相关的资本转移)。类似的现象更频繁地发生在红利的分配上。当一家公司支付股息时,例如向注册持有人支付每股25美分,它的股票价格在除息日将减去这一数额,但是这并不代表真正的损失,因为股票持有人将以现金形式收到这笔款项。所以他们因分配股息而获得的总收益为零。

百分比误差

在任何情况下,我们在评估股票在一个较长时期内的表现时都应该使用百分比误差,而不是简单的误差。这是因为不同的股票具有不同的价格,使用价格误差是没有办法对比算法在多支股票上的表现。股票市场的一个 "典型事实 "是,从长远来看,价格会增加价值。这背后的主要驱动因素,即股票风险溢价,是由于风险投资产生的回报超过了无风险利率的平均水平,其方式与超额风险成正比。这是它们成为比无风险利率更具吸引力的投资的必要条件。一个次要的因素是随着生产力的增长,公司可以随着时间以滚雪球的方式进行成长。

马丁格尔模型是一个明智的基准,但不是一种投资策略

在时间序列分析中,马丁格尔模型是一个拥有预期未来价值等于当前价值这一特性的序列。下面是其公式化的表示:

公式理解为 "考虑到先前时间s已知的信息,X在时间t的预期价值等于X在时间s的价值。

请注意,我绝不是在暗示这个股票价格的基准模型是一个可以作为有用的投资策略的模型。该模型指出,预期的区间回报率为零!这是不可能的。如果我预期回报率为零,那么在市场上投资就没有任何意义。我不仅积极地投资于市场,多年来,我一直作为自营交易员操作,既为摩根士丹利等机构,也为自己的账户。事实上,我把我职业生涯的大部分时间都献给了以下公式:

其中增长率g是先验数据的一个确定性函数,其值并不一致。我想说的是,你应该为遇到的任何模型都选择至少一个正确的基准进行对比。

如果作者提出的模型的性能表现还不如简单地使用最新的价格,那么无论模型看起来多么复杂或先进,该模型实际上在预测股票价格时根本没有用。

获取纳斯达克100指数的数据

我使用数据是来自纳斯达克100指数包含的股票,它们是在纳斯达克证券交易所上市的市值最大的公司,里面包含了很多科技股,有许多关于预测股票的文章的作者和评论者都提到了这些股票。最方便的获得数据的方法是安装yfinance Python软件包。

!pip install yfinance

获得纳斯达克100指数包含的股票价格数据:

import pandas as pd
import numpy as np
from yfinance import download
# this list created 2021-12-26, you must use Adjusted Close 
# not simple Close to account for splits/dividends etc
prices=download(["AAPL", "ABNB", "ADBE", "ADI", "ADP", "ADSK", "AEP", "ALGN", "AMAT", "AMD", "AMGN", "AMZN", "ANSS", "ASML", "ATVI", "AVGO", "BIDU", "BIIB", "BKNG", "CDNS","CHTR", "CMCSA", "COST", "CPRT", "CRWD", "CSCO", "CSX", "CTAS", "CTSH", "DDOG", "DLTR", "DOCU", "DXCM", "EA", "EBAY", "EXC", "FAST", "FB", "FISV", "FTNT","GILD", "GOOG", "GOOGL", "HON", "IDXX", "ILMN", "INTC", "INTU", "ISRG", "JD", "KDP", "KHC", "KLAC", "LCID", "LRCX", "LULU", "MAR", "MCHP", "MDLZ", "MELI","MNST", "MRNA", "MRVL", "MSFT", "MTCH", "MU", "NFLX", "NTES", "NVDA", "NXPI", "OKTA", "ORLY", "PANW", "PAYX", "PCAR", "PDD", "PEP", "PTON", "PYPL", "QCOM","REGN", "ROST", "SBUX", "SGEN", "SIRI", "SNPS", "SPLK", "SWKS", "TEAM", "TMUS", "TSLA", "TXN", "VRSK", "VRSN", "VRTX", "WBA", "WDAY", "XEL", "XLNX", "ZM","ZS"])["Adj Close"] 
prices

下面的代码比较复杂,我提供了一个完整的Google Colab脚本供参考。

计算马丁格尔法的预测指标

上面的代码片段提供给你一个Pandas Dataframe,其中包含纳斯达克100指数中每只股票的价格历史。为了计算每只股票的马丁格尔效应,我们所要做的就是循环计算相关指标。我选择了三个指标,它们都是定义简单,且被许多对股票价格预测感兴趣的人普遍使用的。

  1. 平均绝对百分比误差,或MAPE:MAPE仅仅是一个系列的预测值和实现值之间的绝对误差的平均值,在每种情况下除以实现值,并以百分比表示。。

  1. 均方根百分比误差,或 RMSPE,由于在数学上更容易处理,因此在统计分析中更常用的是 rms 百分比误差,它与误差的方差有关。

  1. 确定系数,或 R²。从线性回归的框架中,我们得到了著名的R²值。这给出了模型解释的方差百分比。

用 Python 计算这些指标

以下代码将计算纳斯达克100指数每只股票的所有三个指标。

areturn,correl=pd.DataFrame(),{}

for ticker in prices:
    p,q=prices[ticker],prices[ticker].shift()
    areturn[ticker]=abs((p-q)/p)*1e2
    correl[ticker]=pd.DataFrame({0:p,1:q}).corr().loc[0,1]*1e2
scores=pd.DataFrame({
    "MAPE":areturn.mean(axis=0),
    "RMSPE":areturn.apply(lambda x:x*x).mean(axis=0).apply(np.sqrt),
    "R²":pd.DataFrame(
        {"Correlation":correl.values()},
        index=correl.keys()
    )["Correlation"].apply(lambda x:x*x/1e2)
})
scores

下图是计算出的三个指标展示:

马丁格尔模型的现象学

在粒子物理学中,现象学指的是某物的一般统计特性,而不涉及理论。对某物是什么的简单陈述。它有点类似于探索性数据分析,尽管这种做法一般是由发现数据中存在的 "东西 "的假设来定义的,而我对测量已经定义的东西更感兴趣。

下面我们看到了所有三个指标的直方图。

img

我们还可以使用describe函数生成相应的汇总统计信息。

score.describe()

从上面的结果我们可以看到,对于这101只股票,马丁格尔模型几乎可以非常简单解释价格的所有方差。R²的平均值是99.735%,因此只剩下0.265%被Alpha模型和简单不可预测的噪音所共享。这在直觉上是非常不合理的。当人们专注于预测价格时,很容易忽视这种不合理性! 这种不合理是由于数据中存在长尾分布导致的。在现实场景中,长尾分布的存在是非常普遍的。

因此当使用机器学习算法进行股价预测时,仅仅关注预测指标是不够的,其需要能战胜合理的比较基准。

这项研究的目的只有一个:如何正确分析一个预测价格的算法的性能。本文提到的错误,在量化金融方面受过正规训练或稍有经验的人都不会这么做。然而,这是机器学习算法经常被训练的指标,所以这也是我们需要的。

原文链接: [核桃量化]你的机器学习算法真的能准确预测股价吗? 转载请申请。

本文转载于网络 如有侵权请联系删除

相关文章

  • 六一儿童节,用Python让 大风车 继续吱呦呦地转

    大风车,吱呀吱呦呦地转,这里的风景呀真好看!天好看,地好看……一首熟悉的歌曲,是否已经把你拉回了童年?这首歌,估计是每个80后、90后的童年记忆!小时候守着家里的电视,只要听到这个主题曲,就代表马上会有各种好看的动画片播出。又是一年6·1儿童节,作为一个Python号,当然又要想想能用python做点什么啦——前一阵我们在5·20的时候,用Turtle绘制了比心的表情动图。那么今天我们也打算尝试一下,用Turtle画一个动起来的大风车,看看能否勾起我们对童年的回忆。Turtle绘制大风车第一步,先观察风车的重要组成部分,四个扇叶和一个支撑杆。其中扇叶可以通过构建一个函数,重复绘制4次获得。以下是绘制风车扇叶的代码部分。defdraw_sector(col1,col2): turtle.color(col1,col1) turtle.circle(30,90) turtle.right(90) turtle.begin_fill() turtle.fd(120) turtle.right(90) turtle.fd(150) turtle.right(135) turtle.fd(15

  • 图像旋转:getRotationMatrix2D详解--无损失旋转图片

    使用opencv对图像进行旋转的代码随手一搜即得,但是有些旋转后图像会不完整,有些只给出代码并未解释其实现原理。本文会详细介绍如何使用opencv实现图像旋转得到完整图像,以及其中的实现原理。最终实现效果:test.pngtest_rotated.jpg1.getRotationMatrix2D详解opencv的getRotationMatrix2D函数可以获取旋转变换矩阵。输入中心点坐标(centerX,centerY),旋转角度\theta,缩放比例,给出M变换矩阵\begin{bmatrix}cos\theta&-sin\theta&(1-cos\theta)*centerX+sin\theta*centerY\\sin\theta&cos\theta&(1-cos\theta)*centerY-sin\theta*centerX\\0&0&1\end{bmatrix}\那这个矩阵到底如何计算得到的呢?我们先对一个点基于原点进行旋转,如下图,将V1点逆时针旋转\theta角度到V2点,缩放比例我们先假定为1.V1点和原点连线与水平线

  • 使用TensorFlow的经验分享

    前言:本人是一个将要大学毕业的学生,目前就职在中世康恺的AI研发部门,中世康恺是一家服务于医学影像信息化的新型互联网公司,该公司以数字医疗影像为核心,打造“云+集团+中心”模式。入职3个月,从一个零基础的小白,到现在能够完成一个有关肺部CT的结节检测模型。这个过程是我成长很多。现打算将我的学习经历记录下来,提供给没学过这方面知识的朋友一个学习路线。目前我主要学习了模型的使用方法,在理论方面没有深入学习,之后打算进行理论方面的学习。学习流程:一、了解什么是机器视觉与神经网络二、了解模型开发流程三、搭建开发环境四、了解卷积神经网络模型发展过程中的基本知识五、学习Tf1.0与tf2.01.学习创建数据集2.学习搭建模型3.学习训练模型4.学习模型保存、加载、预测六、学习模型部署七、项目实战遇到的问题一、了解机器视觉1.什么是机器视觉机器视觉就是对图形、视频等进行分类、识别、预测的判断,比如人脸识别、疾病诊断,图像处理等。2.如何实现机器视觉目前我学的知识是用卷积神经网络实现机器视觉,搭建一个模型,将图片输入到模型内,模型将处理好的结果输出出来。3.什么是卷积神经网络理论方面本人目前学习的不好

  • 数学--数论-- HDU -- 2854 Central Meridian Number (暴力打表)

    ACentralMeridian(ACM)NumberNisapositiveintegersatisfiesthatgiventwopositiveintegersAandB,andamongA,BandN,wehave N|((A^2)*B+1)ThenN|(A^2+B) Now,hereisanumberx,youneedtotellmeifitisACMnumberornot.InputThefirstlinethereisanumberT(0<T<5000),denotingthetestcasenumber. ThefollowingTlinesforeachlinethereisapositivenumberN(0<N<5000)youneedtojudge.OutputForeachcase,output“YES”ifthegivennumberisKittyNumber,“NO”ifitisnot.SampleInput2 3 7 SampleOutputYES NO Hint X|YmeansXisafactorofY,forexample3

  • LeetCode 380. 常数时间插入、删除和获取随机元素(哈希+vector)

    1.题目设计一个支持在平均时间复杂度O(1)下,执行以下操作的数据结构。insert(val):当元素val不存在时,向集合中插入该项。 remove(val):元素val存在时,从集合中移除该项。 getRandom:随机返回现有集合中的一项。每个元素应该有相同的概率被返回。来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/insert-delete-getrandom-o1 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2.解题哈希表key存储数据,value存储其在vector中的下标删除时,先把vector尾部的数存到要删除的位置classRandomizedSet{ vector<int>v; unordered_map<int,int>m; public: RandomizedSet(){} boolinsert(intval){ if(m.find(val)==m.end()) { m[val]=v.size(); v.push_back(val); returntrue

  • 建立Wolfram自己的ERP系统:我们发现十条新游戏规则

    当人们想到Wolfram科技的时候,公司企业资源管理(ERP)肯定不会是第一个进入脑海的科技。而且当我们开始搜索一种可以管理我们自己的账目、客服、许可证和人力资源需要的解决方案时,Wolfram科技也不是我们的第一个选择。但是在研究目前很多的ERP的系统介绍后,我们发现市面上的购买选项都不能满足我们的要求。 所以我们想,为什么不自己建一个呢?结果开发出的项目是一个意外的惊喜。我们不但做出了自己想要的东西,而且还是和其他系统完全不同的东西:新的结构、新的界面和新的方法。使用Wolfram的技术不仅让开发过程变得更简单,还给予了一个变革性的新角度。通过我们独特强大的技术栈——并将其和现有结构紧密联系——我们在重新定义ERP系统。 我们改变ERP范式的方法1符号表示在开发ERP系统的时候,一个很关键的因素是有精确有效辨别业务经营的真实世界实体的类型的能力——客户、订单、产品、地点、货币等。Wolfram语言是一个可以表达信息的优雅的语言,它允许混合了简单列表、关键值数据、模式甚至代码的嵌套结构。这种丰富性让你可以用一种理想的方式开发ERP系统,在这之中实体类型都优雅地以一种可读可保存的方式集

  • Customer Material Info in CRM and C4C

    版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文(CreativeCommons)CRMcustomermaterialinfocouldbereplicatedfromERP.Hereisdebuggingscreenshot:C4CInsteadofCustomerMaterialInfo,CustomerPartNumbercouldbemaintainedhereinC4C. 要获取更多Jerry的原创文章,请关注公众号"汪子熙":

  • Centos 安装docker服务

    本次安装采用在线安装方式,确保自己主机能够正常访问网络。1.安装之前最好先更新下内核yumupdate复制如图,内核已经完成更新2.去官方下载安装脚本curl-fsSLhttps://get.docker.com-oget-docker.sh复制注:随便放一个目录即可。3.运行安装脚本shget-docker.sh复制4.启动dockersudosystemctlstartdocker复制5.查看docker是否启动成功systemctlstatusdocker复制如图,状态为running代表启动成功。6.docker常用命令systemctlstatusdocker//查看docker服务的状态 systemctlstartdocker//启动docker服务 systemctlstopdocker//停止docker服务 systemctlrestartdocker//重启dokcer服务 dockerpull镜像名称:镜像版本号//从docker官方镜像仓库下载镜像 dockerimages//查看本地镜像 dockerps//查看运行的容器 dockerps-a//查看所有的

  • 《流浪地球》16w数据可视化分析

    今天下午去电影院看完了《流浪地球》,可能是昨晚没休息好的原因,我竟然在中间不小心有睡着过。如果满分10分的话,我给8分,整场电影看下来比较平淡,而且需要有一定的科学和太空方面的知识(虽然我也不太懂),否则看起来可能比较费脑子。所以看完后,我至少到目前为止好像还没有找到一个推荐别人去看这个电影的理由,当然并不是说电影不好。我给的8分是觉得电影很有创意,这对中国的科幻电影一定是有巨大的意义的,同时这种科幻大片也应该是一个国家软实力的象征。好了,以上都仅仅是我个人观点,回到主题,今天主要还是来对上周python采集的16w评论数据进行简单的可视化分析,python爬取《流浪地球》16w评论。今天主要从【全国观众地域分布】、【观众地域排行榜单】、【评论词云图】、【观众评论数量与日期的关系】、【观众评论数量与时间的关系】这五个方面进行分析,注意这里涉及的所有分析都是基于python爬取《流浪地球》16w评论文章中获取的16w评论数据。数据处理和统计用的pandas和collections两个库,地图和柱状图用的pyecharts库。使用前,请先安装相关三方库,还有下面三个地图包。#安装国家、省级

  • mongodb设置密码 原

    mongodb密码和传统数据如mysql等有些区别:mongodb的用户名和密码是基于特定数据库的,而不是基于整个系统的。所有所有数据库db都需要设置密码mongodb设置管理用户和密码:showdbs 在mongodb新版本里并没有admin数据库,但是并不妨碍第2步操作。useadmin 进入admin数据库创建管理员账户 db.createUser({user:"useradmin",pwd:"adminpassword",roles:[{role:"userAdminAnyDatabase",db:"admin"}]}) mongodb中的用户是基于身份role的,该管理员账户的role是userAdminAnyDatabase。‘userAdmin’代表用户管理身份,’AnyDatabase’代表可以管理任何数据库。验证第3步用户添加是否成功 db.auth("useradmin","adminpassword") 如果返回1,则表示成功。 exit退出系统

  • leveldb实现分析

    |导语 leveldb是google开源的单机key-value存储引擎。基于Log-Structured-MergeTree的实现。本文先介绍leveldb的总体架构,然后从各个基本操作出发,介绍leveldb的底层实现细节。一、leveldb的特点1.key和value可以是任意长度的字节数组 2.数据在磁盘上按key有序存储,调用者可以提供比较函数 3.提供了基本的操作:Put(key,value),Get(key),Delete(key)。支持多个基本操作组合一次批量的原子操作。 4.支持数据库的全景快照。并在此基础上做数据查询。 5.灵活iteration支持前向遍历,后向遍历,区间范围遍历。 6.数据在磁盘自动使用Snappy压缩存储。二、leveldb的总体架构[leveldb] 1.Memtable:内存中的数据结构,主要是跳跃表(skipList)的实现。写key-value的操作的时候会把数据写到这里。2.log文件:写操作的时候会通过顺序写的方式优先写到这个文件,然后再写入上面的memtable。避免机器宕机的时候,内存数据丢失。所以写操作,实际上是一次磁盘操作+

  • 业界 | Poseidon:高效的分布式深度学习通信架构

    选自arXiv机器之心编译参与:蒋思源、吴攀近日,卡耐基梅隆大学(CMU)和Petuum推出了新一代高效的分布式深度学习通信架构Poseidon。Poseidon是一个易于使用,并能放大DL程序在GPU集群性能的通信架构。已存的DL程序不需要更改代码就能通过Poseidon在多个机器上自动最优地实现并行化,加速效果和机器数量呈线性增长关系。机器之心简要地介绍了该论文,详细内容请查看原论文。论文:Poseidon:AnEfficientCommunicationArchitectureforDistributedDeepLearningonGPUClusters论文链接:https://arxiv.org/abs/1706.03292深度学习模型在单GPU机器上可能需要花费数周的时间进行训练,因此将深度学习分布到GPU集群进行训练就显得十分重要了。然而相对于CPU,拥有更大的吞吐量的GPU允许单位时间内处理更多的数据批量(batches),因此目前的分布式DL因为大量参数频繁地在网络中进行同步而表现不佳。我们提出了Poseidon,它是一个分布式DL在GPU上可实现高效通信的架构。Pos

  • 视频中的深度学习

    视频分级介绍 视频分析是计算机视觉领域中的一项重要研究内容。它借助计算机和视频采集设备,在无人监督的情况下,自动完成人类视觉的部分功能。对人类视觉皮层机理的研究无疑对视频分析有着重要的借鉴和指导意义。在这方面,根据人类大脑研究发展出来的深度学习具备了独特的优势。视觉处理的层级结构神经科学领域的研究表明,具有认知能力的大脑皮层不是直接对传感器信号进行处理,而是通过复杂的分布式层级结构对信息进行传播,完成了对信号的表达之后再进行处理。层级模型是视觉研究中最经典的基于神经科学研究建立的视觉计算模型。该模型受灵长类动物的视觉神经系统启发,对视觉皮层的神经响应进行建模,形成了层级式的前馈架构。深度学习继承了该发现的思想,提出了具体的模型实现层级式结构。因此,深度学习成为当前最接近人类智能的学习方法,守到广泛的关注。视频分析中深度学习的特点视频中基本单元是图像,因此视频分析往往转换为图像序列立即诶进行研究,而这其中图像的表达是最基本也是最重要的环节。与传统的信息表达方式不同,基于深度学习模型构建的表达强调的是一种深层次、端到端、数据驱动的特征学习方式。整个模型的参数不是通过人工设定,而是通过输入大

  • LINUX软链接和硬链接

    1.Linux链接概念 Linux链接分两种,一种被称为硬链接(HardLink),另一种被称为符号链接(SymbolicLink)。默认情况下,ln命令产生硬链接。【硬连接】 硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(InodeIndex)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。【软连接】 另外一种连接称之为符号连接(SymbolicLink),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。2.通过实验加深理解 [orac

  • Faster-rcnn centos tensorflow

    一、安装NVIDIA驱动首先去官网查适合自己的GPU驱动(http://www.nvidia.com/Download/index.aspx?lang=en-us)     在ProductType一栏选择自己的产品类型,其它的类型也相应选择,上图是博主的GPU的相关信息。填写完成后,点击右边的SEARC按钮,会出现以下的界面,以下界面主要关注Version,这个是后面安装驱动需要用的数据。   安装之前先卸载已经存在的驱动版本: sudoapt-getremove--purgenvidia* 若电脑是集成显卡(NVIDIA独立显卡忽略此步骤),需要在安装之前禁止一项: sudoservicelightdmstop 执行如下语句安装: sudoadd-apt-repositoryppa:graphics-drivers/ppasudoapt-getupdatesudoapt-getinstallnvidia-410#注意在这里指定自己的驱动版本!sudoapt-getinstallmesa-common-devsudoapt-getinstallfreeg

  • 数据库原理第三章 选择题

    1、【单选题】以下关于视图的描述中,不正确的 A、视图是外模式 B、使用视图可以加快查询语句的执行速度 C、视图是虚表 D、使用视图可以加快查询语句的编写 答案 B复制 2、【单选题】在SQL的SELECT语句中,能实现投影操作的是 A、SELECT B、FROM C、WHERE D、GROUPBY 答案 A复制 3、【单选题】SQL集数据查询、数据操纵、数据定义和数据控制功能于一体,语句ALTERTABLE实现下列哪类功能  A、数据查询 B、数据操纵 C、数据定义 D、数据控制 答案 C复制  4、【单选题】下列SQL语句中,()不是数据操纵语 A、INSERT B、CREATE C、DELETE D、UPDATE 答案 B复制 5、【单选题】SQL使用()语句为用户授予系统权限或对象权限 A、SELECT B、CREATE C、GRANT D、REVOKE 答案 C复制 6、【单选题】SQL中,下列涉及空值的操作,不正确的是 A、AGEISNULL B、AGEISNOTNULL C、AGE=NULL D、NOT(AG

  • Spring Boot项目中使用Mockito

    本文首发于个人网站:SpringBoot项目中使用Mockito SpringBoot可以和大部分流行的测试框架协同工作:通过SpringJUnit创建单元测试;生成测试数据初始化数据库用于测试;SpringBoot可以跟BDD(BehavierDrivenDevelopment)工具、Cucumber和Spock协同工作,对应用程序进行测试。 进行软件开发的时候,我们会写很多代码,不过,再过六个月(甚至一年以上)你知道自己的代码怎么运作么?通过测试(单元测试、集成测试、接口测试)可以保证系统的可维护性,当我们修改了某些代码时,通过回归测试可以检查是否引入了新的bug。总得来说,测试让系统不再是一个黑盒子,让开发人员确认系统可用。 在web应用程序中,对Controller层的测试一般有两种方法:(1)发送http请求;(2)模拟http请求对象。第一种方法需要配置回归环境,通过修改代码统计的策略来计算覆盖率;第二种方法是比较正规的思路,但是在我目前经历过的项目中用得不多,今天总结下如何用Mock对象测试Controller层的代码。 在之前的几篇文章中,我们都使用bookpub这

  • 哥,我跟你讲,我想创业

    1 当你跟我说这句话时,还是有点惊讶的。 我的第一反应是,我们这一代的年轻人真是一个比一个有想法,有激情。 但是我不能只是简单的赞同和反对你,还是要给你一些建议的。恰好最近有一位朋友的在创业,给我们这些吃瓜群众分享了不少他的经历,可以用来参考。 2 首先,我们要确定的是,这个只是一个头脑发热冒出的想法,还是一个非常明确的目标。 我抛出了几个创业中的关键问题,证明这暂时是你的一个想法。包括我在内的很多小伙伴也经常会这样,因为一时的灵感,然后说我要做什么什么,但为什么做,怎么做。 于是我尝试引导你从这个想法(目标)出发,思考要达成这个想法需要什么。 你意识到,当有了一个目标后,我们要考虑达成这个目标需要哪些资源。 但问题是,我怎么知道需要哪些资源,往哪个方向努力。 我的回答是,我不知道,但我知道怎么知道。 因为,这个问题的本质回到了思维模式上来了,我们能用什么样的思维方式去挖掘和解决自己的问题,比如前面我的引导就用到了目标导向的思维方式。 因此,我向你推荐了易仁永澄思维模型库。 http://tm.runwith.cc/ 3 这个模型库说容易也容易,说难也很难。 容易的是很多模型我们都

  • Serical Port

    QextSerialPort 虽然这次不用写串口,但今后可能要用到的三方类库。 这个帖子下面普及了串口的概念。VC++模块的部分

  • 提示信息 alert

    js代码 functionalertbox(option){ varthisel=this; thisel.mergeJsonObject=function(jsonbject1,jsonbject2){ varresultJsonObject={}; varattr; for(attrinjsonbject1){ resultJsonObject[attr]=jsonbject1[attr]; } for(attrinjsonbject2){ resultJsonObject[attr]=jsonbject2[attr]; } returnresultJsonObject; }; thisel.o={ successMsg:'操作成功', errMsg:'操作失败', autoClose:'1'//是否自动关闭 //resize:{width:320,height:240,quality:90} }; //合并配置 thisel.o=thisel.mergeJsonObject(thisel.o,option); thisel.createHtml=function(){ v

  • 标识符和关键字

    标识符关键字 java所有组成部分都需要名字,类名方法名变量名被称为标识符    标识符注意点 1所有标识符都只能以字母$以及  _开头 2标识符开头后可以写数字 3不能用关键字的单词写标识符 4合法标识符age。。。。 5标识符大小写极其敏感Man和man就是两个变量   

相关推荐

推荐阅读