大宗交易数据挖掘(三)
计算维度
数据集字段如下:
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
大宗交易数据挖掘(三)相关推荐
- 大宗交易数据挖掘(一)
思路 在网上可以看到很多关于股票的数据挖掘,其中也包括了一些大宗交易的数据挖掘和分析.本人之前也做过比较长时间的学习,所以出于好奇,尝试对这类数据进行挖掘: 最开始的想法 来看下百度百科对于大宗交易的 ...
- 数据挖掘 (三)——基于python的当当网小爬虫
导语 本文将实现利用Python爬取并简单地可视化分析当当网的图书数据. 详细的exe.源代码.程序解析等文件请关注公众号 行歌 知否, 回复关键词 当当网小爬虫 获取. 更多精彩内容请关注公众号 转 ...
- 大宗交易数据挖掘(二)
获取数据 上一篇的流程图中介绍了大致思路,实际实现的时候,数据需要分成2个部分,历史数据和每日更新的数据.其中每日更新的数据量较小,直接从第三方数据网站获取,单线程爬虫即可搞定:历史数据用来做模型训练 ...
- 大宗交易数据挖掘(四)
数据分析 维度初步整理好以后,可以尝试用R去做一些相关性分析,不过效果太差,因为实际情况中,线性回归的效果是很差的. 这里我定义了1个CHANCE的列(Factor),当买入天数(BuyRK)和卖出天 ...
- 数据挖掘mooc国防科技大学笔记(自留)
第一章 导论 认识数据 数据预处理 朴素贝叶斯分类 决策树分类 k-均值聚类 逻辑回归 关联规则挖掘 数据挖掘实践 支持向量机 神经网络分类 集成学习 (持续更新中) 第一章 导论 什么是数据挖掘 三 ...
- 【Python数据挖掘】数据挖掘简介及Jupyter notebook操作介绍(图文解释 超详细)
需要完整PPT请点赞关注收藏后评论区留言并且私信~~~ 一.数据挖掘简介 面对大量的数据,迫使人们不断寻找新的工具,对规律进行探索,为决策提供有价值的信息.数据挖掘有助于发现趋势,揭示已知的事实,预测 ...
- 数据挖掘学科发展报告
1.引言 数据挖掘是知识发现过程中的一个关键步骤,一般是指从大量数据中自动发现隐含的的数据关系,并将其转化为计算机可处理的结构化表示.数据挖掘是计算机学科中的一个交叉研究领域,其研究方法与多个其他科学 ...
- 数据分析行业需要具备哪些技术 如何快速进入
大数据如此火爆的时代,各种人才倍受青睐.视野决定了境界和能力,而所处的环境又决定了视野.好多人不知道什么是数据分析师,认为会熟练使用Excel就是数据分析师,如果你还会使用Excel中的一些高级功能如 ...
- 一文看懂深度学习——人工智能系列学习笔记
深度学习有很好的表现,引领了第三次人工智能的浪潮.目前大部分表现优异的应用都用到了深度学习,大红大紫的 AlphaGo 就使用到了深度学习. 本文将详细的给大家介绍深度学习的基本概念.优缺点和主流的几 ...
最新文章
- Linux环境PHP7.0安装
- PyTorch核心开发者灵魂发问:我们怎么越来越像Julia了?
- SQLSERVER2012里的扩展事件初尝试(上)
- php绘图技术加水印,PHP图片添加水印功能示例小结
- 关于Exchang server 2010 MCITP
- 2021年,Java开发者值得学习的13项技能
- 什么是梯度爆炸/梯度消失?
- b样条和三次样条_样条曲线
- bootstrap,datetimepicker日期时间选择器-限制时间段,以及中文显示问题
- 加载本地json文件,并利用批处理调用Chrome显示html
- 移动GPU三种主流架构优缺点浅析
- SuSe防火墙iptables配置
- 安装Google版本的金山词霸会导致播放Silverlight视频的时候IE或者是FF崩溃
- redhat7 配置xmanager登陆
- GBASE监控工具简介
- 2019 第十届蓝桥杯Java省赛B组个人题解
- Matlab 中min(),min(min()),max(),max(max())的介绍和分析
- 2. IMU原理及姿态融合算法详解
- 浙江大学计算机学院2019推免,浙江大学控制科学与工程学院2019年推免夏令营信息通知...
- java基础之—TreeSet集合学习笔记
热门文章
- Linux基础(B站视频笔记—— Python教程_600集Python从入门到精通教程)
- 【农业害虫识别论文一】Crop pest classification based on deep convolutional neural network and transfer learning
- 免安装msyql5.7的安装步骤
- oracle 的 flash back,Oracle Flashback(二)
- cmake find_path
- org module之org-id
- linux 安装x11 apt-get,Ubuntu 14.04安装x11VNC
- [附源码]JAVA毕业设计高速收费系统后台(系统+LW)
- Windows下摄像头采集驱动(DirectShow)
- 数据中心配线标识管理(一)