以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 高级功能研发区 (http://weistock.com/bbs/list.asp?boardid=5) ---- 发现通过VBA调用PY模块速度很慢 (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=175591) |
-- 作者:分析者 -- 发布时间:2020/4/18 16:39:07 -- 发现通过VBA调用PY模块速度很慢 发现通过VBA调用PY模块速度很慢,就模仿教程中的例子,通过VBA调用了一个PY模块中的函数,函数中什么都没有做,每翻一支个股K线图就调用一次翻,用PGUP、PGDN键翻看个股,发现翻看速度很慢,只要取消这个调用,就正常了。 这个速度太慢,不适合用来计算指标快速查看个股。 这个问题可否优化? |
-- 作者:马良 -- 发布时间:2020/4/18 21:25:01 -- 测试代码发我们看一下 |
-- 作者:分析者 -- 发布时间: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编辑过]
|
-- 作者:马良 -- 发布时间:2020/4/19 17:23:36 -- 请提供完整的vba代码,便于我们重现你说的问题 |
-- 作者:分析者 -- 发布时间: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编辑过]
|
-- 作者:无为剑 -- 发布时间:2020/4/20 17:52:13 -- Set d = CreateObject("Stock.Python") 你应该将这个对象创建放在外面做成一个全局的,不要放在Test函数里,因为反复创建这个是最消耗资源的
|
-- 作者:分析者 -- 发布时间:2020/4/22 17:33:59 -- 果然如此,修改后就解决了,太感谢了!!! 我调试了1天都没有找到问题,老师一句话就解决了。
|
-- 作者:分析者 -- 发布时间:2020/4/22 17:34:48 -- 不过,建议将这点写到教程中,免得其他人也在此浪费时间,谢谢 |