MATLAB GUI的设计简单来说只需两步:前台界面的设计和每个组件的回调函数的编写。前台界面的设计是“表”,即GUI成型后展示给人们的样子;每个组件的回调函数是“里”,即界面背后功能实现的核心函数,比如单击一个按钮,后台需要运行哪些函数来实现相关的功能。
UI设计是指对软件的人机交互、操作逻辑、界面美观的整体设计。好的UI设计不仅会让软件变得有个性和品位,还会让软件的操作变得舒适、简单、自由,充分体现软件的定位和特点。
MATLAB GUI的组件在图形设计环境的左边(GUIDE),如图5-12所示,可以直接拖曳需要的组件到右边,进行组件布局的设计和调整。相关组件的属性这里不进行详细介绍,有兴趣的读者可以参看相关书籍。
对于基于MATLAB的行情软件,这里主要以简易性和实用性为主来进行GUI版面的布局设计,如图5-13所示。
图5-12 GUIDE中可拖曳的组件(左上方框内)
图5-13 基于MATLAB的行情软件GUI版面布局设计
主要的设计思路是:参照常见的商业化的股票行情软件,左边的三块画布分别展示股票K线图、成交量和相关的技术指标,右边是相应的功能按钮。
基于MATLAB的行情软件核心功能主要有股票数据的获取、各种图形的展示和展示范围的调整。
1.股票数据的获取
通过MATLAB获取金融数据的方法主要有两种:付费数据平台接口和免费数据平台接口。付费数据平台接口主要是指一些商业化终端平台,比如Wind平台、DataHouse平台、彭博(Bloomberg)平台、路透(Reuters)平台等,这些商业化终端平台都可以直接通过MATLAB接口获取相关数据。这里使用的免费数据接口是利用MATLAB的Datafeed工具箱中的fetch函数,通过雅虎财经获取股票的数据。fetch函数的使用语法如下:
fetch函数的输入参数如下。
• Connect:连接的数据接口,使用雅虎财经的数据,可令Connect = yahoo。
• Security:相应的符合雅虎财经数据服务器格式的金融数据的代码。对于A股市场,上交所股票需在代码后面添加 .ss,深交所股票需在代码后面添加 .sz。
• Fields:需要获取的股票的字段,常用的有Open、High、Low、Close、Volume。
• FromDate、ToDate:历史数据的起始日期、终止日期。
• Period:获取的数据的周期,参数选项为d=日线、w=周线、m=月线。
输出参数data:获取的股票数据,按时间倒序排列(越靠近现在的时间越靠前)。
解决了股票数据的获取方式后,就可以编写如图5-14所示的行情软件中获取股票的“确定”按钮的回调函数(Callback Function)了。
图5-14 行情软件中获取股票的“确定”按钮
“确定”按钮的回调函数获取数据的代码段如下:
整个过程就是从可编辑文本框中获取股票代码和股票历史数据的起止日期,然后通过fetch函数从雅虎服务器上获取数据,提取开盘价、最高价、最低价、收盘价、成交量等信息,并把相关变量用全局变量存储以方便后续使用。
2.各种图形的展示
图形展示主要涉及K线图展示、成交量展示和技术指标展示,其中有关使用MATLAB进行K线图的绘制及相关技术指标的实现在本书的相关章节已经详细介绍,具体可以参看相关章节,成交量的展示使用bar函数即可实现。
这里使用的技术指标主要为MACD、BOLL、RSI、W&R(威廉指标)、OBV、DMI、Price and Volume Trend(PVT)等,具体如图5-15所示。
图5-15 可选技术指标
除MACD、DMI为单独编写外,其他技术指标均使用MATLAB金融工具箱(Financial Toolbox)中的内置函数,涉及的技术指标函数的语法如下:
图5-15中的技术指标的Pop-up Menu的回调函数如下:
3.展示范围的调整
展示范围的调整涉及对axes控件的相关属性的调整,实现过程为:单击展示范围功能中的“确定”按钮后,获取待展示的起止日期,通过xlim函数同时调整K线展示图、成交量展示图和技术指标展示图的横轴的范围,如图5-16所示。
图5-16 展示范围调整功能
其回调函数如下: