计算维度

数据集字段如下:
1. [CurClose],当前收盘价;
2. [TradePrice],大宗交易成交价;
3. [FluctRange3],近3日波动幅度(中途发现波动幅度太大,止损点不好定,所以把最近3天波动幅度超过15%的都去掉了);
4. [Volume],大宗交易成交量
5. [Amount],大宗交易金额
6. [Discount],折扣率 = [TradePrice]/[CurClose] - 1
7. [BuyerCount],买家席位数;
8. [SellerCount],卖家席位数;
9. [TradeToSelf],是否存在同席位交易;
10. [Capital],流通股本;
11. [VolumeToCapital],交易量占流通股本比值 = [Volume]/[VolumeToCapital]
12. [LastDZJYDays],上一次大宗交易距今有多少个交易日,停盘时间不计;
13. [ClosedDays],累计停盘时长(交易日);
14. [ZSCloseToMA5],上证指数(大盘)当前收盘价相对于5日线的的涨幅 = 当前收盘价/MA5 - 1;
15. [ZSCloseToMA20],上证指数(大盘)当前收盘价相对于20日线的的涨幅 = 当前收盘价/MA20 - 1;
16. [CloseToMA5],股票当前收盘价相对于其5日线的的涨幅 = 当前收盘价/MA5 - 1;
17. [CloseToMA20],股票当前收盘价相对于其20日线的的涨幅 = 当前收盘价/MA20 - 1;
18. [BuyRK],股价低于大宗交易价时,所处的天数。例如大宗交易发生在2018-1-1,当前是2018-1-3,则该字段为2,表示大宗交易这个事件发生后的第2天,这种情况视为有买入的机会;
19. [SellRK],如果买入后,股价相对于买入价(或大宗交易价)上涨了3%,则记录当天所处的天数为SellRK。

主要代码如下:

if exists(select * from sysobjects where id=object_id('DZJY_TradeByDay') and OBJECTPROPERTY(id, 'IsTable')=1)
drop table DZJY_TradeByDay
go
if object_id('tempdb..#BaseTradeInfo') is not null drop table tempdb..#BaseTradeInfo
go
if object_id('tempdb..#bsrk') is not null drop table tempdb..#bsrk
go
if exists(select * from sysobjects where id=object_id('MultiDimDataSet') and OBJECTPROPERTY(id, 'IsTable')=1)
drop table MultiDimDataSet
go--基础交易信息,每天只有一条大宗交易数据
select distinct TradeDate, StockCode into DZJY_TradeByDay from DZJY--TradeToSelf用来记录是否存在同席位交易,有则为1,无则为0
select (StockCode+convert(varchar(10),TradeDate, 112))as TradeKey,d.TradeDate, d.StockCode, (select PriceClose from TradeByDay where TradeDate=d.TradeDate and StockCode = d.StockCode) as CurClose,round(sum(d.TradePrice * d.Volume)/sum(d.Volume),2) as TradePrice, sum(d.Volume) as Volume, round(sum(d.TradePrice * d.Volume),2) as Amount,count(distinct d.Buyer) as BuyerCount,count(distinct d.Seller) as SellerCount,max(TradeToSelf) as TradeToSelf
into #BaseTradeInfo
from (select StockCode, TradeDate, TradePrice, Volume, Buyer, Seller,TradeToSelf = case when Buyer = Seller then 1 else 0 endfrom DZJY)d
group by d.TradeDate, d.StockCode--买卖天数
select b1.TradeKey, b1.StockCode, b1.TradePrice, b1.CurClose, b1.FluctRange3, b1.RK, b1.BuyRK,--未来5天内最高价大于交易价的1.03倍,确定卖出的天数SellRK = case when b1.BuyRK is NULL then NULLelse (select TOP 1 RK from StockMA where StockCode = b1.StockCode and RK between b1.BuyRK+1 and b1.BuyRK+5 and PriceMax>(1.03*b1.TradePrice) order by TradeKey)end,round(b1.CurClose/s1.MA20-1,4) as CloseToMA20,round(b1.CurClose/s1.MA5-1,4) as CloseToMA5
into #bsrk
from (select b.TradeKey, b.StockCode, b.TradePrice, b.CurClose, s.FluctRange3, s.RK,--未来5天内最低价小于大宗交易价,确定买入的天数(select TOP 1 RK from StockMA where StockCode = b.StockCode and RK between s.RK+1 and s.RK+5 and PriceMin<b.TradePrice order by TradeKey) as BuyRKfrom #BaseTradeInfo b left outer join StockMA s on b.TradeKey = s.TradeKey
)b1 left outer join StockMA s1 on b1.TradeKey = s1.TradeKey--抽取维度
select t.TradeKey, t.TradeDate, t.StockCode, t.CurClose, t.TradePrice, rk.FluctRange3, t.Volume, t.Amount, round(t.TradePrice/t.CurClose-1,3) as Discount, t.BuyerCount, t.SellerCount,t.TradeToSelf,s.Capital, round(t.Volume/s.Capital,4) as VolumeToCapital,df.LastDZJYDays, (df.LastTradeDays-df.LastDZJYDays) as ClosedDays,round(zs.CurSHClose/zs.SHMA20-1,4) as ZSCloseToMA20, round(zs.CurSHClose/zs.SHMA5-1,4) as ZSCloseToMA5,rk.RK, isnull(rk.BuyRK,0) as BuyRK, isnull(rk.SellRK,0) as SellRK, rk.CloseToMA20, rk.CloseToMA5
into MultiDimDataSet
from #BaseTradeInfo as t left outer join Stockinfo s on t.StockCode = s.StockCodeleft outer join DZJY_TradeFreq df on t.TradeKey = df.TradeKeyleft outer join SHZSMA zs on t.TradeDate = zs.TradeDateleft outer join #bsrk rk on t.TradeKey = rk.TradeKey

