利用金字塔的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
此主题相关图片如下:qq截图未命名1.jpg第二步我们需要选择是MFC标准DLL程序,并要勾选“Automation” 也就是ACTIVEX自动化的接口选项。
此主题相关图片如下:qq截图未命名2.jpg
然后我们点“Finish” 按钮后完成项目的初建
项目框架创建完毕后,我们就要建立一个可以与VBA通信的ACTIVEX接口,步骤如下:
Inster -> New Class 弹出新建类窗口,我们选择MFC接口
此主题相关图片如下:qq截图未命名3.jpg
我们将接口类起名为VBSAddin,并指定基类是CCmdTarget,并在下方选择类接口的创建方式为 type id 方式接口类创建好了后,剩下的就是我们通过 Class Wizard类添加属性和方法了
比如我们创建一个方法函数,名称为“MyTest”,返回值可以根据项目的要求来任意指定,参数我们输入一个数值参数,并且在ActiveX中通过MSG打印出来
此主题相关图片如下:qq截图未命名5.jpg项目创建完毕后,系统会自动为我们添加代码,加上我们的打印输出后代码如下:
float VBSAddin::MyTest(double Value)
{
CString strValue;
strValue.Format("%f",Value);
AfxMessageBox(strValue);return 0.0f;
}最后编译我们的ActiveX,编译完毕后一定注意需要注册这个ActiveX我们才能在本地电脑中使用,比如我们将其拷贝到C盘根目录后,通过命令行做如下注册即可: regsvr32 c:\MyActiveXDemo.dll
最后,我们在VBA中来调用我们刚才所建立的ActiveX控件
例如我们在Test宏中输入如下代码
Sub Test()
Dim MyAddin '创建一个变量Set MyAddin = CreateObject("MyActiveXDemo.VBSAddin")
MyAddin.MyTest(400)End Sub
注意MyActiveXDemo.VBSAddin是我们在刚才创建时所指定的标识符,通过这个标识符系统才能找到我们所建立的Activex
指定宏后,看看效果吧。
附带C++演示示例工程
[此贴子已经被作者于2012-5-6 23:08:36编辑过] - 金字塔客服:
最后说明一点,金字塔的进程是不允许被调试加载的,这对C++开发者来说增加调试难度,但是可以通过附加进程调试的方法来解决问题,比如VS2008等都有很好的这种支持,详情请GOOGLE搜索。
[此贴子已经被作者于2012-5-13 9:28:11编辑过] - 用户回复: 占位
- 网友回复:
完全赞同楼主的意见,这是金字塔区别于其他交易软件的最强大的武器。
- 网友回复: 哈哈,我就是这样做的。
有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友
可联系技术人员 QQ: 262069696 进行 有偿 编写!(不贵!点击查看价格!)
相关文章
-
没有相关内容