首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL Server直接读取同花顺股票数据,该怎么处理

2013-01-01 
SQL Server直接读取同花顺股票数据CSDN的朋友,从明天本人开始要为生计奔波,没时间上CSDN了,混迹CSDN一个月

SQL Server直接读取同花顺股票数据
CSDN的朋友,从明天本人开始要为生计奔波,没时间上CSDN了,混迹CSDN一个月,有什么得罪的地方,请多多包涵。

消失之前,总想写点什么,纯技术帖是写不出来,太久没玩数据库,前几天看到有朋友问道股票数据的问题,那就写一个直接用OPENROWSET读取同花顺股票数据的方法吧,适合盘后分析。

方法不算好方法,但比较简单,以前我做数据分析的时候,都是用这个方法,平时数据库不存数据,需要分析的时候动态调入,调入速度很快,有更好方法的朋友请多多指教。

下面是日线数据(600787只是例子不构成任何投资建议):


--===============================================================
-- 文件头16个字节剖析(日线)
-- 0x6864312E3000 6  固定
-- 0x????????     4  记录数
-- 0x4800         2  记录开始位置: 64是错的, 文件头 + 列定义 = 72
-- 0x3800         2  每记录的长度: 56
-- 0x0E00         2  每记录的列数: 14
-----------------------------
-- 列定义: 04表示列长度
-- 0x01300004     4 日期
-- 0x07700004     4 开盘价
-- 0x08700004     4 最高价
-- 0x09700004     4 最低价
-- 0x0B700004     4 收盘价
-- 0x13700004     4 成交金额(元)
-- 0x0D700004     4 成交量(股)
-- 0x0E700004     4 FFFFFFFF
-- 0x0F700004     4 FFFFFFFF
-- 0x11700004     4 FFFFFFFF
-- 0x12700004     4 FFFFFFFF
-- 0x50700004     4 FFFFFFFF
-- 0xE7700004     4 FFFFFFFF
-- 0xE8700004     4 FFFFFFFF
--===============================================================
if object_id('tempdb.dbo.#') is not null drop table #
go
declare @ varbinary(max), @max int, @e float
select @ = BulkColumn, @e = 10 from OPENROWSET(BULK N'X:\...\history\shase\day\600787.day', SINGLE_BLOB) as bin
select @max = substring(@,10,1)+substring(@,9,1)+substring(@,8,1)+substring(@,7,1)
select top (@max) n = identity(int,72,56) into # from syscolumns a, syscolumns b
;with cte as
(
select
-- SQL没有提供按字节reverse(binary)的函数或方法,只能substring每个字节倒过来合成:
d = convert(int,substring(@, 4+n,1)+substring(@, 3+n,1)+substring(@, 2+n,1)+substring(@, 1+n,1)),
o = convert(int,substring(@, 8+n,1)+substring(@, 7+n,1)+substring(@, 6+n,1)+substring(@, 5+n,1))&0x0FFFFFFF,
p = convert(int,substring(@,12+n,1)+substring(@,11+n,1)+substring(@,10+n,1)+substring(@, 9+n,1))&0x0FFFFFFF,
q = convert(int,substring(@,16+n,1)+substring(@,15+n,1)+substring(@,14+n,1)+substring(@,13+n,1))&0x0FFFFFFF,
r = convert(int,substring(@,20+n,1)+substring(@,19+n,1)+substring(@,18+n,1)+substring(@,17+n,1))&0x0FFFFFFF,
s = convert(int,substring(@,24+n,1)+substring(@,23+n,1)+substring(@,22+n,1)+substring(@,21+n,1))&0x0FFFFFFF,
t = convert(int,substring(@,28+n,1)+substring(@,27+n,1)+substring(@,26+n,1)+substring(@,25+n,1))&0x0FFFFFFF,
u = convert(int,substring(@, 8+n,1))/16,
v = convert(int,substring(@,12+n,1))/16,
w = convert(int,substring(@,16+n,1))/16,
x = convert(int,substring(@,20+n,1))/16,
y = convert(int,substring(@,24+n,1))/16,
z = convert(int,substring(@,28+n,1))/16


from #
)
select
id = row_number()over(order by d desc),
日期 = d,
开盘 = o*power(@e,(u&7)*power(-1,sign(u&8))),
最高 = p*power(@e,(v&7)*power(-1,sign(v&8))),
最低 = q*power(@e,(w&7)*power(-1,sign(w&8))),
收盘 = r*power(@e,(x&7)*power(-1,sign(x&8))),
金额 = s*power(@e,(y&7)*power(-1,sign(y&8))),
成交 = t*power(@e,(z&7)*power(-1,sign(z&8)))
from cte

