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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → VBA套利模型范例

   

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


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

主题:VBA套利模型范例

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


加好友 发短信
等级:管理员 帖子:7302 积分:32559 威望:1000 精华:45 注册:2003/12/30 16:34:32
VBA套利模型范例  发帖心情 Post By:2010/7/14 15:02:03 [只看该作者]

首先我们建立一个TLStart的宏,然后再响应品种报表数据变化事件,代码如下:

Sub TLStart()
 '注册CF09和CF11品种
 call marketdata.RegReportNotify("CF09","ZQ")
 call marketdata.RegReportNotify("CF11","ZQ")
End Sub

'响应注册的品种行情变化通知
Sub MARKETDATA_ReportNotify(ReportData)
 '得到这两个品种的行情报价
 Set Report1 = marketdata.GetReportData("CF09","ZQ")
 Set Report2 = marketdata.GetReportData("CF11","ZQ")
 
 '得到品种的持仓量等信息
 dim BuyHoding1
 dim BuyHlding2
 dim BuyTodayHoding1
 dim BuyTodayHoding2
 dim SellHoding1
 dim SellHoding2
 dim SellTodayHoding1
 dim SellTodayHoding2
 dim BuyCost
 dim SellCost
 dim PNL
 Dim UseMargin

 '取指定持仓品种信息
 call Order.HoldingInfoByCode2("CF09","ZQ",BuyHoding1,BuyCost,BuyTodayHoding1,SellHoding1,SellCost,SellTodayHoding1,PNL,UseMargin)
 call Order.HoldingInfoByCode2("CF11","ZQ",BuyHoding2,BuyCost,BuyTodayHoding2,SellHoding2,SellCost,SellTodayHoding2,PNL,UseMargin)
 
 '当差价出现大于1800时进行套利开仓
 '假设是09买 11卖
 Diff = Report1.SellPrice1 - Report2.BuyPrice1 '分别取卖价和买价计算差价 
 if Diff > 1800 and BuyHoding1 = 0 then
  call Order.Buy(0,1,Report1.SellPrice1,0,"CF09","ZQ","",0)
  call Order.BuyShort(0,1,Report2.BuyPrice1,0,"CF11","ZQ","",0)
 end if
 
 '当差价小于1000时进行套利平仓
 Diff = Report1.BuyPrice1 - Report2.SellPrice1
 if diff < 1000 and BuyHoding1 > 0 then
  call Order.Sell(0,1,Report1.BuyPrice1,0,"CF09","ZQ","",0)
  call Order.Sellshort(0,1,Report2.SellPrice1,0,"CF11","ZQ","",0)
 end if
End Sub

 

代码编写完毕后Alt+F8,然后选择我们刚才建立的TLStart宏名即可

[此贴子已经被作者于2010-7-14 21:54:24编辑过]

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


加好友 发短信
等级:论坛游侠 帖子:232 积分:1256 威望:0 精华:0 注册:2010/4/24 21:58:28
  发帖心情 Post By:2010/7/14 21:22:37 [只看该作者]

太好了,非常感谢老大,如果能,多一些这样的范例就好了,:-)

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


加好友 发短信
等级:新手上路 帖子:18 积分:125 威望:0 精华:0 注册:2010/10/18 22:18:55
  发帖心情 Post By:2010/11/3 17:04:50 [只看该作者]

这种举例的形式好!学习中。。。

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


加好友 发短信
等级:论坛游民 帖子:134 积分:905 威望:0 精华:0 注册:2010/9/29 9:33:49
  发帖心情 Post By:2010/11/4 11:38:11 [只看该作者]

dim BuyHlding2少个O

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


加好友 发短信
等级:新手上路 帖子:13 积分:9 威望:0 精华:0 注册:2011/5/16 13:11:16
  发帖心情 Post By:2011/6/3 10:45:15 [只看该作者]

建立建立TLStart宏后要怎么操作


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


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2011/6/3 13:07:26 [只看该作者]

Alt+F8就可以执行


金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
sunset0920
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

好像 不能运行提示1024 usemargin 有错??

“缺少语句”


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


加好友 发短信
等级:新手上路 帖子:36 积分:192 威望:0 精华:0 注册:2012/5/4 9:50:50
  发帖心情 Post By:2012/7/5 11:30:46 [只看该作者]

图片点击可在新窗口打开查看

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


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2012/7/5 11:58:08 [只看该作者]

要专业版才行的



金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
guotx2010
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

Sub TLStart()
 '注册CF09和CF11品种
 call marketdata.RegReportNotify("CF09","ZQ")
 call marketdata.RegReportNotify("CF11","ZQ")

End Sub

'响应注册的品种行情变化通知
Sub MARKETDATA_ReportNotify(ReportData)
 '得到这两个品种的行情报价
 Set Report1 = marketdata.GetReportData("CF09","ZQ")
 Set Report2 = marketdata.GetReportData("CF11","ZQ")


这里的获取行情信息,是不是重复了,既然已经使用RegReportNotify注册了品种,就可以在 MarketData_ReportNotity事件中获取价格了,所以,只需要判断ReportData返回的品种代码就可以知道是哪个品种的价格。

如:

if ReportData.label="CF09" then

    CF09Price=ReportData.BuyPrice1

else

    CF11Price=ReportData.SellPrice1

end if

Diff=CF09Price-CF11Price






 回到顶部
总数 12 1 2 下一页