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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → vba数学函数

   

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


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

主题:vba数学函数

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


加好友 发短信
等级:论坛游侠 帖子:144 积分:0 威望:0 精华:0 注册:2016/10/29 1:47:53
vba数学函数  发帖心情 Post By:2017/3/15 9:43:33 [显示全部帖子]

请问用vba编程计算两个商品相关性要怎么做?在vba编程信息里没有找到相关函数是不是要自己定义还是可以调用金字塔函数?

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


加好友 发短信
等级:论坛游侠 帖子:144 积分:0 威望:0 精华:0 注册:2016/10/29 1:47:53
  发帖心情 Post By:2017/3/16 10:54:01 [显示全部帖子]

Sub TLStart1()
  call marketdata.RegReportNotify("P05","DQ")
  call marketdata.RegReportNotify("Y05","DQ")
End Sub

Sub MARKETDATA_ReportNotify(ReportData)
  Set Report1 = marketdata.GetReportData("P05","DQ")
  Set Report2 = marketdata.GetReportData("Y05","DQ")
    Set histroydata1 = MarketData.GetHistoryData("P05","DQ",0)
    Set histroydata2 = MarketData.GetHistoryData("Y05","DQ",0)

    Dim data 
    Set data = CreateObject("Stock.Array")
        For i =0 to 149
        data.AddBack(histroydata1.Close(histroydata1.count-i))
        next
        if data.count>150 then
        ata.removeat(0)
    end if 

    Dim data1 
    Set data1 = CreateObject("Stock.Array")
        For i =0 to 149
        data1.AddBack(histroydata2.Close(histroydata2.count-i))
        next
        if data1.count>150 then
        data1.removeat(0)
    end if 

'相关性计算
corr = data.releate(data1)  
application.MsgOut  Cdate(time)& ",相关性:" & corr 



Set d1 = nothing '释放对象
Set d2 = nothing 

End Sub
    
请问为什么输出的相关性数值都是1呢?是不是这么计算是错误的

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


加好友 发短信
等级:论坛游侠 帖子:144 积分:0 威望:0 精华:0 注册:2016/10/29 1:47:53
  发帖心情 Post By:2017/3/16 11:03:56 [显示全部帖子]

明白了,还有一个问题,就是数组元素如何监控?用application.msgout data(0)输出显示对象不支持

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


加好友 发短信
等级:论坛游侠 帖子:144 积分:0 威望:0 精华:0 注册:2016/10/29 1:47:53
  发帖心情 Post By:2017/3/16 13:39:26 [显示全部帖子]


Sub TLStart1()
  call marketdata.RegReportNotify("P05","DQ")
  call marketdata.RegReportNotify("Y05","DQ")
End Sub

Sub TLStart1()
  call marketdata.RegReportNotify("P05","DQ")
  call marketdata.RegReportNotify("Y05","DQ")
End Sub

Sub MARKETDATA_ReportNotify(ReportData)
  Set Report1 = marketdata.GetReportData("P05","DQ")
  Set Report2 = marketdata.GetReportData("Y05","DQ")
 
  marketdata.HistoryDataMode=1'不同品种为独立的缓冲区
 
    Set histroydata1 = MarketData.GetHistoryData("P05","DQ",0)
    Set histroydata2 = MarketData.GetHistoryData("Y05","DQ",0)
    

    Dim data 
    Set data = CreateObject("Stock.Array")
        For i =0 to 149
        data.AddBack(histroydata1.Close(histroydata1.count-i))
        next
        if data.count>150 then
        data.removeat(0)
    end if 

    Dim data1 
    Set data1 = CreateObject("Stock.Array")
        For i =0 to 149
        data1.AddBack(histroydata2.Close(histroydata2.count-i))
        next
        if data1.count>150 then
        data1.removeat(0)
    end if 
    

marketdata.DestroyHistoryData'清理缓冲区
 
'相关性计算
corr = data.releate(data1)
cc = data.getat(1)  
application.MsgOut  Cdate(time)& ",相关性:" & corr & ",data(1):" & cc & ",data1(1):" & data1.getat(1)

Set d1 = nothing '释放对象
Set d2 = nothing 

End Sub
    
为什么根据您的建议改完之后相关性计算还是错误的呢?
图片点击可在新窗口打开查看此主题相关图片如下:cm8viux`4l`z)x5o0l97uw.png
图片点击可在新窗口打开查看

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


加好友 发短信
等级:论坛游侠 帖子:144 积分:0 威望:0 精华:0 注册:2016/10/29 1:47:53
  发帖心情 Post By:2017/3/16 14:58:29 [显示全部帖子]


1.输出数组data三个元素发现返回的数值没有错误
相关性:RELATE(C1,C2,CORR_len); 
这是用pel语言写的,然后输出到TXT文档。数据已经补充完整,得到的数值是0.7左右

2.请问VB是否有类似pel语言的ref函数可以回溯前值,不然很多计算的东西需要保存的时候不是要创建多个数组?还有,可否直接调用在金字塔图表计算的公式数值或者Excel的数据

3.cross语句在VB里面有什么比较简单的判断方法?

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


加好友 发短信
等级:论坛游侠 帖子:144 积分:0 威望:0 精华:0 注册:2016/10/29 1:47:53
  发帖心情 Post By:2017/3/17 9:19:53 [显示全部帖子]

我要对两个商品价差计算历史波动率,是自己定义函数还是在过程里直接计算?希望老师给写个范例参考一下用for的话怎么写
公式:
1.对数收益率=ln(价差/ref(价差,len))
2.对数收益率标准差=stdp(对数收益率,len)
3.历史波动率=对数收益率标准差*sqrt(len)





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


加好友 发短信
等级:论坛游侠 帖子:144 积分:0 威望:0 精华:0 注册:2016/10/29 1:47:53
  发帖心情 Post By:2017/3/17 11:37:20 [显示全部帖子]

    Dim jc_arr 
    Set jc_arr = CreateObject("Stock.Array")
        For i = 2 to 301
        jc_arr.AddBack(histroydata1.close(histroydata1.count-i)-histroydata2.close(histroydata2.count-i))
        next
        if data1.count>301 then
        data1.removeat(0)
    end if   
  
  
  
  dim duishushouyi
  Set duishushouyi = CreateObject("Stock.Array")
      for i=0 to 149
      duishushouyi.AddBack (jc_arr.getat(i)/jc_arr.getat(i+150))
      next
      if duishushouyi.count>150 then
      duishushouyi.removeat(0)
      end if   
   
   
   
   std_duishushouyi = duishushouyi.stdp

    application.MsgOut std_duishushouyi*sqr(150) '历史波动率

这是早上自己写的历史波动率,但是与用pel语言相比后面小数点会有差别不只是什么原因
还有老师说的解决多个数组定义问题用for解决是什么样的,在统计指标较多的策略里面需要记录较多的计算数据需要定义太多数组是在太麻烦,可否调用我用pel编写好的指标

 回到顶部