/*
id       日期        开盘     最高     最低     收盘     金额         成交
-------- ----------- -------- -------- -------- -------- ------------ ------------
1        20100820    8.35     8.39     8.09     8.25     107211287    13054826
2        20100819    8.61     8.61     8.38     8.45     86104465     10147807
3        20100818    8.38     8.65     8.32     8.61     115737744    13614804
.        .           .        .        .        .        .            .
.        .           .        .        .        .        .            .
.        .           .        .        .        .        .            .
3214     19970122    10.75    10.8     10.23    10.46    29105000     2810400
3215     19970121    10.8     11.42    10.8     10.93    94426000     8567400
*/




下面是分钟线数据,具体内容就不写了,只是调整一下数字表#标识列的初始大小和增量问题:


--===============================================================
-- 文件头16个字节剖析(5/1分钟线)
-- 0x6864312E3000 6  固定
-- 0x????????     4  记录数
-- 0x3800         2  记录开始位置: 56是对的, 文件头 + 列定义 = 56
-- 0x2800         2  每记录的长度: 40
-- 0x0A00         2  每记录的列数: 10


-----------------------------
-- 列定义: 04表示列长度
-- 0x01300004     4 日期: 已加密, 不要问怎么解密, 我不知道.
-- 0x07700004     4 开盘价
-- 0x08700004     4 最高价
-- 0x09700004     4 最低价
-- 0x0B700004     4 收盘价
-- 0x13700004     4 成交金额(元)
-- 0x0D700004     4 成交量(股)
-- 0x0E700004     4 FFFFFFFF
-- 0x0F700004     4 FFFFFFFF
-- 0x12700004     4 FFFFFFFF
--===============================================================



用SQL来分析二进制文件格式还是比较方便的,可以直接select/convert,快捷直观。我一般用来分析game的存档文件,呵呵。

欢迎排砖。
[解决办法]
顶一下,并恭喜楼主升星!
[解决办法]
看看,顺便恭喜楼主升星。
[解决办法]
这个有点意思
[解决办法]
SQL Server直接读取同花顺股票数据,该怎么处理

还没发现LZ升星了,恭喜!占位慢慢看。
[解决办法]
- -.发铁在那。
[解决办法]
支持一下
[解决办法]
哇哇哇
[解决办法]
不错。顶一下。
[解决办法]
好好,好工整啊
[解决办法]
谁能讲下原理
[解决办法]
恭喜楼主升星并接分之
[解决办法]
恭喜楼主升星

[解决办法]
JF  恭喜楼主升星
[解决办法]
学习啦,拿去用用
[解决办法]
SQL Server直接读取同花顺股票数据,该怎么处理你这不是根据行情数据计算高开低收的吧?
好像是直接取过来的数据。
[解决办法]
很好。。。。。。。。。。。。。。
[解决办法]
恭喜楼主升星
[解决办法]
这个应该是根据下载的盘后数据得到的数据,要是能实时取数据就更好了。
[解决办法]
学习。。。。。。。。。。。。。。。。
[解决办法]
SQL Server直接读取同花顺股票数据,该怎么处理
[解决办法]
SQL Server直接读取同花顺股票数据,该怎么处理
[解决办法]
j接分,再仔细看看着这2段SQL
[解决办法]
该回复于2010-09-29 13:19:33被版主删除
[解决办法]
...
------解决方案--------------------


