请问用vba编程计算两个商品相关性要怎么做?在vba编程信息里没有找到相关函数是不是要自己定义还是可以调用金字塔函数?
Array 对象
Alike 计算该数组与其他Array对象之间的相似系数,例如Alike(ar)表示求与ar数组对象之间的相似度
Releate 计算该数组与其他Array对象之间的相关系数
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呢?是不是这么计算是错误的
MarketData 对象
HistoryDataMode 历史数据处理处理模式 0默认值,GetHistoryData,GetHistoryDataByDate 方法取到的对象为共享模式;1为独立模式,打开不同品种可以分别处理各自的数据,数据处理完毕后要调用DestroyHistoryData方法销毁内存缓冲区.
明白了,还有一个问题,就是数组元素如何监控?用application.msgout data(0)输出显示对象不支持
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

建议你调试一下2个数组的数据内容是不是有问题,此外如果你觉得确实是计算错误,那么正确的应该是多少?
1.输出数组data三个元素发现返回的数值没有错误
相关性:RELATE(C1,C2,CORR_len); 这是用pel语言写的,然后输出到TXT文档。数据已经补充完整,得到的数值是0.7左右
2.请问VB是否有类似pel语言的ref函数可以回溯前值,不然很多计算的东西需要保存的时候不是要创建多个数组?还有,可否直接调用在金字塔图表计算的公式数值或者Excel的数据
3.cross语句在VB里面有什么比较简单的判断方法?
1, 你要看数据是否完全一致的? 估计你遇到的问题是图表上加载的数据量与你碰到的不一致,CORR_len 这个很重要。
2,用for
3,for里自己做