以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  为什么使用marketdata.StkindiByData的效率低  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=139793)

--  作者:microsoft
--  发布时间:2016/9/20 14:15:53
--  为什么使用marketdata.StkindiByData的效率低
Function getEMALen02(Formula,lenP)
   getEMALen02 = -1
   Set HistoryData = Formula.ParentGrid.GetHistoryData()
   
   for n1 = 5 to 300 step 5
      rtnV = getEMALen03(Formula,HistoryData,n1,lenP)
      if rtnV > 0 then
         getEMALen02 = rtnV
         exit for
      end if
   next

End Function

Function getEMALen03(Formula,HistoryData,lenP1,lenP2)
   str = "emac1(" & cstr(lenP1) & ")" 
   Set Formula1 = marketdata.StkindiByData( str ,HistoryData)
   
   emaArr = Formula1.VARDATA( "e1" )
   emaDis3Arr = Formula1.VARDATA( "dis3_ref" )
   emaDis4Arr = Formula1.VARDATA( "dis4_ref" )
   emaDis3 = emaDis3Arr(Formula.IndexData)
   emaDis4 = emaDis4Arr(Formula.IndexData)


   getEMALen03 = emaArr(Formula.IndexData)

   marketdata.DestroyHistoryData
End Function


这样的代码很慢,盘中根本运行不了
如果直接写成下边那样(一共60行),又运行很流畅

ema5 : ema(close,5);
ema10 : ema(close,10);
ema15 : ema(close,15);
ema20 : ema(close,20);
ema25 : ema(close,25);
ema30 : ema(close,30);
ema35 : ema(close,35);
。。。
ema295 : ema(close,295);
ema300 : ema(close,300);

这是为什么呢?

--  作者:马良
--  发布时间:2016/9/20 17:37:16
--  
如果是逐k线模式,这么运行等于巨大的计算量,建议你理清思路,我们不知道你的算法需求没法具体帮你