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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 金字塔VBA常用对象使用范例

   

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


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

主题:金字塔VBA常用对象使用范例

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


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

继续Order对象

 

4、取消所有委托单

 

Sub CancelAllOrder() '撤销所有委托
     dim Orderid   '订单ID
     dim Filled   '提交手数
     dim Remaining  '剩余手数
     dim Action   '买卖
     dim OrderType  '订单类型
     dim LmtPrice  '委托价
     dim Account   '账户
     dim Kaiping   '开平
     PendingCount=Order.OrderNum2
     For i=0 to PendingCount-1
          Call Order.OrderInfo2(i,OrderID,ConSign,Filled,Remaining,Action,OrderType,LmtPrice,Account,Kaiping,Code,Market) 
          CancelOrder OrderID
     Next
End Sub

这个过程,遍历每一个委托单,逐一进行撤销操作。如果你要撤销指定OrderID的委托单,只需对此过程稍作修改就可以实现了。

 


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


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

继续Order对象

 

5、获取指定品种的持仓量、持仓均价

private AccountID,iBuyHold,iSellHold,BuyPrice,SellPrice

Sub GetHoldByCode(sAccount,sCode,sMarket)
     dim i,k
     dim BuyHolding
    dim BuyCost
    dim BuyTodayHolding
    dim SellHolding
    dim SellCost
    dim SellTodayHolding
    dim PNL
    dim UseMargin
    dim Code
    dim Market

     On Error resume Next
     AccountStatus=Order.Account2(2,sAccount)
     'application.MsgOut sCode & "," & sMarket & "," & sAccount & ",NextCode:" & NextCode & ",账户状态:" & AccountStatus
      if AccountStatus=255 Or AccountStatus="" then
          exit sub
      end if 
      Call Order.HoldingInfoByCode2(sCode,sMarket,BuyHolding,BuyCost,BuyTodayHolding,SellHolding,SellCost,SellTodayHolding,PNL,UseMargin,sAccount)
     iBuyHold=BuyHolding
     iSellHold=SellHolding
     BuyPrice=BuyCost
     SellPrice=SellCost  
End Sub

 

这个过程也是将返回的值保存到外部变量,供其他过程使用。所以过程前的定义变量必不可少。

使用方式:GetHoldByCode "8888888","IF05","ZJ"      '传入交易账户、合约代码、市场代码

 

 


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


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

继续order对象

 

6、下单指令封装成过程:

 

    Order对象的下单指令buy,sell,buyshort,sellshort,每次要使用都得看参数怎么用的,是不是很不方便呢?我把他们写成4个过程了,看看是不是很好?

    参数说明:

    nPrice传入的价格,传入0就是市价委托,否则就是限价委托,sCode合约代码,sMarket市场代阿玛,iOrdID委托量,sAccount交易的账户

这下,你再也不用多次翻看帮助了,只要记住这4个过程的名字就行了。

 

'开多单
Sub KaiDuoDan(nPrice,sCode,sMarket,iOrdVol,sAccount)  '开多单,nPrice=0时为市价,否则就是传递过来的价
 'application.MsgOut "iOrdVol:" & iOrdVol & "," & sCode & "," & sMarket & "," & sAccount & "," & nPrice
 If iOrdVol>0 then
  If nPrice=0 then
   'application.MsgOut "sCode,sMarket,AccountID:" & sCode & "," & sMarket & "," & AccountID
   Call Order.Buy(1,iOrdVol,0,0,sCode,sMarket,sAccount,0)     '市价开多单
  Else
   Call Order.Buy(0,iOrdVol,nPrice,0,sCode,sMarket,sAccount,0)   '限价开多单
  End If 
 End If
End Sub

'开空单
Sub KaiKongDan(nPrice,sCode,sMarket,iOrdVol,sAccount)  '开空单,nPrice=0时为市价,否则就是传递过来的价
 'application.MsgOut "iOrdVol:" & iOrdVol & "," & sCode & "," & sMarket & "," & sAccount & "," & nPrice
 If iOrdVol>0 then
  If nPrice=0 then
   Call Order.BuyShort(1,iOrdVol,0,0,sCode,sMarket,sAccount,0)    '市价开空单
  Else
   Call Order.BuyShort(0,iOrdVol,nPrice,0,sCode,sMarket,sAccount,0)   '限价开空单
  End If 
 End If
End Sub

'平多单
Sub PingDuoDan(nPrice,sCode,sMarket,iOrdVol,sAccount)  '平多单,nPrice=0时为市价,否则就是传递过来的价
 If iOrdVol>0 then
  If nPrice=0 then
   Call Order.Sell(1,iOrdVol,0,0,sCode,sMarket,sAccount,0)    '市价平多单
  Else
   Call Order.Sell(0,iOrdVol,nPrice,0,sCode,sMarket,sAccount,0)   '限价平多单
  End If 
 End If
