| 
 | 
 
 本帖最后由 matlab的旋律 于 2018-8-15 05:39 编辑  
 
      对非金融从业人员来说,大部分人员没有Wind等其他股票数据源,同时股票信息也是一类常见的时序信号。因此,为方便广大的非金融从业人员以及时序信号处理爱好者,本文给出Matlab通过Sina获取实时股票数据,同时通过GUI显示股票实时信息和股价变化曲线的代码使用说明。实时获取股票gui如下图 
 
      以平安银行(股票代码:000001)为例,如果要获取它的最新行情,只需访问新浪的股票数据,输入的url为: 
url= 'http://hq.sinajs.cn/list=sz000001'; 
通过Matlab自带的库函数urlread对url进行操作,quotes_page=urlread(url);得到输出: 
var hq_str_sz000001="平安银行,11.490,11.420,10.850,11.510,10.630,10.850,10.860,270979568,2958464277.860,1376408,10.850,509000,10.840,354065,10.830,319800,10.820,284400,10.810,451100,10.860,379866,10.870,222505,10.880,103917,10.890,106705,10.900,2018-04-27,15:05:03,00"; 
这个字符串由许多数据拼接在一起,不同含义的数据用逗号隔开了,按照Matlab的操作习惯,顺序号从1开始。 
1:平安银行,股票名字; 
2:11.490,今日开盘价; 
3:11.420,昨日收盘价; 
4:10.850,当前价格; 
5:11.510,今日最高价; 
6:10.630,今日最低价; 
7:10.850,竞买价,即“买一”报价; 
8:10.860,竞卖价,即“卖一”报价; 
9:270979568,成交的股票数,由于股票交易以一百股为基本单位,所以在使用时,通常把该值除以一百; 
10:2958464277.860,成交金额,单位为“元”,为了一目了然,通常以“万元”为成交金额的单位,所以通常把该值除以一万; 
11:1376408,“买一”申请1376408股,即13764手; 
12:10.850,“买一”报价; 
(13, 14), (15, 16), (17,18), (19, 20)分别为“买二”至“买四的情况” 
21:451100,“卖一”申报451100股,即4511手; 
22:10.860,“卖一”报价 
(23, 24), (25, 26), (27,28), (29, 30)分别为“卖二”至“卖五的情况” 
31:2018-04-27,日期; 
32:15:05:03,时间。 
 
考虑到实际使用情况以及GUI显示的简洁性,本文只给出了部分指数(df),具体如下: 
code: '000001'              %股票代号 
name: '平安银行'            %股票名字 
open: '11.490'              %今日开盘价 
pre_close: '11.420'         %昨日收盘价 
price: '10.850'             %当前价格 
high: '11.510'              %今日最高价 
low: '10.630'               %今日最低价 
volume: '270979568'         %成交的股票数 
amount: '2958464277.860'    %成交金额 
以及当前时间(nowTimeIfo): 
'2018-04-27,15:05:03' 
上述操作在工程中的函数get_realtime_quotes中完成。 
国内股票分为深圳交易所上市的股票,用SZ表示,即为深圳两个字的第一个字母;以及上证交易所上市的股票,用SH表示,即为上海两个字的第一个字母。另外国内股票的交易时间为: 
交易日:周一~周五(法定节日除外) 
9:15 —— 9:25集合竞价 
9:30 —— 11:30 前市,连续竞价 
13:00 —— 15:00 后市,连续竞价 
(14:57——15:00深圳为收盘集合竞价) 
函数code_to_symbol给出了股票指数和具体某支股票的代码信息。 
因此此外的时间段该GUI的操作显示信息会不正常,目前的容错性还需要持续改进。 
函数code_to_symbol给出了股票指数和具体某支股票的代码信息。 
function [ code ] = code_to_symbol( code )%code股票代码 
 
if ischar(code) % 指数  
    if strcmp(code,'hs300') 
        code = 'sz399300'; 
    elseif strcmp(code,'sh') 
        code ='sh000001'; 
    elseif strcmp(code,'sz') 
            code = 'sz399001'; 
    elseif strcmp(code,'sz50') 
        code ='sh000016'; 
    elseif strcmp(code,'zxb') 
        code ='sz399005'; 
    elseif strcmp(code,'cyb') 
            code ='sz399006'; 
    elseif  strcmp(code,'sz300') 
            code ='sz399008'; 
    elseif  strcmp(code,'zh500') 
        code = 'sh000905'; 
    end  
else %普通 
    code=num2str(code); 
    while length(code)<6 
        code=['0',code]; 
    end 
end 
if code(1)=='6'||code(1)=='5'||code(1)=='9' 
    code=['sh',code]; 
else  
    code=['sz',code]; 
end 
 
end 
       这里科普一下指数,即股票价格指数,也就是表明股票行市变动情况的价格平均数。编制股票指数,通常以某年某月为基础,以这个基期的股票价格作为100, 用以后各时期的股票价格和基期价格比较,计算出升除的百分比,就是该时期的股票指数。投资者根据指数的升降,可以判断出股票价格的变动趋势。并且为了能实时的向投资者反映股市的动向,所有的股市几乎都是在股价变化的同时即时公布股票价格指数。 具体的计算方法较多,有兴趣的朋友可以查询相关资料。 
    本文用到一个Matlab比较好玩的一个功能,即在x轴显示实时时间信息,具体的操作先对时间格式为: 
nowTimeIfo = 
 
    '2018-04-27,15:05:03' 
用函数datenum进行转换,便于程序中的操作,具体如下: 
>> datenum(nowTimeIfo) 
 
ans = 
 
          737177.628506944 
即将得到的数值做为x轴信息,价格为y轴用plot绘图,最后对x轴信息用语句 
datetick(handles.plot_axes_tag,'x',13) 
转换为15:05:03,需要注意的这里的数值13对应的时间格式为'HH:MM:SS',如需要展示其他时间格式可以查阅datetick的帮助文档。 
      有了股票的实时信息以及存储的历史信息,就可以做股票的实时预测。关于具体的预测方法,后续的文章会陆续推出,同时也作为一个开源项目会在本人个人论坛(www.52matlab.com)上分享。 
 
 
 
 |   
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册  
 
x
 
 
 
 
 |