以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://222.73.7.161/bbs/index.asp) -- 高级功能研发区 (http://222.73.7.161/bbs/list.asp?boardid=5) ---- 金字塔VBA常用对象使用范例 (http://222.73.7.161/bbs/dispbbs.asp?boardid=5&id=11642) |
-- 作者:guotx2010 -- 发布时间:2012/5/11 17:31:37 -- 金字塔VBA常用对象使用范例 金字塔vba编写策略经常使用的对象,在编程帮助中有很多介绍,但是例子相对较少,本人经过2年来对金字塔vba策略的编写,积累了大量的例子,从今天开始我将不定期整理出来供大家借鉴参考,本楼将是一个目录,供快速浏览。
特别常用的对象: 一、Application对象..............本页2-3楼 二、Order对象....................7-13楼、19楼-20楼/22楼 三、MarketData对象...............36、37楼 (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=11642&authorid=0&page=1&star=4) 四、Document对象.................39-40楼/74楼 (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&Id=11642&page=1&star=4) (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&Id=11642&page=1&star=8) 五、ReportData对象...............................51楼 (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=11642&page=1&star=6) 六、MinuteData对象和HistoryData对象......................53楼 (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=11642&authorid=0&page=1&star=6)
七、Menu对象................................................56楼 ( http://www.weistock.com/bbs/dispbbs.asp?boardid=5&Id=11642&page=1&star=6)
本目录根据需要不断完善 [此贴子已经被作者于2012-9-5 8:31:18编辑过]
|
-- 作者:guotx2010 -- 发布时间:2012/5/12 9:04:27 -- 一、Application对象 1、基本介绍
UserName:返回金字塔用户账号,不是你的交易账号。例如:abc=Application.UserName,就可以把当前登录的用户账号赋给abc变量,使用下面的程序可以显示登录账号的信息
Sub Application_VbaStart()
UserType:返回当前应用程序的版本类别 0普通版 1标准版 2专业版 3金钻版
iVer=Application.UserType
if iVer<2 then
Application.MsgOut "你的金字塔版本不支持本程序,请升级账户"
exit sub
end if
End Sub
(3)EnginCode:返回当前用户计算机的机器识别码(只读) 此属性的应用场景是限定特定的用户才能使用本程序,因为金字塔软件在每一台机上的识别码都是不相同的,你就可以判断客户的本属性是否与设定值相同,不相同就不让他运行。 Sub Application_VbaStart() dim sEnginCode
dim sTestCode
sTestCode="35A7707C1617CBE0" \'本行字符串改为你设定的识别码
sEnginCode=Application.EnginCode
if strcomp(sEnginCode,sTestCode,vbtextCompare)<>0 then
Application.MsgOut "你的不是授权用户,不能使用本程序"
exit sub
end if
End Sub IsActivateFrame方法:
\'如果没有打开ABC的框架,就打开
if Application.isActivateFrame("ABC")=0 then
Call application.ActivateFrame("ABC")
end if
上面代码可以放在定时器过程中,每一次循环都会检测一遍,就可以防止人为关闭了框架了。
(2)ActivateFrameWithCode方法:
这个方法是对ActivateFrame方法的扩充,可以激活框架的同时指定品种和周期,如: Call Application.ActivateFrameWithCode("ABC","IF05","ZJ",0)将激活框架ABC,并在框架中打开IF05合约的1分钟分析图。
周期:0=1分钟 1=5分钟 2=15分钟 3=30分钟 4=60分钟 5=日线 6=周线 7=月线 8=年线 9=多日线 10=分笔成交 11=多小时 12=多秒 13=多分钟线 14=季度线 15=半年线 16=节气线 17=3分钟 18=10分钟。 当 FrameName 参数为 "MainFrame" 系统框架周期同时 Cyc 参数为 -1 时,打开分时走势界面。
Settimer和killtimer方法:设置和销毁计时器
Sub Application_VBAStart()
Call Application.SetTimer(0,2*1000) \'设置一个0号计时器,间隔2秒执行一次 Call Application.Settimer(9,5*1000) \'设置一个9号计时器,间隔5秒执行一次 End Sub \'下面的过程是计时器循环体,我让计时器显示每次触发的时间,你看看是不是间隔设定的秒数就触发。 Sub Application_Timer(ID) If ID=0 then Application.msgout Cdate(time) & ",0号计时器触发了" end if If ID=9 then Application.msgout Cdate(time) & ",9号计时器触发了" end if End Sub [此贴子已经被作者于2012-7-26 21:40:23编辑过]
|
-- 作者:guotx2010 -- 发布时间:2012/5/12 10:15:14 -- 4、Application的事件
Start 应用程序启动后发生。 写法: Sub Application_Start() \'下面的事件都是加上 Application_ 不再赘述 \'你的代码段 End Sub Close 应用程序关闭时发生。 Timer 当达到SetTimer方法所设定的定时值后发生。其参数为定时器的标识符。(前面有例子) VBAStart VBA宏启动运行后发生。(前面有例子) VBAEnd VBA宏停止运行后发生 特别需要注意的地方:
1、计时器一旦设置,如果不显式销毁,下次启动vba时依然会生效的。
所以,你要记住在Application_VBAEnd事件中使用Killtimer来销毁计时器。
2、Application_VBAStart只能有一个,你不要在多个模块中拥有多个vbastart事件,那样系统就会出错的。
[此贴子已经被作者于2012-5-13 8:59:51编辑过]
|
-- 作者:admin -- 发布时间:2012/5/12 12:49:41 -- 写得不错的,继续就好了,最后再重新进行一下就行了 |
-- 作者:sun884588 -- 发布时间:2012/5/12 13:58:18 -- 很好,学习。 ![]() |
-- 作者:guotx2010 -- 发布时间:2012/5/13 9:19:01 -- 格式编排很麻烦,代码显得有点乱,实在没办法,大家凑合凑合看吧,早上修改一个地方的时候,居然还出现内容删除的毛病。
|
-- 作者:guotx2010 -- 发布时间:2012/5/13 9:39:03 -- 二、Order对象 1、基本介绍:Order对象是你在金字塔软件下使用VBA下单和查询订单的对象,其重要程度不言而喻了吧。 2、主要属性:(本帖以CTP平台为主要平台,以下讲到的都是CTP平台使用的) (1)Holding2:得到当前指定帐户的国内期货持仓品种数量 (2)OrderNum2:得到所有国内期货当前有效的未成交合约品种数量 (3)OrderQueue:顺序执行下单成交,即按委托顺序成交报单,可以用于平仓反手,套利等委托动作 3、有用的方法: Account:得到当前默认帐户信息 4、事件 OrderStatusEx2:当委托订单出现变化时发生该扩展事件,比如撤单、成交等
|
-- 作者:guotx2010 -- 发布时间:2012/5/13 9:49:42 -- 接上楼,继续Order对象。
应用场景及代码片段: 1、获取指定者账户的所有持仓合约,保存到一个字符串中。 此例需要解决的问题:首先要获取账户的总持仓数,需要用到Holding2属性,然后要逐一循环取出每一个持仓合约的持仓量,需要用到HoldingInfo2方法。 function GetHoldStr(sAccount) GetHoldStr=HoldStr 本代码使用函数方式,传递一个账户号码,就可以获取该账户的持仓信息,调用方法是:hold=GetHoldStr("88888888")。
|
-- 作者:guotx2010 -- 发布时间:2012/5/13 9:56:03 -- 继续Order对象 2、获取指定合约的信息,包括合约最小跳动单位,合约保证金比例、合约乘数。 private iMultipliter,iMinTick,iShortPercent,iLongPercent Sub GetContractHold(sCode,sMarket) \'获取合约的信息 本例使用变量来存储合约信息的4个值,所以,变量定义置于过程顶端,调用本过程之后,变量就存储了该合约的对应值,其他过程就可以直接使用了。
[此贴子已经被作者于2012-5-13 9:59:09编辑过]
|
-- 作者:guotx2010 -- 发布时间:2012/5/13 9:58:36 -- 继续Order对象
3、获取未成交的订单信息 Function GetPendingOrder(sCode,sMarket) \'获取未成交单 GetPendingOrder=0 if Code=sCode then GetPendingOrder=OrderID end if Next end function
本函数返回指定合约的未成交单的订单号,调用方法:OrdID=GetPendingOrder("IF05","ZJ"),然后根据这个返回的OrdID,你可以进行其他的操作,比如,如果是要下单,先看有没有未成交的委托单,如果有就不下单,或者取消该委托单然后再下单等。
[此贴子已经被作者于2012-5-13 10:08:05编辑过]
|