该回复于2012-08-28 09:26:38被版主删除
[解决办法]
恭喜楼主啊
[解决办法]
楼主好厉害哦!恭喜楼主升星
[解决办法]
good subject

[解决办法]
楼主辛苦了,顶一下!
[解决办法]
这个一定要收藏了!
[解决办法]
贴好,人还谦虚,有前途
[解决办法]
实时数据很多都是要钱的,
这个仅供分析用,
收藏
[解决办法]
upupup
[解决办法]
好东西,收藏
多谢分享,
[解决办法]
能够实时的话就最好啦!!!!
[解决办法]
不错
支持下
[解决办法]
哈哈, 支持下..
[解决办法]
我感兴趣的是用SQL直接读取网络上的数据。不写扩展存储过程。期待你用sp_OA。。写一份。。。我好照抄源代码,哈哈
[解决办法]
厉害,正要用 ,谢谢了
[解决办法]
唉,炒股就没赚过钱。
[解决办法]
adfasfasdasdfasasdfasdf
[解决办法]
ddddddddddddd
[解决办法]
楼主牛人啊
[解决办法]
学习一下
[解决办法]
数据哪里来的啊。。。。同花顺目录里????
[解决办法]
不错,支持一下
[解决办法]
好东西,收藏
[解决办法]
恭喜楼主升星                          .
[解决办法]
每天一贴以示常在。。。每天回帖即可获得10分可用分!
[解决办法]
ding yixia..
[解决办法]
恭喜楼主升星 .
[解决办法]
看看的

[解决办法]
看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看看
[解决办法]
Just look~!
[解决办法]
升星了,恭喜
[解决办法]
好高深啊,但是还是要恭喜下楼主啊、、
[解决办法]
数据源哪里来的??
------解决方案--------------------


祝贺楼主哈!!
[解决办法]
来了,顶一个!
[解决办法]
厉害,学习了
[解决办法]
学习。。。
[解决办法]
学习围观。。
给个原文件就好了。
[解决办法]
厉害,顺便恭喜楼主升星。
[解决办法]
学习了
[解决办法]
支持,有钱途
[解决办法]
路过,路过,学习
[解决办法]
支持一下
[解决办法]
每 天报道呀
[解决办法]
升星的道路很漫长啊!
[解决办法]
不错。收藏了,慢慢研究下
[解决办法]
该回复于2010-12-24 10:15:20被版主删除
[解决办法]
恭喜!
[解决办法]
写的不错哦!!!
[解决办法]
高手啊,今天才知道可以这样用。
[解决办法]
虽然没懂,但要支持
[解决办法]
恭喜星星
[解决办法]
看看,学习学习,谢谢楼主!
[解决办法]
看楼主……
才知道差距啊!还需努力!!
顶^^^
[解决办法]
请教楼主,我在SQL Server2000的查询分析器里复制楼主的代码,直接执行提示如下错误:

服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: 'max' 附近有语法错误。
服务器: 消息 137,级别 15,状态 1,行 2
必须声明变量 '@'。
服务器: 消息 137,级别 15,状态 1,行 3
必须声明变量 '@'。
服务器: 消息 137,级别 15,状态 1,行 9
必须声明变量 '@'。
服务器: 消息 195,级别 15,状态 1,行 25
'row_number' 不是可以识别的 函数名。


我对SQL不太清楚,望指教,谢谢!
[解决办法]
楼主高人啊,学习了
[解决办法]
收藏了~~以后学习
[解决办法]
先学习了。
[解决办法]
好东西,没有看明白。没时间看
[解决办法]
支持一下
[解决办法]
LZ 很牛了
[解决办法]
路过。
[解决办法]
学习了 谢谢
[解决办法]
好东西,顶一下,好好学习一下.
------解决方案--------------------


好好学习一下
[解决办法]
我只能表示馬一下
[解决办法]
学习 一下,恭喜楼主
[解决办法]
只能看得懂一点儿。。。

热点排行