以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 高级功能研发区 (http://weistock.com/bbs/list.asp?boardid=5) ---- 利用金字塔的VBA与C++的混合编程来实现复杂的二次开发及交易功能 (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=11505) |
||||
-- 作者:admin -- 发布时间:2012/5/6 0:22:04 -- 利用金字塔的VBA与C++的混合编程来实现复杂的二次开发及交易功能 金字塔的除了提供基础的PEL语言外,基于VBA和C++二次开发功能无疑是所有程序化交易软件中最强的一个了,VBA金字塔完全兼容OFFICE的VBA开发习惯,C++也是很多专业用户的开发语言,能将这2点融合成一体,无疑是金字塔用户的最高境界了。 金字塔几乎将所有内部的对象接口都暴露给了VBA对象,包括数据,界面操作,下单管理等,用户可以用VBA做大部分的事情,但是VBA也有其不完美的一面,包括不能向C++那样使用指针,金字塔VBA对网络的操作支持力度有限,及VBA是解析性的语言脚本系统,对安全性没有C++哪种编译性的高等等,因此很多专业的程序化大都会选择C++语言做为编写对象,但是C++除了给我们的编程便利性带来好处外,也带来了学习困难,编写专业要求程度高等缺点,由于金字塔未能将所有内部操作接口对象完全暴露给C++接口,因此做为用户来说,使用VBA与C++进行混合编程无疑是很好的一种解决方案。利用系统暴露给VBA的接口进行通讯,VBA再将其参数传递给C++接口,内部的复杂运算通过C++来实现,最后将计算结果返回给VBA进行界面上的处理。 金字塔暴露给VBA主要有下面几个对象
Application 对象 代表 金字塔证券分析系统 应用程序。整个应用程序运行过程中,只有一个Application对象存在。利用该对象可以对整个金字塔程序进行控制。
ReportData 对象 证券行情数据对象,该对象用于表示该证券最新行情数据。 MarketData 对象 该对象描述了市场行情数据。可以通过这个对象来访问指定的品种的各种数据,也可以维护接收数据的设置。
Frame 对象 表示一个“框架”对像。每个框架都有一个这样的对象与之相对应。 你可以横向或者纵向切分一个窗格,还可以在当前窗格位置处添加一个窗格,此时两个窗格将会自动分页显示。
Order 对象 Order 对象负责定单管理和查询等操作,接收委托服务器发送来的各种帐户持仓信息。该Order对象还支持多帐户的下单模式,用户可以在闪电下单时截获该事件,并处理成自己的操作方式以达到可以实现比如赢损下单的目的。除此之外,该对象还支持多帐户操作。
事件处理 上述对象除了可以直接控制金字塔软件外,还可以被动的接收来自软件的各种事件,比如用户下单后,Order 对象 就可以接收来自这个对象的事件,有了事件功能后,用户可以就可以不用总是去不断查询是否有最新行情数据过来,是否下单了等等,完全可以在程序中设立条件来主动接收事件,提高了软件的运行效率。
使用VISUAL C++开发ACTIVEX自动化接口,与VBA进行通信 我们要写一个能与VBA通信的接口程序,通过ACTIVEX无疑是最好的方案,使用VISUAL C++开发ACTIVEX是件非常简单的事情,本教程就以此为范例制作一个可以与VBA交互使用的ACTIVEX,步骤如下:
我们以VC6.0为例。 第一步我们需要用VISUAL C++创建一个DLL工程,工程名称为MyActiveXDemo
第二步我们需要选择是MFC标准DLL程序,并要勾选“Automation” 也就是ACTIVEX自动化的接口选项。
然后我们点“Finish” 按钮后完成项目的初建
项目框架创建完毕后,我们就要建立一个可以与VBA通信的ACTIVEX接口,步骤如下: Inster -> New Class 弹出新建类窗口,我们选择MFC接口
接口类创建好了后,剩下的就是我们通过 Class Wizard类添加属性和方法了
比如我们创建一个方法函数,名称为“MyTest”,返回值可以根据项目的要求来任意指定,参数我们输入一个数值参数,并且在ActiveX中通过MSG打印出来
项目创建完毕后,系统会自动为我们添加代码,加上我们的打印输出后代码如下:
float VBSAddin::MyTest(double Value) return 0.0f;
最后编译我们的ActiveX,编译完毕后一定注意需要注册这个ActiveX我们才能在本地电脑中使用,比如我们将其拷贝到C盘根目录后,通过命令行做如下注册即可: regsvr32 c:\\MyActiveXDemo.dll
最后,我们在VBA中来调用我们刚才所建立的ActiveX控件 例如我们在Test宏中输入如下代码
Sub Test() Set MyAddin = CreateObject("MyActiveXDemo.VBSAddin") End Sub
注意MyActiveXDemo.VBSAddin是我们在刚才创建时所指定的标识符,通过这个标识符系统才能找到我们所建立的Activex 指定宏后,看看效果吧。
[此贴子已经被作者于2012-5-6 23:08:36编辑过]
|
||||
-- 作者:admin -- 发布时间:2012/5/6 8:41:39 -- 最后说明一点,金字塔的进程是不允许被调试加载的,这对C++开发者来说增加调试难度,但是可以通过附加进程调试的方法来解决问题,比如VS2008等都有很好的这种支持,详情请GOOGLE搜索。 [此贴子已经被作者于2012-5-13 9:28:11编辑过]
|
||||
-- 作者:梦想 -- 发布时间:2012/5/6 10:14:59 -- 占位 |
||||
-- 作者:guotx2010 -- 发布时间:2012/5/6 18:16:52 -- 完全赞同楼主的意见,这是金字塔区别于其他交易软件的最强大的武器。
|
||||
-- 作者:g555 -- 发布时间:2012/5/7 11:38:01 -- 哈哈,我就是这样做的。 |
||||
-- 作者:internethhhh -- 发布时间:2013/2/22 16:45:32 -- 调用后,出现
拷到了C盘,也注册了,请问是什么原因? |
||||
-- 作者:admin -- 发布时间:2013/2/22 17:03:49 -- 检查一下操作步骤,肯定是某一步出了问题 |
||||
-- 作者:biggsun -- 发布时间:2013/2/26 14:08:14 -- 很不错的,多一些儿这样的帖子。 |
||||
-- 作者:internethhhh -- 发布时间:2013/3/3 17:56:48 -- 明白了,没有加入EXPORTS |
||||
-- 作者:yeyi -- 发布时间:2013/3/12 22:34:48 -- 我想付费请人开发一下。 有高手肯帮忙吗?
|