文档章节

Matlab实时监控股票交易数据之Timer函数应用实例

kidmid
 kidmid
发布于 2015/09/19 11:42
字数 963
阅读 43
收藏 0

现在项目中有个需求要从股票开盘开始,实时监控指定股票(例如100只股票)的交易明细数据,这边明显要用到多线程进行处理每条股票的数据,查了下Matlab相关函数,竟然没有多线程的说法,网上说唯一一个多线实现方法就是Timer,好吧,既然只提供这个,那就没什么好说的了,就去研究下这个函数呗,但突然发现Timer只是一个定时处理数据,跟多线程有什么关系呢,后来发现是我误会了,人家Timer不仅提供定时,而且多个Timer是异步执行的(之前一直以为Matlab只存在单线程,所有数据处理都是串行机制),这样就能满足我的需求啦,然后进行实现,结果确实可以达到预期效果。

这边主要介绍下使用Timer实现实时监控股票交易数据的例子,Timer的具体用法度娘中多个是,就不具体分析啦

实时监控股票交易数据这边主要分为俩个部分,一个定时脚本,一个处理单只股票的函数,这边只是各初级例子,后面还有待完善,有相关需求的朋友可以拿来参考。

1、定时脚本

%% Main_GetRealTimeStockDataTest
% 定时获取股票的实时数据
% by qm
% Email:305638715@qq.com
% 2015/09/09
%% A Little Clean Work
tic;
% clear;
% clc;
% close all;
format compact;
%% 定时程序 
data = {'600000';'600005';'600006';'600007';'300200'};

Len = size(data);

for i = 1:Len
    StockCode = data{i};
    t=timer(...
        'Name',['RealTimeStockData_',StockCode],...
        'TimerFcn',@GetRealTimeStockData,...
        'Period',5,...
        'ExecutionMode','fixedrate');

    set(t,'UserData',StockCode);

    start(t);

end

%% Record Time
toc; 

2、针对一只股票实时数据处理(这里是将每5s数据存储到本地文件)

function [DataOutput, Status] = GetRealTimeStockData(obj,eventdata,UserData)
% 获取实时交易数据
% by qm
% Email:305638715@qq.com
% 2015/09/09  

%% 输入输出预处理  

DataOutput = []; 

Status = 0;   

StockCode = obj.UserData;

%获取实时数据
GetRTQuotes = fGetRTQuotes();  

GetRTQuotes.Code = StockCode; 

DataCell = GetRTQuotes.GetRTQuotes();

Header =  { '时间','今开盘','昨收盘','当前价','今最高','今最低',...
                '竞买价,即“买一”报价','竞卖价,即“卖一”报价', ...
                '成交量,单位“股”','成交额,单位“元”',...
                '买一量','买一价','买二量','买二价','买三量','买三价',...
                '买四量','买四价','买五量','买五价', ...
                '卖一量','卖一价','卖二量','卖二价','卖三量','卖三价',...
                '卖四量','卖四价','买五量','卖五价'};

DataCellTemp = {1,32}; 

% 数据转换
DataCellTemp(1,2:30) =  DataCell(2:30,1); 

dateTemp = [char(DataCell(31)),' ',char(DataCell(32))]; 

dateTemp = datenum( dateTemp, 'yyyy-mm-dd HH:MM:SS'); 

dateTemp = datestr(dateTemp,'yyyymmddHHMM.SS');

dateTemp = str2double(dateTemp);  

DataCellTemp{1} = dateTemp;

StockTickRealTime = DataCellTemp; 

disp(StockTickRealTime);

%保存数据,已有文件进行追加,没有则新建
% 读取数据库地址
load 'Config';  

HomeFolder  =  Config{1};

FolderStr = [HomeFolder,'/DataBase/Stock/Tick_RealTime_mat/',datestr(date,'yyyy-mm-dd')];
if ~isdir( FolderStr )
    mkdir( FolderStr );
end

FileStr = [FolderStr,'/',StockCode,'_Tick_RealTime.mat'];

FileExist = 0;
if exist(FileStr, 'file') == 2
    FileExist = 1;
end

