以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://www.weistock.com/bbs/index.asp) -- 高级功能研发区 (http://www.weistock.com/bbs/list.asp?boardid=5) ---- vba数学函数 (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=149101) |
-- 作者:zero -- 发布时间:2017/3/15 9:43:33 -- vba数学函数 请问用vba编程计算两个商品相关性要怎么做?在vba编程信息里没有找到相关函数是不是要自己定义还是可以调用金字塔函数? |
-- 作者:王锋 -- 发布时间:2017/3/15 9:46:07 -- Array 对象
Alike 计算该数组与其他Array对象之间的相似系数,例如Alike(ar)表示求与ar数组对象之间的相似度 Releate 计算该数组与其他Array对象之间的相关系数 |
-- 作者:zero -- 发布时间: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呢?是不是这么计算是错误的
|
-- 作者:王锋 -- 发布时间:2017/3/16 10:59:41 -- MarketData 对象
HistoryDataMode 历史数据处理处理模式 0默认值,GetHistoryData,GetHistoryDataByDate 方法取到的对象为共享模式;1为独立模式,打开不同品种可以分别处理各自的数据,数据处理完毕后要调用DestroyHistoryData方法销毁内存缓冲区. |
-- 作者:zero -- 发布时间:2017/3/16 11:03:56 -- 明白了,还有一个问题,就是数组元素如何监控?用application.msgout data(0)输出显示对象不支持 |
-- 作者:王锋 -- 发布时间:2017/3/16 11:04:54 -- GetAt 取数组指定位置的数据 SetAt 设置数组指定位置的数据 |
-- 作者:zero -- 发布时间: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 |
-- 作者:王锋 -- 发布时间:2017/3/16 14:19:04 -- 建议你调试一下2个数组的数据内容是不是有问题,此外如果你觉得确实是计算错误,那么正确的应该是多少? |
-- 作者:zero -- 发布时间: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里面有什么比较简单的判断方法?
|
-- 作者:王锋 -- 发布时间:2017/3/16 15:03:24 -- 1, 你要看数据是否完全一致的? 估计你遇到的问题是图表上加载的数据量与你碰到的不一致,CORR_len 这个很重要。 2,用for 3,for里自己做 |