欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 利用金字塔的VBA与C++的混合编程来实现复杂的二次开发及交易功能

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有43250人关注过本帖树形打印复制链接

主题:利用金字塔的VBA与C++的混合编程来实现复杂的二次开发及交易功能

帅哥哟,离线,有人找我吗?
admin
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:7302 积分:32559 威望:1000 精华:45 注册:2003/12/30 16:34:32
利用金字塔的VBA与C++的混合编程来实现复杂的二次开发及交易功能  发帖心情 Post By:2012/5/6 0:22:04 [只看该作者]

     金字塔的除了提供基础的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++演示示例工程

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:myactivexdemo.rar

[此贴子已经被作者于2012-5-6 23:08:36编辑过]

[本帖被加为精华]
 回到顶部
帅哥哟,离线,有人找我吗?
admin
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:7302 积分:32559 威望:1000 精华:45 注册:2003/12/30 16:34:32
  发帖心情 Post By:2012/5/6 8:41:39 [只看该作者]

 最后说明一点,金字塔的进程是不允许被调试加载的,这对C++开发者来说增加调试难度,但是可以通过附加进程调试的方法来解决问题,比如VS2008等都有很好的这种支持,详情请GOOGLE搜索。

[此贴子已经被作者于2012-5-13 9:28:11编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
梦想
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:92 积分:395 威望:0 精华:0 注册:2012/1/8 12:56:27
  发帖心情 Post By:2012/5/6 10:14:59 [只看该作者]

占位

 回到顶部
帅哥哟,离线,有人找我吗?
guotx2010
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:蜘蛛侠 帖子:1366 积分:5210 威望:0 精华:7 注册:2010/12/11 18:00:33
  发帖心情 Post By:2012/5/6 18:16:52 [只看该作者]

完全赞同楼主的意见,这是金字塔区别于其他交易软件的最强大的武器。

 


 回到顶部
帅哥哟,离线,有人找我吗?
g555
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:43 积分:179 威望:0 精华:0 注册:2011/10/27 20:06:17
  发帖心情 Post By:2012/5/7 11:38:01 [只看该作者]

哈哈,我就是这样做的。

 回到顶部
帅哥哟,离线,有人找我吗?
internethhhh
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:30 积分:190 威望:0 精华:0 注册:2012/11/14 12:45:01
  发帖心情 Post By:2013/2/22 16:45:32 [只看该作者]

调用后,出现
图片点击可在新窗口打开查看此主题相关图片如下:2013-02-22_164414.jpg
图片点击可在新窗口打开查看

 

拷到了C盘,也注册了,请问是什么原因?


 回到顶部
帅哥哟,离线,有人找我吗?
admin
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:7302 积分:32559 威望:1000 精华:45 注册:2003/12/30 16:34:32
  发帖心情 Post By:2013/2/22 17:03:49 [只看该作者]

检查一下操作步骤,肯定是某一步出了问题


 回到顶部
帅哥哟,离线,有人找我吗?
biggsun
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:30 积分:161 威望:0 精华:0 注册:2013/1/12 17:15:35
  发帖心情 Post By:2013/2/26 14:08:14 [只看该作者]

很不错的,多一些儿这样的帖子。


 回到顶部
帅哥哟,离线,有人找我吗?
internethhhh
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:30 积分:190 威望:0 精华:0 注册:2012/11/14 12:45:01
  发帖心情 Post By:2013/3/3 17:56:48 [只看该作者]

明白了,没有加入EXPORTS


 回到顶部
帅哥哟,离线,有人找我吗?
yeyi
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:253 积分:1742 威望:0 精华:0 注册:2010/8/12 13:04:52
  发帖心情 Post By:2013/3/12 22:34:48 [只看该作者]

我想付费请人开发一下。
有高手肯帮忙吗?

 回到顶部
总数 28 1 2 3 下一页