百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

机器学习立功!一个模型告诉你新股能有几个涨停

toyiye 2024-06-21 12:27 8 浏览 0 评论


A股一直有新股不败的神话。打新股几乎是稳赚不赔的生意。但是新股中签率一般只有万分之一到五之间。中国电信是最容易打中的新股之一,中签率也只有0.95%。既然新股如此难中,我们能否退而求其次,在二级市场上参与新股的投资?


实际上,作者提出这个问题,是受三峡能源的启示。三峡能源低价上市,上市第三天即打开涨停板,给了普通投资者一个非常好的参与的机会。如果当天上车,后面短短7个交易日,出现了几乎翻倍的行情。关键是,能否提前预测出新股的价格?如果不能,那么参与新股炒作,无疑只是一种赌博而已。



这篇文章探索了通过机器学习模型预测新股上市前几日表现的问题。我们通过模型预测新股上市前几日的收益率,分别就以下四种情况,做出了四个模型:

  1. 非注册制新股,预测有多少个涨停板,这样可以从第一天就参与进来。预测时间为上市前。
  2. 非注册制新股上市首日收盘后,预测还有多少个涨停板。有了真实交易数据,可以对前一个模型进行修正,预测结果可能更准确。
  3. 注册制新股,从上市之日起,不回调的情况下,最高涨幅是多少?预测时间为上市前。
  4. 同上,预测时间为上市首日收盘后。结合当日数据,进行修正。

在上市交易前进行预测的模型,我们称之为零日模型(zero),在上市后进行预测的模型,则称之为day one模型。

数据采集

新股数据可以从东方财富网上抓取。从网上抓取的数据中,我们主要关心的是以下几个字段:

  1. 发行总股数
  2. 网上发行总股数
  3. 顶格申购配市值
  4. 申购上限
  5. 发行价格
  6. 中签率
  7. 发行市盈率
  8. 行业市盈率
  9. 询价累计报价倍数和配售对象报价家数

上述字段为两种模型共用。

day one模型还需要的字段有:

  1. 上市首日开盘价
  2. 上市首日收盘价
  3. 上市首日涨幅
  4. 上市首日换手率

预测目标则分别是连续涨停的一字板数,以及最高涨幅(连续上涨至首次回调前)。这样我们大概能得到2700条左右的数据。这个数据量,也只能使用机器学习模型来进行训练了。

其中注册制新股的数据还要更少一点。所以在训练注册制新股预测模型时,我们将连续一字板涨停、及以后不回调情况下的上涨出现的最高点数据作为target,来进行训练,这样可以也能得到2000多条数据。
当然,涨停板有助涨助跌的效果,这样换算的数据,应该不是最佳的。

模型训练


首选的模型当然是xgboost。由于我们要预测的对象,无论是连续板个数,还是最高涨幅,都不具有类别属性,因此,这是一个回归问题,我们需要采用回归模型。

为了找出最佳超参数,我们直接使用了grid search的方法,并且在构造RandomizedSearchCV时,传入`refit=True`。这样一旦最佳超参数确立,RandomizedSearchCV还将使用最佳超参数训练出最佳模型。然后我们保存这个模型,即可用于此后的预测。


在sklearn的grid search方法中,带CV字样的,表明它使用了cross validation方法,这也是在样本量不足的情况下,常用的一种方法。

它的原理是,正常情况下,为了防止data leak,我们在训练前,将数据划分为train、validation和test三个子集。训练时只使用train和validation数据集,训练完成后,再用test来测试一下,该模型对从未见过的数据,其效果如何。


但这样做也会导致validation的数据无法用于训练,从而使得小样本数据量下,训练更是捉襟见肘。所以我们使用cross validation的方法,只将数据划分为train和test两个数据集,在train数据集中,再滚动划分train和validation子集。当一部分数据(n-1)/n用于训练时,另一部分数据(1/n)用以验证,然后再进行轮换。


上述代码中,使用了三分法(`cv=3`),即每次使用1/3的数据用以验证。在超参数指定的空间里,我们又将其划分为100个迭代进行参数搜寻。因此上面定义的`search`对象,实际上会进行300次训练。


如果有GPU可以用的话,在定义model时,可以加上这样的参数,以启用GPU:```model = XGBRegressor(tree_method='gpu_hist')```这样训练的速度要提升几倍(当然远不及深度学习那样提升得多)。

结果评估

我们先感性地认识一下预测与真实值之间的差异:

day-one模型预测结果


zero模型预测结果


可以看出,day-one模型由于有了真实交易数据,预测结果比较准确;zero模型也不算差。

不过,究竟这两个模型的误差有多大呢?我们还需要通过定量的方法来评估一下。
在训练时我们使用了RMSE(这是regressor默认的loss)。但在结果评估时,为了更直观地理解误差大小,我们使用了MAE(mean absolute error),即预测值与真实值之间的绝对值误差。

MAE


这个结果好得令人难以置信。特别是day-one模型,平均误差仅为0.48个板!当然,这个数据是在全体非注册制新股记录中获取的,它们有一部分已经参与了训练,可能发生data leak。但是,在训练结束后,通过计算在test数据集上的MAE,我们得到day-one模型的误差仅为0.45,确实是相当好的结果。

几点思考


股价预测是一件很难的事。为什么我们的模型可以很好地预测新股上市的涨停板个数?这很可能跟当前的发行制度有关。新股流通股的持有者主要是机构,机构关于定价,有自己的固有逻辑,因此,股价较为确定。这是股价可以预测的客观因素。只有当一件事有规律可寻,我们才能发现规律。如果股价真的是随机的,不确定的,那么无论用什么样的方法,都是无法预测的。


这件事的第二个意义就是,在股票市场上,一定存在着在某些条件下,证券有确定的定价的情况。因此,大力使用机器学习和深度学习的方法,完成可能找到这些场景下的套利机会。


第三点思考的则是一则坏消息。尽管涨停板的个数可以准确地预测,但对于散户来讲,新股即使是上市以后,仍然很难买到。这个模型的主要作用,一是对机构和有VIP通道的大户有用;二是对于中签的散户,可以提前知道大概应该何时下车。




相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码