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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 求助:VBA做参数优化时内存不断的耗尽

   

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


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

主题:求助:VBA做参数优化时内存不断的耗尽

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


加好友 发短信
等级:新手上路 帖子:3 积分:0 威望:0 精华:0 注册:2013/9/20 22:30:30
求助:VBA做参数优化时内存不断的耗尽  发帖心情 Post By:2013/9/28 17:59:45 [只看该作者]

用下面VBS对某个指标做参数优化时,内存会不断耗尽,请教大侠如何解决,谢谢!

 

 for j=6 to 20 step 1
 for k=8 to 36 step 1
 
 test = "W_TEST(" & j & "," & k & ",30)"

 for i=0 to 1166-1
   dim MarketData1, Report1, Fomula1
   set MarketData1 = MarketData
   Set Report1 = MarketData1.GetReportDataByIndex("SZ",i)
   Set Formula1 = MarketData1.STKINDI(Report1.Label,"SZ",test,0,4)
   sg =  Formula1.GetBufData("SG", Formula1.DataSize-1)
   Application.PeekAndPump     
   Set Report1 = Nothing
   Set Formula1 = Nothing 

   set MarketData1 = Nothing
  next
  next

 next


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


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2013/9/29 20:00:45 [只看该作者]

建议检查一下是不是你的其他代码因为某种原因没有释放导致的问题,我们检查过金字塔代码,VBA在创建公式对象时不会多次分配内存的


金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
sailwei
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:3 积分:0 威望:0 精华:0 注册:2013/9/20 22:30:30
  发帖心情 Post By:2013/9/30 11:33:56 [只看该作者]

谢谢回复!可能是我测试的指标 W_TEST2中又调用了VBA自定义的函数,

然后VBA函数中申请了返回数组返回出去了,是不是这个数组在外面没地方释放,出现了内存泄漏。

下面是测试的代码,请确认。

 

测试宏:

Sub M_Test()

 dim sg, wn, sn, st, test
 
 for j=6 to 20 step 1
 for k=8 to 36 step 1
 
 sg = 0
 
 test = "W_TEST2(" & j & "," & k & ",30)"
 Application.MsgOut(test) 

  for i=0 to 1166-1
   dim MarketData1, Report1, Fomula1
   set MarketData1 = MarketData
   Set Report1 = MarketData1.GetReportDataByIndex("SZ",i)
   Set Formula1 = MarketData1.STKINDI(Report1.Label,"SZ",test,0,4)
   sg = sg + Formula1.GetBufData("SG", Formula1.DataSize-1)
   
   Application.PeekAndPump     
   Set Report1 = Nothing
   Set Formula1 = Nothing 
   Set MaketData1 = Nothing 
  next
 
 next
 next   

 MsgBox "计算完成!"
 
End Sub

 

测试指标  W_TEST2 :

INPUT:  N(14, 1, 50),M(18, 0, 100);

BS: CU_MA1(C, N) + CU_MA1(C, M);
SG: BS;

 

系统自带的自定义函数 CU_MA1:

'计算序列模式下指定周期长度的收盘价均价
Function CU_MA1(Formula,CLOSE,CYC)
   CU_MA1=0

    '防止公式逐周期模式时调用
    If Formula.WorkMode = 0 Then
        Exit Function
    End If

    'CLOSE数组数据长度一定会与Formula.DataSize-1相等
    DataCount = UBound(CLOSE)
    If DataCount <> Formula.DataSize-1 Then
        Exit Function
    End If

    '定义一个计算返回的数组
    Dim ResultMa
    Redim ResultMa(DataCount)

    For i = Cyc-1 To Formula.DataSize-1
        Count = 0
        For k = i-(Cyc-1) To i
            Count = Count + CLOSE(k)
        Next
        ResultMa(i) = Count / Cyc
    Next

    '返回一个计算完毕的均线数组
    CU_MA1 = ResultMa
End Function

 



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


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
提示缺少分号  发帖心情 Post By:2013/9/30 20:55:06 [只看该作者]

这个做法恐怕不行,会导致问题,建议你不要在PEL中使用自定义函数,又拿VBA来做调用。

建议将你的PEL中的VBA自定义函数的算法,直接移植到VBA中,只直行简单的单次调用



金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部