% % 本地数据存在,进行尾部更新添加
if 1 == FileExist

    try
        MatObj = matfile(FileStr,'Writable',true);
        [nrows, ncols]=size(MatObj,'StockTickRealTime');
        if nrows > 0
            MatObj.StockTickRealTime = [MatObj.StockTickRealTime(1:nrows,:);StockTickRealTime];
        else
            MatObj.StockTickRealTime = StockTickRealTime;
        end 

    catch errormsg
        str = [ StockCode,datestr(clock,'yyyy-mm-dd HH:MM:SS'),' 数据保存失败!' ];
        disp(errormsg);
        disp(str);
    end
end

% % 本地数据不存在
if 0 == FileExist
    save(FileStr,'StockTickRealTime','Header','-v7.3');
end 

针对这个需求,这个例子还不是很完善,因为要股票有开盘时间和收盘时间的说法,并不是需求一直取数据,这边可以用windows的定时任务处理,执行指定脚本,或者利用Timer本身的函数,但我这边看到Timer只有startat方法,并没有理想中的endat方法,但提供了Period 时间间隔(执行周期)和TasksToExecute 执行次数这俩个属性,就是执行多少次,执行频率加上执行次数,确实也可以算出结束时间。

版权声明:本文为博主原创文章,未经博主允许不得转载。

© 著作权归作者所有

共有 人打赏支持
kidmid
粉丝 3
博文 15
码字总数 13672
作品 0
南京
私信 提问
MATLAB vs. Python | 选择 MATLAB 用犹豫吗?

基于矩阵的 MATLAB 语言让数学直观易读。 工程师和科学家需要能够直观表达矩阵和数组数学运算的编程语言,而非通过通用编程实现的编程语言。 Python 中的矩阵数学需要执行函数调用,而非自然...

技术小能手
2018/08/01
0
0
关于机器学习,你需要知道的三件事!

机器学习是一种数据分析技术,让计算机执行人和动物与生俱来的活动:从经验中学习。机器学习算法使用计算方法直接从数据中“学习”信息,而不依赖于预定方程模型。当可用于学习的样本数量增加...

【方向】
2018/03/01
0
0
Spring Boot实践---JVM上的实时监控类库:Metrics

一、使用Metrics 系统开发到一定的阶段,线上的机器越来越多,就需要一些监控了,除了服务器的监控,业务方面也需要一些监控服务。作为一款的度量类库,提供了许多工具帮助开发者来完成自定义...

spinachgit
03/11
0
0
多线程VC++和Matlab混编在信号采集和处理中的应用

引言 Visual C++自诞生以来,一直是Windows环境下最主要的应用开发系统,利用Visual C++开发系统可以完成各种应用程序的开发,从底层软件直到上层直接面向用户的软件都可以用Visual C++来...

云栖希望。
2017/12/04
0
0
C++ 后台程序实时性能监控

面对的问组件题: 做后台程序经常会被问一句话,你的程序能撑多少人。一般官方一点的回答是这个得根据实际情况而定。实际上后台程序的性能是可以被量化的。我们开发的每一个服务器程序,对性...

晨曦之光
2012/06/07
264
0

没有更多内容

加载失败,请刷新页面

加载更多

Hibernate SQLite方言

以下代码有参考过github上国外某位大佬的,在发文的最新稳定版Hibernate上是可用的,有时间再仔细分析一下 import org.hibernate.dialect.Dialect;import org.hibernate.dialect.function.S...

CHONGCHEN
今天
3
0
CentOS 7 MariaDB搭建主从服务器

本文编写环境为CentOS7。确保关闭SELinux,关闭防火墙或者防打开指定端口。具体信息如下 #master[root@promote ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) [r...

白豆腐徐长卿
今天
10
0
介绍python中运算符优先级

下面这个表给出Python的运算符优先级,从最低的优先级(最松散地结合)到最高的优先级(最紧密地结合)。这意味着在一个表达式中,Python会首先计算表中较下面的运算符,然后在计算列在表上部...

问题终结者
今天
3
0
Spring Boot 2.x基础教程:快速入门

简介 在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得一堆反复黏贴的配置有一些厌烦?那么您就不妨来试试使用Spring Boot来让...

程序猿DD
昨天
10
0
SpringSecurity认证流程源码级详解

SpringSecurity认证流程源码级详解 认证流程说明 认证结果如何在多个请求之间共享 获取认证用户信息

chendom
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部