% 例子
% load stocklistA;tic;[data,name]=get_stock_tick(stocklistA(:,4));toc
function [data,name]=get_stock_tick(stocklist) % 获取股票实时盘口数据
data=[];
name=[];
str=get_str(stocklist); % 获取需要解析
%% 判断是A股还是港股,美股
s=stocklist{1,1};
s=s(1);
if strcmp(s,'s') % A股
N=1;
elseif strcmp(s,'r') % 港股
N=2;
else % 美股
N=3;
end
[data,name]=get_data(str,N,stocklist) ;% 解析
end
function str=get_str(stocklist) % 获取需要解析的字符
N=size(stocklist,1);
N1=800;
M=ceil(N/N1);
str=[];
for i=1:M
ind1=(i-1)*N1 1;
ind2=min(i*N1,N);
symbol=[];
for j=ind1:ind2
symbolT=stocklist{j,1};
if size(symbol,1)==0
symbol=symbolT;
else
symbol=[symbol,',',symbolT];
end
end
url2Read=['http://hq.sinajs.cn/list=',symbol];
strT=urlread(url2Read);
str=[str,strT];
end
end
function [data,name]=get_data(str,N,stocklist) % 解析
NN=N;
datacell=textscan(str,'%s','delimiter', ',');
datacell=datacell{1,1};
ind=strfind(datacell,'var hq_str' );
indA=find(~cellfun(@isempty,ind));
indDiff=[indA(1:end-1)-indA(2:end);indA(end)-size(ind,1)-1];
indD=find(indDiff~=min(indDiff));
indNow=find(indDiff==min(indDiff));
indB=indA;
indB(indD)=[];
datacell(indA,:)=[];
N=size(datacell,1)/size(indB,1);
M=size(indB,1);
dataA=reshape(datacell,N,M);
if NN==1
dataA=dataA(1:end-3,:);
name={'今日开盘价';'昨日收盘价';'最近成交价';'最高成交价';'最低成交价';'买入价';'卖出价';'成交数量';'成交金额';...
'买数量一';'买价位一';'买数量二';'买价位二';'买数量三';',买价位三';'买数量四';'买价位四';'买数量五';...
'买价位五';'卖数量一';'卖价位一';'卖数量二';'卖价位二';'卖数量三';'卖价位三';'卖数量四';'卖价位四';'卖数量五';'卖价位五'};
elseif NN==2
dataA=dataA(2:16,:);
name={'开盘';'昨收';'最高';'最低';'当前';'涨跌额';'涨跌幅';'卖一';'买一';'成交额';'成交量';'市盈率';'收益率';'52周最高';'52周最低'};
else
dataA([3 14 24 25 27],:)=[];
name={'最新价';'涨跌幅';'涨跌额';'开盘价';'最高价';'最低价';'52周最高价';'52周最低价';'成交量(单位股)';'平均成交量(单位股)';...
'市值(单位元)';'每股收益,市盈率';'fpe';'贝塔系数';'股息,收益率,总股本(单位元)';'instown';'盘前盘后价';...
'盘前盘后涨跌幅';'盘前盘后涨跌额';'昨收价'};
end
dataB=str2num(char(dataA));
dataC=reshape(dataB,size(dataA,1),M);
data=nan(size(dataC,1),size(stocklist,1));
data(:,indNow)=dataC;
end