WhooL !

Fantastic World 数量投资 程序交易 以及 市场动态

WhooL  ! header image 2

matlab程序转换和在excel VBA中的调用。

一月 30th, 2010 by Crews

 

金融行业中VBA有着几乎最广泛的运用,但是很多人苦于VBA很难找到如同matlab强大的数学运算工具库,而在某些问题的处理上会大费周章。我最近就遇到类似的问题。用matlab写了一个庞大的程序后,交到别人手里的时候需要转成VBA。而如果用手写的转换matlab的话,此项工程不下于用VB编写matlab……于是开始了matlab往VBA的调用转换过程。经过差不多有4个小时的时间,终于完成了摸索,调试,学习,完美实现的过程。因为网上能查找到的资料写得都异常混乱,我觉得很多人写的基本没有啥强的逻辑关系,估计那些人语文统统没学好。。。我把我自己做的过程简化如下,有兴趣的朋友们可以参照

首先打开matlab(我的版本matlab 2006b, version7.3),在命令窗口输入指令:

mbuild -setup

出现选择:

Please choose your compiler for building standalone MATLAB applications:
Would you like mbuild to locate installed compilers [y]/n?

接着选择No

然后出现选择项:

Select a compiler:
[1] Borland C++Builder version 6.0
[2] Borland C++Builder version 5.0
[3] Borland C/C++ (free command line tools) version 5.5
[4] Lcc C version 2.4.1
[5] Microsoft Visual C/C++ version 8.0
[6] Microsoft Visual C/C++ version 7.1
[7] Microsoft Visual C/C++ version 6.0
[0] None

我们是要转换为excel可以调用的compiler,所以5,6,7都可。我自己的电脑装有VC++6.0,所以我选择的7

接下来就是让你输入你安装的vc++6.0的路径并确认。

做好这一步之后,就可以在命令窗口输入指令:deploytool

然后matlab右边会弹出一个操作窗口,然后新建一个项目和路径,记得选择成builder for excel。

然后在项目里面添加你要转换的所有你自己编写的matlab函数。(必须是matlab的函数,所以必须以function开头)

然后点击"build the project"的小图标,等着转换完成。

这一步做完后,就可以关闭matlab了。把你之前设立新项目的文件夹下多出的“distrie”和“src"两个文件夹拷贝到你要使用这些自定义函数的excel文件所在地方。然后打开excel,再打开excel的vba编辑器(Alt+F11),在编辑器里面点”文件—导入文件“导入刚才拷贝过来的”src“文件夹下后缀名.bas的文件。现在,就可以在excel里面轻松使用你自定义的函数了。调用的函数名称和你写的matlab函数名一样,所以非常简便。

如果函数返回值是一个矩阵,比如A=Personal(),返回的A会是3*3矩阵,那么就拖蓝一片3*3区域,输入"=Personal()”,然后点击"ctrl+shift+Enter",这样出来的结果,就是你matlab自定义函数"Personal()"应该返回的矩阵了。

用matlab调用VC++自带的转换器的好处是,在转换时,只需要添加进去你自己写的自定义函数,而自定义函数里面所使用的大量的matlab特有的计算函数是不用再特别找出来添加进去的。这是compiler会帮你干的事情

ps:本来上面写的一些我很快自己就摸索出来了,但是使用的时候忽略了一个小错误,而这个错误是换一台电脑就绝对不会出的错误,结果这种错误找起来,足足找了我2,3个小时。因为调用matlab函数后很不好调试,所以查错是一项超级艰难的过程,特别是matlab运行正常,vba里面运行却出问题的时候。结果原因是matlab里面xlsread这个函数读取excel数据的默认目录和vba调用matlab程序时读取那个excel文件的默认目录完全不一样造成的(matlab是读取当前程序所在的目录下的文件,而VBA是读取“我的文档”下的文件……)。而巧的是在vba的默认目录里面恰好存在了一个同名的excel文件。本来如果这个文件不存在,我在vba里面一运行,报错就会告诉我在某某路径找不到excel文件,我很快就能fix这个问题,而巧合的那个文件恰好造成vba不会报找不到文件,而只告诉我有逻辑错误,也不说是什么逻辑错误。。。。当我最终发现这个错误的时候,差点把血都吐光了

嗯,最后是无奈的吐槽,总之这次又把vba学了不少东西,收获不小,希翼此小文对偶然看到这篇文章的人小有帮助

4:27 PM | Blog it

看看Whool!更多的文章,把 Whool!加入到你的订阅吧!

你感兴趣的.....

  • 读Quantitative Trading,ERNESTP.CHAN(1) (0)
    这几天很是燥热,上午天气好些,下午那个烦躁,直到半夜才能静下来读点东西,想些事情。读的是ERNESTP.CHAN的quantitative trading,How to Build Your Own Algorithmic Trading Business. 想的是找工作和回家的事情。 之前看了不少别人写的交易系统的文章,内容大致都差不多,看多了自己也就像自己倒腾下的,后来看了下chan的这本书...
  • 何不认输 (0)
    往回头一看,很长一段时间我都沉浸在建立一个自己的交易模型。 不管是之前倒腾的google上取数还是后来的yahoo。pipes,一直到发现matlab从yahoo上得到的数据就够自己用,然后到如果从网页上得到bats的报价,折腾了很久。中间还包括了折腾很久的用excel-vba的数据。 现在想起来,这一路上的东西好像都不是重要的,主要在于我给自己的定位是什么,一个数据提供商?还是一个交易者。想...
  • matlab toolbox (0)
    几个可能用得着的toolbox: Optimization Toolbox Partial Differential Equation Toolbox Statistics Toolbox Curve Fitting Toolbox  Financial Toolbox Financial Derivatives Toolbox Datafeed Toolbox Fi...
  • 关于MATLAB (0)
    一直以来都对这个软件有兴趣,不知道为什么,可能是以前学的东西,看见lab就兴奋吧,之前一年的时间折腾着用matlab,虽然说没有得到什么结果,不过依赖确是更加严重了,有什么问题总想着用这个试一下,最后往往得到的结果比起用excel vb c要麻烦得多,也让自己对这个软件感觉无奈,可是前几天做一个东西发现其实我错过了很多,为什么大家推崇matlab并不是因为他表面上说的那样对大量的矩阵数据有较好的处...

Tags:   · · 2 Comments

Leave a Comment

2 responses so far ↓