Rss & SiteMap

金字塔客服中心 - 专业程序化交易软件提供商 http://www.weistock.com/bbs/

专业程序化软件提供商
共8 条记录, 每页显示 10 条, 页签: [1]
[浏览完整版]

标题:发现通过VBA调用PY模块速度很慢

1楼
分析者 发表于:2020/4/18 16:39:07
发现通过VBA调用PY模块速度很慢,就模仿教程中的例子,通过VBA调用了一个PY模块中的函数,函数中什么都没有做,每翻一支个股K线图就调用一次翻,用PGUP、PGDN键翻看个股,发现翻看速度很慢,只要取消这个调用,就正常了。
这个速度太慢,不适合用来计算指标快速查看个股。
这个问题可否优化?

2楼
马良 发表于:2020/4/18 21:25:01
测试代码发我们看一下
3楼
分析者 发表于:2020/4/18 21:46:07
def zhibiao_vba():
    code_n='SH600126'   
    if code_n !=None:
        return "已将指标写入数据库1"        
    else:
        return "计算失败"

以上是PY模块代码,VBA代码就和你们的示例一样的
[此贴子已经被作者于2020/4/18 21:46:31编辑过]
4楼
马良 发表于:2020/4/19 17:23:36
请提供完整的vba代码,便于我们重现你说的问题
5楼
分析者 发表于:2020/4/20 17:37:25

private    StockLabel ,lastStockLabel
''''''''''''如下为绘图主函数
Sub Technic_Paint()
    dim grid
    Set grid = Technic.GetGridByName("Main")
    dim count
    dim StockLabel
    count =grid.GetHistoryData().count
    StockLabel=grid.StockLabel  
    if not( grid is nothing ) and  lastStockLabel<>StockLabel and grid.IsWindow   then
     '当K线数量变化、证券品种变化、周期变化、新行情到来,重新计算行情数据
        grid.CoordinateMode=1 '设置为对数坐标
        grid.MustPower=1      '复权
        grid.PowerAspect=0    '向前复权
        tn=0 '当需要重新计算行情数据,将TN初始化为0
        call Test 
    end if 
    lastStockLabel=grid.StockLabel
end sub
'调用VBA函数
sub Test
       '创建外部对象,启用Python引擎
       Set d = CreateObject("Stock.Python")
       '载入Python模块,模块名为MyPython
       ret = d.ImportModule("jzt_MyPython1")
       If ret <> 1 Then
              '载入失败,打印错误原因
              Msg = d.GetErrorInfo()
              Application.MsgOut Msg
              Set Msg = Nothing'使用完毕需要 Set Nothing销毁以免出现内存泄漏
              Exit Sub
     End If
       Data = d.CallObject("zhibiao_vba")'调用PY模块中的函数
       If IsEmpty(Data) Then
              Msg = d.GetErrorInfo()
              Application.MsgOut Msg
              Set Msg = Nothing'使用完毕需要 Set Nothing销毁以免出现内存泄漏
              Exit Sub
       End If
       '打印返回值
       application.MsgOut "Result:"&Data
       Set d = nothing'使用完毕需要 Set Nothing销毁以免出现内存泄漏
end Sub
[此贴子已经被作者于2020/4/20 17:37:47编辑过]
6楼
无为剑 发表于:2020/4/20 17:52:13
Set d = CreateObject("Stock.Python")
你应该将这个对象创建放在外面做成一个全局的,不要放在Test函数里,因为反复创建这个是最消耗资源的
7楼
分析者 发表于:2020/4/22 17:33:59
果然如此,修改后就解决了,太感谢了!!!
我调试了1天都没有找到问题,老师一句话就解决了。
8楼
分析者 发表于:2020/4/22 17:34:48
不过,建议将这点写到教程中,免得其他人也在此浪费时间,谢谢
共8 条记录, 每页显示 10 条, 页签: [1]


Powered By Dvbbs Version 8.3.0
Processed in 0.03320 s, 2 queries.