查询的优化

计算买卖天数时,对于上百万行的数据,检索速度实在比较拙计。因此通过了一些手段来提高查询速度,譬如索引。这里展示部分表在计算时加的索引:

IF EXISTS(SELECT * FROM sysobjects WHERE id = object_id('gupiao.dbo.StockRanK') and OBJECTPROPERTY(id, 'IsTable')=1)
DROP TABLE gupiao.dbo.StockRanK
GO
IF EXISTS(SELECT * FROM sysobjects WHERE id = object_id('gupiao.dbo.StockMA') and OBJECTPROPERTY(id, 'IsTable')=1)
DROP TABLE gupiao.dbo.StockMA
GOSELECT (StockCode+CONVERT(VARCHAR(8),TradeDate,112)) AS TradeKey, TradeDate, StockCode, PriceOpen, PriceClose, PriceMin, PriceMax, Volume, Amount,RANK() OVER(PARTITION BY StockCode ORDER BY TradeDate) AS RK
INTO gupiao.dbo.StockRanK
FROM TradeByDay
GO--增加索引
CREATE CLUSTERED INDEX [ClusteredIndex-1] ON gupiao.dbo.StockRanK
([StockCode] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GOCREATE NONCLUSTERED INDEX [NonClusteredIndex-1] ON gupiao.dbo.StockRanK
([TradeDate] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO--FluctRange3最近3个交易日的波动幅度
SELECT s.TradeKey, s.StockCode, s.TradeDate,PriceOpen, PriceClose, PriceMin, PriceMax, RK,MA5 = ROUND((SELECT CASE WHEN SUM(Volume)=0 THEN NULL ELSE SUM(Amount)/SUM(Volume) ENDFROM StockRanK WHERE StockCode = s.StockCode AND (RK BETWEEN (s.RK-4) AND s.RK)),3),MA20 = ROUND((SELECT CASE WHEN SUM(Volume)=0 THEN NULL ELSE SUM(Amount)/SUM(Volume) ENDFROM StockRanK WHERE StockCode = s.StockCode AND (RK BETWEEN (s.RK-19) AND s.RK)),3),FluctRange3 = ROUND((SELECT CASE WHEN Min(PriceMin)=0 THEN NULL ELSE Max(PriceMax)/Min(PriceMin)-1 ENDFROM StockRanK WHERE StockCode = s.StockCode AND (RK BETWEEN (s.RK-2) AND s.RK)),4)
INTO StockMA
FROM StockRanK AS sCREATE CLUSTERED INDEX [ClusteredIndex-1] ON gupiao.dbo.StockMA
([StockCode] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GOCREATE NONCLUSTERED INDEX [NonClusteredIndex-1] ON gupiao.dbo.StockMA
([TradeDate] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

大宗交易数据挖掘(三)相关推荐

  1. 大宗交易数据挖掘(一)

    思路 在网上可以看到很多关于股票的数据挖掘,其中也包括了一些大宗交易的数据挖掘和分析.本人之前也做过比较长时间的学习,所以出于好奇,尝试对这类数据进行挖掘: 最开始的想法 来看下百度百科对于大宗交易的 ...

  2. 数据挖掘 (三)——基于python的当当网小爬虫

    导语 本文将实现利用Python爬取并简单地可视化分析当当网的图书数据. 详细的exe.源代码.程序解析等文件请关注公众号 行歌 知否, 回复关键词 当当网小爬虫 获取. 更多精彩内容请关注公众号 转 ...

  3. 大宗交易数据挖掘(二)

    获取数据 上一篇的流程图中介绍了大致思路,实际实现的时候,数据需要分成2个部分,历史数据和每日更新的数据.其中每日更新的数据量较小,直接从第三方数据网站获取,单线程爬虫即可搞定:历史数据用来做模型训练 ...

  4. 大宗交易数据挖掘(四)

    数据分析 维度初步整理好以后,可以尝试用R去做一些相关性分析,不过效果太差,因为实际情况中,线性回归的效果是很差的. 这里我定义了1个CHANCE的列(Factor),当买入天数(BuyRK)和卖出天 ...

  5. 数据挖掘mooc国防科技大学笔记(自留)

    第一章 导论 认识数据 数据预处理 朴素贝叶斯分类 决策树分类 k-均值聚类 逻辑回归 关联规则挖掘 数据挖掘实践 支持向量机 神经网络分类 集成学习 (持续更新中) 第一章 导论 什么是数据挖掘 三 ...

  6. 【Python数据挖掘】数据挖掘简介及Jupyter notebook操作介绍(图文解释 超详细)

    需要完整PPT请点赞关注收藏后评论区留言并且私信~~~ 一.数据挖掘简介 面对大量的数据,迫使人们不断寻找新的工具,对规律进行探索,为决策提供有价值的信息.数据挖掘有助于发现趋势,揭示已知的事实,预测 ...

  7. 数据挖掘学科发展报告

    1.引言 数据挖掘是知识发现过程中的一个关键步骤,一般是指从大量数据中自动发现隐含的的数据关系,并将其转化为计算机可处理的结构化表示.数据挖掘是计算机学科中的一个交叉研究领域,其研究方法与多个其他科学 ...

  8. 数据分析行业需要具备哪些技术 如何快速进入

    大数据如此火爆的时代,各种人才倍受青睐.视野决定了境界和能力,而所处的环境又决定了视野.好多人不知道什么是数据分析师,认为会熟练使用Excel就是数据分析师,如果你还会使用Excel中的一些高级功能如 ...

  9. 一文看懂深度学习——人工智能系列学习笔记

    深度学习有很好的表现,引领了第三次人工智能的浪潮.目前大部分表现优异的应用都用到了深度学习,大红大紫的 AlphaGo 就使用到了深度学习. 本文将详细的给大家介绍深度学习的基本概念.优缺点和主流的几 ...

最新文章

  1. Linux环境PHP7.0安装
  2. PyTorch核心开发者灵魂发问:我们怎么越来越像Julia了?
  3. SQLSERVER2012里的扩展事件初尝试(上)
  4. php绘图技术加水印,PHP图片添加水印功能示例小结
  5. 关于Exchang server 2010 MCITP
  6. 2021年,Java开发者值得学习的13项技能
  7. 什么是梯度爆炸/梯度消失?
  8. b样条和三次样条_样条曲线
  9. bootstrap,datetimepicker日期时间选择器-限制时间段,以及中文显示问题
  10. 加载本地json文件,并利用批处理调用Chrome显示html
  11. 移动GPU三种主流架构优缺点浅析
  12. SuSe防火墙iptables配置
  13. 安装Google版本的金山词霸会导致播放Silverlight视频的时候IE或者是FF崩溃
  14. redhat7 配置xmanager登陆
  15. GBASE监控工具简介
  16. 2019 第十届蓝桥杯Java省赛B组个人题解
  17. Matlab 中min(),min(min()),max(),max(max())的介绍和分析
  18. 2. IMU原理及姿态融合算法详解
  19. 浙江大学计算机学院2019推免,浙江大学控制科学与工程学院2019年推免夏令营信息通知...
  20. java基础之—TreeSet集合学习笔记

热门文章

  1. Linux基础(B站视频笔记—— Python教程_600集Python从入门到精通教程)
  2. 【农业害虫识别论文一】Crop pest classification based on deep convolutional neural network and transfer learning
  3. 免安装msyql5.7的安装步骤
  4. oracle 的 flash back,Oracle Flashback(二)
  5. cmake find_path
  6. org module之org-id
  7. linux 安装x11 apt-get,Ubuntu 14.04安装x11VNC
  8. [附源码]JAVA毕业设计高速收费系统后台(系统+LW)
  9. Windows下摄像头采集驱动(DirectShow)
  10. 数据中心配线标识管理(一)