End Sub
'平空单
Sub PingKongDan(nPrice,sCode,sMarket,iOrdVol,sAccount)  '平空单,nPrice=0时为市价,否则就是传递过来的价
 If iOrdVol>0 then
  If nPrice=0 then
   Call Order.SellShort(1,iOrdVol,0,0,sCode,sMarket,sAccount,0)    '市价平空单
  Else
   Call Order.SellShort(0,iOrdVol,nPrice,0,sCode,sMarket,sAccount,0)   '限价平空单
  End If 
 End If
End Sub


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


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

order指令足够强大,要写的东西还有很多,且听下回分解了

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


加好友 发短信
等级:新手上路 帖子:18 积分:125 威望:0 精华:0 注册:2010/10/18 22:18:55
  发帖心情 Post By:2012/5/13 15:45:43 [只看该作者]

太好了,金字塔就缺这样的帮助说明。

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


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

    这也是我发现的问题,我花了快两年的时间使用vba来编写策略,反复不断看帮助才积累的经验,就这么轻易地奉献给大家,希望大家有所收益,同时也算是抛砖引玉,希望更多的高手参入进来,奉献自己的代码片段,让vba开发成为金字塔的绝对优势,打败其他期货交易软件。

    用vba开发几乎无所不能,复杂策略、套利、高频交易等等,这么好的功能到现在依然埋没,会用的人少之又少,高手更是凤毛麟角,有点可惜呀!!!


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


加好友 发短信
等级:新手上路 帖子:2 积分:10 威望:0 精华:0 注册:2012/5/10 11:50:36
  发帖心情 Post By:2012/5/14 10:08:16 [只看该作者]

 顶一下,很好的帖子

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


加好友 发短信
等级:新手上路 帖子:17 积分:58 威望:0 精华:0 注册:2011/7/6 16:11:40
  发帖心情 Post By:2012/5/14 10:45:00 [只看该作者]

好帖要顶 谢谢分享

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


加好友 发短信
等级:蜘蛛侠 帖子:1366 积分:5210 威望:0 精华:7 注册:2010/12/11 18:00:33
[求助]写成模型  发帖心情 Post By:2012/5/14 17:03:05 [只看该作者]

继续Order对象

 

7、计算订单手续费

    手续费的计算可以使用ChargeByNum(Code, Market, lmtPrice, Volume, Type)方法

    如计算股指期货IF05的交易手续费,可以这么做: sxf=ChargeByNum("IF05","ZJ",2650,2,0)

    参数说明:Code合约代码、Market市场代码、lmtPrice委托价、Volume委托量、Type买卖方向

 

    使用此方法计算的手续费取决于你是否正确设置了合约信息中的保证金比例、手续费标准,如果设置不对,计算就不对了。

关于本实例的代码,可以参考我的那个导出成交记录到excel帖子:http://www.weistock.com/bbs/dispbbs.asp?BoardID=5&replyID=45232&ID=10234&skin=1

 


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


加好友 发短信
等级:蜘蛛侠 帖子:1366 积分:5210 威望:0 精华:7 注册:2010/12/11 18:00:33
123法则如何编写  发帖心情 Post By:2012/5/15 19:46:16 [只看该作者]

继续Order对象

 

8、根据合约代码获取持仓量、持仓均价并存入全局变量中共后台策略调用

 

'传入交易账户号、合约代码、市场代码 如:GetHoldByCode "88888888","IF05","ZJ"

Sub GetHoldByCode(sAccount,sCode,sMarket)    

  dim i
  dim BuyHolding
 dim BuyCost
 dim BuyTodayHolding
 dim SellHolding
 dim SellCost
 dim SellTodayHolding
 dim PNL
 dim UseMargin
 dim Code
 dim Market
 
  On Error resume Next
  AccountStatus=Order.Account2(2,sAccount)     '检测账户是否登陆,如果没有登陆就退出
  'application.MsgOut sCode & "," & sMarket & "," & sAccount & ",NextCode:" & NextCode & ",账户状态:" & AccountStatus
    if AccountStatus=255 Or AccountStatus="" then
     exit sub
    end if 
    Call Order.HoldingInfoByCode2(sCode,sMarket,BuyHolding,BuyCost,BuyTodayHolding,SellHolding,SellCost,SellTodayHolding,PNL,UseMargin,sAccount)
 iBuyHold=BuyHolding
 iSellHold=SellHolding
 DuoPrice=BuyCost
 KongPrice=SellCost  
 Call Document.SetExtData("多开仓价",DuoPrice)
 Call Document.SetExtData("空开仓价",KongPrice)

 Call Document.SetExtData("多持仓",iBuyHold)
 Call Document.SetExtData("空持仓",iSellHold)

End Sub

 

图表或后台策略中调用全局变量的方法:

aa:=extgbdata('多开仓价');

bb:=extgbdata('空开仓价');

cc:=extgbdata('多持仓);

dd:=extgbdata('空持仓);



 回到顶部
总数 108 上一页 1 2 3 4 5 6 7 8 9 10 下一页 ..11