zoukankan      html  css  js  c++  java
  • 动态下载 Yahoo 网络数据存入 Microsoft SQL Server 再 Matlab 调用的一个完整例子

    % 编程环境: Matlab 2014a, win7 32bit, Microsoft SQL Server 2008r2
    %%
    % 清屏
    clc;
    clear all;
    close all;
    %%
    % 链接 yahoo 网站下载日线数据(将以下注释内容另存为 GetYahoocnStockDayData.m)
    StockData=GetYahoocnStockDayData(1, 1, 2016, 3, 1, 2016,'002237');
    %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    %%
    %{
    %%
    % 雅虎数据接口(日线):
    % urlread(['http://table.finance.yahoo.com/table.csv?a=0&b=1&c=2012&d=3&e=19&f=2012&s=600000.ss'])
    % 函数调用格式(沪深):
    % GetYahoocnStockDayData(1, 1, 2016, 3, 1, 2016,'600000')
    %%
    function StockData=GetYahoocnStockDayData(StartDateM,StartDateD,StartDateY,EndDateM,EndDateD,EndDateY,StockName)
    %%
    StartDateM=num2str(StartDateM);
    StartDateD=num2str(StartDateD);
    StartDateY=num2str(StartDateY);
    EndDateM=num2str(EndDateM);
    EndDateD=num2str(EndDateD);
    EndDateY=num2str(EndDateY);
    if StockName(1)=='6'
        StockName=[StockName,'.ss'];
        URL=['http://table.finance.yahoo.com/table.csv?a=',StartDateM,'&b=',StartDateD,'&c=',StartDateY,'&d=',EndDateM,'&e=',EndDateD,'&f=',EndDateY,'&s=',StockName];
        StockData=urlread(URL);
    elseif StockName(1)=='0'
        StockName=[StockName,'.sz'];
        URL=['http://table.finance.yahoo.com/table.csv?a=',StartDateM,'&b=',StartDateD,'&c=',StartDateY,'&d=',EndDateM,'&e=',EndDateD,'&f=',EndDateY,'&s=',StockName];
        StockData=urlread(URL);
    else
        disp('调用函数格式错误!');
        disp(['调用格式为:',...
    'GetYahoocnStockDayData(StartDateM(int),StartDateD(int),StartDateY(int),EndDateM(int),EndDateD(int),EndDateY(int),StockName(string))']);
    end
    [Date,Open,High,Low,Close,Volume,AdjustedClose]=strread(StockData,'%s%s%s%s%s%s%s','delimiter',',');%由于接受的是一串字符串,需处理
    counter=length(Date(:,1));
    Date=Date(2:counter);
    Open=Open(2:counter);
    High=High(2:counter);
    Low=Low(2:counter);
    Close=Close(2:counter);
    Volume=Volume(2:counter);
    AdjustedClose=AdjustedClose(2:counter);
    StockData=[Date,Open,High,Low,Close,Volume,AdjustedClose];
    end 
    %}
    %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    %%
    % 查询 SQL Server 下指定表
    conn=database('ShuJuYuan','PERELMAN','');% 链接源【ODBC - ShuJuYuan】指定库表【SQL Server - ShuJuKu - StockData】
    p=ping(conn);% 测试是否成功链接
    if p.AutoCommitTransactions% 如果链接成功
        curs=exec(conn,'select * from [ShuJuKu].[dbo].[StockData]');% 用于调用成员函数 Message 查询是否存在指定表
        if curs.Message%如果数据库ShuJuKu下没有表 StockData ,则返回值非空,则新建表 StockData
            sqlquery1='use ShuJuKu';% SQL 语句,选择数据库 ShuJuKu
            sqlquery2=['create table StockData('...% SQL 语句,在数据库 ShuJuKu 下新建表 IBM
            'D date NOT NULL PRIMARY KEY,'...% 日期不能为空且设置为主键避免数据重复
             'O real NULL,'...
            'H real NULL,'...
            'L real NULL,'...
            'C real NULL,'...
            'V int NULL,'...
            'AdjustedClose real NULL)'];
            exec(conn,sqlquery1);
            exec(conn,sqlquery2);
        else
            close(curs);
        end    
    else
        disp('数据库链接错误');
    end
    %%
    % 数据写入 SQL Server
    counter=length(StockData(:,1)); 
    for i=1:counter
        s=['''',cell2mat(StockData(i,1)),'''',',',...% 引用单引号方法(输入 '' 输出 ')
            cell2mat(StockData(i,2)),',',...
           cell2mat(StockData(i,3)),',',...
           cell2mat(StockData(i,4)),',',...
           cell2mat(StockData(i,5)),',',...
           cell2mat(StockData(i,6)),',',...
           cell2mat(StockData(i,7))];
    sqlquery6='use ShuJuKu';
    sqlquery7=['INSERT INTO StockData(D,O,H,L,C,V,AdjustedClose) VALUES (',s,')'];% 插入数据语句
    exec(conn,sqlquery6);
    exec(conn,sqlquery7);
    end
    %%
    % 关闭数据库,用完要关闭,良好习惯
    close(conn);
    %%
    % 调用 SQL Server 数据
    conn=database('ShuJuYuan','PERELMAN','');
    curs=exec(conn,'select * from [ShuJuKu].[dbo].[StockData]');
    curs=fetch(curs);
    Data=curs.data;
    %%
    % 展示
    Data

    1 2

    %% 展示K线图
    d=cell2mat(Data(:,1));
    o=cell2mat(Data(:,2));
    h=cell2mat(Data(:,3));
    l=cell2mat(Data(:,4));
    c=cell2mat(Data(:,5));
    v=cell2mat(Data(:,6));
    adjustedclose=cell2mat(Data(:,7));
    %%
    % 日期数据
    date=datenum(datestr(d));
    %%
    % K 线图
    candle(h,l,c,o,'k',date,'yyyy/mm/dd');
    %%
    % 个性设置
    title('002237.sz-Made by DengChaohai','FontSize',12,'FontWeight','bold','Color','b');
    set(gca,'YTick',min(l):0.1:max(h));
    grid on;
    axis tight;
    xlabel('日期','FontSize',12,'FontWeight','bold','Color','b');
    ylabel('价格','FontSize',12,'FontWeight','bold','Color','b');
    legend('休市','上涨','下跌');
    %%
    %clcall;

    3
  • 相关阅读:
    telnet发邮件
    怎样接收电子邮件(POP3协议简介)(转载,写的很简洁)
    总结:string,char*,CString,int,WCHAR*之间的相互转换:
    文件查找
    SOAP消息机制简介
    jQuery 万能的选择器 NO.1
    数据库通用操作类
    jQuery (三) 管理jQuery包装集
    WebService Learning
    使用JQuery读取XML文件数据
  • 原文地址:https://www.cnblogs.com/blog-3123958139/p/5519890.html
Copyright © 2011-2022 走看看