以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  [求助]vba 如何编写出权重平均自定义函数输出数组?  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=169362)

--  作者:lizhi
--  发布时间:2019/4/15 22:13:28
--  [求助]vba 如何编写出权重平均自定义函数输出数组?
计算用的历史数据——不想调用图表里的公式历史数据。
不加载框架、不加载图表,只是在后台调用这个函数。
这样写代码可以实现目的吗?另外,怎么样实现WMA输出的值是数组?谢谢各位老师!
\'--------------------------------------------------------------------------------
\'简称: WMA
\'名称: 求权重平均
\'参数说明如下:
\'myCode:证券代码;myMarket:证券市场;
\'CYC:0表示1分钟、1表示5分钟、2表示15分钟、3表示30分钟、4表示60分钟、 
\'5表示日线、6表示周线、7表示月线、8表示年线、9表示多日线、10表示分笔成交、 
\'11表示多小时、12表示多秒、13表示多分钟线、14表示季度线、15表示半年线、 
\'16表示节气线、17表示3分钟、18表示10分钟
\'Price:价格(Open、High、Low、Close、Volume、OpenInt);Length:周期
Function WMA(myCode,myMarket,CYC,Price,Length)
Dim i,WtdSum,CumWt,Histoiry
Set Histoiry = MarketData.GetHistoryData("myCode","myMarket",CYC)
WtdSum = 0
For i = 0 To Length - 1
Select Case Price
Case Price = Close
WtdSum = WtdSum + ( Length - i ) * Histoiry.Close(i)
Case Price = Open
WtdSum = WtdSum + ( Length - i ) * Histoiry.Open(i)
Case Price = High
WtdSum = WtdSum + ( Length - i ) * Histoiry.High(i) 
Case Price = Low
WtdSum = WtdSum + ( Length - i ) * Histoiry.Low(i) 
Case Price = Volume
WtdSum = WtdSum + ( Length - i ) * Histoiry.Volume(i) 
Case Price = OpenInt
WtdSum = WtdSum + ( Length - i ) * Histoiry.OpenInt(i)
End Select
Next i
CumWt = ( Length + 1 ) * Length * 1/2 
WMA = WtdSum / CumWt
Set Histoiry = Nothing
End Function
\'-----------------------------------------------------------------------------------

--  作者:yukizzc
--  发布时间:2019/4/16 9:02:23
--  
论坛中回复您了,不太明白你一定要自己再造算法的原因
pel和vba交互没办法传递数组的