有的时候我们编写好一个MATLAB程序后,可能需要每天某一时间定时运行这个程序,比如某个量化模型每天的回测结果和报告,需要在收盘后运行或需要在第二天开盘前看到回测结果,比如某些本地的数据库需要定时更新(比如FQuantToolBox本地数据每日全市场数据更新)等等这些需要每天(或每隔某一固定时间区间)定时跑一个MATLAB程序,当然我们可以每天在某一时间打开MATLAB运行相应的程序,但这样一则显得不够pro,二则当你需要定时运行程序增多的时候,这种方式根本不现实,尤其当你由于其他事情(比如开会或者出差时)不在电脑前时。所以需要一个定时运行MATLAB程序任务的解决方案,故有此篇。
定时运行MATLAB程序任务的解决方案我能想到的大体有两种方法,第一种方法是使用timer函数来实现,关于timer的东西这里不做过多展开;第二种方法是本篇重点讲解的。
%%Main_AutoRunMatlabProgramNum1
%by LiYang_faruto
%Email:[email protected]
%2015/01/01
%%A Little Clean Work
tic;
%clear;
%clc;
%close all;
formatcompact;
%%目录调整
FileStr= ['E:\###数据库-Faruto的数据库\FQuantToolBox']
cd(FileStr);
%%日志文件
fid= fopen('Dlog.txt','at+');
TitleStr= ['日期时间:',datestr(now),'操作记录日志by李洋faruto'];
fprintf(fid,'%s\n',TitleStr);
%%获取股票代码列表
run= 1;
if1 == run
ticID = tic;
try
[StockList,StockListFull] =GetStockList_Web;
save('StockList','StockList');
TitleStr = ['日期时间:',datestr(now),'更新股票代码列表成功'];
fprintf(fid,'%s\n',TitleStr);
elapsedTime = toc(ticID);
TimeStr = [ '共耗时',num2str(elapsedTime), ' seconds(',num2str(elapsedTime/60), ' minutes)', ...
'(',num2str(elapsedTime/60/60), 'hours)'];
fprintf(fid,'%s\n',TimeStr);
subject = TitleStr;
content = TimeStr;
TargetAddress = '[email protected]';
Attachments = 'Dlog.txt';
MatlabSentMail(subject, content,TargetAddress, Attachments);
catch err
TitleStr = ['日期时间:',datestr(now),'更新股票代码列表失败:',err.message];
fprintf(fid,'%s\n',TitleStr);
for i = 1:size(err.stack,1)
StrTemp = ['FunName:',err.stack(i).name,'Line:',num2str(err.stack(i).line)];
fprintf(fid,'%s\n',StrTemp);
end
subject = TitleStr;
content = [];
TargetAddress = '[email protected]';
Attachments = 'Dlog.txt';
MatlabSentMail(subject, content,TargetAddress, Attachments);
end
else
load StockList;
end
%%获取指数代码列表
run= 1;
if1 == run
ticID = tic;
try
[IndexList] = GetIndexList_Web;
save('IndexList','IndexList');
TitleStr = ['日期时间:',datestr(now),'更新指数代码列表成功'];
fprintf(fid,'%s\n',TitleStr);
elapsedTime = toc(ticID);
TimeStr = [ '共耗时',num2str(elapsedTime), ' seconds(',num2str(elapsedTime/60), ' minutes)', ...
'(',num2str(elapsedTime/60/60), 'hours)'];
fprintf(fid,'%s\n',TimeStr);
subject = TitleStr;
content = TimeStr;
TargetAddress = '[email protected]';
Attachments = 'Dlog.txt';
MatlabSentMail(subject, content,TargetAddress, Attachments);
catch err
TitleStr = ['日期时间:',datestr(now),'更新指数代码列表失败:',err.message];
fprintf(fid,'%s\n',TitleStr);
for i = 1:size(err.stack,1)
StrTemp = ['FunName:',err.stack(i).name,'Line:',num2str(err.stack(i).line)];
fprintf(fid,'%s\n',StrTemp);
end
subject = TitleStr;
content = [];
TargetAddress = '[email protected]';
Attachments = 'Dlog.txt';
MatlabSentMail(subject, content,TargetAddress, Attachments);
end
else
load IndexList;
end
%%获取股票基本信息以及所属行业板块(证监会行业分类)和所属概念板块(新浪财经定义)
run= 1;
if1 == run
ticID = tic;
try
[SaveLog,ProbList,NewList] =SaveStockInfo(StockList);
TitleStr = ['日期时间:',datestr(now),'更新股票基本信息成功'];
fprintf(fid,'%s\n',TitleStr);
elapsedTime = toc(ticID);
TimeStr = [ '共耗时',num2str(elapsedTime), ' seconds(',num2str(elapsedTime/60), ' minutes)', ...
'(',num2str(elapsedTime/60/60), 'hours)'];
fprintf(fid,'%s\n',TimeStr);
subject = TitleStr;
content = TimeStr;
TargetAddress = '[email protected]';
Attachments = 'Dlog.txt';
MatlabSentMail(subject,
content,TargetAddress, Attachments);
catch err
TitleStr = ['日期时间:',datestr(now),'更新股票基本信息失败:',err.message];
fprintf(fid,'%s\n',TitleStr);
for i = 1:size(err.stack,1)
StrTemp = ['FunName:',err.stack(i).name,'Line:',num2str(err.stack(i).line)];
fprintf(fid,'%s\n',StrTemp);
end
subject = TitleStr;
content = [];
TargetAddress = '[email protected]';
Attachments = 'Dlog.txt';
MatlabSentMail(subject, content,TargetAddress, Attachments);
end
end
%%更新指数数据
run= 1;
if1 == run
ticID = tic;
try
[SaveLog,ProbList,NewList] =SaveIndexTSDay(IndexList);
TitleStr = ['日期时间:',datestr(now),'更新指数日线数据成功'];
fprintf(fid,'%s\n',TitleStr);
elapsedTime = toc(ticID);
TimeStr = [ '共耗时',num2str(elapsedTime), ' seconds(',num2str(elapsedTime/60), ' minutes)', ...
'(',num2str(elapsedTime/60/60), 'hours)'];
fprintf(fid,'%s\n',TimeStr);
subject = TitleStr;
content = TimeStr;
TargetAddress = '[email protected]';
Attachments = 'Dlog.txt';
MatlabSentMail(subject, content,TargetAddress, Attachments);
catch err
TitleStr = ['日期时间:',datestr(now),'更新指数日线数据失败:',err.message];
fprintf(fid,'%s\n',TitleStr);
for i = 1:size(err.stack,1)
StrTemp = ['FunName:',err.stack(i).name,'Line:',num2str(err.stack(i).line)];
fprintf(fid,'%s\n',StrTemp);
end
subject = TitleStr;
content = [];
TargetAddress = '[email protected]';
Attachments = 'Dlog.txt';
MatlabSentMail(subject, content,TargetAddress, Attachments);
end
end
%%股票日线数据更新-除权除息数据-无并行操作
run= 1;
if1 == run
ticID = tic;
try
AdjFlag = 0;
XRDFlag = 0;
[SaveLog,ProbList,NewList] =SaveStockTSDay(StockList,AdjFlag,XRDFlag);
TitleStr = ['日期时间:',datestr(now),'股票日线数据更新-除权除息数据成功!'];
fprintf(fid,'%s\n',TitleStr);
elapsedTime = toc(ticID);
TimeStr = [ '共耗时',num2str(elapsedTime), ' seconds(',num2str(elapsedTime/60), ' minutes)', ...
'(',num2str(elapsedTime/60/60), 'hours)'];
fprintf(fid,'%s\n',TimeStr);
subject = TitleStr;
content = TimeStr;
TargetAddress = '[email protected]';
Attachments = 'Dlog.txt';
MatlabSentMail(subject, content,TargetAddress, Attachments);
catch err
TitleStr = ['日期时间:',datestr(now),'股票日线数据更新-除权除息数据失败!:',err.message];
fprintf(fid,'%s\n',TitleStr);
for i = 1:size(err.stack,1)
StrTemp = ['FunName:',err.stack(i).name,'Line:',num2str(err.stack(i).line)];
fprintf(fid,'%s\n',StrTemp);
end
subject = TitleStr;
content = [];
TargetAddress = '[email protected]';
Attachments = 'Dlog.txt';
MatlabSentMail(subject, content,TargetAddress, Attachments);
end
end
%%股票数据更新-前复权
run= 1;
if1 == run
ticID = tic;
try
AdjFlag = 1;
XRDFlag = 0;
[SaveLog,ProbList,NewList] =SaveStockTSDay(StockList,AdjFlag,XRDFlag);
TitleStr = ['日期时间:',datestr(now),'股票数据更新-前复权成功!'];
fprintf(fid,'%s\n',TitleStr);
elapsedTime = toc(ticID);
TimeStr = [ '共耗时',num2str(elapsedTime), ' seconds(',num2str(elapsedTime/60), ' minutes)', ...
'(',num2str(elapsedTime/60/60), 'hours)'];
fprintf(fid,'%s\n',TimeStr);
subject = TitleStr;
content = TimeStr;
TargetAddress = '[email protected]';
Attachments = 'Dlog.txt';
MatlabSentMail(subject, content,TargetAddress, Attachments);
catch err
TitleStr = ['日期时间:',datestr(now),'股票数据更新-前复权失败!:',err.